研究问题

       深层神经网络往往更难训练,我们提出了一种残差学习框架,使得网络深度可以大幅度增加,同时降低了训练难度。我们明确地将每一层改造成相对于输入进行学习的残差函数,而不是学习无参考函数。大量的实证证据表明,这种残差网络更容易优化,并且可以通过显著增加网络深度来提高准确率。我们在ImageNet数据集上评估了最大深度达到152层的残差网络——比VGG网络深8倍,但复杂度更低。这些残差网络的集成在ImageNet测试集上的错误率为3.57%。此外,我们还对CIFAR-10数据集的100层和1000层进行了分析。表示的深度对于许多视觉识别任务至关重要。仅仅由于我们创建了极其深入的表示,我们在COCO对象检测数据集上获得了28%的相对改进。

一、Introduction

第一段:公平角度论述深度神经网络在图像分类方面贡献以及当前角度下深度的重要性。
第二段:深度如此重要,那好的网络就是不停地叠加层吗?当深度很深时候,梯度就会出现爆炸或消失的现象,这个问题通过规范化初始化(权重在初始化的时候要适中不能很大也不能很小)和中间规范化层(校验每个层之间的输出和其梯度的均值与方差)来解决,使用这些技术之后,较深的网络是可以收敛了。
第三段:当网络变深时,不论是训练精度、测试精度或者验证精度都会变差。但是这并不是过拟合,因为其训练误差也变高了。此时虽然网络是收敛的,但是训练的结果并不好。
第四段:主要讲了当深度增加精度会变差。当前训练精度退化表明,并非所有的系统都容易优化。当前考虑一个较浅的网络和它对应的较深的版本(在浅层次中多加一些层进去),如果浅层次网络效果很好的话,那么深层次的版本不会变差,因为新加的层学成identity mapping(输入是x,输出也是x,就是将权重学习成简单的1/n,使得输入和输出一一对应),虽然在理论上存在这样的最优解,但是SGD找不到。
第五段:从而这篇文章就找到一个方法,使得深度变深但是精度不会下降的方法,即深度残差学习(deep residual learning framework)。核心思想:最初输入x,通过底层的学习输出为X,在添加的层中需要学习的是H(x),但是不直接学习H(x),而是学习H(x)-x,即F(x),所以优化的就是H(x)-x,最终的输出是F(x)+X。
第六段:Shortcut connections are those skipping one or more layers.(介绍快捷连接是跳过一个或几个层次来连接,就是将底层输出加过来的那个过程),只执行身份映射,其输出被添置到堆叠层的输出中,即执行identity mapping。快捷连接既不增加额外的参数,也不增加计算复杂度。
第七段、第八段和第九段:通过在实验发现两个问题:第一是当深度极深时候,残差网络很容易优化,但是简单的堆叠网络层效果就很差;第二是残差网络很容易从深度大大增加中获得精度收益。分别在ImageNet数据集和CIFAR10数据集进行训练都取得不错的结果。
第十段:通过对比表达,当前残差网络比VGG网络深度深,但复杂度却低于VGG。表达了残差网络原理在各方面通用.

二、Related work

Residual Representations与Shortcut Connections

三、Deep Residual Learning(深度残差学习)

3.1  Residual Learning (残差学习)

第一段:把H(x)看作由几个堆叠层拟合的底层映射,而x就是这几个堆叠层中第一层的输入。如果多个非线性层逼近复杂函数,就近似为逼近残差函数H(x)-x。让这几个堆叠层近似于残差函数H(x)-x,所以原始函数就变为F(x)+x。
第二段:曾经讨论,针对一个浅层次网络,其对应的深层次体系结构如果多出来的层为自身映射,则深层次网络的训练误差不会比浅层次网络大很多。退化问题表明,求解器在逼近非线性层的恒等映射存在困难,但残差学习中表达,如果该恒等映射是最优的,求解器可以很简单的将非线性层的权值向0驱动,从而逼近恒等映射。
总结:将H(x)看作由几个堆叠层拟合的底层映射,我们的最终目的就是想让这几个堆叠层近似于残差函数(H(x)-x),原始函数变为F(x)+x。因为我们认为当非线性层逼近复杂函数时,就会逼近残差函数(H(x)-x)。想要让非线性层逼近残差函数,就需要将恒等映射为最优,从而求解器容易将非线性层的权值向0驱动,从而让非线性层逼近残差函数。但身份映射并非最优恒等映射,只有当最优函数更接近恒等映射而非零映射时,求解器才更容易找到恒等映射。

3.2 Identity Mapping by Shortcuts(通过快捷连接进行身份映射)

第一段:对每几个堆叠层采用残差学习,y = F(x, {Wi}) + x,其中x,y分别为输入变量和输出变量,F为带学习的残差映射。在该实验中的图片中,F = W2σ(W1x),其中W1x表示对输入变量x进行一次操作,σ表示进行ReLU非线性,最后F+x通过快捷连接和元素加法来实现。
第二段:解释上一段中使用的快捷连接既不会引入新参数,也不会增加计算复杂度。
第三段:由于第一段中使用公式都是基于x和y维度一样的情况,所以本段介绍当x和y维度不一致时匹配维度的方法。
第四段、第五段:残差函数F的形式是多种多样的,可以两层可以三层,可以适用于全连接层同样也适用于卷积层。

3.3  Network Architectures(网络体系结构)

对比普通网络和残差网络的体系结构,在普通网络中主要受到了VGG网络原理的影响,其中普通网络的模型比VGG模型有更少的过滤器和更低的复杂性。而残差网络就是在普通网络的基础上增加了快捷连接,当输入输出维度相同时,直接使用标识快捷方式;当维度增加时,有两种方法,第一种是仍然使用标识映射Eqn(1),维度增加就填充额外的零项,第二种就是使用Eqn(2)。
重点:残差连接处理输入和输出形状不同的情况,两种方案:第一种是在输入和输出上添加零项使得维度相同,可以相加操作;第二种是投影,使用1*1卷积层,在空间维度上不做任何事,在通道维度上做改变,使得输出通道是输入通道的两倍,当通道数加倍,则输入的高和宽都减半,所以采用步幅为2才能使高宽和通道数都匹配。

3.4. Implementation(实现)

本段讲述实验的一些细节,把短边随机采样到[256,480],(AlexNet是将短边放到256,长边按比例裁剪),随机放到比较大的好处是最后裁剪成224*224时随机性会更多,并减去每像素的平均值,使用标准的颜色增强、批归一化(BN)等。

四、Experiment(实验)

实验部分包括了怎样评估ImageNet,以及各个不同版本的ResNet的涉及。

4.1. ImageNet Classification(ImageNet分类)

普通的网络主要评估了18层和34层的网络,34层普通网络的测试、验证误差比18层普通网络高很多,同时收敛的也快很多。同样也评估了18层和34层的残差网络,其基线架构就是在普通网络的基础之上增加了快捷连接,对所有快捷键使用标识映射,对增加维度使用零填充,使得没有增加额外的参数。结果表明,34层的残差网络要比18层的效果好2、8%,且表现出更低的训练误差。
解释图4中初始阶段训练误差(细线)大于测试误差(粗线)的原因:因为在最初训练时,做了大量的数据增强,导致训练误差比较大;而测试时,没有做数据增强,噪声比较低,所以一开始误差较低。图4中训练、测试误差骤降的原因:因为该网络的学习率设置和AlexNet一致,都是当训练误差或者测试误差趋于平稳后,手动使学习率*0.1(该方法在当前不常用,因为需要人工一致守着),突然改变SGD的学习率自然引起较大的变动。


    实验证明,无参数、标识快捷方式有助于训练。后比较了当输入输出形状不同时三种方法,第一种是添加零项,第二种是1*1投影,第三种是所有的连接都投影(即使输入输出维度一致,一样在连接的时候做一个1*1的卷积,做投影),后得出三种方法效果都不错,后两种相差较小,但比第一种稍好一些,作者表达尽量少使用第三种方法,因为投影成本相对较贵,大大增加了计算复杂度。但第二种方法效果很好且计算复杂度较低,所以本文使用第二种方法。
为构建更深层次的残差网络,引入了瓶颈design(bottleneck design)。原来的残差块输入通道数为64,现在为256,扩大了4倍,相当于计算复杂度扩大了16倍,所以在bottleneck中第一层进行投影降维,变成64通道,降低计算,第二层和原来残差块第二层相同,第三层再扩大通道数至256,保证输入和输出的通道数一致,由原来的2层变为现在的3层,上述方法使其时间复杂度相似。其中分别在50层、101和152层的残差网络使用3层块残差块,虽然深度明显增加,ResNet152比VGG仍然具有更低的复杂性。其中50、101和152层的残差网络相比较34层的残差网络更准确,表明从相当大的深度中获得了明显的精度增益。

4.2. CIFAR-10 and Analysis

第一段:提出对CIFAR10数据集进行研究,提出了在训练集上训练在测试集上评估的实验。
第二段:由于CIFAR10数据集图片较小,所以残差网络在ImageNet和CIFAR-10上的架构是不同。说明了普通网络和残差网络的基本架构,并且在所有情况下都使用投影方式,所以残差模型和普通模型具有完全相同的深度、宽度和参数数量。
第三段:介绍了训练的参数设置,其中包括学习率和权重衰减等,以及本实验中使用的图像增强的操作。
第四段、第五段:结果表明,在普通网络中,随着深度的增加,训练误差就越大,并且在多个数据集中表现出同样的现象。但是在ResNet网络中克服了这种优化困难的问题,同时结果表明网络的深度越深,且训练误差越小,精度明显提高。
第六段:进一步探索n=18时,即110层残差网络,最初使用0.1的学习率,结果无法收敛,调至0.01预热训练后再调回0.1,最终结果表明,其效果最好,相比较来说参数少且误差低精度高。
第七段:该段对层响应进行分析,结果显示ResNet网络通常比普通网络响应小,该结果支持了最初的想法,残差函数通常比非残差函数更接近0
第八段:该部分探索了一个超过1000层的残差网络,进行训练,该网络仍有较好的测试误差。尽管该网络和110层的网络拥有相似的训练误差,但其测试结果比110层网络差很多,将其认为过拟合,可以通过正则化方法等进行优化。

创新点

1.计算机视觉领域,论文第一页放一张很不错的图片有好处,不论是对问题的描述,或者主要结果也好
2.同样的内容既可以使用表也可以使用图来表达,图更直观展示数据变化,表便于后期其他人引用。
3.该论文比较好后可以借鉴的一个点就在于Introduction部分就是摘要的扩充版本,也是对整个工作比较完整的描述。
4.在本文中,使用到的两张技术Residual和shortcut都并非原创,前者广泛用与机器学习,后者在几十年前就被广泛应用,但该文章成为经典就是很巧妙的把原来的东西放在一起能解决当前比较重要的问题(学术裁缝)。所以在写论文时,很多自己想出来的东西已经被前人写过了,没关系,可以在文章中表达出哪些哪些文章写出,我与他们有何不同,又怎样解决了一个新的问题。旧的技术有新的应用、新的意义也很重要。
5.在Implementation(3.4)中,尽量不要出现iterations,当batch_size 改变时,这个数值就会改变,不稳定,所以尽量使用迭代了多少遍数据。
6.bottleneck design可以学习,原来的残差块输入通道数为64,现在为256,扩大了4倍,相当于计算复杂度扩大了16倍,所以在bottleneck中第一层进行投影降维,变成64通道,降低计算,第二层和原来残差块第二层相同,第三层再扩大通道数至256,保证输入和输出的通道数一致,由原来的2层变为现在的3层,该方法使其时间复杂度相似。(图5)(具体数字以50层残差网络第一个残差块为例)

知识点补充

1.卷积层浮点运算次数计算公式:FLOPs = 2 * KH * KW * Cin * Cout * OH * OW
其中,KH和KW是卷积核的高度和宽度,Cin是输入通道数,Cout是输出通道数,OH和O分别是输出特征图的高度和宽度。
2.在模型的训练过程中,如果在训练误差和测试误差的对比图中(例如本文图4)出现最初训练误差大于测试误差,则可以考虑原因为在最初阶段,训练时使用数据增广,而测试时不适用数据增广,所以噪声就相对较低,误差较小。
3.在早期模型中(AlexNet、ResNet),学习率的设置都是当误差趋于平稳时,手动将学习率*0.1,会在误差的图像的中出现急剧下降(如本文图4)。
4.CIFAR10数据集图片5万张左右,分成10类。

核心结论

1.提出残差块(residual block),将多叠加的层构造为身份映射,使得叠加再多的层也不会引起更高的误差
2.残差函数F(x)+x通过快捷连接实现,既不会引入新参数,也不会增加计算复杂度。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐