Deep Residual Learning for Image Recognition论文阅读笔记

  1. ResNet这篇文章为CVPR2016的最佳论文奖(conference on computer vision and pattern recognition);
    论文链接:https://arxiv.org/abs/1512.03385
    代码:https://github.com/KaimingHe/deep-residual-networks

下面开始说论文正文部分

  1. 在神经网络中,常遇到的2个问题:(Is learning better networks as easy as stacking more layers?)
    1) 当网络变深以后会带来梯度消失/爆炸( vanishing/exploding gradients)的问题,导致不能收敛,阻碍网络的训练。 对于这一个问题,在很大程度上被 normalized initialization 和 intermediate normalization layers(即网络中间的batch normalization)处理了
    2)当更深层次的网络能够开始收敛时,一个退化(degradation)问题就暴露出来了。网络随着深度的增加(从20层增加到56层),训练误差和测试误差非但没有降低,反而变大了。然而这种问题的出现并不是因为过拟合(overfitting),如下图,层数更多的网络表现并没有显著提高反而不如浅层网络的效果(56层的error比20的error大),(图中的“plain” network指的是没有使用 shortcut connection 的网络)
    Deep Residual Learning for Image Recognition论文阅读笔记
图1 不同深度的神经网络效果对比图
  1. 理论上,在训练集上深层不应该比 浅层差,即越深的网络不会比浅层的网络效果差。但为什么会出现上图 这种情况呢?随着层数的增多,训练集上的效果变差?这被称为退化问题(degradation problem)。原因是随着网络越来越深,训练变得原来越难,网络的优化变得越来越难。理论上,越深的网络,效果应该更好;但实际上,由于训练难度,过深的网络会产生退化问题,效果反而不如相对较浅的网络。而残差网络就可以解决这个问题的,残差网络越深,训练集上的效果会越好。于是,作者就提出了深度学习残差框架(a deep residual learning framework)。结构如下:
    Deep Residual Learning for Image Recognition论文阅读笔记

    图2 残差块

    残差网络通过加入 shortcut connections,变得更加容易被优化。包含一个 shortcut connection 的几层网络被称为一个残差块(residual block),如图2,shortcut connection指的是图 2 右侧从 x 到 ⨁ 的箭头。
    这种网络的优点有:these residual networks are easier to optimize(① 更容易优化)and can gain accuracy from considerably increased depth.(②更深的网络层也能获得较好的准确率)

  2. 关于Figure 2. Residual learning: a building block.的理解:
    Deep Residual Learning for Image Recognition论文阅读笔记

    图2 残差块

    如图2所示; x x x 表示输入, F ( x ) F(x) F(x) 表示残差块在第二层**函数之前的输出,即 F ( x ) = W 2 σ ( W 1 x ) F(x) = W_2\sigma(W_1x) F(x)=W2σ(W1x),其中 W 1 W_1 W1 W 2 W_2 W2 表示第一层和第二层的权重, σ \sigma σ 表示 ReLU **函数。(这里省略了 偏置项bias)最后残差块的输出是 σ ( F ( x ) + x ) \sigma(F(x) + x) σ(F(x)+x)
    当没有 shortcut connection(即图 2 右侧从 x 到 ⨁ 的箭头)时,残差块就是一个普通的 2 层网络。残差块中的网络可以是全连接层,也可以是卷积层。设第二层网络在**函数之前的输出为 H ( x ) H(x) H(x)。如果在该 2 层网络中,最优的输出就是输入 x x x,那么对于没有 shortcut connection 的网络,就需要将其优化成 H ( x ) = x H(x)=x H(x)=x;对于有 shortcut connection 的网络,即残差块,如果最优输出是 x x x,则只需要将 F ( x ) = H ( x ) − x F(x)=H(x)−x F(x)=H(x)x 优化为 0 即可。后者的优化会比前者简单。这也是残差这一叫法的由来。

  3. 对于作者提出的网络结构,有2种情形。
    1 ) 当F和x相同维度时,直接相加(element-wise addition),公式如下: y = F ( x , W i ) + x . . . . . . . . . . ( 1 ) y = F(x, {W_i}) + x..........(1) y=F(x,Wi)+x..........1其中,x和y为输入和输出 F ( x , W i ) F(x, {W_i}) F(x,Wi)函数表示要学习的残差映射,如上图Fig.2,这里有2个网络层, F = W 2 σ ( W 1 x ) F= W_2\sigma(W_1x) F=W2σ(W1x)表示残差块在第二层**函数之前的输出,其中 W 1 W_1 W1 W 2 W_2 W2 表示第一层和第二层的权重, σ \sigma σ 表示 ReLU **函数。
    这种方法不会增加网络的参数以及计算复杂度。
    2) 当F和x维度不同维度时,需要先将x做一个变换(linear projection),然后再相加,公式如下: y = F ( x , W i ) + W s x . . . . . . . . . . ( 2 ) y = F(x, {W_i}) + W_sx..........(2) y=F(x,Wi)+Wsx..........2其中, W s W_s Ws仅仅用于维度匹配上,对于x的维度变换,一种是zero-padding,另一种是通过1x1的卷积。

  4. 测试网络
    6.1 实验开始前的相关介绍
    从图中可以看到,使用到的网络有VGG-19, 34-layer plain , 34-layer residual,其中34-layer 表示含可训练参数的层数为34层,池化层不含可训练参数;图 3左侧是 作为参考的VGG-19模型,中间是具有34个参数层的plain network,右侧是具有34个参数层的residual network,网络的详细内容:
    1) 基准网络为:基于VGGNet,采用的卷积核为3x3,其中有两个设计原则,①对于有相同的输出feature map尺寸,filter的个数相同;②当feature map尺寸减半时,filter的数量加倍。下采样的策略是直接用stride=2的卷积核。网络最后网络以全局平均池化层(global average pooling layer,不需要参数,参考http://www.cnblogs.com/hejunlin1992/articles/7750759.html)和具有softmax的1000维全连接层(后面接softmax)结束
    2) 残差网络和中间部分的 plain network 唯一的区别就是 shortcut connections。这两个网络都是当 feature map 减半时,filter 的个数翻倍,这样保证了每一层的计算复杂度一致当输入输出具有相同尺寸时,identity shortcuts可以直接使用(实线部分),就是公式:1: y = F ( x , W i ) + x y = F(x, {W_i}) + x y=F(x,Wi)+x;当维度增加时(虚线部分),有以下两种选择:A)仍然采用恒等映射(identity mapping),超出部分的维度使用0填充;B) 利用1x1卷积核来匹配维度,就是公式2: y = F ( x , W i ) + W s x y = F(x, {W_i}) + W_sx y=F(x,Wi)+Wsx。对于上面两种方案,当shortcuts通过两种大小的feature map时,采取A或B方案的同时,stride=2。
    残差网络可以不是卷积神经网络,用全连接层也可以

Deep Residual Learning for Image Recognition论文阅读笔记

图 3 ImageNet的网络架构例子( VGG-19、plain network、ResNet)
6.2 实验

Deep Residual Learning for Image Recognition论文阅读笔记

图4 训练
 从图4左边可以看出,plain-34网络不管是训练误差还是验证集上的误差,都要比plain-18要大,由于plain网络采用了BN来训练,并且作者也验证过前向传播或者反向传播中,信号并没有消失,因此说明出现了退化现象  再看图4右边的残差网络,结合下面的表2,34层的resNet比18层的resNet在训练集和验证集上的误差都要小,说明并没有出现退化现象。34层的resNet与34层的plain网络相比,误差减少了3.5%,说明在深度网络中残差学习是有效的。另外,18层的ResNet与18层的plain网络相比,18层的ResNet训练更快了。

Deep Residual Learning for Image Recognition论文阅读笔记
上面展示了,恒等映射(identity shortcuts)可以帮助训练。接下来我们测试一下projection shortcuts(公式2)的效果。有3种测试方案。A)当维度增加时,使用zero-padding shortcuts,这些所有的shortcuts是没有参数的(与Table2和Fig4右侧的图一致);B) projection shortcuts只用于维度增加的情况,其他情况(输入输出维度一致时)还是使用恒等映射(即公式1);C)所有的shortcus都是projection(即公式2)。测试结果如下表:
Deep Residual Learning for Image Recognition论文阅读笔记
从上表中可以看出,方案A,B和C的效果都要比plain-34要好。B比A稍微好一点,这是因为A的用零填充的那几个维度没有进行残差学习。C要B好的多,这是因为引入了额外的参数。但是总体上A,B和C的差别还是比较小的,说明projection shortcuts在解决退化问题中并不是十分重要。因此,为了减少参数和计算量,文章不使用方案C

  1. Deeper Bottleneck Architectures
    下面描述用于ImageNet的更深的网络结构。考虑到训练时间,我们将下图中左侧的网络改成右侧的网络。1x1的卷积的作用是减少和增加(恢复)维度,使得3x3的卷积核的个数可以减少。
  • Deeper Bottleneck Architectures
  • 50-layer ResNet
  • 101-layer and 152-layer ResNets
  • 模型之间的比对

未完成
8. 为什么残差网络会表现会更好?
  我们给一个网络不论在中间还是末尾加上一个残差块,并给残差块中的 weights 加上 L2 regularization(weight decay),这样图 2 中 F(x)=0 是很容易的。这种情况下加上一个残差块和不加之前的效果会是一样,所以加上残差块不会使得效果变得差。如果残差块中的隐藏单元学到了一些有用信息,那么它可能比 identity mapping(即 F(x)=0)表现的更好。

文献: