ResNet
ResNet
作者:Kaiming He ,Xiangyu Zhang ,Shaoqing Ren ,Jian Sun
研究机构:Microsoft Research
![](https://i-blog.csdnimg.cn/blog_migrate/bc9c3f33888d7dedc2200cae6578703d.jpeg)
2003年广东省理科高考状元,清华基础科学班,香港中文大学攻读研究生,微软亚研院实习,现在FAIR工作
主要文献:
- ResNet,Faster-RCNN(Shaoqing Ren一作), Single Image去雾,PReLU(自学习Relu,分类性能第一次超越人类level), SPP-Net(ECCV2014),
- Identity Mappings in Deep Residual Networks(2016ECCV,ResNet的后续原理分析及改进)
- Focal Loss(三作),R-FCN(三作)
- Instance-Aware Semantic Segmentation via Multi-task Network Cascades(2016CVPR,2015MSCOCO语义分割冠军),Mask-RCNN
- Aggregated Residual Transformations for Deep Neural Networks(2017CVPR,ResNeXt)
- 等等等等…还有很多的精彩成果这里不再提及。有兴趣可以参考何凯明主页:http://kaiminghe.com
下面我们正式开始聊论文,啊哈哈哈哈哈~
1. Background
-
Forward:from shallow to deep
- Alexnet的出现带火了深度学习,其最重要的特点为通过数据驱动让模型自动学习特征,省去了人工寻找特征的步骤。但不同的模型也找出不同质量的特征,特征的质量直接影响到分类结果的准确度,表达能力更强的特征也给模型带来更强的分类能力。因此,深度网络通过数据学习到表达能力更强的特征。
- 特征也可以根据复杂度和表示能力粗略的分为高中低三种种类,理论上讲越复杂的特征有越强的表征能力。在深度网络中,各个特征会不断的经过线性非线性的综合计算,越深的网络输出表示能力越强的特征。所以,网络的深度对于学习表达能力更强的特征至关重要,这一问题在VGGNet中得到很好体现。
- 深度模型中,每层的输出特征图的尺寸大都随着网络深度而变化,主要是高和宽越来越小,输出特征图的深度随着网络层数的深度而增加,这一设计符合Inception v3 paper中的原则,从另一方面讲,高和宽的减小有助于减小计算量,而特征图深度的增加则使每层输出中可用特征数量的增多。
以上所提论文皆在我们的博客中逐个分析过,没看过的朋友可以参考博客中过往文章PRIS-SCMonkey
-
Backward:the problem caused by increasing depth
-
增加深度带来的首个问题就是梯度爆炸/消散的问题,这是由于随着层数的增多,在网络中反向传播的梯度会随着连乘变得不稳定,变得特别大或者特别小。这其中经常出现的是梯度消散的问题。
-
为了克服梯度消散也想出了许多的解决办法,如使用BatchNorm,将激活函数换为ReLu,使用Xaiver初始化等,可以说梯度消散已经得到了很好的解决
-
增加深度的另一个问题就是网络的degradation问题,即随着深度的增加,网络的性能会越来越差,直接体现为在训练集上的准确率会下降,残差网络文章解决的就是这个问题,而且在这个问题解决之后,网络的深度上升了好几个量级。
-
-
Degradation of deep network
With network depth increasing, accuracy gets saturated (which might be unsurprising) and then degrades rapidly. Unexpectedly, such degradation is not caused by overfitting, and adding more layers to a suitably deep model leads to higher training error.
-
上图是论文中随着网络深度的增加网络在CIFAR10-数据集上分类的训练集的错误率,可以看到如果我们直接堆叠卷积层,随着层数的增多,错误率有明显上升的趋势,其中最深的56层网络得到了最差的准确率,我们在VGG网络上验证了一下,对于CIFAR-10数据集在18层的VGG网络上耗费5分钟时间在网络训练充分的情况下得到了80%正确率,而34层的VGG模型花费8分钟得到了72%正确率,网络衰退问题确实存在。
-
训练集错误率的下降说明degredation的问题并不是过拟合所造成,具体原因论文中也只是说留待继续研究,在作者的另一篇论文《Identity Mappings in Deep Residual Networks》中证明了degradation的产生是由于优化性能不好,这说明越深的网络反向梯度越难传导。
2.Deep Residual Networks
-
From 10 to 100 layers
-
我们可以设想一下,当我们直接对网络进行简单的堆叠到特别长,网络内部的特征在其中某一层已经达到了最佳的情况,这时候剩下层应该不对改特征做任何改变,自动学成恒等映射(identity mapping) 的形式。也就是说,对一个特别深的深度网络而言,该网络的浅层形式的解空间应该是这个深度网络解空间的子集,换句话说,相对于浅层网络更深的网络至少不会有更差的效果,但是因为网络degradation的问题,这并不成立。
-
那么,我们退而求其次,已知有网络degradation的情况下,不求加深度能提高准确性,能不能至少让深度网络实现和浅层网络一样的性能,即让深度网络后面的层至少实现恒等映射的作用,根据这个想法,作者提出了residual模块来帮助网络实现恒等映射。
Let us consider a shallower architecture and its deeper counterpart that adds more layers onto it. There exists a solution to the deeper model by construction: the layers are copied from the learned shallower model, and the added layers are identity mapping. The existence of this constructed solution indicates that a deeper model should produce no higher training error than its shallower counterpart.
-
-
Residual Module
Instead of hoping each stack of layers directly fits a desired underlying mapping, we explicitly let these layers fit a residual mapping. The original mapping is recast into F(x)+x. We hypothesize that it is easier to optimize the residual mapping than to optimize the original, unreferenced mapping. To the extreme, if an identity mapping were optimal, it would be easier to push the residual to zero than to fit an identity mapping by a stack of nonlinear layers.
- 根据上图,copy一个浅层网络的输出加给深层的输出,这样当网络特征达到optimal的时候更深层恒等映射的任务就从原来堆叠的层中释放到新建的这个恒等映射关系中,而原来层中的任务就从恒等映射转为全0。
- F ( x ) = H ( x ) − x F ( x ) = H ( x ) − x F ( x ) = H ( x ) − x F(x)=H(x)−xF(x)=H(x)−x F(x)=H(x)-x F(x)=H(x)−xF(x)=H(x)−xF(x)=H(x)−xλ,这样原来的前向传播公式(4)就变成了:
x L = ( ∏ L − 1 i = l λ i ) x l + ∑ L − 1 i = l F xL=(∏L−1i=lλi)xl+∑L−1i=lF xL=(∏L−1i=lλi)xl+∑L−1i=lF