LeNet-1
Lenet结构及研读
论文原文下载 《Gradient-Based Learning Applied to Document Recognition》
论文研读以及理解
使用梯度下降算法的多层网络能够从大量样本中学习到复杂、高维、非线性的映射关系,这使得它们能够用于图像识别任务。在传统的模式识别模型中,手工设计的特征提取器用于从输入数据中提取相关信息并且消除不相关的变量。然后用一个可训练的分类器将结果特征向量分类成对应类别。在该方案中,一个标准的、全连接的多层网络用于当作分类器。一个更有意思的模式是特征提取器能够进行自我学习。在该字符识别任务中,原始输入的图像即可用于特征提取及分类(标准大小的图像)。虽然可以通过普通的全连接前馈网络成功完成字符识别等任务,但在部分方面仍存在问题。
第一,图像比较大,通常包含几百个像素(pixels)。第一层包含上百个隐藏神经元的全连接层,会包含成千上万的权重。如此大量的参数提高了系统的识别能力,但也导致了需要大量的训练集。并且,存储如此大量的权重超出了当前的硬件承载能力。但是,对于图像或者语音应用而言,缺乏结构性的网络最大不足在于不具备平移、形变扭曲的不变性。在输入到固定大小的网络之前,字符图像或者其他的2D、1D信号必须经过大小的标准化和数据的归一化。不幸的是,没有一种预处理是完美的:手写数字一般在字符层面进行规范化,会导致每个字符的大小,倾斜,位置发生形变,外加上书写风格的差异,会导致输入对象中特征位置的显著变化。原则上,足够大小的全连接网络能够对这些变化具有鲁棒性。可是,这样的任务训练会导致多个具有相似权重模式的神经元位于输入的不同位置,便于检测输入中出现的任何不同特征。需要大量的训练样例来学习这些权重设置从而能够覆盖可能的变量空间。在下文所讨论的卷积网络中,平移不变性能够通过跨空间的权重复制(即权重共享)自动实现。
第二,全连接架构的一个不足在于输入的拓扑结构被完全忽略。输入变量可以以任何(固定)顺序呈现,而不会影响训练结果。与之相对的是,图像(或者语音的时间序列表示)具有健壮的2D局部结构:空间相邻的像素具有高度相关性。局部相关性对于提取局部特征来说具有巨大优势,因为相邻像素的权重可以分类为几类(比如:边,角等)。卷积神经网络通过限制感受野的隐藏神经元为局部大小从而强制提取局部特征。
Convolutional Networks 卷积网络
卷积网络通过三种架构思想(局部感受野(local receptive fields)、权重共享(shared weights)、下采样(sub-sampling))来保证平移、尺度、和形变的不变性。图2中所展示的LeNet-5就是典型的用于字符识别的卷积网络。原始的字符输入图像是经过大小规范化和数据归一化的。局部感受野的连接神经元的理念可追溯到60年代早期的感知机理论,并且几乎与Hubel和Wiesel在猫的视觉系统中发现局部敏感、定向选择性神经元同时发生。局部连接在视觉学习的神经元模型中广泛使用。通过局部感受野,神经元能够提取初级的视觉特征,比如边缘、定点、角点(或者像语音频谱图相似的其他信号特征)。这些特征在接下来的层中能够用于提取高级特征。正如之前所言,输入的平移或者形变会导致特征位置的显著变化。此外,图像的局部特征检测器还可作用于整张图像。这种技术实现可通过强制整张图像不同地方的局部感受野拥有相同的权重向量(即权值共享)。通过这些神经元进行特征提取的输出结果称为特征图(feature map)。特征图的每一神经元都是通过前一层不同位置经过相同计算得来的。一个完整的卷积层是通过几个特征图联合组成的(通过不同的权重向量),因此可以在每个局部位置形成多重特征。图2中展现一个LeNet输入的完整的样本。首层拥有6张由隐藏神经元提取的特征图。特征图的每个神经元计算来自输入中5x5大小总共25个输入计算,这称之为神经元的感受野。每个神经元通过25个输入乘以25个可训练变量加上一个偏置得来。特征图中的连续单元的感受野以前一层中相应的连续单元为中心,所以相邻单元的感受野是重叠的。举个例子,在LeNet-5中的首个隐藏层,水平连续单元的感受野重叠5行4列。正如之前所提,特征图中的每个神经元共享相同的25个权重和一个偏置,从而使得输入图像的所有相似的局部特征。在同一层中的其他特征图使用不同的权重和偏置集合,因此能够提取不同类型的局部特征。在LeNet-5中,每一个输入位置,6张特征图都由同一位置的6种神经元组合进行提取。特征图的一系列实现通过感受野大小扫描输入图片的每一个位置,然后将结果保存在特征图的相同位置。这种操作等同于卷积,外接一个额外的偏置和压缩方法,因此命名为卷积网络(convolutional network)。卷积核是特征图中神经元所使用的权重结合。卷积层的一个有趣的特征是如果输入图像发生平移,特征图也会发生同样的平移,否则特征图图保持不变。这个特性是CNN对位移和形变保持鲁棒的基础。
一旦一个特征被提取,它的其他局部就变得不重要了。相对于其他特征的相关位置才是更相关的。举个例子,我们知道左上角区域输入图像包含一个水平线段的端点,右上角区域包括一个角点,下方垂直区域包含一个端点,我们就能得出输入图像为7。这些特征位置的精确对识别没什么帮助,反而不利于不同字符的识别。在特征图中降低精确位置信息的简单方式是通过降低空间分辨率(spatial resolution)。这可通过下采样层(sub-sampling layers)来达到目标。下采样层通过局部平均来降低特征图的分辨率,并且降低输出对平移、形变的敏感度。LeNet-5的第二个隐藏层即为下采样层。这层包含6张特征图,每一张特征图都对应前一层的每张特征图。每个神经元的感受野大小为2x2,每个神经元通过4个输入取平均,然后乘以一个可训练的参数外加一个偏置,最后通过一个sigmoid函数进行激活。连续单元具有不重叠的感受野。最后,经过下采样的特征图含有前一层特征图的一半大小的行和列。一个可训练的参数和偏置影响着最后的sigmoid非线性。如果系数过小,下采样层神经元相当于对输入做了模糊处理,相当于线性。如果系数较大,根据偏置的值下采样层可看成是“或”或者“与”操作。卷积层和下采样层的交替衔接,就形成了一种“金字塔”架构:在每一层,特征图的分辨率逐渐降低,而数量逐渐增加。在图2中的第三层隐藏层的每个神经元的计算来自于上一层的多个特征图的相关神经元计算。卷积和下采样结合的灵感来源于Hubel和Wiesel的“简单”和“复杂”细胞概念,虽然那个时候没有像反向传播算法一样的全局监督学习过程。下采样层结合多个特征图的丰富表达可以大大提高网络对几何变换的不变性。
自从所有权重可通过反向传播算法学习以后,卷积网络能够被视为可自我学习的特征提取器。权重共享的技术能够大大减少参数的使用量,并且该技术降低了机器的“能力”,同时该技术还减小了测试误差和训练误差之间的差距。图2中的网络包含340908个连接,但通过权值共享后,只需要60000个可训练参数。
固定大小的卷积网络已经适用于各种应用,包括手写识别任务、机打字符识别、在线手写识别以及人脸识别等。**在单个时间维度进行权值共享的固定大小的卷积网络称之为延时神经网络(TDNNs)**,TDNNs已经用于场景识别(没有下采样),语音字符识别(有下采样),独立的手写体字符识别以及手势验证。
LeNet-5
LeNet-5模型主要是针对灰度设计的,由Yann LeCun教授于1998年提出来的,它是第一个成功应用于数字识别问题的卷积神经网络。在MNIST数据中,它的准确率达到大约99.2%。典型的LeNet-5结构包含CONV layer,POOL layer和FC layer,顺序一般是 CONV layer->POOL layer->CONV layer->POOL layer->FC layer->FC layer->OUTPUT layer,即 y ^ \hat{y}y^。下图所示的是一个数字识别的LeNet-5的模型结构:
该LeNet模型总共包含了大约6万个参数。值得一提的是,当时Yann LeCun提出的LeNet-5模型池化层使用的是average pool,而且各层激活函数一般是Sigmoid和tanh。现在,我们可以根据需要,做出改进,使用max pool和激活函数ReLU。
这个网络虽然很小,但是它包含了深度学习的基本模块:卷积层,池化层,全连接层。是其他深度学习模型的基础, 这里我们对LeNet-5进行深入分析。同时,通过实例分析,加深对与卷积层和池化层的理解。
LeNet-5共有7层,不包含输入,每层都包含可训练参数;每个层有多个Feature Map,每个FeatureMap通过一种卷积滤波器提取输入的一种特征,然后每个FeatureMap有多个神经元。
各层参数详解:
1、INPUT层-输入层
首先是数据 INPUT 层,输入图像的尺寸统一归一化为32*32。
注意:本层不算LeNet-5的网络结构,传统上,不将输入层视为网络层次结构之一。
2、C1层-卷积层
输入图片:32*32
卷积核大小:5*5
卷积核种类:6
输出featuremap大小:28*28 (32-5+1)=28
神经元数量:28286
可训练参数:(55+1) * 6(每个滤波器55=25个unit参数和一个bias参数,一共6个滤波器)
连接数:(55+1)62828=122304
详细说明:对输入图像进行第一次卷积运算(使用 6 个大小为 55 的卷积核),得到6个C1特征图(6个大小为2828的 feature maps, 32-5+1=28)。我们再来看看需要多少个参数,卷积核的大小为55,总共就有6(55+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的55个像素和1个bias有连接,所以总共有1562828=122304个连接(connection)。有122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。
3、S2层-池化层(下采样层)
输入:28*28
采样区域:2*2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:6
输出featureMap大小:14*14(28/2)
神经元数量:14146
可训练参数:2*6(和的权+偏置)
连接数:(22+1)61414
S2中每个特征图的大小是C1中特征图大小的1/4。
详细说明:第一次卷积之后紧接着就是池化运算,使用 22核 进行池化,于是得到了S2,6个1414的 特征图(28/2=14)。S2这个pooling层是对C1中的2*2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。于是每个池化核有两个训练参数,所以共有2x6=12个训练参数,但是有5x14x14x6=5880个连接。
4、C3层-卷积层
输入:S2中所有6个或者几个特征map组合
卷积核大小:5*5
卷积核种类:16
输出featureMap大小:10*10 (14-5+1)=10
C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合。
存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。则:可训练参数:6*(355+1)+6*(455+1)+3*(455+1)+1*(655+1)=1516
连接数:10101516=151600
详细说明:第一次池化之后是第二次卷积,第二次卷积的输出是C3,16个10x10的特征图,卷积核大小是 55. 我们知道S2 有6个 1414 的特征图,怎么从6 个特征图得到 16个特征图了? 这里是通过对S2 的特征图特殊组合计算得到的16个特征图。具体如下:
C3的前6个feature map(对应上图第一个红框的6列)与S2层相连的3个feature map相连接(上图第一个红框),后面6个feature map与S2层相连的4个feature map相连接(上图第二个红框),后面3个feature map与S2层部分不相连的4个feature map相连接,最后一个与S2层的所有feature map相连。卷积核大小依然为55,所以总共有6(355+1)+6*(455+1)+3*(455+1)+1*(655+1)=1516个参数。而图像大小为10*10,所以共有151600个连接。
C3与S2中前3个图相连的卷积结构如下图所示:
上图对应的参数为 355+1,一共进行6次卷积得到6个特征图,所以有6(35*5+1)参数。 为什么采用上述这样的组合了?论文中说有两个原因:1)减少参数,2)这种不对称的组合连接的方式有利于提取多种组合特征。
5、S4层-池化层(下采样层)
输入:10*10
采样区域:2*2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:16
输出featureMap大小:5*5(10/2)
神经元数量:5516=400
可训练参数:2*16=32(和的权+偏置)
连接数:16(22+1)55=2000
S4中每个特征图的大小是C3中特征图大小的1/4
详细说明:S4是pooling层,窗口大小仍然是2*2,共计16个feature map,C3层的16个10x10的图分别进行以2x2为单位的池化得到16个5x5的特征图。这一层有2x16共32个训练参数,5x5x5x16=2000个连接。连接的方式与S2层类似。
6、C5层-卷积层
输入:S4层的全部16个单元特征map(与s4全相连)
卷积核大小:5*5
卷积核种类:120
输出featureMap大小:1*1(5-5+1)
可训练参数/连接:120(165*5+1)=48120
详细说明:C5层是一个卷积层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有(5x5x16+1)x120 = 48120个参数,同样有48120个连接。C5层的网络结构如下:
7、F6层-全连接层
输入:c5 120维向量
计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。
可训练参数:84*(120+1)=10164
详细说明:6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是(120 + 1)x84=10164。ASCII编码图如下:
F6层的连接方式如下:
8、Output层-全连接层
Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
上式w_ij 的值由i的比特图编码确定,i从0到9,j取值从0到7*12-1。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。该层有84x10=840个参数和连接。
上图是LeNet-5识别数字3的过程。
总结
- LeNet-5是一种用于手写体字符识别的非常高效的卷积神经网络。
- 卷积神经网络能够很好的利用图像的结构信息。
- 卷积层的参数较少,这也是由卷积层的主要特性即局部连接和共享权重所决定。