深度学习之卷积神经网络(9)经典卷积网络
自2012年AlexNet [1]的提出以来,各种各样的深度卷积神经网络模型相继被提出,其中比较有代表性的有VGG系列 [2],GoogleLeNet系列 [3],ResNet系列 [4],DenseNet系列 [5]等,他们的网络层数整体趋势逐渐增多。以网络模型在ILSVRC挑战赛ImageNet数据集上面的分类性能表现为例,如下图所示,在AlexNet出现之前的网络模型都是浅层的神经网络,Top-5错误率均在25%以上,AlexNet8层的深层神经网络将Top-5错误率降低至16.4%,性能提升巨大,后续的VGG、GoogleNet模型继续将错误率降低至6.7%; ResNet的出现首次将网络层数提升至152层,错误率也降低至3.57%。
本节将重点介绍这几种网络模型的特点。
[1] A. Krizhevsky, I. Sutskever 和 G. E. Hinton, “ImageNet Classification with Deep Convolutional Neural Networks,” 出处 Advances in Neural Information Processing Systems 25, F. Pereira, C. J. C. Burges, L. Bottou 和K. Q. Weinberger, 编辑, Curran Associates, Inc., 2012, pp. 1097-1105.
[2] K. Simonyan 和 A. Zisserman, “Very Deep Convolutional Networks for Large-Scale Image Recognition,” CoRR, 卷 abs/1409.1556, 2014.
[3] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke 和 A. Rabinovich, “Going Deeper with Convolutions,” 出处 Computer Vision and Pattern Recognition (CVPR), 2015.
[4] K. He, X. Zhang, S. Ren 和 J. Sun,“Deep Residual Learning for Image Recognition,” CoRR, 卷 abs/1512.03385, 2015.
[5] G. Huang, Z. Liu 和 K. Q. Weinberger, “Densely Connected Convolutional Networks,”CoRR, 卷 abs/1608.06993, 2016.
1. AlexNet
2012年,ILSVRC12挑战赛ImageNet数据集分类任务的冠军Alex Krizhevsky提出了8层的深度神经网络模型AlexNet,它接收输入为
224
×
224
224×224
224×224大小的彩色图片数据,经过五个卷积层和三个全连接层后得到样本属于1000个类别的概率分布。为了降低特征图的维度,AlexNet在1、2、5个卷积层后添加了Max Pooling层,如下图所示,网络的参数量达到了6000万个。为了能够在当时的显卡设备NVIDIA GTX 580(3GB显存)上训练模型,Alex Krizhevsky将卷积层、前两个全连接层等拆开在两块显卡上面分别训练,最后一层合并到一张显卡上面,进行反向传播更新。AlexNet在ImageNet取得了15.3%的Top-5错误率,比第二名在错误率上降低了10.9%。
AlexNet的创新之处在于:
- 层数达到了较深的8层;
- 采用了ReLU激活函数,过去的神经网络大多采用Sigmoid激活函数,计算相对复杂,容易出现梯度弥散现象;
- 引入Dropout层。Dropout提高了模型的泛化能力,防止过拟合。
2. VGG系列
AlexNet模型的优越性能启发了业界朝着更深层的网络模型方向研究。2014年,ILSVRC14挑战赛ImageNet分类任务的亚军牛津大学VGG实验室提出了VGG11、VGG13、VGG16、VGG19等一系列的网络模型(如下图所示),并将网络深度最高提升至19层。
以VGG16为例。它接受
224
×
224
224×224
224×224大小的彩色图片数据,经过2个Conv-Conv-Pooling单元,和3个Conv-Conv-Conv-Pooling单元的堆叠,最后通过3层全连接层输出当前图片分别属于1000类别的概率分布,如下图所示。VGG16在ImageNet取得了7.4%的Top-5错误率,比AlexNet在错误率上降低了7.9%。
VGG系列网络的创新之处在于:
- 层数提升至19层;
- 全部采用更小的 3 × 3 3×3 3×3卷积核,相对于AlexNet中 7 × 7 7×7 7×7的卷积核,参数量更少,计算代价更低;
- 采用更小的池化层
2
×
2
2×2
2×2窗口和步长
s
=
2
s=2
s=2,而AlexNet中是步长
s
=
2
s=2
s=2、
3
×
3
3×3
3×3的池化窗口。
3. GoogleLeNet
3×3的卷积核参数量更少,计算代价更低,同时在性能表现上甚至更优越,因此业界开始探索卷积核最小的情况:
1
×
1
1×1
1×1卷积核。如下图所示,输入为3通道的
5
×
5
5×5
5×5图片,与单个
1
×
1
1×1
1×1的卷积核进行卷积运算,每个通道的数据与对应通道的卷积核运算,得到3个通道的中间矩阵,对应位置相加得到最终的输出张量。对于输入shape为
[
b
,
h
,
w
,
c
i
n
]
[b,h,w,c_{in}]
[b,h,w,cin],
1
×
1
1×1
1×1卷积层的输出为
[
b
,
h
,
w
,
c
o
u
t
]
[b,h,w,c_{out}]
[b,h,w,cout],其中
c
i
n
c_{in}
cin为输入数据的通道数,
c
o
u
t
c_{out}
cout为输出数据的通道数,也是
1
×
1
1×1
1×1卷积核的数量。
1
×
1
1×1
1×1卷积核的一个特别之处在于,它可以不改变特征图的狂傲,而只对通道数
c
c
c进行变换。
2014年,ILSVGC14挑战赛的冠军Google提出了大量采用
3
×
3
3×3
3×3和
1
×
1
1×1
1×1卷积核的网络模型: GoogleLeNet,网络层数达到了22层[3]。虽然GoogleLeNet的层数远大于AlexNet,但是它的参数量却只有AlexNet的
1
12
\frac{1}{12}
121,同时性能也远好于AlexNet。在ImageNet数据集分类任务上,GoogleNet取得了6.7%的Top-5错误率,比VGG16在错误率上降低了0.7%。
GoogleLeNet网络采用模块化设计思想,通过大量堆叠Inception模块,形成了复杂的网络结构。如下图所示,Inception模块的输入为
X
\boldsymbol X
X,通过4个子网络得到4个网络输出,在通道轴上面进行拼接合并,形成Inception模块的输出。这4个子网络是:
- 1 × 1 1×1 1×1卷积层。
- 1 × 1 1×1 1×1卷积层,再通过一个 3 × 3 3×3 3×3卷积层。
- 1 × 1 1×1 1×1卷积层,再通过一个 5 × 5 5×5 5×5卷积层。
-
3
×
3
3×3
3×3最大池化层,再通过
1
×
1
1×1
1×1卷积层。
GoogleLeNet的网络结构如下图所示,其中红色框中的网络结构即为上图所示的网络结构。