04 Deep Residual Learning for Image Recognition
Motivation:
之前:层数增加,效果越好
问题:学习更好的网络,是否就是堆叠更多的层数?或者说,学习更好的网络是否就跟堆叠更多的层数一样简单?
阻碍:梯度消失/梯度爆炸,妨碍了训练的收敛
解决:normalized initialization and intermediate normalization layers 使模型收敛地更快
阻碍2: degradation problem 随着网络变深,正确率会达到饱和,然后下降。有时候这并不是由过拟合造成的,且向适宜的模型中加入更多的层反而会导致更高的训练误差
解决:deep residual learning framework.
Instead of hoping each few stacked layers directly fit a desired underlying mapping, we explicitly let these layers fit a residual mapping.
残差:实际观察值与拟合值之间的差
我们原本想要求到的映射:H(x)
实际上让这些层求的映射:F(x)=H(x)-x
这样我们想要求的映射就变成了:F(x)+x
假定求残差映射更好被优化、被求得。当原本想要的映射是恒等映射时,把残差映射学成0会比使用一堆非线性层学到恒等映射要简单。
F(x)+x的具体实现就是shortcut connections
通过实验:即使很深也很好优化、训练;随着层数的加深正确率真的在增加
即:直接映射很难学,但是残差映射相对更好学
Related Work
Residual Representations
Shortcut Connections
Deep Residual Learning
Residual Learning
假设:如果一些非线性层可以渐进地逼近H(x),那么它们就也可以渐进的逼近H(x)-x。而对后者的逼近会简单一些
其实这里的H(x)-x不能严格算作是残差,这里是把shortcut上的映射全部变成了恒等映射
motivation:
当我向一个训练好的网络中再多加几层的时候,如果这多出来的几层是恒等映射,按理来说所得到的结果不应该比原来差。但事实上是比原来差了的。这表示多个非线性层在拟合恒等映射上有困难。按照我上面的学习残差的思想来说,我只要把所有的权重变成0,学到的F(x)就是0了,0+x就是我所需要的optimal function,即恒等映射
现实中不太有可能直接让学恒等映射,但这个思想还是有用的。
Identity Mapping by Shortcuts
ReLU
shortcut connection introduces no extra parameters and computation complexity
残差指的应该是实际观察值和拟合值之间的差,我的实际观察值其实并不是x,为什么加上的是恒等映射x呢?实验证明加上x就已经足够解决degradation的问题了,而且很节省计算资源
如果一个残差块只有一层,即y=W1x+x,实验表示似乎并没有什么性能提升
上面的分析都是针对全连接层的,但是对于卷积层也同样适用
Network Architectures
plain network: inspired by VGG
residual network: 当block的input和output维度不相等时(output的维度比input高),要么直接用0 padding,要么使用1*1卷积(后者略优于前者)
Implementation
scale augmentation
standard color augmentation
batch normalization after convolution and before activation
Experiments
ImageNet Classification
Plain networks
34-layer的比18-layer的表现略低:应该不是由于梯度消失造成的(用了BN,而且34-layer的结果还是有竞争力的),推测是因为34-layer的有更慢的收敛速度,所以在错误率的下降上更慢
Residual Networks
observations:
1) 更深的网络训练误差更小,且在验证集上能够很好泛化。
2)34-layer的resnet模型的错误率比plain的结果好
3)res收敛更快
Identity vs Projection Shortcuts
之前也说了shortcut直接用的是x,因为这样不会引入任何参数和多余的计算,且达到的效果已经足够好了。那么如果我在shortcut上使用projection呢?
使用projection收到的效果显著优于直接用x,主要是因为额外引入了很多参数。但是projection并不是解决degradation问题的关键(计算残差才是,projection只是一种进一步的优化)。
使用恒等shortcut是bottleneck结构不引入计算量和复杂性的关键点
Deeper Bottleneck Architectures
目的:考虑到所能实际承受的时间成本
先用1*1降维,然后使用3*3卷积,最后再用1*1适当提升维度。
主要就是利用1*1适当降低维度
如果使用projection shortcut,模型的大小和时间复杂度会加倍
使用了bottleneck block构造的152-layer resnet的计算复杂度比VGG16/19还低
CIFAR-10 and Analysis
比较有趣的点:重点是放在探索极深的网络的表现上的,而不是非得超过现有的最好水平,所以说使用的网络的结构可以适当简化
Analysis of Layer Responses
随着网络加深,resnet每一层更倾向于去更少的修改信号,residual function会更接近于0(这样更好学到)
Exploring Over 1000 Layers
open problems:
test result is worse than that of 110-layer (overfitting)
关于highway network
对输入的一部分进行处理,另一部分直接通过