论文:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
ResNet 简介
论文:Deep Residual Learning for Image Recognition
残差网络(ResNet) 是微软亚洲研究院的何恺明、孙剑等人2015年提出的,它解决了深层网络训练困难的问题。利用这样的结构我们很容易训练出上百层甚至上千层的网络。
要理解ResNet首先要理解网络变深后会带来什么样的问题。
增大网络深度后带来的第一个问题就是梯度消失/爆炸,这个问题在Szegedy提出BN(Batch Normalization)结构后被顺利解决,BN层能对各层的输出做归一化,这样梯度在反向层层传递后仍能保持大小稳定,不会出现过小或过大的情况。
加了BN后再加大深度是不是就很容易收敛了呢?答案仍是否定的,作者提到了第二个问题--准确率下降问题(degradation problem):层级大到一定程度时准确率就会饱和,然后迅速下降,这种下降即不是梯度消失引起的也不是overfit造成的,而是由于网络过于复杂,以至于光靠不加约束的放养式的训练很难达到理想的错误率。degradation problem不是网络结构本身的问题,而是现有的训练方式不够理想造成的。当前广泛使用的训练方法,无论是SGD,还是AdaGrad,还是RMSProp,都无法在网络深度变大后达到理论上最优的收敛结果。我们还可以证明只要有理想的训练方式,更深的网络肯定会比较浅的网络效果要好。证明过程也很简单:假设在一种网络A的后面添加几层形成新的网络B,如果增加的层级只是对A的输出做了个恒等映射(identity mapping),即A的输出经过新增的层级变成B的输出后没有发生变化,这样网络A和网络B的错误率就是相等的,也就证明了加深后的网络不会比加深前的网络效果差。
何恺明提出了一种残差结构来实现上述恒等映射:
如图所示,整个模块除了正常的卷积层输出外,还有一个分支把输入直接连到输出上,该输出和卷积的输出做算术相加得到最终的输出,用公式表达就是H(x)=F(x)+x,x是输入,F(x)是卷积分支的输出,H(x)是整个结构的输出。可以证明如果F(x)分支中所有参数都是0,H(x)就是个恒等映射。残差结构人为制造了恒等映射,就能让整个结构朝着恒等映射的方向去收敛,确保最终的错误率不会因为深度的变大而越来越差。如果一个网络通过简单的手工设置参数值就能达到想要的结果,那这种结构就很容易通过训练来收敛到该结果,这是一条设计复杂的网络时百试不爽的规则。
ResNet是一种革命性的网络结构,不在局限于inception-v2~v3的小修小补,而是从一种全新的残差角度来提升训练效果。个人认为它的影响力要远大于之前提出的inception v2和v3,之后发表的inception-v4、DenseNets和Dual Path Network都是在此基础上的衍生,不夸张地说ResNet开启了图像识别的一个全新的发展发向。
Inception V4 背景
随着何凯明等人提出的 ResNet v1,google这边坐不住了,他们基于inception v3的基础上,引入了残差结构,提出了inception-resnet-v1和inception-resnet-v2,并修改inception模块提出了inception v4结构。基于inception v4的网络实验发现在不引入残差结构的基础上也能达到和inception-resnet-v2结构相似的结果,从而认为何凯明等人认为的 “要想得到深度卷积网络必须使用残差结构” 的观点不完全正确。
不过值得注意的是,google这边对于inception v2是属于哪篇论文有些不同观点:
- 在《Rethinking the Inception Architecture for Computer Vision》中认为:基于inception v1进行结构的改进是inception v2;在inception v2上加上BN是inception v3;
- 在《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》中将《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》认为是inception v2(即inception v1 上进行小改动再加上BN);将 《Rethinking the Inception Architecture for Computer Vision》认为是inception v3。
Inception V4
下图是Inception-v4的整体结构。其中的stem部分用于对进入Inception模块前的数据进行预处理。stem后用了3种共 14 个Inception模块,三种Inception模块间的Reduction模块起到pooling作用,同样使用了并行的结构来防止bottleneck问题。
Inception-v4结构 从左到右分别为Inception-v4中的 Inception A、 Inception B、 Inception C模块 Inception-v4中的 Reduction模块
可以看到,Inception V4相对于Inception V3的整体设计变动不大。主要是预处理阶段stem的改进,以及网络各阶段维度的调整。再给出一张整图:
Inception-ResBet
Szegedy把Inception和ResNet混合,设计了多种Inception-ResNet结构,在论文中Szegedy重点描述了Inception-ResNet-v1(在Inception-v3上加入ResNet)和Inception-ResNet-v2(在Inception-v4上加入ResNet),具体结构见下图。
Inception-ResBet结构
在inception-resnet-v1与inception v3的对比中,inception-resnet-v1虽然训练速度更快,不过最后结果有那么一丢丢的差于inception v3;
而在inception-resnet-v2与inception v4的对比中,inception-resnet-v2的训练速度更块,而且结果比inception v4也更好一点。所以最后胜出的就是inception-resnet-v2。
总结
本文详细呈现了三种新的网络结构:
(1)Inception-ResNet-v1:混合Inception版本,它的计算效率同Inception-v3;
(2)Inception-ResNet-v2:更加昂贵的混合Inception版本,同明显改善了识别性能;
(3)Inception-v4:没有残差链接的纯净Inception变种,性能如同Inception-ResNet-v2我们研究了引入残差连接如何显著的提高inception网络的训练速度。而且仅仅凭借增加的模型尺寸,我们的最新的模型(带和不带残差连接)都优于我们以前的网络。
网友评论