注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/99944945
1 卷积神经网络的训练方法
1.1 误差更新方法
卷积神经网络的参数包括卷积层的卷积核大小、全连接层的连接权重和偏置值。和多层神经网络一样,卷积神经网络中的参数训练也是使用误差反向传播算法。有多个全连接层时,仍然需要按照链式法则从上至下逐层调整。那么,当神经网络中包含卷积层和池化层时,误差是怎样传播的呢?
(1) 池化层的误差传播
如下图所示,先把池化层改写成全连接层的形式。假设输入数据为
4
×
4
4\times 4
4×4 特征图,那么通过最大池化,可得到一个
2
×
2
2\times 2
2×2 特征图。
举个例子进行说明
按照全连接层的形式改写后,特征图中的红色边框对应的 4 个单元
n
11
,
n
12
,
n
15
,
n
16
{n_{11}},{n_{12}},{n_{15}},{n_{16}}
n11,n12,n15,n16 与池化后的
n
21
{n_{21}}
n21 相连接,特征图中的蓝色边框对应的4个单元
n
13
,
n
14
,
n
17
,
n
18
{n_{13}},{n_{14}},{n_{17}},{n_{18}}
n13,n14,n17,n18 与池化后的
n
22
{n_{22}}
n22 相连接。这样就可以把池化层看作是有部分连接的全连接层。
假设特征图中的红色边框局部区域中的最大值为 n 12 {n_{12}} n12,蓝色边框局部区域中的最大值为 n 17 {n_{17}} n17 。那么误差只在 n 21 {n_{21}} n21 和 n 12 {n_{12}} n12 之间,以及 n 22 {n_{22}} n22 和 n 17 {n_{17}} n17 之间传播。即误差只在激活值最大的单元之间传播。在反复调整连接权重的过程中,激活值最大的单元也有可能出现在其他位置,那么需要调整其他单元的连接权重。
(2) 卷积层的误差传播
同样的方法,把卷积层改写成全连接层的形式,如下图所示,假设输入数据为
5
×
5
5\times 5
5×5 特征图,使用
2
×
2
2\times 2
2×2 的卷积核对输入图像进行卷积操作。
首先,用红色边框区域对应的单元
n
11
,
n
12
,
n
16
,
n
17
{n_{11}},{n_{12}},{n_{16}},{n_{17}}
n11,n12,n16,n17 乘以卷积核权重,然后通过激活函数计算得到的输出值就是
n
21
{n_{21}}
n21 。这样就可以把卷积层看作是只与特定单元相连接的全连接层。卷积核的权重调整和多层神经网络一样,也是从上层的连接权重开始逐层调整。与BP神经网络类似,使用链式法则反向推导即可求出卷积核权重。
对所有卷积层的卷积核元素分别实施上述处理。由上述可知,把卷积层的卷积核看作全连接层后,就可以根据单元的调整值来调整卷积核元素。可以这么理解:在卷积神经网络中,就是不断修改卷积核的参数来训练网络的,因此卷积核可以看作为全连接层(只与特定单元相连接的全连接层)。
1.2 参数的设定方法
在卷积神经网络中,有大量需要预设的参数
(1) 与网络有关的主要参数如下所示:
- 卷积层的卷积核大小、卷积核个数
- 激活函数的种类
- Pooling方法的种类
- 网络的层结构(卷积层的个数、全连接层的个数等)
- Dropout层
- 有无预处理
- 有无归一化
(2) 与训练有关的参数如下所示:
- Mini-Batch 的大小
- 学习率
- 迭代次数
- 有无预训练
当然卷积神经网络其他的参数设定方法也可以借鉴BP神经网络,如数据集准备,数据集扩展,数据预处理,网络的初始化 和正则化方法等。详细节可以参见博客:https://xiongyiming.blog.csdn.net/article/details/99718169
2 卷积神经网络的设计结构
在互联网科技巨头开源大量深度学习框架的时代,当务之急是设计出高效、可复用 、精度高、损失小的卷积神经网络模型。
回顾近年来卷积神经网络的快速发展,从 AlexNet 网络模型开始,到 VGGNet, GoogleNet 和 ResNet 等经典的卷积神经网络模型的出现,模型的运算时间不断减少、精度逐步提升、权重参数越来越少、网络深度达到20层甚至更高,部分是基于网络层的不同排列方式和组织方式进行改造,部分是对网络层进行数学改造 。 如果我们也想要设计出一个惊艳的卷积神经网络,需要在理解的基础上进行实践与调参,下面来学习一些设计卷积神经网络架构的规律与技巧。
2.1 网络层排列规律
卷积神经网络中最常见的是卷积层后接 Pooling 层,目的是减少下一次卷积输入图像大小,然后重复该过程,提出图像中的高维特征,最后通过全连接层得到输出。因此最常见的卷积神经网络结构如下:
I
N
P
U
T
→
[
C
O
N
Y
]
→
[
P
O
O
L
]
→
[
F
C
]
→
O
U
T
P
U
T
{\rm{INPUT }} \to {\rm{ }}\left[ {{\rm{CONY}}} \right]{\rm{ }} \to {\rm{ }}\left[ {{\rm{POOL}}} \right]{\rm{ }} \to {\rm{ }}\left[ {{\rm{FC}}} \right]{\rm{ }} \to {\rm{ OUTPUT}}
INPUT→[CONY]→[POOL]→[FC]→OUTPUT
其中, CONY为卷积层,POOL为 Pooling层,FC为全连接层, [ ∗ ] \left[ * \right] [∗] 为重复 ∗ * ∗ 层重复多次。常见的卷积神经网络结构规律如下:
-
INPUT → \to → FC : 实现一个简单的线性分类器;
-
INPUT → \to → CONY : 实现一个滤波操作,如高斯模糊,中值滤波等;
-
INPUT → \to → [CONY → \to → POOL] × \times × 2 → \to → FC → \to → OUTPUT : 经过两次卷积层接 Pooling 层,实现小规模的卷积神经分类网络;
-
INPUT → \to → [CONY → \to → POOL] × \times × 3 → \to → [FC] × \times × 2 → \to → OUTPUT : 多次连续两个卷积层后接一个 Pooling 层,该思路适用于深层次网络(如 VGGNet, ResNet 等)。因为在执行Pooling操作前,多次小卷积核卷积可以有效减少网络权重参数,从输入数据中学习到更高维特征。
2.2 网络参数的设计规律
卷积神经网络模型超参数设计的一般规律如下:
(1) 输入层矩阵的大小应该可以被 2 整除多次
常用数字包括 32, 64, 96, 224, 384 或 512。其中 224 是AlexNet的经典输入大小,该要求是为了方便网络的卷积层和Pooling层计算,如每次 Pooling 层产生的特征图是输入的一半,尽量减少在数学约减时造成的数据丢失。
(2) 卷积层尽量使用小尺寸卷积核
网络层数越深,卷积核尺寸应该设置得越小。从空间上来说,随着网络层次加深,其输出特征图越小,相对来说,意味着卷积核越大(感知区域越大)。为了避免空间上卷积核增大而导致特征图减小,且图像中的感知区域太大难以提取输入数据的高维特征,应尽量使用小尺寸卷积核(如
1
×
1
1\times 1
1×1 ,
3
×
3
3\times 3
3×3 ,
5
×
5
5\times 5
5×5 )。另外,在性能方面,卷积核越小,卷积神经网络所需权重参数越少,可以有效地加快运算速度。
(3) 卷积步长尽量不要过大
在实际应用中,更小的步长提取特征效果更好,例如,设置步长为1可以让空间维度的下采样操作由Pooling层负责,卷积层只负责对输入数据进行特征提取。
(4) 卷积层中应使用 Same Padding 零填充矩阵边界
使用 Same Padding 零填充边界可以让卷积层的输出数据保持和输入数据大小不变。如果卷积层只进行卷积而不进行零填充,那么数据体的尺寸就会略微减小,随着网络层次的加深,图像边缘的信息就会过快地损失掉。
(5) Padding 的设置与卷积核大小有关
例如,当卷积核大小
K
=
3
K=3
K=3 (即卷积矩阵大小为
3
×
3
3\times 3
3×3 ),则设置 padding=1 来保持卷积操作中的输出尺寸不变性; 当
K
=
5
K=5
K=5,设置 padding=2。对于任意卷积核大小
K
K
K , padding=
(
K
−
1
)
/
2
(K-1)/2
(K−1)/2 能保持尺寸不变性。
(6) Pooling层一般使用2 2窗口,步长为2的 Max Pooling 操作
Pooling层负责对输入数据在空间维度进行压缩(下采样),其中 Max Pooling的Pooling窗口尺寸很少会大于3,当下来样操作过于激烈时,容易造成数据信息丢失,导致卷积神经网络性能急剧下降。
(7) 全连接层数不宜超过3层
全连接层数越多,训练难度越大,越容易造成过拟合和梯度消散,因此一般卷积神经网络最后接的是大部分为两个连续的全连接层加一个输出分类层。
参考资料
[1] 图解深度学习
[2] 深度学习原理与实践
[3] TensorFlow实战Google深度学习框架(第2版)