“Deep Residual Learning for Image Recognition” 阅读笔记
论文作者:Kaiming He Xiangyu Zhang Shaoqing Ren Jian Sun
本文作者:陈铭林 吴宗翰 伍海涛
概述
本文是论文”Deep Residual Learning for Image Recognition”的阅读笔记,原论文可以从这里(https://arxiv.org/abs/1512.03385)找到,Caffe版本的代码可以从这里(https://github.com/KaimingHe/deep-residual-networks)找到。
该笔记主要从以下几个方面来说明论文内容:残差学习解决的问题、残差学习基本思想以及结构、残差网络结构。
一、问题提出
深度卷积网络近几年来在图像分类任务上取得了巨大突破,它是通过综合中、低、高层特征以及分类器来形成的,很多实验结果表明,网络深度对于性能来说是及其重要的,通过增加层数(即加深网络)可以丰富网络学习到的特征。那么现在有个问题:是不是简单地通过加深网络就可以获得更好的性能?当网络加深时,容易造成由梯度消失和梯度爆炸引起的网络不收敛问题,然而这个问题可以通过Normalized Initialization和Intermediate Normalization Layers来解决。但是当网络能够收敛时,该论文发现了另外一个问题,网络退化(degradation),也就是说,当网络深度加深时,网络精度会趋于饱和,而这种现象并不是由过拟合造成的。
对于同一个训练数据集,深层网络准确率理论上不会比浅层网络低,因为对于任何一个浅层网络,深层网络可以构造出这样一个解使得它和浅层网络是一样的:深层网络多出来的层是恒等变换,剩下的层与浅层网络相同。然而,该论文在CIFAR-10、ImageNet数据集上做实验得到了违反直觉的结果:网络越深,训练误差越大。论文指出这是由优化器造成的。
为了解决网络退化问题,该论文提出了深度残差学习框架(a deep residual learning framework)。
二、残差学习
假设H(x)是一些层需要拟合的函数,该论文提出利用这些层来拟合F(x)=H(x)-x,而不是直接拟合H(x)。为什么选择学习残差函数呢?主要原因有以下两点:
1、如果多个非线性层能够拟合复杂函数H(x),那么它就能够拟合F(x),虽然相同的非线性层在拟合能力上相同,但是学习难易程度有所不同,论文指出优化器更容易优化残差函数。
2、网络退化问题说明了优化器在优化非线性层拟合恒等函数时会有困难,而当拟合残差函数时,如果恒等函数是最优解,那么优化器只需要将非线性层权重参数置零即可。在现实问题种,通常恒等函数不可能是最优解,但是残差函数却能够对问题进行预变换,因为如果最优函数更接近与恒等变换的话,那么优化器更容易捕捉相对于恒等变换的扰动而不是一个新的函数,同时论文实验中也发现学习到的残差函数多数情况下具有很小的响应,这也佐证了恒等函数是对问题的一个有意义的预处理。
三、残差模块结构
该论文将残差学习用在几个层叠的层上,使得这些层学习的是需要拟合函数的残差,而不是原函数,并形成如Fig.2所示的building block结构,并且用数学公式表示为:
这里的x和y表示这些层的输入和输出,
表示需要学习的残差映射。该等式中的x和F需要具有相同维度,否则需要对x进行线性变换Ws使得维度能够匹配,数学公式如下:
四、网络结构
为了通过实验说明残差网络比一般网络在性能上更具优势,该论文在ImageNet数据集上训练了两个不同的网络(如Fig.3所示)来进行对比实验:Plain Network(一般网络,不具有残差学习模块)和Residual Network(残差网络,在一般网络基础上加入残差学习模块所构成的网络)。
Plain Network的设计是借鉴了VGG nets的思想,并且遵循以下两种原则:1、输出特征图大小不变时,卷积核数量不变;2、特征图大小缩小一半时,卷积核数量就增加一倍。除此之外,VGG通过Max Pooling下采样,而这里通过步长为2的卷积层直接下采样,同时Plain Network最后通过Average Pooling来获得最后的特征,并且通过softmax层来获得最后1000维的预测。
Residual Network是在Plain Network的基础上加入shortcut connection来形成残差学习模块,如Fig.3所示,实线表示残差模块的输入直接被使用,而虚线表示残差模块的输入经过线性变化再被使用,为了匹配维度,这里考虑两种不同操作:1、在额外维度上增加零;2、通过1x1卷积层来增加维度。
以这两种结构在ImageNet数据集上进行对比实验。
五、实验
1.实验了plain-18和plain-34,展示了退化问题。说明了退化问题不是因为梯度消失,因为加入了batch normalization。另外也不能简单地增加迭代次数来使其收敛,增加迭代次数仍然会出现退化问题。
2.实验了ResNet-18和ResNet-34不会出现退化问题,ResNet-34明显表现的比ResNet-18和plain-34好,证明了残差学习解决了随网络深度增加带来的退化问题。而且同等深度的plain-18和ResNet-18,残差网络更容易优化,收敛更快。
3.对于同等映射维度不匹配时,匹配维度的两种方法,zero padding是参数free的,投影法会带来参数。作者比较了这两种方法的优劣。实验证明,投影法会比zero padding表现稍好一些。因为zero padding的部分没有参与残差学习。实验表明,将维度匹配或不匹配的同等映射全用投影法会取得更稍好的结果,但是考虑到不增加复杂度和参数free,不采用这种方法。
4.更深的瓶颈结构:
作者探索的更深的网络。考虑到时间花费,将原来的残差学习结构改为瓶颈结构,如上图。首端和末端的1x1卷积用来削减和恢复维度,相比于原本结构,只有中间3x3成为瓶颈部分。这两种结构的时间复杂度相似。此时投影法映射带来的参数成为不可忽略的部分(因为输入维度的增大),所以要使用zero padding的恒等映射。
替换原本ResNet的残差学习结构,同时也可以增加结构的数量,网络深度得以增加。生成了ResNet-50,ResNet-101,ResNet-152. 随着深度增加,因为解决了退化问题,性能不断提升。
作者最后在Cifar-10上尝试了1202层的网络,结果在训练误差上与一个较浅的110层的相近,但是测试误差要比110层大1.5%。作者认为是采用了太深的网络,发生了过拟合。
5. 在COCO目标检测数据集上获得了28%的相对改进。深度残差网络是提交ILSVRC&COCO 2015比赛的基础,作者还在ImageNet检测,ImageNet本地化,COCO检测和COCO分割任务中获得了第一名。