Motivation
AlexNet取得2012年的ILSVRC挑战赛冠军、VGGNet取得2014年的ILSVRC挑战赛亚军都在不断说明一个事实:随着网络深度的增加,网络的性能会越来越好。在理论上分析,假如一个浅层网络达到了比较好的训练效果,考虑构造一个满足如下条件的更深层次的网络:
1. 添加的层是identity mapping(恒等映射)
2. 其余层只是已经完成学习的浅层网络的副本
理论上而言这个构造的新的深层网络,性能应该比原来的浅层网络性能要更好,即使没有学习到新的特征,至少也不会产生比构成它的浅层网络更高的trainning error。但是实际上通过实验发现,无论何种方式所构造的更深层次的网络,效果都无法做到比这个构造的网络效果更好,甚至是无法达到和浅层网络同样的效果。随着网络层数的增加,模型的准确率先是不断提升,然后毫无征兆的出现大幅度降低。这种网络退化(degration)问题显然不是由于过拟合(overfitting)所导致的,加深训练效果好的模型不仅会导致更高的test error,也会出现更高的trainning error。Degration的出现意味着网络的优化不是简单地通过堆叠层数加深网络能够实现的。
基于残差表示在矢量量化(vector quantization)上的成功以及短路连接(shortcut connection)在解决梯度消失/爆炸(gradient vanishing/exploding)上的突破,作者提出了残差网络ResNet来解决网络退化问题。
Main contribution
shortcut connection:与之前的工作相比,不同之处在于以下两点
1. 之前的工作所提出的shortcut的控制门是有参数的(data-dependent);本文提出的shortcut是不需要参数的(parameter-free)
2. 之前的工作所提出的shortcut是常闭的,所学习的是本来的特征;本文提出的shortcut时是常开的,所学习的是残差特征
除此之外,之前的工作并未证明随着深度的增加,网络的性能会不断增加,仅仅是提供了解决梯度消失/爆炸(gradient vanishing/exploding)的思路。
Bottleneck:考虑到深层网络的性能和计算代价,作者设计了Bottleneck,在尽可能保留网络特征信息不变的情况下,减少所需的运算量,使得在同样的计算条件下网络能够更深。MobileNetV2基于深度卷积可分离的思想,将卷积通道相关和空间通道相关进行分离,另外考虑到激活变换ReLU函数可能会滤除很多有用信息,在MobileNetV1的基础上使用线性激活函数代替ReLU。BottleNeck是MobileNetV2的Inverted residuals。
Methodology
以下证明来自文章你必须要知道CNN模型:ResNet:
首先残差单元可以表示为:
其中 x l x_l xl 和 x l + 1 x_{l+1} xl+1 分别表示的是第 l l l 个残差单元的输入和输出,注意每个残差单元一般包含多层结构。 F F F 是残差函数,表示学习到的残差,而 h ( x l ) = x l h(x_l)=x_l h(xl)=xl 表示恒等映射, f f f 是ReLU激活函数。基于上式,我们求得从浅层 l l l 到深层 L L L 的学习特征为:
利用链式规则,可以求得反向过程的梯度:
式子的第一个因子
∂
l
o
s
s
∂
x
l
\frac{\partial loss}{\partial x_l}
∂xl∂loss 表示的损失函数到达 [公式] 的梯度,小括号中的1表明短路机制可以无损地传播梯度,而另外一项残差梯度则需要经过带有weights的层,梯度不是直接传递过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失。所以残差学习会更容易。要注意上面的推导并不是严格的证明。
以上不严谨的证明说明了为什么ResNet能够解决梯度消失/爆炸(gradient vanishing/exploding)的问题。整个网络的架构如图所示:
参考VGG19的网络,通过短路机制在其上添加了残差单元(并不是说只能在VGG19的网络上添加,任何训练效果好的浅层网络都可以引入残差单元来获得更深层的好的训练效果)。变化主要体现在ResNet直接使用stride=2的卷积做下采样,并且用global average pool层替换了全连接层。ResNet的一个重要设计原则是:当feature map大小降低一半时,feature map的数量增加一倍,这保持了网络层的复杂度。隐含层的feature map数量是比较小的,并且是输出feature map数量的1/4。
Results
作者对比了ResNet和其对应的plainNet分别在18层和34层下的训练效果,可以看到,对于plainNet,34层的训练误差在经过多轮迭代后,出现了error高于18层的情况,而ResNet则完美解决了这个问题。
最后对比一下不同层数的ResNet和其他网络在top-1和top-5两个metric上的结果,可以看到,随着深度的增加,ResNet的效果是不断提升的,并且优于其他网络。
Conclusion
ResNet的伟大之处在于其解决了网络随着深度增加产生的退化问题,使得我们能够训练更深的网络来获得更好的效果。