【深度学习】Inception的前世今生(三)--Inception V3

来源:互联网 发布:docker hub ubuntu 编辑:程序博客网 时间:2024/04/27 19:39

论文题目:《Rethinking the Inception Architecture for Computer Vision》
论文链接:https://arxiv.org/abs/1512.00567

自从2014年GoogLeNet在ImageNet上,取得了第一名的成绩后,Inception结构就开始吸引到人们的关注。Inception在参数量上远小于AlexNet,且错误率在Top5上却只有6.66%。然而由于Inception结构需要对参数进行小心调整(由于用的是multi-scale data training),在可移植性上一直被VGG超越。因此在重新调整GooLeNet上,google也花了不少心思。

Still, the complexity of the Inception architecture makes it more difficult to make changes to the network. If the architecture is scaled up naively, large parts of the computational gains can be immediately lost. Also, [20] does not provide a clear description about the contributing factors that lead to the various design decisions of the GoogLeNet architecture. This makes it much harder to adapt it to new use-cases while maintaining its efficiency.

在本篇rethinking Inception上,作者给出了几种在Inception结构上的调试方法:

  1. 避免表示瓶颈,尤其是网络结构的前部分。在early in network处,避免过多的压缩信息流。总体上,随着网络由浅至深,特征map将会不断减小,因此也不能仅仅通过维度来表示信息的多少。因为这些信息已经抛弃了相关结构等重要因素。
  2. 高维度特征在网络局部处理更加容易。在卷积网络中增加非线性可以解耦合特征,训练更快
  3. 在空域整合中,低纬度的特征并不会损失多少表现力。在进行大尺度卷积(3x3)时,对输入进行降维,这样不会带来严重影响。考虑到这些信号容易压缩,降维会加速学习过程
  4. 平衡深度和宽度,即使两者都能带来性能上的改善,但要注意computation budget.


Factorizing Convolutions With Large Filter Size

文章认为对大尺度的卷积核可以进一步进行分解,并且可以将这些计算量省下来增加filters bank的大小,因此可更快的训练网络。
将5x5的卷积核可以分解成两个3x3的卷积核,可以得到更少的参数,

这里写图片描述

其实有个问题,那就是5x5被分解成两个3x3卷积核后,中间到底要不要加上非线性激活函数?
作者进行了实验:
这里写图片描述

结果证明加上relu总比不加好,

We attribute this gain to the enhanced space of variations that the
network can learn especially if we batchnormalize [7] the output
activations

这里写图片描述


Factorizing into smaller convolution

既然5x5,7x7可以由stack 3x3来表示,那么是不是可以分解成更小的卷积核呢?是否可以用2x2来进行表示呢?
然而本文表明用非对称的卷积核,可能能更少的减少参数量。
3x3用2个2x2表示,也只能减少11%的参数量。

事实上,我们可以分解nxn的卷积,通过1xn+nx1表示。
这里写图片描述

注意:
作者指出在前期不要对卷积核不要进行拆解,个人估计前期的网络可能需要更compact的特征。

In practice, we have found that employing this factorization does not work well on early layers, but it gives very good results on medium grid-sizes (On m×m feature maps, where m ranges between 12 and 20). On that level, very good results can be achieved by using 1 × 7 convolutions followed by 7 × 1 convolutions.

这里写图片描述


Utility of Auxiliary Classifiers

GoogLeNet引入了附加分类器来提升网络的收敛,原始动机是将有用的梯度推到较低的层,并通过在非常深的网络中对抗消失的梯度问题来提高训练的收敛性。但Lee 发现附加分类器可以促进更稳定的学习和更好的收敛。
但是本文却发现附加分类器好像并没有提升收敛性在前期训练过程中,但是在训练后期,带有附加分类器比不带附加分类器的网络高出一点点水准(a slightly higher plateau)。
但作者发现,去除两个附加分类器中的lower auxiliary branch似乎并不会在最后网络中产生不利影响。作者认为,附加分类器看起来更像一个regularizer。


Efficient Grid Size Reduction

卷积网络用了一些pooling来减少特征map的大小,由于卷积网络用来挖掘特征的不变性。但是为了避免出现表达瓶颈,在pooling之前,filters的数目需要expanded。
举个例子: dxd的grid with k filters, 我们想要得到d/2 x d/2的grid上with2k filters。
1.如果我们用stride为1 的conv + pooling, 我们的计算量则为2(d^2)(k^2).
2. 如果我们先pooling,再采用2k filters, 那么我们计算量则在2(d/2)^2*(k)^2。
后者的计算量是前者的1/4,但是会出现表达瓶颈。
这里写图片描述

于是作者建议改为下图模式:
这里写图片描述


Inception v2
总体的架构如下:
这里写图片描述


Model Regularization via Label Smoothing

考虑对标签进行连续化操作:

这里写图片描述

真实标签为:

这里写图片描述

然后通过交叉熵来定义损失函数。
这里写图片描述

由于交叉熵可微,则导数为:
这里写图片描述
而且该导数有界,[-1,1]

先考虑一个特殊情况,对单类labely进行二分类,q(y)=1 and q(k)=0。在这种情况下,minimize交叉熵就等同于对真实label求最大似然估计。
对特定输入x,真实label y。如果有一类接近于真实label的数据特别多,远远高于其他数据,这将会造成两个问题:
1)如果一个模型在对训练数据中,都得到很高的似然估计值,这显然容易过拟合,不适合泛化。
2)模型适应能力降低。
造成这两个问题的原因为:模型对自己的预测太过于有信心。

于是本文作者提出了一种想法,想打击下模型的学习信心。
(类似于平时我们考试每次100分,在大型考试的时候,老师总会泼下凉水的意思,有利于发挥??)

在原来的基础上,进一步考虑label的分布u(k),一个平滑项cathy.
则改变训练得到的label distribution:

这里写图片描述

其中u(k) 为label的分布,一般考虑为均匀分布,则u(k)=1/k

当作者参加ImageNet的时候,发现采用正则化能提高0.2%的accuracy.


实验
这里写图片描述

这里写图片描述