本文最后更新于:2020年9月19日 上午

本次主要对GoogLeNet系列的学习进行完善,学习了其Inception V2、V3、V4版本。(注:此处对GoogLeNet版本的划分以v4版论文中的划分为标准。v2版本为Batch Normalization的论文。此前作者把在《Rethinking the Inception Architecture for Computer Vision》提出的网络结构叫做v2,此处将其称为v3。)

参考文献:

[1] Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[J]. arXiv preprint arXiv:1502.03167, 2015.

[2] Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the inception architecture for computer vision[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 2818-2826.

[3] Szegedy C, Ioffe S, Vanhoucke V, et al. Inception-v4, inception-resnet and the impact of residual connections on learning[J]. arXiv preprint arXiv:1602.07261, 2016.

1.Batch Normalization(GoogLeNet Inception V2)

Inception V2相比Inception V1进行了如下改进:

  • 提出Batch Normalization,加快模型训练速度;
  • 使用两个3x3的卷积代替5x5的大卷积,降低了参数数量并减轻了过拟合;
  • 增大学习速率并加快学习率衰减速度以适用BN规范化后的数据;
  • 去除Dropout并减轻L2正则化(因BN已起到正则化的作用)以加快训练速度,并且不会产生过拟合;
  • 更彻底地对训练样本进行打乱(可以防止同一个例子一起出现在一个mini-batch中);
  • 减少数据增强过程中对数据的光照扭曲(因为BN训练更快,每个样本被训练的次数更少,通过更少地扭曲它们,可以让训练器关注更多的“真实”图像)。
  • 去除 LRN(Local Response Normalization)即局部响应归一化,LRN函数最早的出现在AlexNet,其类似Dropout的功能,其防止数据过拟合而提出的一种处理方法。

经过以上改进之后,Inception V2在达到Inception V1的准确率时快了14倍,并且模型在收敛时准确率的上限更高。

创新点:

1.吸收了VGGNet的优点,利用多个小尺度卷积代替一个大尺度卷积,节省计算量。

大尺寸的卷积核可以带来更大的感受野,但也意味着会产生更多的参数。InceptionV2将卷积核拆分:使用小的感受野代替大的感受野,v1版本中使用了5×5的卷积核,v2版本使用两个连续的3×3的卷积核替代它。这样保证了感受野的范围还减少了参数量。并且增加了网络的深度,使表达能力更强。

2.提出Batch Normalization方法

BN 是一个非常有效的正则化方法,可以让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高。BN 在用于神经网络某层时,会对每一个 mini-batch 数据的内部进行标准化(normalization)处理,使输出规范化到 N(0,1) 的正态分布,减少了 Internal Covariate Shift(内部协变量偏移)。BN的论文中提出,传统的深度网络再训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率解决这个问题。而对每一层使用BN之后,我们就可以有效的解决这个问题,学习速率可以增大很多倍,达到之前的准确率所需要的迭代次数只有1/4,训练时间大大缩短。而且还可以继续训练,最终超过Inception V1。

img

总结:

  • 使用较大的学习率而不用关心梯度爆炸或消失等问题。
  • 降低了模型效果对初始权重的依赖
  • 作为一个正则化器,在某些情况下不需要Dropout这种降低收敛速度的方法,从而加速收敛。
  • 即使不适用ReLU也能缓解激活函数饱和的问题。
  • 能够学习到当前层到下一层的分布缩放系数(包括scaling γ和shift β)

2.GoogLeNet Inception V3

文章的第一部分提出了四个网络结构设计准则:

  • 避免特征表示瓶颈,尤其在网络的前若干层。
    • 神经网络层与层之间进行信息传递时,要避免极端压缩,即数据的尺寸不能减小的太快。(feature map的大小从输入到输出随着层数的加深逐步变小,通道数量逐渐增加,这个变化过程一定要缓慢的柔和的变小)
  • 更高维度的表示在网络中更容易局部处理。
    • 在卷积网络中增加每个图块的激活允许更多解耦的特征。所产生的网络将训练更快。
  • 空间聚合可以在较低维度嵌入上完成,而不会在表示能力上造成许多或任何损失。
  • 平衡网络的宽度和深度

第二部分提出了网络的改进方法:

  • 卷积分解

Inception V3 学习了 VGG 用两个3x3的卷积代替5x5的大卷积,在降低参数、保持感受野范围的同时建立了更多的非线性变换,使得 CNN 对特征的学习能力更强。如此可以有效地只使用约(3x3 + 3x3)/(5x5)=72%的计算开销。大量实验表明,这样做并不会造成表达能力的下降,增加了网络的非线性,可以处理更多、更丰富的空间特征,增加了特征多样性。

imgimg

  • 非对称分解

GoogLeNet团队考虑了用3个3x1的卷积取代3x3的卷积,即任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。在网络的前期使用这种分解效果并不好,在中度大小的特征图(大小在12-20之间)上使用的效果较好。

  • 利用辅助分类器

作者认为辅助分类器起着正则化项的作用。辅助分类器最初的动机是将有用的梯度推向较低层,使其立即有用,并通过抵抗非常深的网络中的消失梯度问题来提高训练过程中的收敛。作者发现辅助分类器在训练早期并没有改善收敛,在接近训练结束时使用辅助分类器的网络达到了更稳定的水平。

  • 通过标签平滑进行模型正则化(LSR)

对于多分类的样本标注一般是one-hot的,例如[0,0,0,1],使用类似交叉熵的损失函数会使得模型学习中对ground truth标签分配过于置信的概率,并且由于ground truth标签的logit值与其他标签差距过大导致,出现过拟合,导致降低泛化性。一种解决方法是加正则项,即对样本标签给个概率分布做调节,使得样本标注变成“soft”的,例如[0.1,0.2,0.1,0.6],作者发现这种方式在实验中降低了top-1和top-5的错误率0.2%。

  • 降低特征图大小

通常有两种方法可以降低特征图大小:先池化再做Inception卷积、先做Inception卷积再做池化。先池化会造成特征却是,先做Inception计算量很大。为了同时保持特征表示,并且降低计算量,Inceptionv3采用两个并行化的模块来降低计算量(卷积、池化并行执行,最后合并)

img

3.GoogLeNet Inception V4

Inception V4 相比 V3 主要是结合了微软的 ResNet,ResNet主要关注加大网络深度后的收敛问题,而Inception更关注特征维度上的利用。

Inception结构有着良好的性能,并且计算量低。作者将Inception 结构与Residual Connection相结合,显著加速了训练过程。具有三个残差连接和一个Inception-v4的网络,在ImageNet classification(CLS)挑战的测试集上实现了3.08%的top-5错误率。

残差模块的缩放:

作者发现,如果滤波器数量超过1000,残差网络开始出现不稳定,同时网络会在训练过程早期便会出现“死亡”,意即经过成千上万次迭代,在平均池化之前的层开始只生成0。通过降低学习率,或增加额外的batch-normalization都无法避免这种状况。

作者给出的解决办法是,在Residual function之后、激活函数之前,使用一个activation scaling的操作稳定训练,其中缩放因子为0.1到0.3。

总结:

本文提出了三种新的网络结构:

(1)Inception-ResNet-v1:混合Inception版本,它的计算效率同Inception-v3;

(2)Inception-ResNet-v2:更加昂贵的混合Inception版本,同明显改善了识别性能;

(3)Inception-v4:没有残差链接的纯净Inception变种,性能如同Inception-ResNet-v2。作者研究了引入残差连接如何显著的提高inception网络的训练速度。而且仅仅凭借增加的模型尺寸,最新的模型(带和不带残差连接)都优于以前的网络。