持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情
论文地址:Deep Residual Learning for Image Recognition
论文背景介绍
目前,深度卷积神经网络已经在图像分类领域取得了一系列的突破,深度网络可以很好的将一个端到端的多层模型中的低/中/高级特征以及分类器整合起来,特征的等级可以通过所堆叠层的数量(深度)来丰富。许多视觉识别任务的成功都得益于非常深的模型。
那么在这种深度重要性的驱使下,论文中抛出两个问题:
-
一是训练一个更好的网络是否和堆叠更多的层一样简单呢?
解决这一问题的障碍便是梯度消失/梯度爆炸,这从一开始便阻碍了模型的收敛。归一初始化(normalized initialization) 和 中间归一化(intermediate normalization) 在很大程度上解决了这一问题,它使得数十层的网络在反向传播的随机梯度下降(SGD)上能够收敛。此问题解决。 -
二是在第一个问题解决的情况下,也就是深层网络能够收敛时,又出现退化问题 ?
随着网络深度的增加,准确率达到饱和然后迅速退化。意外的是,这种退化并不是由过拟合造成的,并且在一个合理的深度模型中增加更多的层却导致了更高的错误率。论文主要就是围绕 退化问题 展开
解决方法
论文中提出了一种深度残差学习框架来解决这个退化问题。明确的让这些层来拟合 残差映射(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 比用非线性层的堆叠来拟合恒等映射更简单。
引入残差模块
其中(1)式:其中 和 分别表示层的输入和输出。函数 代表着学到的残差映射; (2)式:σ 代表ReLU激活函数
我们可以看到上图,左边为原始的一个网络模块,右边是加入残差模块的网络模块。
- 如果我们使用左边的网络,它很难拟合潜在的恒等映射函数H(x)=x,因为神经网络拟合恒等映射是比较差的;
- 如果使用右边引入残差模块的网络,那么它会有以下功能:如果恒等映射结果就已经足够好了,则 占主导,残差尽可能的缩小,甚至可以变为0;但如果不够好, 则负责对进行偏移。
图中左: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这个数值。