Deep Residual Learning for Image Recognition
原文链接
摘要
深度神经网络很难去训练,本文提出了一个残差学习框架来简化那些非常深的网络的训练,该框架使得层能根据其输入来学习残差函数而非原始函数。本文提出证据表明,这些残差网络的优化更简单,而且通过增加深度来获得更高的准确率
引言
深度网络很好的将一个端到端的多层模型中的低/中/高级特征以及分类器整合起来,特征的等级可以通过所堆叠层的数量来丰富。有结果显示,模型的深度发挥着至关重要的作用
在深度的重要性的驱使下,出现了一个新的问题:训练一个更好的网络是否和堆叠更多的层一样简单呢?解决这一问题的障碍便是困扰人们很久的梯度消失/梯度爆炸,这从一开始便阻碍了模型的收敛。归一初始化(normalized initialization)和中间归一化(intermediate normalization)在很大程度上解决了这一问题,它使得数十层的网络在反向传播的随机梯度下降(SGD)上能够收敛。当深层网络能够收敛时,一个退化问题又出现了:随着网络深度的增加,准确率达到饱和(不足为奇)然后迅速退化。意外的是,这种退化并不是由过拟合造成的,并且在一个合理的深度模型中增加更多的层却导致了更高的错误率
深层"plain"网络的在CIFAR-10上的错误率
退化的出现(训练准确率)表明了并非所有的系统都是很容易优化的。本文提出了一种深度残差学习框架来解决这个退化问题。方法是让这些层来拟合残差映射,而不是让每一个堆叠的层直接来拟合所需的底层映射。假设所需的底层映射为\(H(x)\),让堆叠的非线性层来拟合另一个映射:\(F(x):=H(x)−x\)。 因此原来的映射转化为:\(F(x)+x\),研究者推断残差映射比原始未参考的映射(unreferenced mapping)更容易优化,在极端的情况下,如果某个恒等映射是最优的,那么将残差变为0比用非线性层的堆叠来拟合恒等映射更简单
公式 F(x)+x 可以通过前馈神经网络的“shortcut连接”来实现,Shortcut连接就是跳过一个或者多个层。shortcut 连接只是简单的执行恒等映射,再将它们的输出和堆叠层的输出叠加在一起。恒等的shortcut连接并不增加额外的参数和计算复杂度。完整的网络仍然能通过端到端的SGD反向传播进行训练,并且能够简单的通过公共库(例如,Caffe)来实现而无需修改求解器
一个残差网络构建块(Fig.2)
本文表明
极深的残差网络是很容易优化的,但是对应的“plain”网络(仅是堆叠了层)在深度增加时却出现了更高的错误率
深度残差网络能够轻易的由增加层来提高准确率,并且结果也大大优于以前的网络
深度残差学习
残差学习
将\(H(x)\)看作一个由部分堆叠的层来拟合的底层映射,其中\(x\)是这些层的输入。假设多个非线性层能够逼近复杂的函数,这就等价于这些层能够逼近复杂的残差函数,例如,\(H(x) - x\)。我们明确地让这些层来估计一个残差函数:\(F(x):=H(x)−x\)而不是\(H(x)\)。因此原始函数变成了:\(F(x)+x\)。尽管这两个形式应该都能够逼近所需的函数,但是前者更易学习。使用这种表达方式的原因是之前提到的退化问题,使用残差学习的方式重新表达后,如果恒等映射是最优的,那么求解器将驱使多个非线性层的权重趋向于零来逼近恒等映射。如果最优函数更趋近于恒等映射而不是0映射,那么对于求解器来说寻找关于恒等映射的扰动比学习一个新的函数要容易的多,实验表明,学习到的残差函数通常只有很小的响应,说明了恒等映射提供了合理的预处理
通过捷径进行identity mapping
在堆叠层上采取残差学习算法,一个构件块如上图(Fig.2)所示,其定义为(Eq.1)
\[
y = F(x, {W_i}) + x
\]
其中\(x\)和\(y\)分别表示层的输入和输出。函数\(F(x, {Wi})\)代表着学到的残差映射,该shortcut连接没有增加额外的参数和计算复杂度
在Eq.1中,\(x\)和\(F\)的维度必须相同,如果不同,可以通过shortcut连接执行一个线性映射\(W_s\) 来匹配两者的维度(Eq.2)
\[
y = F({x, {W_i}}) + W_sx
\]
实验表明,恒等映射已足够解决退化问题,并且是经济的,因此\(W_s\)只是用来解决维度不匹配的问题