LeNet-5初理解
一. 模型介绍
LeNet-5出自1998年YE Cun的论文《Gradient-Based Learning Applied to Document Recognition》,在上篇blog中有网盘链接可以下载~这篇文章指出LeNet-5对于手写数字识别是一个非常高效的网络。下图是该网络的结构:
可以看到:
- 除了输入层之外,LeNet-5一共含有7层;
- 每层都包含可训练参数;
- 每层包括多个feature map。
二. 各层详解
1. 输入层-INPUT
从上图中可以看到,输入是二维图像,大小为 32 ∗ 32 32*32 32∗32,它要比数据库中最大的还要大一点,这是因为我们希望潜在的不同的特征(例如终点或角点)能出现在更深层的特征检测子的接收区域的中心。
2. 卷积层-C1
C1层是对输入图像进行第一次卷积运算,它采用了6个
5
∗
5
5*5
5∗5的卷积核,得到的是6个
28
∗
28
28*28
28∗28的feature map(32-5+1=28)。
由于卷积核的大小为
5
∗
5
5*5
5∗5,需要学习的weight和bias总共就有
6
∗
(
5
∗
5
+
1
)
=
156
6*(5*5+1)=156
6∗(5∗5+1)=156个参数,+1即表示一个核有一个bias。
对于卷积层C1,由于feature map的每个像素都与卷积核中的5*5个像素和1个bias有连接,所以总共有
156
∗
28
∗
28
=
122304
156*28*28=122304
156∗28∗28=122304个连接(connection)。
然而我们只需要学习156个参数,这是因为CNN的主要特点之一权值共享。
总结:
参数 | 说明 |
---|---|
input size | 32 ∗ 32 32*32 32∗32 |
filter size | 5 ∗ 5 5*5 5∗5 |
filter num | 6 |
feature map size | 28 ∗ 28 28*28 28∗28 |
params | ( 5 ∗ 5 + 1 ) ∗ 6 = 156 (5*5+1)*6=156 (5∗5+1)∗6=156 |
connections | 122304 |
3. 池化层-S2
池化即下采样,LeNet-5使用了
2
∗
2
2*2
2∗2的filter,对C1中的每个feature map接受到的2*2区域内的像素求和,再乘以一个可训练参数weight,再加上一个可训练参数偏置bias,最后这个结果还会通过sigmoid激活函数,从而获得S2层的6个feature map。
需要学习的参数为
(
1
+
1
)
∗
6
=
12
(1+1)*6=12
(1+1)∗6=12个,连接数为
(
2
∗
2
+
1
)
∗
6
∗
14
∗
14
=
5880
(2*2+1)*6*14*14=5880
(2∗2+1)∗6∗14∗14=5880。
总结:
参数 | 说明 |
---|---|
input size | 28 ∗ 28 28*28 28∗28 |
filter size | 2 ∗ 2 2*2 2∗2 |
filter num | 6 |
feature map size | 14 ∗ 14 14*14 14∗14 |
params | 12 |
connections | 5880 |
4. 卷积层-C3
该卷积层采用了16个大小为 5 ∗ 5 5*5 5∗5的filter,得到的C3中的feature map大小为 14 − 5 + 1 = 10 14-5+1=10 14−5+1=10,这些feature map是由S2中所得特征通过不同的组合方式产生的。
总结为:
参数 | 说明 |
---|---|
input size | 14 ∗ 14 14*14 14∗14 |
filter size | 5 ∗ 5 5*5 5∗5 |
filter num | 16 |
feature map size | 10 ∗ 10 10*10 10∗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作为输入。
如下图所示:
为什么要采取这种方式而不是将S2层的每个feature map与C3层的每个feature map相连接呢?原文中给出了两个原因: -
有效的减少参数量;
-
有利于提取多种不同的特征;
那么需要训练的参数为: 6 ∗ ( 3 ∗ 5 ∗ 5 + 1 ) + 6 ∗ ( 4 ∗ 5 ∗ 5 + 1 ) + 3 ∗ ( 4 ∗ 5 ∗ 5 + 1 ) + 1 ∗ ( 6 ∗ 5 ∗ 5 + 1 ) = 1516 6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516 6∗(3∗5∗5+1)+6∗(4∗5∗5+1)+3∗(4∗5∗5+1)+1∗(6∗5∗5+1)=1516
连接数为: 10 ∗ 10 ∗ 1516 = 151600 10*10*1516=151600 10∗10∗1516=151600
5. 池化层-S4
这是第二个池化层,该层所使用的filter大小仍为
2
∗
2
2*2
2∗2,以C3层中的16个大小为
10
∗
10
10*10
10∗10的feature map作为输入,得到的S4为16个大小为
5
∗
5
5*5
5∗5的feature map。此处的连接方式与C1-S2的连接方式是相同的。
那么需要学习的参数为
(
1
+
1
)
∗
16
=
32
(1+1)*16=32
(1+1)∗16=32个,连接数为
(
2
∗
2
+
1
)
∗
16
∗
5
∗
5
=
2000
(2*2+1)*16*5*5=2000
(2∗2+1)∗16∗5∗5=2000。
总结:
参数 | 说明 |
---|---|
input size | 10 ∗ 10 10*10 10∗10 |
filter size | 2 ∗ 2 2*2 2∗2 |
filter num | 16 |
feature map size | 5*5 |
params | 32 |
connections | 2000 |
6. 卷积层-C5
C5是第三个卷积层,该层的输入是16个大小为
5
∗
5
5*5
5∗5的feature map,使用的filter大小也是
5
∗
5
5*5
5∗5,因此C5中的feature map大小为
1
∗
1
1*1
1∗1。C5共有120个feature map,每一个都和上一层的16个feature map相连,因此可训练参数为:
(
16
∗
5
∗
5
+
1
)
∗
120
=
48120
(16*5*5+1)*120=48120
(16∗5∗5+1)∗120=48120,连接数也是48120。之所以称该层为卷积层而不是全连接层是因为,如果LeNet-5的输入在其他设置都保持不变的情况下变大,feature map的维数将大于
1
∗
1
1*1
1∗1。
总结:
参数 | 说明 |
---|---|
input size | 5 ∗ 5 5*5 5∗5 |
filter size | 5 ∗ 5 5*5 5∗5 |
filter num | 120 |
feature map size | 1 ∗ 1 1*1 1∗1 |
params | 48120 |
connections | 48120 |
7. 全连接层-F6
第6层是全连接层,该层有84个unit,这里的84是由输出决定的,它对应于一个7x12的比特图。
以C5的120个
1
∗
1
1*1
1∗1的vector作为输入,该层会计算输入vector与权重vector的点积,再加上偏置后通过sigmoid函数输出结果,因此该层的训练参数和连接数为:
84
∗
(
120
+
1
)
=
10164
84*(120 + 1)=10164
84∗(120+1)=10164。
8. 输出层-F7
输出层也是一个全连接层,该层有10个unit,分别代表了数字0-9,若第i个unit的值为0,就说明网络识别结果为数字i。
该层采用的连接方式为RBF(径向基函数),
x
i
x_i
xi是F6的输出(即F7的输入),记
a
i
a_i
ai为F6中
输
入
∗
权
重
+
偏
置
输入*权重+偏置
输入∗权重+偏置,那么:
x
i
=
f
(
a
i
)
x_i=f(a_i)
xi=f(ai),其中
记
y
i
y_i
yi为F7的输出,
i
=
0
,
⋯
,
9
i=0,\cdots,9
i=0,⋯,9,那么计算方式为:
其中
w
i
j
w_{ij}
wij的值由数字
i
i
i的比特图编码确定,
i
=
0
,
⋯
,
9
i=0,\cdots,9
i=0,⋯,9,
j
=
0
,
⋯
,
7
∗
12
−
1
j=0,\cdots,7*12-1
j=0,⋯,7∗12−1。RBF输出的值越接近于0,则识别结果越接近于字符
i
i
i,即越接近于数字
i
i
i的ASCII编码图,也就是说表示当前网络输入的识别结果是字符
i
i
i。
对于该层的每个unit,都有84个input,因此可训练参数为:
84
∗
10
=
840
84*10=840
84∗10=840,同样连接数也是840个。
9. 损失函数
LeNet-5采用的Loss Function是MSE(the Minimum Mean Squared Error),即:
其中
Z
p
Z_p
Zp是整个网络的输入,
y
D
p
y_{D_p}
yDp是RBF中第
D
p
D_p
Dp个单元的输出。
三. 小结
原文并没有完整的读下来,粗略的看了一下网络结构,如有不足请批评指正~