ResNet论文阅读笔记 基本信息 主要收获 Abstract 1. Introduction 2. Related Work 3. Deep Residual Learning 4. Experiments

  • 论文名称

    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问题和评估本文的方法。
      1. 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.
      2. 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,我们猜想本方法也适用于其它视觉和非视觉问题

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):@绝版臭咸鱼

微信公众号:@臭咸鱼

转载请注明出处,欢迎讨论和交流!