Inception-V2,V3 - 2015

Inception-V2,V3

1.Introduction

2012年,"AlexNet"获得了冠军,并且发现AlexNet成功地适用于很多机器视觉任务,目标检测,图像分割,人体动作识别,视频分类,目标跟踪,图像超分辨率等。
2014年,更深更宽的"VGGNet"和“GoogLeNet”在比赛中均取得了非常好且相近的成果。有趣的是,在分类上的突出表现同样也适用于其他领域,这说明深度神经网络模型结构上的提升能够有效的转换为大部分机器视觉任务的效果提升,尤其是依赖于更复杂更高层的视觉特征的任务。
尽管VGGNet有着非常吸引人的特点:结构简单,但是同时这也带来了一个问题,网络需要大量的运算。然而GoogLeNet却在严格的存储和计算容量预算下依然取得了很好的成果。例如,GoogleNet只用到了大约5M的参数,而AlexNet用到了大约60M的参数,而VGGNet则是用到了大约140M的参数。从这里看出GoogleNet的参数个数远远小于另外两个网络。
Inception的计算量也是远小于VGGNet和其他一些性能更好的网络。这就使得Inception网络能够运用于大数据环境,大量的数据需要在有限的存储和计算容量下进行处理,如mobile vision setting。
但是Inception网络本身结构的复杂性使得我们很难针对网络结构进行调整。并且介绍Inception的文章也没有对有助于对GoogleNet进行变体的因素进行详细介绍。那么本篇文章,我们会介绍一些普世的规则以及一些优化办法来让我们能够有效的增大我们的网络。尽管这些规则不仅限于Inception类的网络,但是我们会以Inception作为上下文,因为这些规则能够很好地与Inception结构相匹配,并且在这样的结构中也容易观察。这都是因为得益于Incetpion模块中有使用大量的降维和并行运算结构。

2.General Design Principles

这里我们将要介绍一些设计技巧,这些技巧来自于对多种结构的CNN进行大量实验得出来的。当然这些技巧在当下来说具有一定的猜想性,还是需要未来很多的实验来证明它们的有效性。而且如果不合理运用这些技巧可能会带来网络严重的性能下降。

  1. 避免特征表达瓶颈,尤其是在网络的浅层。前向网络可以被表征为一个从输入层到分类器的无环图。这就明确了信息流的方向。对于任何隔断输入和输出的截断面,我们都可以得到该截断面所通过的信息量。我们需要避免信息极度压缩带来的瓶颈。一般而言,从输入层到输出层特征维度大小应该缓慢下降。理论上,信息内容不仅仅来自于特征表达的维度,因为它丢掉了很多重要因素如互相关结构;维度仅仅提供信息的一个粗略估计。
  2. 高维度特征表达在网络的局部中处理起来更加容易。增加CNN每个神经元的激活值会更多地解耦合特征,这会使得网络训练更快。
  3. 空间信息聚集可以通过低维度嵌入来完成,而且在几乎不损失特征表达能力的情况下。例如,在实施较大卷积核(3x3)时,我们可以先对输入特征进行降维,不会造成太大影响。我们猜测这个原因是如果输出被运用在空间信息聚集的上下文环境中,相邻神经元的强相关性会使得在降维过程中只有很少的信息丢失。考虑到这些信号很容易被压缩,降维将会加快学习。
  4. 平衡网络的宽度和深度。网络的最优performance可以通过平衡每个stage的卷积核数量和网络深度来达到。同时增加网络的深度和宽度会有助于得到更高性能的网络。然而,对于固定的计算资源预算,最优的提升都来自于深度和宽度的同时增大(也就是一味强调网络深度或者宽度是不行的)。只有平衡好深度和宽度,才能取得最优。
    尽管这些规则听起来好像挺对,但是它们都还不够直接,以至于很难使用他们来提高网络性能。

3.Factorizing Convolutions with Large Filter Size

GoogLeNet很多的提升都来自于大量降维模块的使用。这可以被视为一种特殊的有效的对于卷积的因式分解。在一个视觉网络中,邻近的激活值输出往往是高度互相关的。因此,我们希望这些激活值可以在聚合之前就进行降维,这应该可以得到相似的局部特征表达。
这里我们探索了在各种结构中利用其他方式来进行卷积因式分解,尤其是为了增加计算的有效性。因为Inception网络是全连接卷积的,每个权重都对应于每个激活值的一次乘积操作。因此,任何计算开销的减少都将意味着训练参数的减少。这意味着在适当的因式分解下,我们可以得到更多解耦合的参数,这会加快我们的训练。同时,我们可以使用节约下来的计算和存储容量来增加卷积核数量提高网络性能。

Factorization into smaller convolutions

在VGGNet中,这个思想被提到过,也就是大卷积核可以用多层小卷积核来替代,如5x5可以被两层3x3代替,在感受野没有变化的情况下,减小了参数。那么原来的Inception结构就变为下图。
这里写图片描述
那么这个代替方案,确实减小了参数数量,同时也减小了计算量。但是,我们还是要提出两个疑问:

  1. 这样的方案会影响特征的表达吗?也就是是否会降低模型的特征表达能力。
  2. 如果我们主要目的是因式分解计算中的线性部分,那么是否在第一个3x3层使用线性激活(依然以5x5来举例)?
    为了验证,我们进行了对照实验,一组采用两层ReLU,一组采用linear+ReLU。我们发现linear+ReLU的效果总是低于两层ReLU。我们将这种差距归结于多一层的非线性激活可以使网络学习特征变体的更为复杂的空间,尤其是当我们对激活输出使用了batch-normalize(这与VGG中提到的思路相同,也就是多一次非线性,增加网络的特征表达能力)。
Spatial Factorization into Asymmetric Convolutions

经过上面的分析,我们发现大于3x3的卷积核似乎都不怎么有用了,因为它们总能够被分解为一系列的3x3卷积层。仍然我们要问是否可以分解的更小呢,比如2x2卷积核。然后,我们发现有比2x2卷积核更好的就是使用非对称卷积,比如nx1。例如使用3x1卷积在跟上一个1x3卷积等同于一个两层网络覆盖与3x3卷积相同的感受野。如下图。
这里写图片描述
可以发现尽管是两层,同样的输出大小,参数个数少了33%。通过比较,将3x3因式分解为两个2x2,仅仅只减少了11%的计算量。
理论上,我们可以更进一步,任意的nxn卷积都可以被1xn加上nx1卷积核来代替,而且随着n的增大,节省的参数和计算量将激增。实际运用中,我们发现这样的因式分解在网络的浅层似乎效果不佳,但是对于中等大小的特征图却有着非常好的效果(12~20大小的特征图)。

4.Utility of Auxiliary Classifiers

GoogLeNet引入了辅助分类器这一个概念来帮助非常深的网络更好的收敛。它的原本意图是在网络训练时,推动有用的梯度向网络浅层传递并让它们能够立马起到作用提高收敛性来对抗深度网络的梯度下降问题。另外Lee等人也提到辅助分类器有助于更稳定的学习和更好的收敛。有趣的是,我们发现辅助分类器在训练早期并不会推动收敛:在训练中在到达很高accuracy之前,有没有辅助分类器的存在似乎并不影响。在训练的末期,带有辅助分类器的网络就会超过没有辅助分类器的网络来到一个更高的平台。
GoogLeNet在网络的两个不同的地方设置了辅助分类器。将更为浅层的那个辅助分类器移走对于网络最后的结果没有任何相反的作用(也就是这个分类器没用)。结合前面提到的,这说明GoogLeNet原本的假设——这些辅助分类器能够帮助低层特征训练,是错误的。我们认为辅助分类器其实就是起到了泛化的作用,它就是一个正则化方法。这个说法可以通过下面这个事实来证明,网络的主分类器能够取得更好的结果如果辅助分类器采用batch-normalized或者引入dropout。这也同时为batch normalization是个正则化方法的猜想提供了一点微薄的支持。

5.Efficient Grid Size Reduction

传统的卷积网络会使用一些pooling操作来减少特征图的大小。为了避免特征表达瓶颈,在进行pooling之前,都会扩大网络特征图的数量。例如,现在有K个dxd的特征图,如果想要变成2K个d/2xd/2的特征图,那我们首先需要进行一个步长为1,带有2K个卷积核的卷积,然后再进行池化。这意味着总共的计算开销将被在较大的特征图上进行昂贵的卷积所主导,约 2 d 2 k 2 2d^2k^2 次操作。另一种方式呢,就是先池化后卷积,这样的话,计算量就变为 2 ( d / 2 ) 2 k 2 2(d/2)^2k^2 ,变为刚才的1/4。然后这会引入表达瓶颈因为特征的整体维度由 d 2 k 2 d^2k^2 变成了 ( d / 2 ) 2 k 2 (d/2)^2k^2 ,这导致网络的表达能力减弱。明显这样做显然是不行的,于是我们想到一种办法能够减少计算开销而且也能避免表达瓶颈的办法。也就是使用两个并行的步长2的模块:池化和卷积。
这里写图片描述
左图为改进的Inception模块可以同时减小特征图大小并且增加特征图数量,这样在减少计算量的同时也避免了表达瓶颈,符合上面提出的原则1。右图是同样的操作,不过它从特征图大小的视角出发。

6.Inception-v2

这里我们将结合上面提到的点提出一个新的结构。这个网络的结构如下表。每层的输出大小就是下一层的输入大小。我们在Inception模块间有使用到Efficient Grid Size Reduction。然后对于padded的卷积层会进行0-padding。在Inception结构内部也是会进行0-padding来保证grid大小不变,所有其他的层都不使用padding。这些卷积核堆的size都是根据principle 4来进行选取的。
这里写图片描述

figure 5是引入小卷积核,这里用到了principle 3。
这里写图片描述

figure 6是引入非对称卷积核,在我们的结构里, n = 7 n=7 ,这里也用到了principle 3。
这里写图片描述

figure 7是用来改增大特征图数量的Inception模块,这个结构被用在最粗糙(8x8)的特征图上来获取更高维度的表达,这里用到了principle 2。这个结构仅仅使用在网络的最高层(coarsest grid,特征图已经衰减到最小),因为在这层当局部处理(通过1x1卷积)相对于空间信息聚合的比例增加的时候生成高维稀疏表达就变得最为重要的。
这里写图片描述
对于网络的Inception部分,3层figure5+5层figure6+2层figure7,只有模块交接处会进行Efficient Grid Size Reduction。
然而,我们发现网络的性能对于各种变体来说是相对稳定的,只要遵循了最开始提到的principles。尽管我们的网络有42层,但是计算量却仅仅比GoogLeNet高了2.5倍。

辅助分类器如下图,加在最后的17x17层的后面。
这里写图片描述

7.Model Regularization via Label Smoothing

这里我们提出一个通过估计训练过程中label-dropout的边缘化效果来泛化分类器。
对于每个训练样本x,我们的模型计算它作为每个标签k的可能性, k { 1... K } : p ( k x ) = e x p ( z k ) i = 1 K e x p ( z i ) k \in \{1...K\}: p(k|x) = \frac{exp(z_k)}{\sum^K_{i=1}exp(z_i)} 。这里 z i z_i l o g i t s logits 或者没有归一化的对数概率。考虑训练样本的真实分布为 q ( k x ) q(k|x) ,然后将其归一化使得 k q ( k x ) = 1 \sum_kq(k|x) = 1 。为了简便,我们忽略对于样本x的 p p q q 相关性,也就是互相独立。我们定义样本的损失函数为交叉熵: l = k = 1 K l o g ( p ( k ) ) q ( k ) l = -\sum^K_{k=1}log(p(k))q(k) 。最小化交叉熵就相当于最大化标签的对数概率,这个标签是根据样本的真实分布 q ( k ) q(k) 选择出来的。交叉熵对于 z k z_k 来说是可导的,因此可以使用梯度训练。梯度表示为 l z k = p ( k ) q ( k ) \frac{\partial l}{\partial z_k} = p(k) - q(k) 被限制在-1到1之间。
考虑只有一个真实标签y的情况,也就是 q ( y ) = 1 q(y)=1 并且对于所有$k \neq y q(k)=0$。在这种情况下,最小化交叉熵就等价于最大化正确标签的对数概率。对于带有标签y的样本x,对数概率最大化为 q ( k ) = δ k , y q(k)=\delta_{k,y} δ k , y \delta_{k,y} 是Dirac delta,只要当k和y相等时才等于1,其他时候都为0。这个最大值对于有限的 z k z_k 来说是很难达到的,但是当 z y z k z_y\gg z_k 对于所有 k y k \neq y ,也就是对应正确标签的logits要远远大于别的logits。然后这会带来两个问题。

  1. 会带来过拟合:如果模型学会对每个训练样本都将所有的概率赋予真实标签,那么这将不能保证泛化效果。
  2. 这会激励最大logit与其他logits的差距加大,结合有范围的梯度 $ \frac{\partial l}{\partial z_k}$ ,这会降低模型的适应能力。直观的理解就是,模型会过于相信自己的预测。
    我们提出一种鼓励模型不要过于自信的机制。当然这似乎对于我们的目的——最大化训练标签的对数概率有相反的作用,但是它确实会帮助泛化我们的模型并且使其适应性更强。这个方法很简单。考虑一个独立于训练样本x的标签分布 u ( k ) u(k) ,以及一个平滑因子 ϵ \epsilon 。对于一个真实标签为y的训练样本,我们将其本来的标签分布 q ( k x ) = δ k , y q(k|x)=\delta_{k,y} 置换为 q ( k x ) = ( 1 ϵ ) δ k , y + ϵ u ( k ) q'(k|x)=(1-\epsilon)\delta_{k,y} + \epsilon u(k) 这是利用 ϵ \epsilon q ( k x ) q(k|x) u ( k ) u(k) 做一个结合。这个关于标签k的分布可以被看作由以下步骤获得:首先,将设置标签为真实值 k = y k=y ;然后以概率 ϵ \epsilon ,从分布 u ( k ) u(k) 中选出样本来代替k。我们选择使用标签的先验分布来作为 u ( k ) u(k) ,那么在我们的实验中,我们使用均匀分布作为标签的先验 u ( k ) = 1 / K u(k)=1/K ,那么公式就变为 q ( k x ) = ( 1 ϵ ) δ k , y + ϵ K q'(k|x)=(1-\epsilon)\delta_{k,y} + \frac{\epsilon}{K} 我们将这个对于真实标签分布所做的改变叫做label-smoothing regularization,或者LSR。
    注意到LSR所达到的目的是防止最大logit与其他logits的差距过大。确实,如果这个发生的话,那么 q ( k ) q(k) 会非常接近于1,而别的将接近于0。而使用了LSR的话,所有的 q ( k ) q'(k) 都会有一个正的下限值。
    另一个关于LSR的解释来自于对于交叉熵的考虑: H ( q , p ) = k = 1 K log p ( k ) q ( k ) = ( 1 ϵ ) H ( q , p ) + ϵ H ( u , p ) H(q',p)=-\sum^K_{k=1}\log p(k)q'(k)=(1-\epsilon)H(q,p)+\epsilon H(u,p) 因此,LSR等价于使用多个交叉熵的结合 H ( q , p ) H(q,p) H ( u , p ) H(u,p) 来代替单一交叉熵 H ( q , p ) H(q,p) 。第二项loss是以 ϵ 1 ϵ \frac{\epsilon}{1-\epsilon} 的相对权重来惩罚了预测的样本的分布 p p 与 样本先验分布 u u 的偏差。注意到这个偏差可以使用KL divergence来等价,因为 H ( u , p ) = D K L ( u p ) + H ( u ) H(u,p)=D_{KL}(u||p) + H(u) 比并且 H ( u ) H(u) 是固定的。当 u u 是均匀分布, H ( u , p ) H(u,p) 就是测量预测分布 p p 与均匀分布的非相似性,同样这个也可以通过负熵 H ( p ) -H(p) 来测量(虽然并不等价)。我们并没有实验这种方式。
    在我们的ImageNet实验中, K = 1000 K=1000 ,我们使用 u ( k ) = 1 / 1000 u(k)=1/1000 ϵ = 0.1 \epsilon=0.1 。对于ILSVRC 2012,我们在top-1和top-5error熵都取得了绝对的0.2%的提升。

8.Training Methodology

早期的我们的实验采用带有0.9衰减的momentum随机梯度下降,但是我们最好的模型是通过0.9衰减和 ϵ = 1.0 \epsilon=1.0 的RMSProp实现的。使用0.045的学习率,每两个epoch以0.94的指数率衰减。

9.Performance on Lower Resolution Input

视觉网络一个典型的应该就是目标检查后的分类。这就需要对包含了一个单独目标以及一些背景的一个相对比较小的图片patch进行分析。这个任务就是决定图片patch中心是否对应了某个目标并且决定这个目标属于哪一类。这个任务的挑战在于往往这些目标都是较小的而且图片patch也是低像素的。这也就引入了一个问题,如何恰当地处理低像素的输入。
大家共同的认知是如果模型的感受野的像素越高那么越会有更加好的识别效果。然而,非常重要的一点是我们要区分第一层感受野像素的增加带来的效果以及更大模型的容量和计算量带来的效果。如果仅仅只改变输入的像素而不调整模型的话,我们会使用一个计算量小的模型去处理一个困难的问题,当然,显然这样是不行的,因为计算效果下降了。为了能够较为准确的分析这个问题:当计算效果不变的时候,到底多高的输入像素会帮助更大呢?一个简单的方法来保证计算效果不变就是降低前两层的步长,或者直接取消网络的第一个pooling层。于是我们做了如下实验:

  1. 299x299的感受野,在第一层(步长2)之后跟上最大池化。
  2. 151x151的感受野,在第一层(步长1)之后跟上最大池化。
  3. 79x79的感受野,在第一层(步长1)之后不跟最大池化。
    那么这三个网络都有几乎相同的计算开销。应该第三个网络稍微开销小了一点,但是pooling层的计算量是很小的。对于每个网络都训练到收敛,并且使用ImageNet ILSVRC 2012分类参照的验证集来测试得到下表
    这里写图片描述
    尽管低像素花了更长的时间收敛,但是结果还是和高像素很相近。
    然而,单纯根据输入的像素来降低网络大小,网络的效果就会非常差。那么结构上表的结果,我们可以发现,对于小物体的识别,要考虑使用一个精心设计的 high-cost low resolution network。

10.Experimental Results and Comparisons

下表展示了第6部分里面提到的结构的实验结果。每一个Inception-v2结构所做的改变都是叠加的(也就是每往下一个Inception-v2,都带有上面Inception-v2的特点)。Label Smoothing 在第7部分提到。Factorized 7x7 是将开始的7x7卷积分解为一系列3x3卷积(相较于GoogLeNet)。BN-auxiliary 指的对于辅助分类器的全连接层也使用BN。然后我们将最后一行的Inception-v2定义为Inception-v3。与GoogLeNet,对于Inception-v3采取复杂的裁取策略,也会提高识别率。(具体裁取参照GoogLeNet的144)
这里写图片描述

总结

本文核心在于传授一些帮助我们有效扩大网络的准则,一共提到了四点,不在这里详述(参考第2部分),借由GoogLeNet网络的Inception结构向我们详细阐述了这个四点,并且还因此提出了很多新的观点,非对称卷积进一步减小参数(只对中等大小的特征图有效12-20),辅助分类器的有效应用以及正确阐释(是一种泛化手段),有效的特征图降维将卷积和池化的串行变为并行进一步减少计算量,Label Smoothing(新的泛化手段),以及对于低像素图片分类的思考。那么最后看来其实本质上,第一是在减小参数和运算量让进一步扩大网络深度和宽度成为可能,第二就是采用多种泛化手段来提高网络性能。


小广告

淘宝choker、耳饰小店 物理禁止
女程序员编码时和编码之余 都需要一些美美的choker、耳饰来装扮自己
男程序员更是需要常备一些来送给自己心仪的人
淘宝小店开店不易 希望有缘人多多支持 (O ^ ~ ^ O)
本号是本人 只是发则小广告 没有被盗 会持续更新深度学习相关博文和一些翻译
感谢大家 不要拉黑我 ⊙﹏⊙|||°
这里写图片描述

猜你喜欢

转载自blog.csdn.net/mike112223/article/details/78573890