ResNet
论文地址:Deep Residual Learning for Image Recognition
引言
众所周知,深度的网络使各层特征和分类器在一个端到端多层网络中融为一个整体,最近的研究也表明网络的深度非常重要。但网络的学习是否像堆积更深层的网络那么简单呢?一个阻碍深层网络学习的阻碍就是臭名昭著的梯度消失和梯度爆炸问题,严重妨碍到神经网络的收敛。这个问题由于归一初始化和中间层归一化的诞生得到了一定的解决,这使得十层以上的神经网络在随机梯度下降的反向传播时也能得到很好的收敛。
然而,实验告诉我们,更深层的神经网络容易表现出退化问题(随着层数的加深,准确率达到饱和然后迅速下降),而模型退化的根本原因很大程度上不是因为过拟合,而是因为梯度消失问题。
退化问题表明不是所有的网络结构都能轻易得到优化。假设我们有一个浅层网络和一个深层网络,深层网络的一部分是浅层网络的拷贝,其余部分为恒等映射。在这种情况下深层网络不应该会比浅层网络有更大的误差。而导致深层网络比浅层网络准确率低的原因是深层网络更难以优化。
这篇论文将介绍一个深度残差学习框架如何解决退化问题。深度残差框架没有使用直接堆叠网络层来拟合期望的映射函数,而是选择让这些网络层来拟合一个残差映射。比如说,我们所期望得到的映射函数射函数为 H(x), 那么我们通过残差函数 F(x) := H(x) - x。那么原始的映射函数就可以通过 F(x) + x 得到。如图所示:
残差学习
假设 H(x) 由几个堆叠层组成,其输入为 x,并且其最终能被训练为残差函数 F(x),即 H(x) = F(x) + x。其也能起到所要求的函数的效果,但是使堆叠层训练成残差函数的难度和使用残差结构训练的难度是不一样的。
引言中所提到的反直觉现象促成了这种重构。如同我们在引言中所讨论的,额外增加的层次如果都是恒等映射,深层模型的不会比浅层模型有更大的误差。退化问题则表明,由多个非线性层的叠加而成的额外层很难近似于恒等映射。而在残差学习的结构下,如果恒等映射是可选择的,额外层可能会简单地将权重降低至接近0来实现恒等映射。
快捷恒等映射
我们在每几层之间使用残差学习,如上图的结构。在这篇论文中我们将残差块定义为:
x 和 y 分别表示残差块的输入和输出,函数 F 表示残差映射所需要学习的函数。上图中的 F(x) 为:
其中 σ 表示 ReLU,为了简化写法忽略偏置项。之后 F + x 通过快捷连接来完成,之后再进行一段ReLU。
第一条方程式中的 F 和 x 的维度必须是相等的。如果不是这种情况(比如当改变输入输出通道时),我们可以添加系数矩阵 $W_s$ 来使得 F 和 x 维度相等。
残差函数 F 的形式时可变的。本文的实验中包含了两层和三层的结构,当然更多层也是可以的,甚至可以用于卷积层。
ResNet 的意义
- 从关联性的角度来看,残差结构使得深层网络和浅层网络的关联性更强,输出端的损失能更加有效地调整到浅层网络的参数。当网络层数过深时,优化器会调低网络权重,使得反向传播“选择性地”使用捷径。
- 从函数角度来看,残差结构直接构建了一个更接近“绝对不比浅层网络差”的结构。
DenseNet
论文地址:Densely Connected Convolutional Networks
作为CVPR2017年的Best Paper,DenseNet脱离了加深网络层数(ResNet)和加宽网络结构(Inception)来提升网络性能的定式思维,从特征的角度考虑,通过旁路(Bypass)设置来实现特征重用的目的。相比于之前的神经网络,DenseNet有以下几个优点:
- 减轻了梯度弥散带来的问题
- 增加了特征的重用和传播
- 大大减少了参数量
相比于ResNet,DenseNet没有使用特征求和的方式将各个通路结合到一个图层中,而是使用了通道叠加的组合方式。相比于传统卷积网络,这种密集连接模式在参数量较小的情况下也能起到很好的效果,因为它没有必要重新学习冗余的特征图。
值得注意的是上图仅仅是DenseNet中的一个Dense Block,完整的DenseNet结构如下,不同的Dense Block之间是没有越级连接的。
参考文献
[1]从零开始的BLOG
[2]ResNet 论文翻译
[3]Densely Connected Convolutional Networks翻译总结
[4]DenseNet:比ResNet更优的CNN模型
相关面试题
Q:为什么 DenseNet 比 ResNet 更耗显存?
A:因为 DenseNet 对更多的特征进行重用,需要将特征图保存在显存中。
恺明大佬牛逼!