论文详解:Deep Residual Learning for Image Recognition

384 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情

论文地址:Deep Residual Learning for Image Recognition

论文背景介绍

目前,深度卷积神经网络已经在图像分类领域取得了一系列的突破,深度网络可以很好的将一个端到端的多层模型中的低/中/高级特征以及分类器整合起来,特征的等级可以通过所堆叠层的数量(深度)来丰富。许多视觉识别任务的成功都得益于非常深的模型。

那么在这种深度重要性的驱使下,论文中抛出两个问题:

  1. 一是训练一个更好的网络是否和堆叠更多的层一样简单呢?
    解决这一问题的障碍便是梯度消失/梯度爆炸,这从一开始便阻碍了模型的收敛。归一初始化(normalized initialization)中间归一化(intermediate normalization) 在很大程度上解决了这一问题,它使得数十层的网络在反向传播的随机梯度下降(SGD)上能够收敛。此问题解决。

  2. 二是在第一个问题解决的情况下,也就是深层网络能够收敛时,又出现退化问题 ?
    随着网络深度的增加,准确率达到饱和然后迅速退化。意外的是,这种退化并不是由过拟合造成的,并且在一个合理的深度模型中增加更多的层却导致了更高的错误率。论文主要就是围绕 退化问题 展开

解决方法

论文中提出了一种深度残差学习框架来解决这个退化问题。明确的让这些层来拟合 残差映射(residual mapping),而不是让每一个堆叠的层直接来拟合所需的底层映射(desired underlying mapping)。

论文中提出,假设所需的底层映射为 H(x)H(x),我们让堆叠的非线性层来拟合另一个映射: F(x):=H(x)−xF(x):=H(x)−x。 因此原来的映射转化为: F(x)+xF(x)+x。我们推断残差映射比原始未参考的映射(unreferenced mapping)更容易优化。在极端的情况下,如果某个恒等映射是最优的,那么将残差变为0 比用非线性层的堆叠来拟合恒等映射更简单。

引入残差模块

image.png

其中(1)式:其中 xx 和 yy 分别表示层的输入和输出。函数 F(x,Wi)F(x,{W_i}) 代表着学到的残差映射; (2)式:σ 代表ReLU激活函数

我们可以看到上图,左边为原始的一个网络模块,右边是加入残差模块的网络模块。

  1. 如果我们使用左边的网络,它很难拟合潜在的恒等映射函数H(x)=x,因为神经网络拟合恒等映射是比较差的;
  2. 如果使用右边引入残差模块的网络,那么它会有以下功能:如果恒等映射结果就已经足够好了,则 XX 占主导,F(X)F(X)残差尽可能的缩小,甚至可以变为0;但如果不够好,F(x)F(x) 则负责对XX进行偏移。

image.png

图中:VGG-19模型 (196亿个FLOPs)。:plain网络,含有34个参数层(36 亿个FLOPs)。:残差网络,含有34个参数层(36亿个FLOPs)

那么我们可以思考一个问题:论文中作者提出的ResNet网络架构为什么能解决网络退化问题?
我们知道残差模块可以表示成H(x)=F(x)+x,这就说明在求输出H(x)对x的导数(梯度),也就是在反向传播的时候,H‘(x)=F’(x)+1,也就是说恒等映射的这一路的常数1能够保证在求梯度的时候不会消失。底层的信号可以传到深层,也可以把深层的梯度注入底层。如果在传统的线性神经网络结构里面,比如softmax(),出现梯度不断损失,到最后梯度无限接近0这个数值。