【论文】Szegedy C , Liu W , Jia Y , et al. Going Deeper with Convolutions[J]. 2014.(pdf)
【新颖点】
- 保证算力的情况下增加宽度和深度
- 宽度:利用 Inception 结构同时执行多个网络结构
- 深度:利用辅助分类器防止梯度消失
Inception V1
我们先说一下为什么要提出 Inception
在早期,大家都尽可能的想加深加宽网络,但是一味的增加还是有很多问题:
- 参数越多,计算复杂复杂度越大
- 网络越深,越容易出现梯度弥散的问题
于是,Google 研究人员提出了 Inception 的方法——将多个卷积或池化操作放在一起组装成一个网络模块,设计神经网络时以模块为单位去组装整个网络。Inception 的主要思路是怎样用密集成分来近似最优的局部稀疏结构,于是作者首先提出了如下图所示的基本结构
- 采用不同带下的卷积核意味着不同大小的感受野,最后通过拼接将不同程度的特征进行融合
- 卷积核采用 1、3 和 5,主要是为了方便对齐。设定卷积步长为 1 之后只要分别设定 padding 为 0、1、2 就好了,卷积之后便可以得到相同维度的特征
- 介于 pooling 的表项不错,Inception 中嵌入了对应的模块
- 网络越往后走,特征越家抽象,而且每个特征所设计的感受野也更大了,因此随着层数的增加,3×33\times33×3 和 5×55\times55×5 卷积核的比例也要增加
但是这种叠加不可避免的使得 Inception 模块的输出通道数增加,这就增加了 Inception 模块中每个卷积的计算量,尤其达到网络的后面。为此,作者采用了 1×11\times11×1 卷积核来进行降维,改进后的 Inception 模块如下
值得注意的是 1×11\times11×1 卷积的位置
- 1×11\times11×1 卷积是在最大池化层之后,而不是之前,因为池化层是为了提取图像的原始特征而存在,一旦它接在 1×11\times11×1 卷积之后就失去了最初的本意
- 对于 3×33\times33×3 和 5×55\times55×5 卷积,1×11\times11×1 卷积在他们之后,原因是如果反过来则起不到降维的作用
网络结构
Inception V1 是一个 22 层的深度网络,如果考虑池化层的话是 29 层。网络具有三组 Inception 模块,分别为
- inception(3a) / inception(3b)
- inception(4a) / inception(4b) / inception(4c) / inception(4d) / inception(4e)
- inception(5a) / inception(5b)
三组 Inception 模块被池化层分隔
关于整个网络结构,我们给出下面几点说明,
- 网络最后采用了 average pooling 来替代全连接层,该想法来自 NIN,事实证明这样可以提高 0.6% 的准确率
- 虽然移除了尾部过多的全连接层,但是网络中依然使用了 Dropout(在 avg pooling 之后,FC 之前)
- 为了缓解梯度消失的问题,网络额外增加了 2 个辅助的 softmax 分类器用于向前传导梯度,我们将这两个称为辅助分类器。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类器中,这样就相当于做了模型融合,同时给网络增加了反向传播的梯度信号
我们以 inception(3a) 为例子解释一下网络的参数
辅助分类器
在 inception(4a) 和 inception(4d) 之后分别有两个辅助分类器,它们具有相同的结构:
- 5×55\times55×5、步长为 333 的平均池化层
- 1×11\times11×1、输出通道为 128128128 的卷积层
- 102410241024 个神经元的全连接层
- 70%70\%70% Dropout 的全连接层
- softmax 层
在训练期间,两个辅助分类器的损失函数的权重是 0.3,它们的损失被叠加到网络的整体损失上。在测试时,这两个辅助分类器丢弃不用