ResNet论文学习
- 引言
- Deep Residual Learning 深度残差学习
- 网络结构
- 总结
- 代码复现
引言
深度网络自然地以端到端的多层方式集成低/中/高级特征和分类器,特征的“级别”可通过堆叠层的数量来丰富
随着网络层数加深,提取的特征越强,但是
网络层数越深就一定性能越好吗?答案是否定的
深层网络存在的问题
-
梯度消失/梯度爆炸
这个问题已经通过 normalized initialization 和 intermediate normalization layers 得到了很大程度的解决,这使得具有数十层的网络能够开始收敛随机梯度下降(SGD)与反向传播 -
网络退化
随着网络层数的增加,准确率趋于饱和,然后迅速下降。这说明,并不是所有的网络结构都同样容易优化。
为了解释这一现象,作者考虑了一个较浅的网络结构及其对应的更深版本,后者在前者的基础上增加了更多的层。
理论上,对于这个更深的网络,可以构造一个解:新增加的层执行 identity mapping (即直接将输入传递到输出),而其他层则复制自较浅网络中已经学习到的层(就是把较浅的网络搬过来)。这样构造出的解应该能使得更深的网络不会比其较浅的对应网络有更高的训练误差。
然而,实验显示,目前使用的优化算法似乎无法找到与这个构造解相当好或更好的解,或者在合理的时间内无法找到这样的解。这意味着,尽管理论上更深的网络不应该有更差的性能,但在实际优化过程中却遇到了困难。这也是引入残差学习(ResNet)的初衷之一,即通过学习残差来缓解这种优化难题。
为了解决深度神经网络训练中的退化问题,作者提出了深度残差学习框架。
在这个框架中,不再期望网络的几层直接拟合一个 underlying mapping,而是让这些层去拟合一个残差映射(residual mapping)。
具体而言,
假设 underlying mapping 是 H ( x ) \mathcal{H}(x) H(x),那么让堆叠的非线性层去拟合另一个映射 F : = H ( x ) − x \mathcal{F}:=\mathcal{H}(x)-x F:=H(x)−x,那么原始的映射就变成了 F ( x ) + x \mathcal{F}(x)+x F(x)+x
假设优化残差映射 (residual mapping) 比优化原始的、未引用的映射更容易。
图中展示了残差学习的一个基本构建块。右侧的分支直接将输入 x x x 通过一个“快捷连接”传递到输出,这就是所谓的恒等映射(identity mapping)。
而 F ( x ) \mathcal{F}(x) F(x) 表示的是一个由 权重层和非线性激活函数(例如ReLU)组成的映射,
其目的是学习输入 x x x 和输出 H ( x ) \mathcal{H}(x) H(x) 之间的残差,即 F ( x ) : = H ( x ) − x \mathcal{F}(x) := \mathcal{H}(x) - x F(x):=H(x)−x。
图中所示的构建块的输出是通过将 F ( x ) \mathcal{F}(x) F(x) 和 x x x 相加得到的,即 F ( x ) + x \mathcal{F}(x) + x F(x)+x,这里的 F ( x ) \mathcal{F}(x) F(x) 是通过两个权重层和非线性激活函数ReLU构成的子网络来学习的。
这样设计的好处是,如果 F ( x ) \mathcal{F}(x) F(x) 的理想输出是0,即不存在残差,那么 shortcut connection 可以使得恒等映射成为可能,即直接输出 x x x,这对于网络训练的稳定性和加速有很大帮助。
Deep Residual Learning 深度残差学习
网络结构
总结
残差连接最核心的地方是 Identity Mapping by Shortcuts
就是说 resnet 是结合了 identify mapping 和 shortcut connection
shortcut connection 是那些跳过一个或多个层的连接。在本文中, shortcut connection 只是执行 identify mapping,其输出被添加到堆叠层的输出中。
identify mapping 连接既不增加额外的参数,也不增加计算复杂度。整个网络仍然可以通过反向传播的SGD进行端到端训练。
下面这个残差块中,旁边的分支首先是一个 shortcut connection,而在这个 shortcut connection 之上,执行了 identify mapping 将输入恒等映射到输出端,并与 underlying mapping 进行相加