最近在看lecun大神的这篇经典文章:“Gradient-Based Learning Appliedto Document Recognition”,文章较老,但是对于lenet5的一些基础概念讲解浅显易懂,本文主要对lenet5的架构和设计讲一些我的粗浅理解,对一些问题写一些我的看法,同时我也提出了一些自己的疑惑,才疏学浅希望能和各位一起讨论。
这里再说一点我最近看博客的想法:对任何一种算法由于大家的背景不同理解上可能有偏差,尤其是原作者是外国人的一些算法,网上的一些中文翻译一些地方会存在问题,所以还是建议抽时间能把算法原文看看,希望这里能成为大家共同讨论的平台。
C1卷积层:卷积层就是fig2的convolution层,对输入图像的某个位置使用一样权重的感知野得到一幅feature map,针对不同权重的感知野得到一组feature maps,然后把这些feature maps统称为卷积层,这样卷积层就获得了每一个位置的不同特征。fig2有六副feature maps,所以有六组不同特征。
S2下采样层:下采样层在原文里的解释原话是降低分辨率,它取图像的2*2小块进行平均然后乘权重加上偏置过sigmoid函数,取图像2*2小块进行平均就是下采样,平均的过程就是模糊,下采样就是降低分辨率,所以通过下采样层,图像一些小的畸变,噪声等等都可以解决。下采样层还有一个很大的优点是拥有尺度不变性,lenet5我们可以根据自己的图像大小来设计下采样的模版大小。
为什么要这么做呢?对于图像识别中很多简单的任务其实我们只关注图像的结构信息,比如数字7,我们会注意到上面有一横,然后是一个斜着的竖杠,我们就认为是7,比如人脸检测任务,我们关注的是圆形的上方有两个小圆圈—眼睛,中间一个鼻子,下面一个椭圆—嘴巴,这就足以满足任务了。基于此,在满足任务所需信息(位置对应的图像结构信息)的条件下,保留越少的信息是约好的,这样的好处是多方面的。1,计算快;2,网络容易收敛,因为图像少网路连接数就少了;3,网络对偏移和形变不敏感,一个大大的写在广告牌上的的数字“7”我们很容易对噪声敏感,比如脏脏的小黑点,比如上面一横是否不直有些弯曲。
——Less is Better.
C3卷积层:和C1卷积层的卷积原理方法类似,唯一不同的是c1输入图像只有1副,而这里输入图像为6副,并且输出是16副,
作者在原文里画的这个表可以说是非常形象了,0~5表示S2层的6幅图,横轴0~15表示C3的feature maps,然后第一副feature map就取的是S2层0,1,2三幅图,使用同一个卷积核k1对这三幅图分别卷积再求和,所以输出的图像是一副哦; 以此类推,第二副feature map就取的是S2层1,2,3三幅图,使用同一个卷积核k2对这三幅图分别卷积再求和。所以为了生成C3的16幅图,共需要16个卷积核。
另外这篇博客https://blog.csdn.net/zhangjunhit/article/details/53536915画了副图形象的解释了这个,
我在这里想解释的是
S4下采样层:跟s2类似
C5卷积层:这一层卷积原理跟普通的卷积层一样。注意这一层依然是卷积层!!!只是因为恰巧模版大小和原feature maps大小一样,所以输出变成一纬。
F6层:这一层采用全连接的方式和c5连接,对c5的输入乘以权重加上偏置,过激活函数:tanh,文章里作者还解释了为啥取tanh还没有到,等我看到了再补充。
输出层:这里先要解释下为啥F6层的神经元数量是84。这一层使用7*12位图=84 来表示数字,一个原因是识别ascii表示的数字很有用,这样可以区别易混淆的数字,比如数字0和字母o很像,但是一些后处理方法可以纠正这些错误,因为相似的数字和字母会有相似的RBF输出,后处理就可以针对这些相似的结果专门处理从而找到一个真正的结果。另外一个原因是过去的1~n编码,这种非分散的编码对于十几个类别以上的分类问题效果差,因为输出需要只能是一个数字或者字母,这就需要选不到别的数字,而通常sigmoid函数长这样:
我们希望能够长成这样:正巧RBF核函数就长类似这样,
F6层的每一个RBF单元的输出y,x是F6的输出,:
这个公式的意思是:当输入x的模式和权重w的模式非常接近的时候,y就最小,这里的w可以手动选择并且保持固定,并且取值为1或者-1,保证-1和1的数量相等即可,当然w还有别的取值方法。w有i*j个元素。
这里我们假设神经元个数为4,那么如下图所示,数字0的编码就是1,-1,-1,1;别的数字也有自己对应的编码,如果x的编码和数字1的编码最接近,我们就认为识别到的数字为1,这个编码就是原论文中提到的pattern。
由于文章给的神经元个数为84,所以编码长度是84,网络训练的结果就会给每个输入数字找到一个对应的编码。
1)全连接网络连接的网络极多,所以需要更大的训练集;对于图像各种变换(平移、旋转);全连接网络会忽略掉输入信号的拓扑结构,而图像像素周围的结构信息很重要,
2)CNN具有平移不变性;CNN可以学习到图像的局部特征,局部的结构信息
感知野,共享权重;空间和时序下采样
3)使用局部感知野神经元可以提取基本的视觉特征比如:边缘、端点、角点;
之后将这些特征通过下采样层结合从而发现更高阶的特征,
图像是28*28的,由于第一层卷积是5*5窗函数,所以input是32*32;
C1: 待训练参数:(5*5*1+1)*6=156 ,5*5的窗函数*6幅图对应的6组不同窗函数+6个偏置。
连接数:25*28*28*6+28*28*6=122304 ,系数部分+偏置部分
S2: 待训练参数:(1+1)*6=12 ,6个系数+6个偏置。
连接数:4*14*14*6+14*14*6=5880
C3:待训练参数:(5*5*3+1)*6+(5*5*4+1)*6+(5*5*4+1)*3+(5*5*6+1)=1516 ,
连接数:[(25*3+ 1)*6+(25*4+ 1)*6+(25*4+ 1)*3+(25*6+ 1)]*100=151600
S4:待训练参数:(1+1)*16=32 ,6个系数+6个偏置。
连接数:4*5*5*16+5*5*16=2000
C5:
连接数:(25*16+1)*120=48120
F6:为啥定义84层呢?因为这里使用的是7*12位图=84,这种表示方法对于可打印的ASCII集的字符表示更有用,而不是通常识别的数字,因为普通的数字可能很相像,容易混淆。
连接数:(120+1)*84=10164
未完待续。