基本信息
-
论文名称
Deep Residual Learning for Image Recognition
-
作者
Kaiming He
Microsoft Research
-
发表时间
2015年
-
来源
CVPR2016
主要收获
- 知识
- 较深的神经网络难以训练
- 网络的深度对于许多视觉识别任务至关重要
- 152层的ResNet,8× deeper than VGG,但却有更低的计算复杂度,在ImageNet测试集上错误率为3.57%,获ILSVRC 2015中图像分类任务的第1名。
- ResNet在COCO目标检测数据集上获得了28%的相对改进,在其它几个数据集和任务上也取得第1名。
- 假设多个非线性层可以渐近地逼近复杂函数(该假设还有待讨论,详见引文),则等效于假设它们可以渐近地近似残差函数。
- 理论基础:假设目标函数为H(x),可将其表示为H(x)=F(x)+x。若最优解是identity mapping,则此时F(x)为0,使参数为0比学习H(x)更加容易。
- F(x)+x可以通过shortcut connections实现,不需额外参数,仅需微小计算量(element-wise addition)。
- 基础网络(Plain Network)采用VGGNet的设计思路,主要使用3×3卷积并遵守2个设计原则:①若输出特征图的尺寸不变,则通道数也应不变;②若输出特征的尺寸减半,则通道数应增1倍以保留时间复杂度。
- ResNet50网络结构图解以及Bottleneck结构图解
- 未知点
- residual:并不只是ResNet中的residual,在其它领域和算法中也有residual的概念,有待了解。
- inception:《Going deeper with convolutions》
- highway networks:《Highway networks》、《Training very deep networks》
- VGGNet的设计思想
- bacth normalization
- mini-batch
Abstract
- 较深的神经网络难以训练,本文提出一个residual learning framework训练较深的神经网络。
- We explicitly reformulate the layers as learning residual functions with reference to the layer inputs, instead of learning unreferenced functions.
- 通过大量empirical实验证明,本文中提出的残差网络更易优化,并可以从大量增加的网络深度中获取准确性。用152层(8× deeper than VGG),但却有更低的计算复杂度,在ImageNet测试集上错误率为3.57%(top5),获ILSVRC 2015中图像分类任务的第1名。
- 网络的深度对于许多视觉识别任务至关重要。ResNet在COCO目标检测数据集上获得了28%的相对改进,在其它几个数据集和任务上也取得第1名。
1. Introduction
-
背景/问题
-
深度网络以1种end-to-end的多层的方式,自然地集成了low/mid/high-level features和classifiers[引],并且features的“levels”可以通过堆叠层数(深度)来enrich。
-
最近有研究[引]证明网络的深度十分重要,ImageNet上的领先结果[引]都使用了"very deep" model[引](16到30层),较深的网络在其它视觉识别任务中也有好的效果。
-
既然深度如此重要,那有个问题是:Is learning better networks as easy as stacking more layers。要回答这个问题,1个障碍是梯度消失/爆炸(会影响模型收敛),该问题已通过normalized initialization[引]和intermediate normalization layers[引]得到很大的解决,可以使数十层的网络通过SGD收敛。
-
深度模型收敛之后,又遇到了the degradation problem:随着网络深度增加,准确率变得饱和然后迅速下降,并且实验结果说明这种下降并不是过拟合导致的。相关研究[引]指出给1个层数合适的网络添加更多的层会导致训练误差增高,本文图1和图4也彻底证明了这一点。
考虑1个shallower architecture并基于此添加一些层形成1个deeper counterpart,如果添加的这些层是identity mapping,那这个deeper counterpart则等同于这个shallower architecture。这说明1个deeper model的训练误差应不高于其shallower counterpart。但实验证明,目前的模型并没有达到这个效果。
-
-
本文所提方法的原理及优点
-
本文提出1个deep residual learning framework来解决degradation问题。each few stacked layers并不直接拟合1个desired underlying mapping:(H(x)),而是拟合1个residual mapping:(F(x)=H(x)-x),即原先想要的underlying mapping为(H(x)=F(x)+x)。
-
我们假定该residual mapping比原先的mapping更易优化。在极端情况下如果identity mapping是最优的,使residual为0比拟合1个identity mapping更加容易。
(F(x)+x)可以通过shortcut connections实现,在本方法中其仅需进行identity mapping和相加,如原文图2所示。这种identity shortcut connections不需要额外参数和计算量。整个网络仍可以通过SGD进行end-to-end训练,并易于通过Caffe等开源库实现。
-
-
实验与结果
- 本文在ImageNet上进行了全面实验以说明degradation问题和评估本文的方法。
- Our extremely deep residual nets are easy to optimize, but the counterpart “plain” nets (that simply stack layers) exhibit higher training error when the depth increases.
- Our deep residual nets can easily enjoy accuracy gains from greatly increased depth, producing results substantially better than previous networks.
- 在CIFAR-10上进行实验也出现了类似现象,说明degradation问题和本文方法并不只适用于特定数据集。我们训练了超过100层的网络,还尝试了超过1000层的网络。
- 在ImageNet上,我们的152层网络是最深的,但其比VGG计算复杂度更低,在ImageNet测试集上错误率为3.57%(top5),获ILSVRC 2015中图像分类任务的第1名。在其它识别任务中也有出色表现,有多项第1名(略)。这说明the residual learning principle is generic,我们猜想本方法也适用于其它视觉和非视觉问题。
- 本文在ImageNet上进行了全面实验以说明degradation问题和评估本文的方法。
2. Related Work
-
Residual Representations
-
image recognition
VLAD[引]、Fisher Vector[引]、encoding residual vectors[引]
-
low-level vision and computer graphics
Multigrid method[引]、hierarchical basis preconditioning[引]、
-
-
Shortcut Connections
-
some practices and theories of shortcut connections
具体看引文
-
comparison with the shortcut connections with gating functions(shortcut connections with gating functions)
-
3. Deep Residual Learning
3.1. Residual Learning
假设某几个连续的层(并非必须是整个网络)要拟合的目标是函数H(x),x是其中第1层的输入。假设多个非线性层可以渐近地逼近复杂函数(该假设还有待讨论,详见引文),则等效于假设它们可以渐近地近似残差函数,即F(x)=H(x)-x(假设输入和输出的维数相同)。虽然H(x)和F(x)+x形式相同, 但学习成本是不同的。这种重构的思路来源于原文图1所示的the degradation problem,其指出深度模型在通过多个层拟合identity mappings时遇到了问题。通过重构,训练师使参数趋于0会更容易。
在真实情况中,虽然identity mappings并不一定是最优解,但该思路还是可能对the degradation problem进行了precondition。相对于1个zero mapping,如果最优解更接近于identity mappings,那么参考identity mappings做扰动应该比从头学习1个新的函数要更容易。本文通过实验(图7)表明,学习到的残差函数通常具有较小的响应(small responses),这表明identity mappings提供了合理的precondition。
3.2. Identity Mapping by Shortcuts
每几个层都进行residual learning,形成1个具有多层的block(见原文图2)。图2所示的block有2层,其公式(式1)为(y=F(x,{W_i})+x=sigma(W_2sigma(W_1x+b_1)+b)),其中(sigma)是ReLU。
F(x)+x通过shortcut connection实现,即保存输入x然后和输出F(x)相加得到F(x)+x,并且使用的这种shortcut connection并不增加参数和计算量(仅增加了微不足道的element-wise addition)。
在式1中,F(x)和x的通道数必须是一样的,否则就需要在shortcut connections中对x进行1个线性投影(linear projection)以匹配维度,即式2(y=F(x,{W_i})+W_sx),其中(W_s)仅被用来匹配F(x)的维度。
每个block中可以有更多层,比如3(如图5所示的BottleNeck),但如果每个block中只有1层的话,公式就变成了1个线性层(y = W_1x+x)。
这种block也适用于卷积层,其中F(x)+x是每个维度对应位置元素相加。
3.3. Network Architectures
-
Plain Network
根据VGG网络的理论,主要使用3×3卷积并遵守2个设计原则:①若输出特征图的尺寸不变,则通道数也应不变;②若输出特征的尺寸减半,则通道数应增1倍以保留时间复杂度。
本文直接通过步长为2的卷积层进行下采样,网络尾部是1个global average pooling layer和1个1000-way fully-connected layer with softmax,共有34层权重(图3中间的网络)。
该模型中的通道比VGG网络更少,有更低的复杂度,FLOPS是VGG19的18%。
-
Residual Network
基于上述Plain Network,添加shortcut connections(图3右边的网络),形成ResNet34。
对于identity shortcut,当输出和输入的通道数相同时(实线),就直接每个通道对应位置元素相加;
当输出的通道数大于输入时(虚线),有2个方法:①The shortcut still performs identity mapping, with extra zero entries padded for increasing dimensions. ②通过式2表示的projection shortcut匹配通道(以1×1卷积实现)。对于这2个方法,当输出和输入的尺寸不同时,这是通过步长为2实现(尺寸减半,通道数对应增加1倍)的。
3.4. Implementation
在ImageNet上
按照引文41,将图片根据短边随机缩放到[256,480]。随机224×224 crop,随机水平翻转,减去像素均值。
按照引文21,每个卷积后和每个激活函数前使用bacth normalization。
按照引文13,初始化模型参数。
从头训练,SGD,mini-batch大小为256,学习率从0.1开始当loss稳定时除以10,训练了60W个iteration。
weight decay 0.0001,momentum 0.9。
不使用dropout。
4. Experiments
4.1. ImageNet Classification
-
Plain Networks
略
-
Residual Networks
略
-
Deeper Bottleneck Architectures
考虑到可接受的训练时长,使用Bottleneck(图5所示),每个block中包含3个层:1×1卷积、3×3卷积、1×1卷积,其中2个1×1卷积分别用来减少和恢复维度,使得3×3卷积接收和输出更少的通道数。
不需额外参数的identity shortcuts对于Bottleneck非常重要,如果把Bottleneck中的identity shortcut换成projection,模型的时间复杂度和参数量就会增加1倍,因为shortcut连接到了2个高维特征上。所以identity shortcuts使得基于Bottleneck的模型更加有效。
-
50-layer ResNet
ResNet50,将ResNet34中包含2层的block换成Bottleneck,就得到了ResNet50。当输出的通道数大于输入时,使用第2种方法(式2)。
-
略……
Github(github.com):@chouxianyu
Github Pages(github.io):@臭咸鱼
知乎(zhihu.com):@臭咸鱼
博客园(cnblogs.com):@臭咸鱼
B站(bilibili.com):@绝版臭咸鱼
微信公众号:@臭咸鱼
转载请注明出处,欢迎讨论和交流!