Deep Residual Learning for Image Recognition论文学习
摘要
越深的神经网络越难训练。我们提出了一个残差学习框架来简化比之前使用的更深的网络的训练。我们显式地将多层表示为学习参考输入层的残差函数,而不是学习无参考的函数。我们提供全面的经验证据,表明这些残差网络更容易优化,并且可以从适当增加的深度中获得准确度。在ImageNet数据集上,我们评估深度达到152层的残差网络,该网络比VGG网络深8倍,但复杂度更低。这些残差网络的组合在ImageNet上获得了3.57%的错误了。该结果在ILSVRC 2015分类任务上赢得1位。我们也给出了在CIFAR-10数据集上100和1000层网络的分析。
对很多视觉识别任务来说,表征的深度是至关重要的。单靠极深的表征,我们在COCO目标检测数据集上获得了28%的提升。我们将深度残差网络提交到ILSVRC和COCO 2015比赛上,并都获得1位。
1.简介
最近的研究发现网络的深度是非常重要的,并且在ImageNet上的领先的结果都是利用非常深的网络模型(16-19层)。那么问题来了,学习更好的网络是不是就像堆叠更多的层一样简单?当更深的网络开始能收敛时,会出现退化问题:网络深度增加,精度开始饱和,然后快速退化。然而,该退化问题不是由过拟合引起的。图1是一个典型的例子。
从图1可以看出,56层的网络的训练误差和测试误差都比20网络的大。这种训练精度的退化问题表明,并不是所有的系统都容易优化。假设,更深的网络是由浅层网络增加几层构建的。如果增加的层是恒等变换(Identity mapping),其他层是从浅层网络拷贝而来,那么构造的这个更深的网络模型的训练误差不一改比浅层模型的大。但是实验表明当前的solvers不能找到这样的解。
本文就是要通过深度残差学习框架来解决退化问题。我们不再希望几个堆叠起来的层直接拟合相应的映射
H
(
x
)
\mathcal{H(\mathbf{x})}
H(x),而是显式地让这些堆叠的层去拟合残差映射
F
(
x
)
:
=
H
(
x
)
−
x
\mathcal{F(\mathbf{x})}:=\mathcal{H(\mathbf{x})-\mathbf{x}}
F(x):=H(x)−x。只要
F
(
x
)
\mathcal{F(\mathbf{x})}
F(x)拟合出来,那么原始的映射就等于
F
(
x
)
+
x
\mathcal{F(\mathbf{x})+\mathbf{x}}
F(x)+x。
公式
F
(
x
)
+
x
\mathcal{F(\mathbf{x})+\mathbf{x}}
F(x)+x可以通过带有短路连接(shortcut/skipping connections)的前馈神经网络来实现。在我们的例子中,shortcut connection进行恒等变换(Identity mapping)操作,它的输出加到堆叠的层的输出上。Identity mapping不会增加额外的参数和计算复杂度。整个网络还是用端到端的随机梯度下降(SGD)来训练。
为什么Residual Block会有用?可以参考Andrew Ng的公开课讲解。
2.深度残差学习
2.1 残差学习
如果假设多个非线性层可以渐进的近似复杂函数,那么可以做同等的假设就是它们也可以渐进的近似残差函数,例如: F ( x ) : = H ( x ) − x \mathcal{F(\mathbf{x})}:=\mathcal{H(\mathbf{x})-\mathbf{x}} F(x):=H(x)−x(假设输入输出是同等维度的)。这么做是因为受图1的实验结果的启发,退化问题暗示solvers在通过多个非线性层来近似identity mapping方面有困难。使用残差学习公式,如果Identity mapping是最优的,solvers可以简单地将多个非线性层的权值趋向0来达到Identity mapping。
2.2 通过短路的Identity mapping
我们对每几个堆叠起来的层使用残差学习。如图2所示,该构造块可以定义为:
y
=
F
(
x
,
{
W
i
}
)
+
x
(1)
\mathbf{y}=\mathcal{F(\mathbf{x},\{\mathbf{W_{ \textit{i}}}\})+\mathbf{x}} \tag{1}
y=F(x,{Wi})+x(1)
F
(
x
,
{
W
i
}
)
\mathcal{F(\mathbf{x},\{\mathbf{W_{ \textit{i}}}\})}
F(x,{Wi})就是要学习的残差映射。例如,图2中的2层的构造块,
F
=
W
2
σ
(
W
1
x
)
\mathcal{F}=\mathbf{W_2}\sigma(\mathbf{W_1{\mathbf{x}}})
F=W2σ(W1x),公式中的
σ
\sigma
σ表示的ReLU,并且忽略了偏置(biases)项。操作
F
+
x
\mathcal{F}+\mathbf{x}
F+x使用shortcut connection和元素级别(element-wise)求和实现。最后在对
y
\mathbf{y}
y进行非线性操作
σ
(
y
)
\sigma{\mathbf{(y)}}
σ(y)。
公式(1)中的求和要求
F
\mathcal{F}
F和
x
\mathbf{x}
x的维度是相等的。如果不相等,则需要对输入
x
\mathbf{x}
x进行线性变换:
y
=
F
(
x
,
{
W
i
}
)
+
W
s
x
(2)
\mathbf{y}=\mathcal{F(\mathbf{x},\{\mathbf{W_{ \textit{i}}}\})+\mathbf{W_sx}} \tag{2}
y=F(x,{Wi})+Wsx(2)
F
(
x
,
{
W
i
}
)
\mathcal{F(\mathbf{x},\{\mathbf{W_{ \textit{i}}}\})}
F(x,{Wi})的形式不限,可以是多个卷积层,元素级别求和是两个特征图按通道来求和。
2.3 网络架构
普通网络(图3中间):大量使用3x3的卷积层,并且(i)对有相同输出大小的特征图的层的filters数量相同;(ii)如果特征图的size减半,filters的数量翻倍,以此来保证每层的时间复杂度。降采样直接通过stride为2的卷积层实现。网络的最后一层是全局平均池化层和1000路的带softmax的全连接层。
残差网络(图3右边):基于上面的普通网络,插入shortcut connection。当输出输出同维度时,直接使用Identity shortcut。当维度增加时(图3中的虚线),考虑2种选项:(A)shortcut还是使用Identity mapping,当时会填充0来升维;(B)使用线性变换projection来升维。对于这两个选项,当shortcut遍历两种尺寸的特征图时,stride为2。
3 实验
3.1 ImageNet分类
在包含1000类别的ImageNet 2012分类数据集上评估模型,数据集的划分如下表所示。我们评估了top-1和top-5错误率。
ImageNet数据 | 数量 |
---|---|
训练集 | 1.28 million |
验证集 | 50k |
测试集 | 100k |
普通网络:从表2和图4的左边可以看出,越深的网络的训练和验证误差越大,这和前文提及的退化问题一致。我们推测深网络可能有极低的收敛速率,这影响了训练误差的减少。该优化问题的原因以后再研究。
残差网络:每2个3x3的filter使用一个shortcut connection,shortcut connection使用Option A。从表2和图4的右边可以看出:1)34层的resnet比18层的resnet性能好,这解决了退化问题;2)resnet比plain net性能好;3)18层的resnet收敛比18成的plain net快,而且精度差不多(图4的左右两图对比)。
Identity vs. Projection Shortcut:表3对比了3种选项:A)zero-padding shortcut用来升维,所有的shortcuts是无参的;B)projection shortcut用来升维,其他的shortcut用Identity mapping;C)所用的shortcuts都用projection。
从表3可以看出,A)-C)三种选择都相对的比plain net好。B比A稍微好点,这因为A中的zero-padding没用残差学习;C比B好很多,这因为projection引入了更多的参数。A/B/C间的细微差别表明projection对于解决退化问题不是必须的。因此,为了减少内存和时间复杂度以及模型体积,后文中我们不使用C。
更深的瓶颈结构:如图5,对每个残差函数
F
\mathcal{F}
F,我们使用3层堆叠而不适用2层。对应的3层分别是1x1,3x3,1x1的卷积层,其中1x1的卷积层主要用来降维和升维(恢复)用的,这使得3x3的卷积的输入输出的维度更小。无参的Identity shortcut对瓶颈结构尤其重要。如果Identity shortcut被替换为projection,时间复杂度和模型大小将翻倍,因为shortcut被连接到2个高维度的节点。因此,Identity shortcut对瓶颈结构来说会产生更高效的模型。
50层的Resnet:将34层网络中的2层构造块换为3层瓶颈结构,产生一个50层的Resnet,使用Option B来升维,模型有3.8 billion的FLOPs。
101层和152层的Resnet:使用更多的3层构造快来构造更深的网络。虽然深度增加,但是和VGG-16/19相比,仍具有更低的复杂度。
从表3和表4可以看出,更深的Resnet有更高的精度。
从表5中可以看出,ResNet和最新的方法比,top-5的测试误差最低。
3.2 CIFAR-10和分析
这部分实验注重研究极度深的网络的行为,而不是关注性能的提升。=按照图3的中间和右边的plain/resnet,设计2个结构网络。网络的输入是32x32的图像,每个像素减掉均值。第一层是一个3x3的卷积层。让后堆叠一个
6
n
6n
6n个3x3的卷积层,feature map的大小分别取
{
32
,
16
,
8
}
\{32,16,8\}
{32,16,8},每个尺寸的feature map的层数为
2
n
2n
2n(这是因为有三种feature map尺寸,共
6
n
6n
6n层,所以每种
2
n
2n
2n层)。相应feature map的个数为
{
16
,
32
,
64
}
\{16,32,64\}
{16,32,64}。降采样是通过stride=2的卷积操作实现。网络的最后一层是全局平均池化层和10路的带softmax的全连接层。因此总共有
6
n
+
2
6n+2
6n+2层。下表总结了网络结构信息:
每两个3x3的卷积层使用一个shortcut connection,类似与图5左边的结构(因此共有
3
n
3n
3n条shortcuts)。这里都使用Identity shortcut(Option A)。
从图6的左边和中间可以看出,结果和ImageNet的实验结果基本一致,并且110层的resnet比浅层的resnet好。
层响应分析:图7展现了在BN之后,非线性操作之前,每个3x3层的输出响应的标准差。对Resnet来说,这个分析揭示了残差函数的响应强度。图7的结果表明,和Plain网络相比,Resnet有更小的响应。这个结果支撑了我们研究的动机:残差函数可能比非残差函数更趋近0,并且更深的resnet有更小幅度的响应。
超过1000层的探索:图6的最右边展示了1202层的网络的误差比110层的大,这是过拟合导致的,因为1202层网络对CIFAR-10这个小数据集来说太大了。未来将研究更好的正则化技术来提升结果。
3.3 PASCAL和MS COCO上的测试结果
这部分主要证明Resnet有在其他任务上的泛化能力。表7和8的结果证明了这一点。附录也详细介绍了这一部分实验的细节,有兴趣的可以参考附录。