目标

使用残差(Residual)学习框架,简化非常深的网络的优化过程。

方法

显式地将网络层定义为学习相对于输入的残差函数,而不是没有任何参考的映射函数,谁也不知道这个映射是什么。 解释:之前网络层学习一个非线性映射 $H(x)$,现在是学习残差函数 $F(x):=H(x)-x$,原始的映射转化成 $F(x)+x$。

动机

Gradient vanishing/exploding

梯度消散和梯度爆炸的问题定义参考 [1, 9]。最初,训练网络时遇到的问题是这些, 现在通过参数的 normalized 初始化和中间层的标准化(batch normalization), 网络的训练可以收敛(converge)。

Degradation

虽然增加网络的层数可以训练,但得到的结果并没有变的更好,这是不符合预期的。 一个直观的理解:增加层数的网络理论上一定能得到比浅层网络不差的结果, 把多出的层数变成 identity mapping 即可得到相同的结果;但基于当前网络的优化并不能得到这样的效果,与其解决这个本质的问题, 不如修改网络,直接加入一个 shortcut connection 作为线性映射。

理论支撑

Residual 表示

存在一些先前工作使用了 residual 的表示,比如向量量化:使用残差表示比原始特征向量表示要高效, More detail refer to [17]。虽然最终都是学习非线性映射 $H(x)$,但使用残差表示可能会降低学习的难度。

Shortcut 连接

为了信息流的传递增加 shortcut 链接,受启发于LSTM, More discussion refer to "highway networks" [42, 43]

网络架构

  • 考虑的因素: FLOP;**TODO: 计算过程 **

训练过程

  • scale augmentation: 图像缩放到短边在[256, 480]范围,从缩放后的图像或它的水平翻转中随机裁剪224x224的patch
  • mean subtracted
  • color augmentation refer to [21]
  • batch normalization (BN) before ReLu
  • weight initialization refer to [13]
  • learning rate: 0.1, divided 10 when plateaus
  • iteration: 60x10^4
  • weight decay: 0.0001
  • momentum: 0.9

实验

验证 Motivation 正确

先训练不同层数(18层,34层)plain network (no shortcut),观察 train/test loss 的变化曲线, 结论层数增多,loss 并没有降低; 再看 forward/backward 的时候 data 和 diff 的数值是否出现 vanishing/exploding。

再训练相同层数(18层,34层)的 ResNet,结论:

  • 34层loss 要比18层低,解决了退化问题
  • 与 plain network的对比,结果更好,说明训练更有效
  • 与 plain network的对比,收敛更快,说明训练更容易

测试不同 shortcut connection

结论影响不大

测试更深的网络

** Refer to the image ** 在保证近似的时间复杂度,设计了 bottle-neck architecture,但是有非常低的 FLOPS。

在CIFAR-10上的更多实验结果

  • 在较深网络(110层),使用 $lr=0.1$,网络开始时不收敛。解决方法:使用0.01 warm up, (400 iteration, error<0.8),然后再切换到 0.1
  • 分析不同层的响应。既然使用 residual,理论上响应值要小。分析不同层 (20, 56) (plain, res) data 的标准差
  • 更多层数 1000 层时,训练误差并没有下降太多,估计是过拟合了。相对来说数据集小参数已经太多

其它细节见论文,总之要保证实验设计的完备性

原文链接

https://arxiv.org/abs/1512.03385