CNN之LeNet-5(二)

一. 模型介绍

LeNet-5出自1998年YE Cun的论文《Gradient-Based Learning Applied to Document Recognition》,在上篇blog中有网盘链接可以下载~这篇文章指出LeNet-5对于手写数字识别是一个非常高效的网络。下图是该网络的结构:
CNN之LeNet-5(二)
可以看到:

  • 除了输入层之外,LeNet-5一共含有7层;
  • 每层都包含可训练参数;
  • 每层包括多个feature map。

二. 各层详解

1. 输入层-INPUT

从上图中可以看到,输入是二维图像,大小为323232*32,它要比数据库中最大的还要大一点,这是因为我们希望潜在的不同的特征(例如终点或角点)能出现在更深层的特征检测子的接收区域的中心。

2. 卷积层-C1

C1层是对输入图像进行第一次卷积运算,它采用了6个555*5的卷积核,得到的是6个282828*28的feature map(32-5+1=28)。
由于卷积核的大小为555*5,需要学习的weight和bias总共就有 6(55+1)=1566*(5*5+1)=156个参数,+1即表示一个核有一个bias。
对于卷积层C1,由于feature map的每个像素都与卷积核中的5*5个像素和1个bias有连接,所以总共有1562828=122304156*28*28=122304个连接(connection)。
然而我们只需要学习156个参数,这是因为CNN的主要特点之一权值共享
总结:

参数 说明
input size 323232*32
filter size 555*5
filter num 6
feature map size 282828*28
params (55+1)6=156(5*5+1)*6=156
connections 122304

3. 池化层-S2

池化即下采样,LeNet-5使用了222*2的filter,对C1中的每个feature map接受到的2*2区域内的像素求和,再乘以一个可训练参数weight,再加上一个可训练参数偏置bias,最后这个结果还会通过sigmoid**函数,从而获得S2层的6个feature map。
需要学习的参数为(1+1)6=12(1+1)*6=12个,连接数为(22+1)61414=5880(2*2+1)*6*14*14=5880
总结:

参数 说明
input size 282828*28
filter size 222*2
filter num 6
feature map size 141414*14
params 12
connections 5880

4. 卷积层-C3

该卷积层采用了16个大小为555*5的filter,得到的C3中的feature map大小为145+1=1014-5+1=10,这些feature map是由S2中所得特征通过不同的组合方式产生的。

总结为:

参数 说明
input size 141414*14
filter size 555*5
filter num 16
feature map size 101010*10
params 1516
connections 151600

说明:
C3层中的feature map是与S2中的某几个feature map相连接的,也就是说C3层的feature map是S2层提取到的feature map的不同组合。文章中指出,这些组合方式包括:

  • C3层的前6个feature map是以S2层中3个相邻的feature map子集作为输入;

  • 接下来6个feature map以S2层中4个相邻的feature map子集为输入;

  • 接下来3个feature map以S2层中不相邻的4个feature map子集作为输入;

  • 最后一个feature map以S2层的所有feature map作为输入。
    如下图所示:
    CNN之LeNet-5(二)
    为什么要采取这种方式而不是将S2层的每个feature map与C3层的每个feature map相连接呢?原文中给出了两个原因:

  • 有效的减少参数量;

  • 有利于提取多种不同的特征;

    那么需要训练的参数为:6(355+1)+6(455+1)+3(455+1)+1(655+1)=15166*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516
    连接数为:10101516=15160010*10*1516=151600

5. 池化层-S4

这是第二个池化层,该层所使用的filter大小仍为222*2,以C3层中的16个大小为101010*10的feature map作为输入,得到的S4为16个大小为555*5的feature map。此处的连接方式与C1-S2的连接方式是相同的。
那么需要学习的参数为(1+1)16=32(1+1)*16=32个,连接数为(22+1)1655=2000(2*2+1)*16*5*5=2000
总结:

参数 说明
input size 101010*10
filter size 222*2
filter num 16
feature map size 5*5
params 32
connections 2000

6. 卷积层-C5

C5是第三个卷积层,该层的输入是16个大小为555*5的feature map,使用的filter大小也是555*5,因此C5中的feature map大小为111*1。C5共有120个feature map,每一个都和上一层的16个feature map相连,因此可训练参数为:(1655+1)120=48120(16*5*5+1)*120=48120,连接数也是48120。之所以称该层为卷积层而不是全连接层是因为,如果LeNet-5的输入在其他设置都保持不变的情况下变大,feature map的维数将大于111*1
总结:

参数 说明
input size 555*5
filter size 555*5
filter num 120
feature map size 111*1
params 48120
connections 48120

7. 全连接层-F6

第6层是全连接层,该层有84个unit,这里的84是由输出决定的,它对应于一个7x12的比特图。
以C5的120个111*1的vector作为输入,该层会计算输入vector与权重vector的点积,再加上偏置后通过sigmoid函数输出结果,因此该层的训练参数和连接数为:84(120+1)=1016484*(120 + 1)=10164

8. 输出层-F7

输出层也是一个全连接层,该层有10个unit,分别代表了数字0-9,若第i个unit的值为0,就说明网络识别结果为数字i。
该层采用的连接方式为RBF(径向基函数),xix_i是F6的输出(即F7的输入),记aia_i为F6中+输入*权重+偏置,那么:xi=f(ai)x_i=f(a_i),其中
CNN之LeNet-5(二)yiy_i为F7的输出,i=0,,9i=0,\cdots,9,那么计算方式为:
CNN之LeNet-5(二)其中wijw_{ij}的值由数字ii的比特图编码确定,i=0,,9i=0,\cdots,9j=0,,7121j=0,\cdots,7*12-1。RBF输出的值越接近于0,则识别结果越接近于字符ii,即越接近于数字ii的ASCII编码图,也就是说表示当前网络输入的识别结果是字符ii
CNN之LeNet-5(二)
对于该层的每个unit,都有84个input,因此可训练参数为:8410=84084*10=840,同样连接数也是840个。

9. 损失函数

LeNet-5采用的Loss Function是MSE(the Minimum Mean Squared Error),即:
CNN之LeNet-5(二)
其中ZpZ_p是整个网络的输入,yDpy_{D_p}是RBF中第DpD_p个单元的输出。

三. 小结

原文并没有完整的读下来,粗略的看了一下网络结构,如有不足请批评指正~