二、AlexNet
- 2012年
Hinton
和他的学生推出了AlexNet
。在当年的ImageNet
图像分类竞赛中,AlexeNet
以远超第二名的成绩夺冠,使得深度学习重回历史舞台,具有重大历史意义。
2.1 网络结构
AlexNet
有5个广义卷积层和3个广义全连接层。- 广义的卷积层:包含了卷积层、池化层、
ReLU
、LRN
层等。 - 广义全连接层:包含了全连接层、
ReLU
、Dropout
层等。
- 广义的卷积层:包含了卷积层、池化层、
网络结构如下表所示:
输入层会将
3@224x224
的三维图片预处理变成3@227x227
的三维图片。第二层广义卷积层、第四层广义卷积层、第五层广义卷积层都是分组卷积,仅采用本
GPU
内的通道数据进行计算。第一层广义卷积层、第三层广义卷积层、第六层连接层、第七层连接层、第八层连接层执行的是全部通道数据的计算。
第二层广义卷积层的卷积、第三层广义卷积层的卷积、第四层广义卷积层的卷积、第五层广义卷积层的卷积均采用
same
填充。当卷积的步长为1,核大小为
3x3
时,如果不填充0,则feature map
的宽/高都会缩减 2 。因此这里填充0,使得输出feature map
的宽/高保持不变。其它层的卷积,以及所有的池化都是
valid
填充(即:不填充 0 )。第六层广义连接层的卷积之后,会将
feature map
展平为长度为 4096 的一维向量。
编号 网络层 子层 核/池大小 核数量 步长 激活函数 输入尺寸 输出尺寸 第0层 输入层 - - - - - - 3@224x224 第1层 广义卷积层 卷积 11x11 96 4 ReLU 3@227x227 96@55x55 第1层 广义卷积层 池化 3x3 - 2 - 96@55x55 96@27x27 第1层 广义卷积层 LRN - - - - 96@27x27 96@27x27 第2层 广义卷积层 卷积 5x5 256 1 ReLU 96@27x27 256@27x27 第2层 广义卷积层 池化 3x3 - 2 - 256@27x27 256@13x13 第2层 广义卷积层 LRN - - - - 256@13x13 256@13x13 第3层 广义卷积层 卷积 3x3 384 1 ReLU 256@13x13 384@13x13 第4层 广义卷积层 卷积 3x3 384 1 ReLU 384@13x13 384@13x13 第5层 广义卷积层 卷积 3x3 256 1 ReLU 384@13x13 256@13x13 第5层 广义卷积层 池化 3x3 - 2 - 256@13x13 256@6x6 第6层 广义连接层 卷积 6x6 4096 1 ReLU 256@6x6 4096@1x1 第6层 广义连接层 dropout - - - - 4096@1x1 4096@1x1 第7层 广义连接层 全连接 - - - ReLU 4096 4096 第7层 广义连接层 dropout - - - - 4096 4096 第8层 广义连接层 全连接 - - - - 4096 1000 网络参数数量:总计约 6237万。
输出
Tensor size
采用channel last
风格描述。即227x227x3
等价于前文的3@227x227
。第6层广义连接层的卷积的参数数量最多,约3770万,占整体六千万参数的 60%。
原因是该子层的卷积核较大、输入通道数量较大、输出通道数量太多。该卷积需要的参数数量为: 。
编号 网络层 子层 输出 Tensor size 权重个数 偏置个数 参数数量 第0层 输入层 - 227x227x3 0 0 0 第1层 广义卷积层 卷积 55x55x96 34848 96 34944 第1层 广义卷积层 池化 27x27x96 0 0 0 第1层 广义卷积层 LRN 27x27x96 0 0 0 第2层 广义卷积层 卷积 27x27x256 614400 256 614656 第2层 广义卷积层 池化 13x13x256 0 0 0 第2层 广义卷积层 LRN 13x13x256 0 0 0 第3层 广义卷积层 卷积 13x13x384 884736 384 885120 第4层 广义卷积层 卷积 13x13x384 1327104 384 1327488 第5层 广义卷积层 卷积 13x13x256 884736 256 884992 第5层 广义卷积层 池化 6x6x256 0 0 0 第6层 广义连接层 卷积 4096×1 37748736 4096 37752832 第6层 广义连接层 dropout 4096×1 0 0 0 第7层 广义连接层 全连接 4096×1 16777216 4096 16781312 第7层 广义连接层 dropout 4096×1 0 0 0 第8层 广义连接层 全连接 1000×1 4096000 1000 4097000 总计 - - - - - 62,378,344
2.2 设计技巧
AlexNet
成功的主要原因在于:- 使用
ReLU
激活函数。 - 使用
dropout
、数据集增强 、重叠池化等防止过拟合的方法。 - 使用百万级的大数据集来训练。
- 使用
GPU
训练,以及的LRN
使用。 - 使用带动量的
mini batch
随机梯度下降来训练。
- 使用
2.2.1 数据集增强
AlexNet
中使用的数据集增强手段:随机裁剪、随机水平翻转:原始图片的尺寸为
256xx256
,裁剪大小为224x224
。每一个
epoch
中,对同一张图片进行随机性的裁剪,然后随机性的水平翻转。理论上相当于扩充了数据集 倍。在预测阶段不是随机裁剪,而是固定裁剪图片四个角、一个中心位置,再加上水平翻转,一共获得 10 张图片。
用这10张图片的预测结果的均值作为原始图片的预测结果。
PCA
降噪:对RGB
空间做PCA
变换来完成去噪功能。同时在特征值上放大一个随机性的因子倍数(单位1
加上一个 的高斯绕动),从而保证图像的多样性。- 每一个
epoch
重新生成一个随机因子。 - 该操作使得错误率下降
1%
。
- 每一个
AlexNet
的预测方法存在两个问题:- 这种
固定裁剪四个角、一个中心
的方式,把图片的很多区域都给忽略掉了。很有可能一些重要的信息就被裁剪掉。 - 裁剪窗口重叠,这会引起很多冗余的计算。
改进的思路是:
- 执行所有可能的裁剪方式,对所有裁剪后的图片进行预测。将所有预测结果取平均,即可得到原始测试图片的预测结果。
- 减少裁剪窗口重叠部分的冗余计算。
具体做法为:将全连接层用等效的卷积层替代,然后直接使用原始大小的测试图片进行预测。将输出的各位置处的概率值按每一类取平均(或者取最大),则得到原始测试图像的输出类别概率。
下图中:上半图为
AlexNet
的预测方法;下半图为改进的预测方法。- 这种
2.2.2 局部响应规范化
局部响应规范层
LRN
:目地是为了进行一个横向抑制,使得不同的卷积核所获得的响应产生竞争。LRN
层现在很少使用,因为效果不是很明显,而且增加了内存消耗和计算时间。- 在
AlexNet
中,该策略贡献了1.2%
的贡献率。
LRN
的思想:输出通道 在位置 处的输出会受到相邻通道在相同位置输出的影响。为了刻画这种影响,将输出通道 的原始值除以一个归一化因子。
其中: 为输出通道 在位置 处的原始值, 为归一化之后的值。 为影响第 通道的通道数量(分别从左侧、右侧 个通道考虑)。 为超参数。
一般考虑 。
2.2.3 多GPU 训练
AlexNet
使用两个GPU
训练。网络结构图由上、下两部分组成:一个GPU
运行图上方的通道数据,一个GPU
运行图下方的通道数据,两个GPU
只在特定的网络层通信。即:执行分组卷积。- 第二、四、五层卷积层的核只和同一个
GPU
上的前一层的feature map
相连。 - 第三层卷积层的核和前一层所有
GPU
的feature map
相连。 - 全连接层中的神经元和前一层中的所有神经元相连。
- 第二、四、五层卷积层的核只和同一个
2.2.4 重叠池化
一般的池化是不重叠的,池化区域的大小与步长相同。
Alexnet
中,池化是可重叠的,即:步长小于池化区域的大小。重叠池化可以缓解过拟合,该策略贡献了
0.4%
的错误率。为什么重叠池化会减少过拟合,很难用数学甚至直观上的观点来解答。一个稍微合理的解释是:重叠池化会带来更多的特征,这些特征很可能会有利于提高模型的泛化能力。
2.2.5 优化算法
AlexNet
使用了带动量的mini-batch
随机梯度下降法。标准的带动量的
mini-batch
随机梯度下降法为:而论文中,作者使用了修正:
- 其中 , , 为学习率。
- 为权重衰减。论文指出:权重衰减对于模型训练非常重要,不仅可以起到正则化效果,还可以减少训练误差。