ResNet 残差网络 一些粗略的理解

Deep Residual Learning for Image Recognition

ResNet是何凯明等人在2015年的论文《Deep Residual Learning for Image Recognition》提出的一种结构。其主要使用了残差块,来解决训练困难的问题以及模型退化问题。在2015年ImageNet检测、ImageNet定位、COCO检测和COCO分割任务的第一名。

ResNet的由来

深度卷积神经网络为图像分类带来了一系列突破。当年一系列的研究也表明网络深度是至关重要的,在具有挑战性的ImageNet数据集上的主要成果也都采用了“非常深”的模型,深度从16到30。大多数模型都可以通过加深网络来提高性能。

但是一个问题出现了:学习一个更好的网络是否只需简单地叠加更多层?通常来说,叠加更多层会导致梯度消失/爆炸问题,这从一开始就阻碍了模型收敛。然而,这个问题可以通过归一化解决(例如batch normalization),这些归一化层使具有数十层的网络得以收敛。

当更深层的网络能够收敛时,另一个问题又出现了:随着网络深度的增加,精度趋于饱和(这可能并不令人惊讶),然后迅速退化。出乎意料的是,这种退化并不是由过拟合引起的,在一个合适深度的模型中添加更多的层会导致更高的训练误差,如图所示
ResNet 残差网络 一些粗略的理解

观察20层和56层的“普通”网络在CIFAR-10上的训练误差(左)和测试误差(右),作者发现网络越深,训练误差越大,测试误差也越大。我们知道,神经网络具有很强的拟合能力,深度越深这种能力应当越强,神经网络就更能“记住”训练样本。虽然在训练更深的网络时可能会遇到上面提到的梯度爆炸/消失问题,但是这个问题可以通过normalization缓解。而即便我们使用了normalization,56层的深网络的训练误差还是比20层的浅网络大,说明这不是过拟合(过拟合应当是深网络的训练误差比浅网络小,测试/验证误差比浅网络大),而是模型发生了“退化”,作者把这种现象称为模型退化。
训练精度的下降表明,想要训练一个深的网络是不容易的。现在让我们考虑一种在浅层模型的结构上添加更多层的体系结构。在这种结构下存在一种构造深层模型的解决方案:在浅层模型的基础上添加的层都是恒等映射(即 H ( X ) = X H(X)=X H(X)=X)。这种构造方案从理论上来说,更深的模型相比于其对应的浅层模型,应该不会产生更高的训练误差。但实验表明,现有的求解器无法找到这样的解(即无法学习恒等映射),或者说不能在合适的时间内找到这样的解。
因此,作者引入深度残差学习框架来解决退化问题。

残差结构

残差块是残差结构的核心,残差块如图所示
ResNet 残差网络 一些粗略的理解

与其让每个堆叠的层直接拟合我们所需要的底层映射 H ( x ) H(x) H(x)( H ( x ) H(x) H(x)不只是恒等映射,还可以是其它任何映射),不如显式地让这些层拟合残差映射 F ( x ) F(x) F(x)。形式上,将所需拟合的底层映射表示为 H ( x ) H(x) H(x),让堆叠的非线性层拟合另一个映射: F ( x ) = H ( x ) − x F(x)= H(x)−x F(x)=H(x)−x。则底层映射 H ( x ) H(x) H(x)就转换为 F ( x ) + x F(x)+x F(x)+x。作者假设优化残差映射 F ( x ) F(x) F(x)比优化原始的映射 H ( x ) H(x) H(x)更容易。在某些极端情况下,如果恒等映射是最优的,那么将残差映射 F ( x ) F(x) F(x)拟合为零即可,这比通过一堆非线性层来拟合恒等映射更容易。
F ( x ) + x F(x) + x F(x)+x的表达式可以通过“短路连接”来实现。这也是ResNet的核心。短路连接既不增加额外的参数,也不增加计算复杂度。而且短路连接一定程度上也有助于训练,这是因为在反向传播的过程当中我们需要计算梯度,根据链式法则,网络越深,相乘的项也就越多,越来越多小于1/大于1的项相乘会导致梯度消失/爆炸,而短路连接加过来的 x x x在一定程度上缓解了小于1/大于1的程度。


最后再总结和补充一些:

  1. 为什么需要恒等映射 H ( x ) = x H(x)=x H(x)=x
    如果增加的层被构建为恒等映射,那么理论上,更深的模型的训练误差不应当大于浅层模型,但是退化问题的出现表明,求解器可能比较难以通过许多非线性层逼近恒等映射。但是,残差的表示形式使得多层网络近似恒等映射要容易的多,如果恒等映射是最优的,只需要将非线性层的权重置零(求解器是可以做到的),就可以得到恒等映射,即 F ( x ) = 0 F(x)=0 F(x)=0
  2. 为什么叫残差网络
    在统计学中,残差和误差是非常容易混淆的两个概念。误差是衡量观测值和真实值之间的差距,残差是指预测值和观测值之间的差距。对于残差网络的命名原因,作者给出的解释是,网络的一层通常可以看做 y = H ( x ) y=H(x) y=H(x), 而残差网络的一个残差块可以表示为 H ( x ) = F ( x ) + x H(x)=F(x)+x H(x)=F(x)+x,也就是 F ( x ) = H ( x ) − x F(x)=H(x)-x F(x)=H(x)−x,在恒等映射中, y = x y=x y=x便是观测值,而 H ( x ) H(x) H(x)是预测值,所以 F ( x ) F(x) F(x)便对应着残差,因此叫做残差网络。
上一篇:A ConvNet for the 2020论文阅读笔记


下一篇:RetinaNet学习笔记