ResNet 描述

ResNet training curve

自 VGG 之后,大家都想把网络加深加宽提性能,但是随着深度的增加,性能的收益越来越小。本来这应该是正常现象,但作者在实验中发现,20 层网络的训练误差与测试误差都比 56 层的更低,这就很奇怪了。因此作者们研究这个问题的起因,并认为过深的网络深度导致了严重的梯度消失,梯度无法传播到浅层网络层,因此大大阻碍了模型的训练,模型越深,浅层参数越难以训练。论文中提到虽然一些手段(如更好的初始化、BN 等)可以缓解梯度消失或爆炸的问题,但是依然无法解决深层网络的性能反而不如浅层网络的问题。作者们称之为「退化」(Degradation)。

ResNet shortcut

如何解决退化问题?如何更好地训练深层的网络并保证深层网络不比浅层网络差?作者们提出了残差学习(Residual Leraning),引入了捷径连接(Shortcut,见上图),从原本的直接学习一个完整映射 $f(x)$ 改成了学习当前特征与下一步特征之间的残差 $f(x) - x$,从而极大地增强了网络中信息的流动,前向传播时的浅层特征可以流向网络末端,而反向传播时的深层梯度也可以反传回网络浅层。根据是否要压缩维度(节省大量计算量),可以设计为带或不带 bottleneck 的结构,如上图所示,左边不带 bottleneck,右边带 bottleneck。

自此之后,CNN 模型的深度再一次暴涨。这篇论文提出的网络 ResNet 同时也获得了 ILSVRC 2015 的分类冠军,将 Top-5 Error 从 6.656% 拉到了 3.567%,同时也摘得 CVPR 2016 Best Paper 桂冠。

下图展示了 VGG-19、Plain-34、ResNet-34 三种设计的网络结构,三者的计算量分别为 19.6B FLOPs、3.6B FLOPs、3.6B FLOPs。在 ResNet-34 中,右边的跳跃连接线表示 Shortcut 连接,实线表示 Identity mapping,虚线表示维度发生改变(channel 加倍,长宽减半),作者在此提出两种策略:(A)用 zero padding 来填充新的通道,不增加任何参数和运算;(B)用 $1 \times 1$ Conv 使通道数加倍,增加了参数和运算,此策略被称为 Projection。两者的 stride 都为 2。

ResNet architecture

为了验证 projection 策略的影响,作者使用 ResNet-34 在实验中对比了以下 3 种做法

  • (A)维度改变时使用 zero padding;
  • (B)维度改变时使用 projection;
  • (C)所有 shortcut 都使用 projection。

实验结果如下图。性能上 A < B < C,但是 C 相对比 B 引入了很多新的参数与计算量,收益也不是很大,因此作者主要还是使用 B 做法。

Experiment result

ResNet 的 Shortcut 设计

自 ResNet 发表之后,原班人马又开始研究起其 Shortcut 结构的具体设计,然后又发了一篇 ECCV 2016。原设计与新设计的对比如下:

New ResBlock

跟原设计相比,改进之后的好处在于:

  • (+) 主干路线上去掉了 ReLU,能够实现真正的 identity mapping,不再有任何阻碍;
  • (+) 原版的权值层输入有可能是未经过 BN 的(因为经过 BN 之后又相加了),而新版的所有权值层的输入都是经过 BN 的,增强了 regularization。
  • (+) 实验效果上最好。

常见问题

ResNet 为什么好

为什么第一层卷积核较大

原因为了快速降低分辨率,并且保持参数和计算的代价不过高

参考