Deep Residual Learning for Image Recognition(ResNet) 阅读笔记
原论文链接:Deep Residual Learning for Image Recognition
问题起源:
在使用神经网络去完成一些问题时,通常的一个直接感受是当随着网络的加深,网络对于训练样本的拟合程度会不断增加。但是论文中提出一个反直觉的推论,那就是随着网络加深,如果不采取特殊的手段,随着网络的加深,在训练集和测试集的误差表现上,较浅的网络将会取得更好的成绩。实验数据如图所示:
对问题的分析:
很显然,出现这种情况不是由于过拟合导致的。这个问题在文中被称为degradation。作者认为这个问题是由于优化困难而造成的。对此,文中做出如下实验:采用一个浅层网络和一个深层网络进行对比,深层网络是在浅层网络的基础上添加额外的层形成的。(为便于理解,该实验的数据为随机写的)假设对于浅层网络进行训练之后,可以使其训练误差达到2%。那么按照正常的推论,对于深层网络的训练应该也能达到相同的水准(这是因为深层网络是以浅层网络为基础的,对于新添加的层,只需要学习到的参数能够保证输入输出不发生变化即可)。但是,经过实验可以发现,深层网络完全无法达到浅层网络的结果。也就是说,在对深层网络进行优化的时候,网络并不能够学习到适当的参数。
残差网络的构建:
在传统的网络中,我们需要做的事情就是找到一个最优的函数,使得输入x时,能够得到一个恰当的y。而在构建残差网络的过程中,我们把隐含层看做是F(x),当输入x时,最终得到的输出为F(x)+x,也就是H(x)=F(x)+x。
将整个block用数学表达为:当输入和输出的通道数,尺寸相同时:y = F(x, {wi}) + x
当输入和输出的通道数,尺寸不相同时:y = F(x, {wi}) + ws * x
当不相同时,文章使用两种方法进行处理:A)直接使用0进行填充,使得输入输出保持一致。这种方法的优点是不会增加可学习的参数,有利于之后对网络进行比较。B)使用1 * 1 的卷积核对输出进行调整。
对这些方法文章做出了比较:
C方法是指使用B方法,但是对于不需要进行调整的部分也都在shortcut上增加一个1 * 1的卷积层。文章为了方便对不同的结构进行比较(维持参数基本不变),基本使用方法A。
以上的block构建基于一个假设,也就是输入在通过一个block之后所得到的的输出会发生变化,但是应该变化不大。也就是将F(x)看做是对x的一个扰动。那么在这种情况下,对block中参数的学习是以x为参考的,而不是在初始化之后完全学习出一个新的函数。
对于未使用残差网络(左)和使用残差网络(右)的对比可以明显发现:1)在前期,使用残差网络后,收敛速度明显快于未使用残差网络。2)解决了degradation的问题,在使用残差网络后,随着层数的增加,网络对于样本的拟合能力在进一步提升。
最终确定的网络:
1 * 1的卷积层主要是实现对通道数的降低,从而减少整个block的计算量(在Inception的论文中可以看到这个思想)。
(以下部分由于我对layer response的定义不明确,所以暂时不确定理解的正确性)
上文提到过,我们将F(x)看做是对x的一个扰动,作者在CIFAR-10上进行了实验。
可以看到,当层数足够深时,3 * 3卷积层的输出,其标准差处于一个较低的水平,也就是当层数加深后,3 * 3卷积层的输出对于样本的变化不敏感,起的作用更像是对x的一个小扰动。
总结
那么论文主要部分就基本结束了,总结一下残差结构的优点:1)可以适用与更深的网络,使得对于网络的优化更加简单(梯度消失/爆炸可有BN层解决)2)对于相同层数的网络,基本没有增加算法的复杂性。
作者挖的坑:
1、对于34层的未使用残差结构的网络来说,它其实是有能力达到与之相匹配的残差网络的结果。对于此问题,作者打算研究优化困难的问题,目前推测是由于收敛速度过慢,影响了训练误差的降低。
2、在对CIFAR-10的实验过程中,作者构建了1202层的残差网络,但是该网络的误差略高于110层的残差网络,作者认为是该数据集不需要这么深的网络,并且计划研究强正则化是否会对最后的结果有所帮助。