论文原文:> Deep Residual Learning for Image Recognition 作者信息:何凯明 深层的网络很难训练,一般认为网络越深效果越好。一个较深的网络经过训练之后至少能够达到一个浅网络的性能。但是,事实却是,深网络的性能可能还不如一个较浅的网络。所以resnet就提出了一种short cut的方式,使得深层的网络通过short cut之后可以在特定条件下等价于一个浅的网络,使得其训练之后至少能够达到一个浅层网络的效果。

深层网络的几个问题

一、网络收敛:
阻碍网络越深时收敛的原因:梯度爆炸和梯度消失;
一些解决方法:参数归一化的初始化、中间加入归一化层;
二、准确率饱和
饱和之后就会迎来下降;此下降不是由于过拟合;
深层网络虽然在理论上要优于浅层网络,但是实验中发现其并不那么容易优化。

论文提出的解决方法:

  • 引入残差映射:ResNet_2016CVPR - 图1;(残差:ResNet_2016CVPR - 图2
  • 残差学习相对简单。在最极限的情况下:残差块是一个恒等映射(Identity mapping)ResNet_2016CVPR - 图3 至少能够达到浅层网络的效果吧!
  • 虽然引入了残差映射,网络深度还是有极限;

    残差特点

    与残差网络很相似的:highway networks。

    灵感来源:退化问题可能表明恒等映射难以用多层非线性层渐进逼近(不易学到),那么就利用一种方式使得恒等映射易于学到(short cut)。(利用恒等映射作为一种预处理)
    (多层非线性层被认为可以逼近任意函数)
    res.png
    其实在神经网络内部运算就相当于是矩阵乘法等运算,ResNet_2016CVPR - 图5相当于ResNet_2016CVPR - 图6,也就是对x乘上矩阵。

    网络结构

    Plain Network的构建原则:
    (1)输入,输出如果feature map大小相同,那么用的filter和之前的channel数相同;
    (2)输出size减半,那么filter数double;
    利用这种原则保证信息的不丢失。
    Residual Network:
    引入了short cut;
    (1)short cut可以用于输入和输出feature map size相同的层之间;
    func.png
    (2) 如果在输入输出feature map大小不同的地方用short cut,那么可以将short cut处的数据进行一个线性映射,映射成和残差输出feature map大小相同;(映射本质上就是矩阵运算)
    func2.png
    cut1.pngcut2.png
    值得注意的是:
  1. channel保持一致,则需要保证feature map的大小相同(卷积操作会减小size,需要通过padding);
  2. 对于右边的图像,当channel增倍时,size同样会half;而对于输入和输出的size和channel不同的两种解决方法(针对short cut)(都是等价为一个线性映射ResNet_2016CVPR - 图11
    • short cut的输入通过补零进行维度增加,然后进行stride为2的类似sample的操作,是的size减半(相当于先stride为2进行采样,然后由于不同channel只给残差部分输出的前一半个维度加有效值,后面的维度不加);
    • 直接利用stride为2的ResNet_2016CVPR - 图12卷积,用于改变channel数,同时由于stride为2,szie也会减半,从而和残差输出对应;
    • 上面两种操作都是有downsample操作的。

(channel也是dimension的意思)

数据增强

  • 数据增强的方式和VGG的很像,scale的大小是一个范围。然后进行图像的随机裁剪或者水平翻转。除此之外还用了color的增强。
  • 并且在每个conv之后,激活函数之前,都加入BN层。(BN还可以确保前向传播过程中含有非零变量)
  • 利用带mini-batch 256的SGD进行训练。
  • lr从0.1开始,每次到达plateaus之后变为十分之一。
  • weight decay为0.0001,momentum为0.9

    残差网络

    论文中有三种处理不同维度的输入输出之间short cut的方式:
    A. 利用补0,将增加的其它维度补为0;
    B. 补零和映射都用;
    C. 只有映射;
    最后效果最好的是C,但是C由于引入了映射操作,增加了model的size。通常还是选择A方式,减小模型和计算量。
    值得注意的是,VGG模型虽然深度不如ResNet,但是其模型的参数以及计算量都大于ResNet。(不要盲目认为层数越多,模型就越大,和设计有关)

    BottleNeck

    降低运算量,使得 ResNet_2016CVPR - 图13卷积时有相对小的channel。
    其结构如下图所示:

ResNet_2016CVPR - 图14
整体网络结构如下图:
image.png
实现时,可以将其看做4个大的层,每个大层里面又具有一定的规律性。