文章目录
- 1. 基本结构
- 1.1 卷积
- 1.2 池化
- 2. 反向传播
- 2.1 卷积层反向传播
- 2.2 池化层反向传播
- 3. 基础公式
- 4. 以LeNet5为案例分析
- 4.1 架构图
- 4.2 C1层
- 4.3 S2层
- 4.4 C3层
- 4.5 S4层
- 4.6 C5层
- 4.7 F6层
- 4.8 OUTPUT层:
1. 基本结构
卷积神经网络基本组成:输入层、卷积层、池化层、全连接层、输出层。
卷积神经网络结构:输入层、卷积层1、池化层1、卷积层2、池化层2、全连接层1、全连接层2、输出层。
1.1 卷积
1. 卷积参数:
(1) 卷积核大小(Kernel Size):卷积核大小定义了卷积的视野。
2
2
2 维中的常见选择是
3
×
3
3×3
3×3 像素矩阵。
(2) 步长(Stride):步长定义遍历图像时卷积核的移动的步长。虽然它的默认值通常为
1
1
1,但我们可以使用值为
2
2
2 的步长来对类似于最大池化的图像进行下采样。
(3) 填充(Padding):填充定义如何处理样本的边界。填充的目的是保持卷积操作的输出尺寸等于输入尺寸,因为如果卷积核大于
1
1
1,则不加填充会导致卷积操作的输出尺寸小于输入尺寸。
(4) 输入和输出通道(Channels):卷积层通常需要一定数量的输入通道(I),并计算一定数量的输出通道(O)。
2. 卷积就是用过滤器(f x f)从左到右、从上到下的扫描一个矩阵(n x n),填充为padding,步长s。有两种卷积操作,一种称为valid-conv,一种称为same-conv。若原图像大小为 n×n,过滤器大小为 f×f,那么需要填充的大小为 p=(f-1)/2。
步长默认为1。卷积后的尺寸大小:(1) valid-conv:(n-f+1)×(n-f+1);(2) same-conv:((n+2p-f)+1)×((n+2p-f)+1)。 注:完整公式为 ((n+2p-f)/s+1) x ((n+2p-f)/s+1)
3. 卷积计算的一道例题:
1.2 池化
1. 池化层是通过减小输入的大小降低输出值的数量。池化层一般在卷积层之后,也可以看成一个过滤器,实际上实现一个采样的功能,其主要思想是,着重提取具有某种倾向的特征,比如最大池化对应的是更显著的特征;平均池化对应的是更加平滑的特征。
2. 池化核参数少,只有两个超参数,分别是 f f f 大小,以及 s s s 步长。一般很少使用填充。因此没有需要学习的参数,是卷积神经网络中的静态属性。不同的通道单独使用池化层,因此输入和输出是相同通道数。
3. 池化一般通过简单的最大值、最小值或平均值操作完成。主要功能有以下几点:
(1) 抑制噪声,降低信息冗余。
(2) 提升模型的尺度不变性、旋转不变形。
(3) 降低模型计算量。
(4) 防止过拟合。
2. 反向传播
2.1 卷积层反向传播
卷积层中反向传播的卷积核是由前向传播的卷积核经过180度旋转后得到(斜对角线对称)。
下面的
δ
δ
δ 就理解成输出的梯度。
2.2 池化层反向传播
1. 平均池化反向传播:将元素的梯度等分为多份上传到上一层。例如假设池化层是将 8×8 的矩阵进行缩放,输出的特征图是 4×4:
2. 最大池化反向传播:将梯度直接上传给前一层的某一个像素,而其他像素记为0(这里在进行池化运算时就要记录最大值的原始位置)。
3. 基础公式
这里就是有两个
3
3
3 通道的卷积核;或者理解成有
6
6
6 个
3
×
3
3×3
3×3。
从下图中可发现:偏置数量=输出通道数;卷积核种类=输出通道数。
4. 以LeNet5为案例分析
4.1 架构图
4.2 C1层
输入图片大小:
32
∗
32
32*32
32∗32
卷积窗大小:
5
∗
5
5*5
5∗5
卷积窗种类:
6
6
6
输出特征图数量:6
输出特征图大小:
28
∗
28
28*28
28∗28
神经元数量:
4704
4704
4704,
[
(
28
∗
28
)
∗
6
)
]
[(28*28)*6)]
[(28∗28)∗6)]
连接数:
12304
12304
12304,
[
(
5
∗
5
+
1
)
∗
6
]
∗
(
28
∗
28
)
[(5*5+1)*6]*(28*28)
[(5∗5+1)∗6]∗(28∗28)
可训练参数:
156
156
156,
(
5
∗
5
)
∗
(
1
∗
6
)
+
6
(5*5)*(1*6)+6
(5∗5)∗(1∗6)+6
注解:
(1) ( 32 − 5 ) + 1 = 28 (32-5)+1=28 (32−5)+1=28
(2) 一个 28 ∗ 28 28*28 28∗28 的输出特征图,上面每一个结果的得到都经过一个神经元。即一个神经元对应一个输出,与像素点个数相同。
(3) 连接数按我们老师上课讲的,就先看一次卷积,加 1 1 1 是偏置,再乘上神经元数。
(4) 可训练参数套公式就可以。
4.3 S2层
输入图片大小:
(
28
∗
28
)
∗
6
(28*28)*6
(28∗28)∗6
卷积窗大小:
2
∗
2
2*2
2∗2
卷积窗种类:
6
6
6
输出下采样图数量:
6
6
6
输出下采样图大小:
14
∗
14
14*14
14∗14
神经元数量:
1176
1176
1176,
(
14
∗
14
)
∗
6
(14*14)*6
(14∗14)∗6
连接数:
5880
5880
5880,
[
(
2
∗
2
+
1
)
∗
6
]
∗
(
14
∗
14
)
[(2*2+1)*6]*(14*14)
[(2∗2+1)∗6]∗(14∗14)
可训练参数:
12
12
12,
(
6
∗
2
)
(6*2)
(6∗2)
注解:
(1) 步长为 2 2 2。
(2) 一个池化对应两个参数。
4.4 C3层
输入图片大小:
(
14
∗
14
)
∗
6
(14*14)*6
(14∗14)∗6
卷积窗大小:
5
∗
5
5*5
5∗5
卷积窗种类:
16
16
16
输出特征图数量:
16
16
16
输出特征图大小:
10
∗
10
10*10
10∗10
神经元数量:
1600
1600
1600,
[
(
10
∗
10
)
∗
16
)
]
[(10*10)*16)]
[(10∗10)∗16)]
连接数:
151600
151600
151600,
[
60
∗
25
+
16
]
∗
(
10
∗
10
)
[60*25+16]*(10*10)
[60∗25+16]∗(10∗10) (部分连接)
可训练参数:
1516
1516
1516,
60
∗
25
+
16
60*25+16
60∗25+16
注解:
(1) ( 14 − 10 ) + 1 = 5 (14-10)+1=5 (14−10)+1=5
(2) 按照正常思维,卷积核的数量有 6 × 16 6×16 6×16 个,数量太大。这里早期设计改为了部分连接,有 60 60 60 个卷积核。
(3) 连接数的计算如下。每一个像素点的得到,都经过卷积,一个卷积核大小 5 × 5 5×5 5×5,共 60 60 60 个卷积核;一个图像中的一个像素点的得到需要 16 16 16 个偏置,有 16 16 16 个 10 × 10 10×10 10×10 图像,所以偏置数为 1 × 10 × 10 × 16 1×10×10×16 1×10×10×16。 注:下面图片中的公式写错了,参考上面。
4.5 S4层
输入图片大小:
(
10
∗
10
)
∗
16
(10*10)*16
(10∗10)∗16
卷积窗大小:
2
∗
2
2*2
2∗2
卷积窗种类:
16
16
16
输出下采样图数量:
16
16
16
输出下采样图大小:
5
∗
5
5*5
5∗5
神经元数量:
400
400
400,
(
5
∗
5
)
∗
16
(5*5)*16
(5∗5)∗16
连接数:
2000
2000
2000,
[
(
2
∗
2
+
1
)
∗
16
]
∗
(
5
∗
5
)
[(2*2+1)*16]*(5*5)
[(2∗2+1)∗16]∗(5∗5)
可训练参数:
32
32
32,
(
16
∗
2
)
(16*2)
(16∗2)
注解:步长为 2 2 2。
4.6 C5层
输入图片大小:
(
5
∗
5
)
∗
16
(5*5)*16
(5∗5)∗16
卷积窗大小:
5
∗
5
5*5
5∗5
卷积窗种类:
120
120
120
输出特征图数量:
120
120
120
输出特征图大小:
1
∗
1
1*1
1∗1
神经元数量:
120
120
120,
120
∗
(
1
∗
1
)
120*(1*1)
120∗(1∗1)
连接数:
48120
48120
48120,
[
5
∗
5
∗
120
∗
16
+
120
]
∗
(
1
∗
1
)
[5*5*120*16+120]*(1*1)
[5∗5∗120∗16+120]∗(1∗1)
注解:
(1) 120 120 120 个向量或点。
(2) 每个 1 × 1 1×1 1×1 的输出与前面的 16 16 16 个卷积核都有连接, 16 16 16 个卷积求和后加一个偏置。
4.7 F6层
输入图片大小:
(
1
∗
1
)
∗
120
(1*1)*120
(1∗1)∗120
卷积窗大小:
1
∗
1
1*1
1∗1
卷积窗种类:
84
84
84
输出特征图数量:
84
84
84
输出特征图大小:
1
1
1
神经元数量:
84
84
84
连接数:
10164
10164
10164,
[
120
∗
84
∗
1
+
84
]
∗
(
1
∗
1
)
[120*84*1+84]*(1*1)
[120∗84∗1+84]∗(1∗1)
可训练参数:
10164
10164
10164,
120
∗
84
+
84
120*84+84
120∗84+84
4.8 OUTPUT层:
输入向量:
84
84
84
输出向量:
10
10
10