大话CNN经典模型:LeNet

近几年来,卷积神经网络(Convolutional Neural Networks,简称CNN)在图像识别中取得了很是成功的应用,成为深度学习的一大亮点。CNN发展至今,已经有不少变种,其中有几个经典模型在CNN发展历程中有着里程碑的意义,它们分别是:LeNet、Alexnet、Googlenet、VGG、DRL等,接下来将分期进行逐一介绍。
在以前的文章中,已经介绍了卷积神经网络(CNN)的技术原理,细节部分就再也不重复了,有兴趣的同窗再打开连接看看(大话卷积神经网络),在此简单回顾一下CNN的几个特色:局部感知、参数共享、池化。
一、局部感知
人类对外界的认知通常是从局部到全局、从片面到全面,相似的,在机器识别图像时也没有必要把整张图像按像素所有都链接到神经网络中,在图像中也是局部周边的像素联系比较紧密,而距离较远的像素则相关性较弱,所以能够采用局部链接的模式(将图像分块链接,这样能大大减小模型的参数),以下图所示:
 
二、参数(权值)共享
每张天然图像(人物、山水、建筑等)都有其固有特性,也就是说,图像其中一部分的统计特性与其它部分是接近的。这也意味着这一部分学习的特征也能用在另外一部分上,能使用一样的学习特征。所以,在局部链接中隐藏层的每个神经元链接的局部图像的权值参数(例如5×5),将这些权值参数共享给其它剩下的神经元使用,那么此时无论隐藏层有多少个神经元,须要训练的参数就是这个局部图像的权限参数(例如5×5),也就是卷积核的大小,这样大大减小了训练参数。以下图
 
三、池化
随着模型网络不断加深,卷积核愈来愈多,要训练的参数仍是不少,并且直接拿卷积核提取的特征直接训练也容易出现过拟合的现象。回想一下,之因此对图像使用卷积提取特征是由于图像具备一种“静态性”的属性,所以,一个很天然的想法就是对不一样位置区域提取出有表明性的特征(进行聚合统计,例如最大值、平均值等),这种聚合的操做就叫作池化,池化的过程一般也被称为特征映射的过程(特征降维),以下图:
 
回顾了卷积神经网络(CNN)上面的三个特色后,下面来介绍一下CNN的经典模型:手写字体识别模型LeNet5
LeNet5诞生于1994年,是最先的卷积神经网络之一, 由Yann LeCun完成,推进了深度学习领域的发展。在那时候,没有GPU帮助训练模型,甚至CPU的速度也很慢,所以,LeNet5经过巧妙的设计,利用卷积、参数共享、池化等操做提取特征,避免了大量的计算成本,最后再使用全链接神经网络进行分类识别,这个网络也是最近大量神经网络架构的起点,给这个领域带来了许多灵感。
LeNet5的网络结构示意图以下所示:
 
LeNet5由7层CNN(不包含输入层)组成,上图中输入的原始图像大小是32×32像素,卷积层用Ci表示,子采样层(pooling,池化)用Si表示,全链接层用Fi表示。下面逐层介绍其做用和示意图上方的数字含义。
一、C1层(卷积层):6@28×28
该层使用了6个卷积核,每一个卷积核的大小为5×5,这样就获得了6个feature map(特征图)。
(1)特征图大小
每一个卷积核(5×5)与原始的输入图像(32×32)进行卷积,这样获得的feature map(特征图)大小为(32-5+1)×(32-5+1)= 28×28
卷积过程以下图所示:
 
卷积核与输入图像按卷积核大小逐个区域进行匹配计算,匹配后原始输入图像的尺寸将变小,由于边缘部分卷积核没法越出界,只能匹配一次,如上图,匹配计算后的尺寸变为Cr×Cc=(Ir-Kr+1)×(Ic-Kc+1),其中Cr、Cc,Ir、Ic,Kr、Kc分别表示卷积后结果图像、输入图像、卷积核的行列大小。
(2)参数个数
因为参数(权值)共享的缘由,对于同个卷积核每一个神经元均使用相同的参数,所以,参数个数为(5×5+1)×6= 156,其中5×5为卷积核参数,1为偏置参数
(3)链接数
卷积后的图像大小为28×28,所以每一个特征图有28×28个神经元,每一个卷积核参数为(5×5+1)×6,所以,该层的链接数为(5×5+1)×6×28×28=122304
二、S2层(下采样层,也称池化层):6@14×14
(1)特征图大小

这一层主要是作池化或者特征映射(特征降维),池化单元为2×2,所以,6个特征图的大小经池化后即变为14×14。回顾本文刚开始讲到的池化操做,池化单元之间没有重叠,在池化区域内进行聚合统计后获得新的特征值,所以经2×2池化后,每两行两列从新算出一个特征值出来,至关于图像大小减半,所以卷积后的28×28图像经2×2池化后就变为14×14。
这一层的计算过程是:2×2 单元里的值相加,而后再乘以训练参数w,再加上一个偏置参数b(每个特征图共享相同的w和b),而后取sigmoid值(S函数:0-1区间),做为对应的该单元的值。卷积操做与池化的示意图以下:
 
(2)参数个数
S2层因为每一个特征图都共享相同的w和b这两个参数,所以须要2×6=12个参数
(3)链接数
下采样以后的图像大小为14×14,所以S2层的每一个特征图有14×14个神经元,每一个池化单元链接数为2×2+1(1为偏置量),所以,该层的链接数为(2×2+1)×14×14×6 = 5880
三、C3层(卷积层):16@10×10
C3层有16个卷积核,卷积模板大小为5×5。
(1)特征图大小
与C1层的分析相似,C3层的特征图大小为(14-5+1)×(14-5+1)= 10×10
(2)参数个数
须要注意的是,C3与S2并非全链接而是部分链接,有些是C3链接到S2三层、有些四层、甚至达到6层,经过这种方式提取更多特征,链接的规则以下表所示:
 
例如第一列表示C3层的第0个特征图(feature map)只跟S2层的第0、1和2这三个feature maps相链接,计算过程为:用3个卷积模板分别与S2层的3个feature maps进行卷积,而后将卷积的结果相加求和,再加上一个偏置,再取sigmoid得出卷积后对应的feature map了。其它列也是相似(有些是3个卷积模板,有些是4个,有些是6个)。所以,C3层的参数数目为(5×5×3+1)×6 +(5×5×4+1)×9 +5×5×6+1 = 1516
(3)链接数
卷积后的特征图大小为10×10,参数数量为1516,所以链接数为1516×10×10= 151600
四、S4(下采样层,也称池化层):16@5×5
(1)特征图大小

与S2的分析相似,池化单元大小为2×2,所以,该层与C3同样共有16个特征图,每一个特征图的大小为5×5。
(2)参数数量
与S2的计算相似,所须要参数个数为16×2 = 32
(3)链接数
链接数为(2×2+1)×5×5×16 = 2000
五、C5层(卷积层):120
(1)特征图大小

该层有120个卷积核,每一个卷积核的大小仍为5×5,所以有120个特征图。因为S4层的大小为5×5,而该层的卷积核大小也是5×5,所以特征图大小为(5-5+1)×(5-5+1)= 1×1。这样该层就恰好变成了全链接,这只是巧合,若是原始输入的图像比较大,则该层就不是全链接了。
(2)参数个数
与前面的分析相似,本层的参数数目为120×(5×5×16+1) = 48120
(3)链接数
因为该层的特征图大小恰好为1×1,所以链接数为48120×1×1=48120
六、F6层(全链接层):84
(1)特征图大小

F6层有84个单元,之因此选这个数字的缘由是来自于输出层的设计,对应于一个7×12的比特图,以下图所示,-1表示白色,1表示黑色,这样每一个符号的比特图的黑白色就对应于一个编码。
 
该层有84个特征图,特征图大小与C5同样都是1×1,与C5层全链接。
(2)参数个数
因为是全链接,参数数量为(120+1)×84=10164。跟经典神经网络同样,F6层计算输入向量和权重向量之间的点积,再加上一个偏置,而后将其传递给sigmoid函数得出结果。
(3)链接数
因为是全链接,链接数与参数数量同样,也是10164。
七、OUTPUT层(输出层):10
Output层也是全链接层,共有10个节点,分别表明数字0到9。若是第i个节点的值为0,则表示网络识别的结果是数字i。
(1)特征图大小
该层采用径向基函数(RBF)的网络链接方式,假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
 
上式中的Wij的值由i的比特图编码肯定,i从0到9,j取值从0到7×12-1。RBF输出的值越接近于0,表示当前网络输入的识别结果与字符i越接近。
(2)参数个数
因为是全链接,参数个数为84×10=840
(3)链接数
因为是全链接,链接数与参数个数同样,也是840算法

经过以上介绍,已经了解了LeNet各层网络的结构、特征图大小、参数数量、链接数量等信息,下图是识别数字3的过程,可对照上面介绍各个层的功能进行一一回顾:
 网络

墙裂建议架构

Ann LeCun 在1998年发表了关于LeNet的经典论文《Gradient-Based Learning Applied to Document Recognition 》(基于梯度学习在文档识别中的应用),里面有很是详细介绍,建议阅读这篇论文,进一步巩固知识。分布式

扫描如下二维码关注本人公众号“大数据与人工智能Lab”(BigdataAILab),而后回复“论文”关键字可在线阅读这篇经典论文的内容。函数

 

推荐相关阅读oop