CTC论文浅析
CTC的目标传统的RNN Seq2Seq模型要求输入为预分段序列,且输出需要后处理(例如been search)得到标签化序列然而很多seq2seq任务中的输入是无法预分段的,例如语音识别、手写识别等
我们将标签化未分段数据序列( Labelling unsegmented data sequences)的任务称为Temporal Classification当应用RNN于此类问题时,我们称为Connectionist Temporal Classification,即CTC
一般我们说的CTC指论文中提出的CTC Loss
论文地址:Connectionist Temporal Classification Labelling Unsegmented Sequence Data with Recurrent Neural Networks
注意2006年ICML会议上发表的初版论文中有几处公式错误(公式(14)(15)及(16)),虽然作者Alex Graves之后作出了更正,但很多学术搜索引擎仍会搜索出初版论文(还常常是引用量最高的),此处的链接是更正版本
讲解前先做一些符号定义
...
循环神经网络RNN
为了有效利用图像的空间信息,CNN取代了MLP同样的,对于文本、音频这样含有前后关系的序列化信息,单独处理每个输入的前馈式网络无法有效处理因此就有了循环神经神网络RNN(Recurrent Neural Net)
文本向量化分词与词汇表建立人类的语言多种多样,为了使神经网络更好的理解文本信息,就必须数字化描述文本,这一过程称为文本向量化
文本向量化有三种基本形式
将文本按单词分割,并将每个单词转换为一个向量
将文本按字符分割,并将每个字符转换为一个向量
将文本按n-gram分割,并将每个gram转换为一个向量
将文本分割的过程称为分词(tokenization),而分割出的每个单元称为标记(token)
分词后为了向量化每个token,需要先将其转换为数字形式即需要建立一个词汇表(Vocabulary),其中包含所有单词到整数的一一映射,然后根据词汇表将单词转换为整数索引
以下面这个包含两个句子的文本为例
1str = ['The cat is learning keras', 'but the cat is coding with pytorch ...
word2vec文本向量化
word2vecword2vec是一种基于推理的文本向量化技术它的原理基于分布式假设,即某个单词的含义由文本中在它周围的单词形成
例如“drink”周围总是有“juice”, “beer”等饮料出现,而”guzzle”也是如此因此可以推测“drink”和”guzzle”是近义词
同时word2vec是基于神经网络学习文本向量表达的技术相较于基于计数的文本向量化方法,它可以通过mini-batch轻松的处理大语料库
CBOWCBOW原理CBOW全称为continuous bag-of-word,是word2vec论文中给出的模型之一
CBOW是一个通过上下文预测目标词的模型例如,设语料库为“you drink tea and I drink coffee”以上下文输入量各为1为例,对网络输入[“you”, “tea”],我们希望它输出”drink”
为了完成这一任务,我们先对语料库建立索引,并对单词one-hot编码如图所示,对网络输入为上下文单词的one-hot编码,输出为对预料库每个词的预测概率(softmax激活),也即转化为了分类学习任务网络中两个$W_{in}$是相同的全连接 ...
神经网络中常见的激活函数
Sigmoid
sigmoid(x)=\frac{1}{1+e^{-x}}如图左侧是sigmoid图形,右侧是其导数图形
sigmoid是最经典的激活函数它的主要特点是值域为$[0,1]$,且以0.5为中心,且随着输入增大/减小而无限趋近于1/0
sigmoid有几个比较明显的缺点
容易造成梯度消失
我们知道神经网络的反向传播需要以链式法则求梯度而sigmoid导数最大值为0.25,若反向传播多次经过sigmoid,则梯度会非常接近0,即导致梯度消失
容易导致饱和
由于sigmoid随增大/减小无限趋近1/0的性质若激活前的输入x非常大或非常小,则对x的微小更新会使得激活输出值几乎没有变化,进而导致loss也几乎没有变化此时网络会难以继续学习
sigmoid不是zero-centered
即sigmoid输出不是以0为均值的会导致若神经元输入为正,则反向传播时神经元参数都只能正向更新,反之输入为负则只能都反向更新这会导致网络收敛较慢
含有幂运算,计算较慢
基于上述多种缺点,现在sigmoid已经不在网络中大量使用只在需要规范化输出在区间[0,1]时使用,例如二分类网络 ...
GAN实现通用图像间转换 ——Pix2Pix详解
论文地址:Image-to-Image Translation with Conditional Adversarial Networks
Pix2Pix的提出Image to Image Translation是一类计算机视觉问题的总称例如图像风格转换、图像上色、图像语义分割等都属于这类问题
此前针对这些不同的问题需要设计不同的网络结构和训练目标函数而GAN的提出与发展让通用模型的产生成为可能因此作者基于GAN以及一些其他成果设计了Image to Image Translation问题的通用模型——Pix2Pix
Pix2Pix目标函数Pix2Pix的基本结构基于cGAN,其目标函数为
L_{\mathrm{cGAN}}=E_{x,y\sim p_{\mathrm{data}(x,y)}}[\log D(x,y)]+E_{x\sim p_{\mathrm{data}(x,y)},z\sim p_z(z)}[\log(1-D(x,G(x,z)))]其中$x$表示输入图像,也即cGAN的条件部分,$y$表示真实图像,$z$表示随机噪声
以往的研究中,$z$的加入是为了避免G对于同一 ...
卷积神经网络CNN
什么要CNN在之前的mnist分类中,我们构造了一个只包含全连接层的网络为了将图片输入到这样的网络中,我们先对图片进行了一维展开然而显然图片本身具有二维的空间信息,一维展开相当于直接丢弃了这部分信息而卷积神经网络CNN(Convolution Neural Net)就是为了更好的利用起这部分信息而存在的
卷积运算卷积层与滤波卷积运算与传统图像处理的滤波操作是基本相同的首先除了图像本身我们需要还一个卷积核然后对于图像的每一个像素点,计算它的邻域像素和卷积核的对应元素的乘积并累加,作为输出图像该像素位置的值即完成了一次卷积运算唯一与滤波不同的是,卷积核的参数是可学习的
注意到神经网络每层还应该有偏置在卷积神经层中,偏置也是一个单独的数,会在卷积运算完成后加到输出图像上的每个像素位
一般情况下,我们将卷积层的输入输出数据都成为特征图(feature map)
步幅与填充卷积运算中每次卷积核移动的步长称为步幅(stride)
显然卷积核步幅越大,卷积完成后的输出特征图尺寸就越小即使步长为1,输出特征图尺寸相较输入特征图也会缩小
这时候为了保持输出特征图尺寸不变或缩小指定尺寸,就需要填充(pa ...
交叉熵CrossEntropy详解
信息熵要了解交叉熵首先需要了解信息量与香农熵
信息量,即具有确定概率的事件的信息定量度量
设$X$为离散型随机变量,对事件$x_0$,令$p(x_0)=P(X=x_0)$,则$x_0$的信息量的数学定义为
I(x_0)=-\log(p(x_0))显然$I$是一个定义域为$[0,1]$的单调递减函数从直觉上理解,即概率越小的事件发生时,可获得的信息量就越大
信息熵:在有限的互斥和联合穷举事件的集合中,熵定义为事件信息量的期望
信息熵的概念最早由香农提出,故也称为香农熵
信息熵的数学表达为
H(X)=\sum_{i=1}^n p(x_i)I(x_i)=-\sum_{i=1}^n p(x_i)\log(p(x_i))KL散度
KL散度:两个概率分布间差异的非对称性度量
KL散度又称为相对熵或信息散度
设$P(X),Q(X)$为离散型随机变量$X$的两个概率分布,则它们的KL散度为
KL(P(X)\|Q(X))=\sum_{i=1}^n p(x_i)\log\frac{p(x_i)}{q(x_i)}KL散度值越小,表明两个分布差异越小
KL散度是非对称性度量是因为交换P(X)、Q(X ...
神经网络入门基础
感知机什么是感知机感知机是神经网络的起源算法在理解感知机的基础上我们可以了解到现代神经网络是如何一步步演化来的
如图所示就是一个感知机,其中$x_1,x_2$为输入信号,$y$为输出信号,$w_1,w_2$为连接权,$b$称为偏置这个感知机表示函数
f(x)= \begin{cases}
0 & ,{w_1x_1+w_2x_2-b \leq 0}\\
1 & ,{w_1x_1+w_2x_2-b > 0}
\end{cases}
显然通过合理设定$w_1,w_2$,这样一个感知机模型可以表示出与门、或门、与非门等例如$(w_1,w_2,b)=(0.5,0.5,0.7)$时这个感知机就构成了一个与门又显然可以有多组不同的$(w_1,w_2,b)$使得感知机构成与门
同理对或门、与非门等也是如此,这体现出感知机具有一定的表示非线性关系的能力
多层感知机现在已知感知机有表示非线性关系的能力,考虑使用上述感知机来构造异或门但这时我们发现无论如何构造权值都无法满足要求
试着形象化这个问题,即要用一条直线将圆点和三角点分隔开,这显然不可能
然而我们已知异或门可以由与门、或门、与非门等的组合表示 ...
GAN与深度卷积——DCGAN
DCGANGAN的提出为使用神经网络进行图像生成打开了新世界的大门而图像问题又与CNN有着很自然的关联于是卷积与GAN的融合——DCGAN(Deep Convolution GAN)便诞生了
DCGAN是第一个将CNN应用于GAN取得成功的模型它的主要特点是
将判别器中的池化下采样改为带步长的卷积,将生成器中的上采样改为分数步长卷积,也即反卷积
在模型中引入batchnorm(但生成器最后一层和判别器第一层不加入)
移除了隐藏层的全连接层
在生成器除最后一层外使用ReLU激活(原始GAN中使用了maxout)
在判别器中使用LeakyReLU激活
Keras实现代码中使用的是mnist数据集
此处代码中判别器没有用batchnorm,因为发现加了会造成判别器过强,进而导致collapse可能是mnist数据集太简单造成的
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707 ...
一些经典的CNN分类网络
LeNet-5LeNet-5由LeCun于1998年提出,是最早的卷积神经网络之一LeNet-5虽然结构十分简单,论文阐述的理论在现在看来也大都很基础但在当时他第一次展示出了依赖自动学习的模式识别系统的潜力,可以说是打开深度学习大门的人之一
网络总共只有五层(不包括无参数的池化层),依次为conv1——filter: 6, kernel_size: 5x5averagePooling——size:2conv2——filter: 16, kernel_size: 5x5averagePooling——size:2FC3——120FC4——84OUT5——10
其中除最后一层外,激活函数均为tanh最后一层不是普通全连接层,而是径向基函数(RBF)
下面用keras写一个稍微化简的Lenet-5,最后一层就用普通的全连接+softmax
12345678910111213141516171819202122def buildNet(): # LeNet-5 model = Sequential() model.add(Conv2D( input_shape ...