本专栏将从论文的角度解读一下CV方向的一些经典神经网络模型及其贡献与意义,以期加深自己的印象,后续可以随时翻看并且学习其中好的tricks。本期介绍ResNet.
论文相关信息
论文全称为《Deep Residual Learning for Image Recognition》(论文链接),是2016年的CVPR(即IEEE Conference on Computer Vision and Pattern Recognition,是由IEEE举办的计算机视觉和模式识别领域的顶级会议,也是CV方向三大顶会之一)最佳论文,作者及相关信息如下:
作者的实验主要在ImageNet数据集和CIFAR-10(CIFAR-10数据集由10个普适物体类的60000个32x32彩色图像组成,每个类有6000个图像,共计50000个训练图像和10000个测试图像)上进行,基于ResNet的网络集合在ImageNet测试集上取得了3.57%的错误率,这一成绩赢得了ILSVRC 2015分类任务的第一名。
此外,作者们还在ImageNet检测、ImageNet定位、MS COCO检测和MS COCO分割任务中均赢得了第一名(MS COCO竞赛是物体识别、检测等领域的一个最权威、最重要的标杆,在国际上能汇集Google、微软、Facebook以及国内外众多顶尖院校和优秀创新企业共同参与的大赛,主要包括物体检测、人体关键点检测和街景全景分割任务,包含150w+图像,80+类别)。
CV方向有很多不同的任务类型(可参考这里与这里),而ResNet在分类、检测、定位、分割任务中都有着优秀的表现,其泛化能力足可以证明ResNet的原理是可以通用的,模型是有效的。
网络简介
上图左是用来做对比的VGG-19网络,之前也介绍过。
上图中是作者设计的34层的普通基准网络,也是借鉴了VGG网络的设计哲学,卷积层主要为3×3滤波器,并遵循两个简单的设计规则:第一,对于相同的输出特征图尺寸,层具有相同数量的滤波器;第二,如果特征图大小减半,则滤波器的数量加倍以保持每层的时间复杂度。
上图右就是基于上图中的普通网络结构,加入了本文最重要的架构——shortcut connections。
论文所用tricks
1、redisual learning
上图展示了20层和56层的普通网络在CIFAR-10上的训练误差(左)和测试误差(右),作者们发现单纯地增加深度反而会引起误差的增加,这是一个很奇怪的退化现象。
我们可以思考一下,假设20层的网络已经能收敛了,那使用更深的网络,20层以后的每一层只需要拟合一个恒等映射就行了,理论上更深的网络表现不会差于浅网络,但实际上却并不是这样。
于是作者们猜测这是因为神经网络模型可能在通过多个非线性层来拟合恒等映射上存在困难,所以作者们从别的领域借鉴了redisual learning残差学习这一思想,即假设H(x)是若干非线性层需要拟合的映射,如果多个非线性层可以拟合复杂函数H(x),也就能拟合残差函数F(x)= H(x)- x,现在让这若干个非线性层去拟合H(x)- x,也就是原来需要拟合的函数变成了F(x)+ x。虽然这两种拟合方式理论上都能渐近地逼近想要拟合的函数,但拟合的难易可能有差别。
2、shortcut connections
捷径连接,又叫跳层连接(skip connections),shortcut connections的实践与理论也被研究过一段时间,这里就是作者们用来实现残差学习的方式,见下图。
公式为:
x和y表示层的输入和输出向量,函数F()表示层要学习的残差映射。操作F(x)+ x通过逐个元素相加实现,然后经过第二个激活函数。如果尺寸不同,那么通过一个线性投影Ws来实现:
这样的连接并没有加大计算量或者复杂度。这里容易产生一个疑问,这里的捷径连接是2层,下面马上可以看到3层的捷径连接,更高的也可以,那为什么没有1层的捷径连接呢?1层的跳层连接的公式我们可以看一下:y = (Wx + b) + x,这样相当于线性相加,显然不会有什么效果。
3、使用1×1卷积层减少参数(BottleNeck)
1×1卷积其实可以看成一种在channel维度上的线性组合,并不会改变特征图的大小,这里作者们用来先降维再升维以减少参数。第一个1x1的卷积把256维的channels降到64维,然后通过3×3的卷积层对特征图做改变,最后再通过1x1卷积恢复到256维,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了十几倍。
1×1卷积到底是如何降维的(升维类似),可以看我随手画的图:
论文中的实验
作者们对数据进行了预处理,首先按之前VGG讲过的尺度抖动策略来进行数据增强,在裁剪出224×224的图片之后,将它的每个像素都减去平均值,并且在每次卷积之后与激活之前都加入了批标准化(BN)。下表展示了作者们在实验中尝试比较的几种模型的架构:
1、18层与34层普通网络的对比
从上面的表2和图4,作者们在18层与34层的普通网络对比中观察到了之前提到的退化现象,并且作者们使用了BN进行训练,这就保证了正向传播的是非零信号,也验证了反向传播的梯度,并没有发生梯度消失的现象。作者们认为这可能是由于深层网络具有指数级低的收敛速度,这种现象的原因仍有待研究。
2、18层与34层的ResNet对比
还是根据表2和图4,ResNet却相反,ResNet-34表现比ResNet-18更好,而且ResNet-34在训练误差很小的同时测试误差也很小。这就证明了退化问题得到了解决,因为从增加的深度中得到了准确性的提高。
此外,从表2可以看出,18层的普通网络与ResNet的top1-error几乎相当,但是图4表明在训练早期,ResNet能够更快地收敛来简化优化。
3、恒等与投影short connections连接方式对比
上面的研究已经证明了无参数的恒等shortcut connections有助于训练,接下来作者们设计了三种连接方式,(A)用零填充恒等捷径增加尺寸,所有捷径连接均无参数(与表2和图4使用的相同);(B)投影捷径用于增加尺寸,其他捷径使用恒等捷径;(C)所有捷径都是投影捷径。
表3中间部分显示,所有三个选项都比相应的普通网络好得多。 B稍好于A,作者们认为这是因为A中的零填充维数并没有进行残差学习。 C稍好于B,作者们将其归因于投影捷径连接引入的额外参数。但是B与C之间的差异很小,这表明投影捷径对解决退化问题并不重要,而投影捷径甚至可能使复杂度加倍。所以作者在接下来的论文部分里都不使用C,而是使用B,以减少参数。
4、更深的ResNet对比
50层ResNet:用之前提到的3层瓶颈块替换34层网络中的所有的2层块,产生50层ResNet,如表1所示:
101层和152层ResNet:使用更多的3层块构建101层和152层ResNet。值得一提的是,虽然深度显著增加,但152层ResNet的复杂性仍然低于VGG-16/19网络。
从表3也可以看出,50/101/152层的ResNet比34层的ResNet B更精确,并没有退化问题,因此可以从深度的显著增加而获得准确度的提高。
作者们甚至在CIFAR-10上尝试了1202层的网络。但是,这种过深的模型仍然存在一些问题。这个1202层网络的测试结果比110层网络差,尽管两者都有训练误差很接近。作者们认为发生了过拟合,对于这个小数据集,1202层网络可能不必要地大,见下图。
总结
ResNet也是一篇贡献很大的论文,从其获得多个类别的比赛第一名和其他奖项也看得出。主要就是提出使用shortcut connections来实现residual learning这一想法,在以后的很多模型中也可以看到借鉴这一想法的实现。此外就是使用了1×1卷积层来减少参数。
2020.9.21补充
其实残差网络家族是比较庞大的一个家族,前有Highway Net后有DenseNet、Dual Path Network(可参考这里),感觉没必要单独再写一篇综述来介绍,思路都大致是一个跳层连接,且跳层连接也由来已久。ResNet这么出名,多少得益于开头提到过的比赛大胜。
在理解了ResNet之后,通过与ResNet的对比来理解Highway Net(可参考这里)、DenseNet(可参考这里,且这篇博客中也提到了一些研究提出的ResNet其实就是多人投票器的观点,以及ResNet是由大多数中度网络和一小部分浅度网络和深度网络组成的,只是表面上看起来很深,事实上网络却很浅的观点),启发了自己一些思考……
2020.11.22补充
大佬博客简单介绍了ResNeXt,然后介绍了按 Ensemble Size 参数的方式去理解一些包括ResNet在内的经典网络,很受教。
以及这里的高赞回答中对于ResNeXt为什么有效的理解。