ResNet 是解决了深度学习网络中随着网络深化,网络能力反而退化的问题。
封面《恋 × シンアイ彼女》
前言
卷积神经网络中网络的深度是非常关键的,许多非凡的视觉识别任务都收益于非常深的模型。因此便有一个问题 “学习更好的网络是否就像堆叠更多的层一样简单?” 回答这个问题的其中一个臭名昭著的障碍就是 “梯度消失 / 爆炸”,其阻碍了网络收敛。然而这个问题被通过初始归一化和中间层归一化解决了。
当更深的网络能够收敛的时候,网络退化的问题出现了。随着网络深度的增加,准确率达到饱和然后迅速下降。让人意外的是这种退化并不是由过拟合导致的,随着层数的不断增加,模型反而有了更高的训练误差。
正文
为了解决退化问题,何凯明团队提出了一种新型网络结构 —— 残差结构。其结构如下图所示,新增加的层为恒等映射层,另一个为从浅层学习结果的复制。原本底层的输出变成了,增加的非线性连接去拟合,原始的映射重构成了。何凯明团队假定残差部分比原本映射更容易优化。如果恒等映射是最优的,那么只需要讲残差部分置 0 即可,这比拟合非线性层更容易。
可以通过前向神经网络加上 “短路 “(shortcut)来实现,无需额外参数和计算复杂度,依然可以用 SGD 来优化。
网络结构
plain network
受到 VGG 启发,何凯明团队基于以下原则设计了一种新的结构 plain-network 作为测试的基准线
- 输出大小一样的层拥有一样的卷积核数
- 特征图变成原来一半的时候输出的卷积核翻倍
同时使用步长为 2 的卷积替代下采样,使用全局平均池化和带有 softmax 的 1000 输出全连接作为输出。该结构比 VGG 花费更少的卷积核,复杂度更低。计算量为 3.6 BFLOPs(乘加),只有原本 VGG 的 18%。
residual network
plain network 的残差版,对于输入输出维度相等时直接” 短路 “即可,即上图中的实线。对于维度上升的,图中虚线部分,则有两种方案:
- 短路部分依然使用恒等映射,维度增加的部分补 0 填充,这样不会引入新的参数
- 使用公式 匹配维度,使用 1×1 卷积实现。
对于两种实现方案,连接不同大小的特征图时,都需要步长为 2。
表一为其结构的各种变种。
实验
更深的瓶颈结构
为了减少深层网络的训练时间,作者重新设计了一种瓶颈结构,如下图所示。使用 1×1,3×3,1×1 卷积替换原来的 2 层卷积。其中 1×1 的卷积用于升降维,使得 3×3 卷积的输入维度和输出维度减小,这降低了网络复杂度和计算量。(在后续一些网络如 YOLO 中都能看到 bottleneck 结构)
小结
ResNet 中的残差结构解决了网络退化问题,且结构简单,现实方便也没有增加太多的计算量。在后续的网络中几乎全都有残差结构,而且网络深度也开始到了上百层,训练时也更容易 OOM 了(哭)。
参考文献
[1] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.