Inceptionv3论⽂详解
原⽂地址:
论⽂⽬标:
⾼效增⼤⽹络,即通过适当的分解卷积和有效的正则化尽可能有效地利⽤所增加的计算。 Inception⽹络的缺点分析:
1.Inception架构的复杂性使得更难以对⽹络进⾏更改。如果单纯地放⼤架构,⼤部分的计算收益可能会⽴即丢失(计算效率⾼的优势⽴即降下来)。
2.缺少⼀个关于Inception⽹络的设计决策的明确描述。这使得它更难以在适应新⽤例的同时保持其效率。例如,如果认为有必要增加⼀些Inception模型的能⼒,将滤波器组⼤⼩的数量加倍的简单变换将导致计算成本和参数数量增加4倍。这在许多实际情况下可能会被证明是禁⽌或不合理的,尤其是在相关收益适中的情况下。
卷积⽹络通⽤设计原则的尝试提出(以下原则的效⽤是推测性的):
1.bottleneck(有信息丢失的操作类似下采样或者1*1的卷积)可以降维降低计算量,但是也会丢失信息,所以要合适地降,别降太猛丢信息了;
2.更⾼维度的特征表⽰,更稀疏,耦合更少,更好训练; 3.空间聚合可以通过低纬嵌⼊,不会导致⽹络表⽰能⼒的降低。例如在进⾏⼤尺⼨的卷积(如3*3)之前,我们可以在空间聚合前先对输⼊信息进⾏降维处理,如果这些信号是容易压缩的,那么降维甚⾄可以加快学习速度。可能是因为通道间信息相关性⽐较⾼。
4.平衡好⽹络的深度和宽度。通过平衡⽹络每层滤波器的个数和⽹络的层数可以是⽹络达到最佳性能。增加⽹络的宽度和深度都会提升⽹络的性能,但是两者并⾏增加获得的性能提升是最⼤的。
Inception⽹络改进步骤:
1.卷积的⼤滤波器尺⼨分解:
使⽤原因:
橡胶弹力球>标准车当量数GoogLeNet⽹络[20]的⼤部分初始收益来源于⼤量地使⽤降维。这可以被视为以计算有效的⽅式分解卷积的特例。⾄于为什么这么做可以(不会⼤量丢失信息造成效果变差),因为在视觉⽹络中,相近激活层的输出是⾼度相关的,所以,激活可以在聚合之前被减少。
分解得到更⼩的卷积核:
利⽤卷积结构和平移不变性原则可以实现两个卷积串联对⼀个⼤卷积的替换。工位管理系统
对5*5卷积的3*3替代:
Inception中对5*5卷积块的替换:
替换效果的分析:
替换后的好处:
通过相邻块之间共享权重(原来5*5个参数,现在3*3个参数,但是3*3个参数可以通过在5*5的区域内共享权重的滑动达到采集特征⽽⼜减⼩参数的⽬的)明显减少了参数数量。
替换的反思:
这样替换会不会导致任何表征⼒的丧失?
如果3*3对5*5的分解是⼀种线性关系的分解,那么我们分解之后的两个卷积层间使⽤的激活函数是不是保持线性激活更好?所以现在做实验看看到底分解的是不是线性关系:
结果表明,第⼀层使⽤线性激活函数反⽽有没Relu的效果好,所以可见分解的关系不是线性关系。
空间分解为不对称卷积:
思路由来:
分解3*3的卷积核有效果,那么继续往下分解成更⼩的呢?
使⽤不对称卷积:
不对称卷积的分通过使⽤⾮对称卷积,可以做出甚⾄⽐2×2更好的效果,即n×1。例如使⽤3×1卷积后接⼀个1×3卷积,相当于以与
罐笼防坠器3×3卷积相同的感受野滑动两层⽹络(参见图3)。如果输⼊和输出滤波器的数量相等,那么对于相同数量的输出滤波器,两层解决⽅案便宜33%。相⽐之下,将3×3卷积分解为两个2×2卷积表⽰仅节省了11%的计算量。所以,可以把卷积核分解到更⼩。
使⽤过程的⼀个注意点:
对中等Fm使⽤1×n卷积和后⾯接⼀个n×1卷积替换任何n×n卷积效果才⽐较好:
玻璃精雕机实际上,我们发现,采⽤这种分解在前⾯的层次上不能很好地⼯作,但是对于中等⽹格尺⼨(在m×m
特征图上,其中m范围在12到20之间),其给出了⾮常好的结果。在这个⽔平上,通过使⽤1×7卷积,然后是7×1卷积可以获得⾮常好的结果。
2.辅助分类器的使⽤(有进⼀步的发现):
原来辅助分类器的作⽤是克服梯度消失与提供正则化。我们现在有趣的⼀点发现是辅助分类器的作⽤在训练的末期才开始显现出来:
辅助分类器在训练早期并没有导致改善收敛:在两个模型达到⾼精度之前,有⽆侧边⽹络的训练进度看起来⼏乎相同。接近训练结束,辅助分⽀⽹络开始超越没有任何分⽀的⽹络的准确性,达到了更⾼的稳定⽔平。
从发现的结果我们推测:
1.辅助分类器有助于演变低级特征的推断可能是不正确的
2.相反,我们认为辅助分类器起着正则化项的作⽤。由于如果侧分⽀是批标准化的[7]或具有丢弃层,则⽹络的主分类器性能更好。这也为推测批标准化作为正则化项给出了⼀个弱⽀持证据。
3.在不引⼊表征瓶颈的情况下减⼩⽹格尺⼨(Fm的⼤⼩)
Inception结合传统⽅法:
使⽤池化操作来缩减Fm⽹格⼤⼩。为了避免表征瓶颈,在应⽤最⼤池化或平均池化之前,需要扩展⽹络滤波器的激活维度。如下所⽰,例如,开始有⼀个带有k个滤波器的d×d⽹格,如果我们想要达到⼀个带有2k个滤波器的d/2×d/2⽹格,我们⾸先需要⽤2k个滤波器计算步长为1的卷积,然后应⽤⼀个额外的池化步骤。总体计算成本由在较⼤的⽹格上使⽤2d2k2次运算的昂贵卷积⽀配.
另⼀种减⼩运算量的做法如下,先进⾏池化,再进⾏维度扩展。因此导致主要运算量为2(d/2)2k2次运算.运算量是上⾯⽅法的四分之⼀。
当然,这种⽅法是更不可取的,因为它违反了原则1,引⼊了表征瓶颈,减弱了⽹络的表现⼒。
提出新的减⼩Fm⽹格⼤⼩的⽅法(降低计算成本的同时避免表征瓶颈):
⽅法描述:
使⽤平⾏的步长为2的块,池化和卷积操作平⾏。达到减⼩⽹格与表征瓶颈的相互平衡。
另⼀种更直观的表⽰:
我们对单个样本计算每个标签的概率(这⾥,zi是对数单位或未归⼀化的对数概率):
审批流
考虑这个训练样本在标签上的实际分布q(k|x)(相当于已知的标签y),因此归⼀化后
为了简洁,我们不将p和q对样本x的依赖写出来。
如果我们⽤交叉熵定义样本损失的话,损失如下:
最⼩化交叉熵(前⾯有负号,所以是最⼤化标签的对数似然期望)等价于最⼤化标签对数似然期望,其中标签是根据它的实际分布q(k)选择的。交叉熵损失对于zk是可微的,因此可以⽤来进⾏深度模型的梯度训练。所以,梯度
它的范围在−1到1之间。
考虑单个真实标签y的例⼦,对于所有k≠y,有q(y)=1,q(k)=0。在这种情况下,最⼩化交叉熵等价于最⼤化正确标签的对数似然。对于⼀个特定的样本x,其标签为y,对于q(k)=δk,y,最⼤化其对数概率,δk,y为狄拉克δ函数,当且仅当k=y时,δ函数值为1,否则为0。如果对应实际标签的逻辑单元远⼤于其它的逻辑单元,那么对数概率会接近最⼤值(1)。
如果像上述这样表⽰损失(这也就是传统的交叉熵表⽰⽅法),会两个缺点:
1.它可能导致过拟合:如果模型学习到对于每⼀个训练样本,分配所有概率到实际标签上,那么它不能保证泛化能⼒。
2.它⿎励最⼤的逻辑单元与所有其它逻辑单元之间的差距变⼤,与有界限的梯度∂ℓ/∂zk相结合,这会降低模型的适应能⼒。直观上讲这会发⽣,因为模型变得对它的预测过于⾃信。如若标签中有错误的训练标签,那这种⾃信将对模型的训练很不利。
标签平滑正则化理论的正式提出:
所以,我们提出了⼀个⿎励模型不那么⾃信的机制。如果⽬标是最⼤化训练标签的对数似然,那这个机制可能不是想要的,但它确实使模型正规化并使其更具适应性。
这个⽅法很简单。考虑标签u(k)的分布和平滑参数ϵ,与训练样本x相互独⽴。对于⼀个真实标签为y的训练样本,我们⽤
代替标签分布q(k|x)=δk,y。其由最初的实际分布q(k|x)和固定分布u(k)混合得到,它们的权重分别为1−ϵ和ϵ。这可以看作获得标签k的分布如下:⾸先,将其设置为真实标签k=y;其次,⽤分布u(k)中的采样和概率ϵ替代k。我们建议使⽤标签上的先验分布作为u(k)。在我们的实验中,我们使⽤了均匀分布u(k)=1/K,以便使得
我们将真实标签分布中的这种变化称为标签平滑正则化,或LSR。LSR实现了期望的⽬标,阻⽌了最⼤的逻辑单元变得⽐其它的逻辑单元更⼤。实际上,如果发⽣这种情况,则⼀个q(k)将接近1,⽽所有其它的将会接近0。这会导致q′(k)有⼀个⼤的交叉熵,因为不同于
q(k)=δk,y,所有的q′(k)都有⼀个正的下界(这⾥主要指其他的⾮正确标签的q′(k))。
LSR的另⼀种解释可以通过考虑交叉熵来获得:
标签正则化效果:
在我们的K=1000类的ImageNet实验中,我们使⽤了u(k)=1/1000和ϵ=0.1。对于ILSVRC 2012,我们发现对于top-1错误率和top-5错误率,持续提⾼了⼤约0.2%。
最终的Inception V3架构:
相⽐Inception之前的版本,有如下更改: