深度残差网络

时间:2024-04-07 12:24:01

Deep Residual Learning for Image Recognition

He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.


总结

随着网络深度加深,出现了训练误差增大的退化现象。用一些层来拟合H(x)的关系,本文用其等价的形式H(x)=F(x)+x,来拟合F(x)的方法,降低了solver优化的难度,从而在很大程度上解决了退化问题,通过跳过连接来实现残差学习。

在ImageNet的1000分类上实验,比较了18层和34层的普通和残差网络的训练误差,普通网络18层好,残差网络34层好,同时残差网络整体比普通网络好,说明对于能够找到解决方法的问题,残差也能加快学习速度。对比了线性映射和恒等映射,发现线性映射能够增加准确率,但不是退化问题的主要因素。为了更深和方便,构造了比原来的2层开销小的3层结构,得到了50层网络,然后又通过增加3层的残差块构造了101和152层网络,准确率越来越高。

在CIFAR-10上实验了20,32,44,56层网络,得到了和ImageNet一样的结论,证明了其通用性。另外训练了110层网络,效果更好。分析了各层的响应,残差网络的方差更小,证明了其更容易优化。尝试了超过1000层的网络,训练误差差不多,但是测试不好,可能是因为缺少正则化和dropout从而导致泛化差。包揽ILSVRC和COCO2015竞赛的ImageNet检测定位、COCO检测和分割的冠军。


摘要

越深的网络越难训练。作者提出了一种残差学习框架,让深的网络更容易训练。用学习残差函数来重新定义层。经验表明这种残差网络更容易优化,层数增加准确率也会提高。在ImageNet数据集中用152层的网络,虽然比VGG16层数多了8倍,但模型复杂度比VGG16低。使用集成模型在ImageNet上的错误率是3.57%,ILSVRC2015的冠军,也用100层和1000层的网络分析了CIFAR-10。

对于很多视觉模式任务来说,深度是核心重点。由于深度的增加,作者获得了COCO目标检测数据集28%的相对提升。深度残差网络也在ILSVRC和COCO2015竞赛的ImageNet检测定位、COCO检测和分割中获得了冠军。

引言

深度卷积神经网络能够整合各个层次的信息用来进行端到端的任务。网络深度很重要。

网络变深了之后一开始就会容易梯度爆炸/弥散,导致不能收敛,使用标准初始化和标准化层来解决。

深的网络可以收敛了以后,退化问题又出来了。退化是指随着网络加深,准确度饱和并降低。退化不是由过拟合引起的,层数越多训练误差越大。

退化问题显示了不是所有的系统都容易优化的。假设有一个网络,对应还有一个通过恒等映射来构造的加深网络,那么加深网络的训练误差不会比浅层的差。但是实验显示现有的优化器找不到和浅层网络一样好的解。

使用残差结构来解决退化问题。假设我们需要拟合的关系是H(x),让F(X)=H(x)x,原来的H(x)=F(x)+x。假设残差映射4F(x)H(x)线0F(x)+x$在网络中表现为跳过连接,把输入加到预测出来的残差输出中。不需要额外的参数和计算,也不会破坏原来端到端的结构,能够很容易的用现有的库实现。
通过实验证明了:

  1. 深残差网络更容易优化,同样深度的普通网络的训练误差比残差网络要大;
  2. 残差网络可以从深度中获得比普通网络更多的性能。

在CIFAR-10中也有同样的现象,说明这种作用具有通常的效果,不单单在特定的数据集上。成功训练了100层的网络,并且尝试了超过1000层的网络。

在ImageNet分类数据集上,152层残差网络,目前比赛网络层数最深的网络,集成模型top-5误差为3.57%,获得了ILSVRC-2015分类比赛、检测、定位、COCO检测、分割的冠军。这些都说明了残差学习准则具有广泛性,能够应用到其他的深度学习任务中。

深度残差学习

用一些层来拟合需要的关系映射H(x)。假设可以用一些非线性的层来逼近这个关系,那么和逼近H(x)x是等价的。也就是说拟合H(x)和拟合F(x)=H(x)x是等价,但是学习的难度是不一样的。

  1. 恒等映射 identity mapping

    y=F(x,{Wi})+x(1)

  2. 线性映射 projection mapping

    y=F(x,{Wi})+Wsx(2)

通过恒等映射加深网络,训练误差也不会比原来要小。但是退化现象说明了很深的网络很难优化。通过残差来重构网络,优化残差比优化一个重新的函数要简单。恒等映射比0映射更容易学习。

使用跳过连接来实现如上的残差结构。如式1的残差块不需要额外的参数和计算,在实际和比较实验(原始加深和残差加深)都很有用。式1只有在x和F(x)维度一样的才可以用,否则就需要增加Ws来匹配。实验表明维度相同的时候使用恒等映射已经足够了,不需要Ws来增加模型复杂度。

残差函数F的构建是很灵活的,可以跳过2-3个或者更多的层,但是只跳过一个层,就类似于一个线性函数y=W1x+x,没有看到有什么优势。

网络结构

深度残差网络

plain网络:受VGG启发,使用3x3卷积核,有如下2个设计原则:1. 卷积核数量和输出的feature map大小一样;2. feature map大小减半,卷积核数量加倍。通过步长为2的卷积进行下采样。最后是global平均池化和1000全连接的softmax。以上模型比VGG模型的卷积核和复杂度都低。

Residual网络:在plain的基础上增加残差捷径连接。实线表示输出和输出大小一致,可以直接用式(1)连接;虚线维度加倍了,有两种方法来处理:使用0填充来增加维度,使用式(2)的乘上Ws来匹配维度(通过1x1卷积来实现)。这两种卷积的步长都是2,来减小feature map的大小。

实现

训练:把图片resize到[256, 480],随机裁剪到224,水平翻转和按通道去均值,颜色标准化,在每个卷积之后和**函数前使用BN,batch大小256,初始学习率0.1,到平稳期的时候除以10,训练了60万步,权重衰减系数0.0001,动量因子0.9,没有使用dropout。

测试:测试阶段,采用和VGG论文中一样的10裁剪测试。以及在[41, 13]中用的全卷积形式(?),平均各个尺度的分数。得到结果。

实验

ImageNet分类

1000分类,训练图片1.28百万张,验证机5万张,测试集10万张。评价标准top-1和top-5。

网络结构如下:

深度残差网络

Plain网络

34层的网络验证集误差比17层高,即使18层是34层的子任务之一,从34层训练集误差比18层误差高中可以看到退化现象。可能是由于梯度弥散导致了退化。使用了BN,在前向中检查输出方差不为0,反向梯度也正常,用了BN以后没有梯度弥散。34层的网络性能也还算不错,所以可能是由于优化难度加大,收敛速度减慢,导致了退化问题。

深度残差网络

Residual 网络

在base-line的基础上每2个卷积增加了恒等映射的捷径连接,维度不同的地方使用了0填充。

  1. 和plain相反,34层的ResNet比18层的性能好,训练集和验证集误差都好。说明解决了退化问题。
  2. 和plain相比,34层的ResNet比18层的性能好,说明ResNet在深网络中有效。
  3. 18层的ResNet也比plain准确率高,说明了ResNet在浅一点的网络,现有的优化方法能够找到优解,也能够加快收敛。

深度残差网络

top-1评价指标的对比:

深度残差网络

对比恒等映射和线性映射

  1. 恒等映射 identity mapping

    y=F(x,{Wi})+x(1)

  2. 线性映射 projection mapping

    y=F(x,{Wi})+Wsx(2)

对比在维度不对时使用0填充和线性映射,以及在维度相同时使用恒等映射和线性映射。

A,0填充和恒等映射;B,维度不同时使用线性映射和恒等映射;C,都使用线性映射。

表3显示,ABC都比不用残差块好。B比A好,可能是因为0填充,有部分没有用残差学习;C比B好,可能是C比B多使用了参数。

ABC之间差别不大,说明了这个映射不是退化问题的关键因素。

深度残差网络

单模型结果:

深度残差网络

模型融合结果:
深度残差网络

Bottleneck设计

设计了Bottleneck结构,考虑到训练时间的开销,使用1x1,3x3,1x1的3层卷积来代替原来的2层卷积作为一个块,1x1的卷积可以减少和恢复维度。2层和3层的设计具有相似的时间复杂度。

不用参数的映射对这种bottleneck结构很重要,如果使用了线性映射,那么时间和空间复杂度加倍,因为捷径连接了2个高维。所以恒等映射会让bottleneck更加有效。

深度残差网络

使用更多的3层块来构造101层和152层网络,其复杂度比VGG16更低。20/101/152层残差网络比34层的准确率更高,没有退化问题,越深的网络准确率越高。

CIFAR-10和分析

整体的网络结构如下表,改变n的大小来调整整体的网路层数。使用如图3中的结构。为了分析进行简化,使用A方案。

深度残差网络

训练过程:权重衰减0.0001,动量因子0.9,使用[13]中的权重初始化,使用BN但是没用dropout,batch大小128,在2快GPU上训练。初始学习率为0.1,在32K和48K步的时候除以10,在64K步的时候结束训练。训练图片45K,验证图片5K。用[24]的训练数据扩增,4像素的填充,32大小的随机裁剪和水平翻转,测试的时候只预测原始的32大小的图片。

比较n=3,5,7,9,也就是比较20,32,44,56层的网络。从普通和残差网络对比来看,越深的残差网络性能越好,说明克服了优化困难。

深度残差网络

让n=18,构建了110层的残差网络,学习率从0.1降到0.01训练,知道400代训练误差低于80%以后改回0.1继续训练,收敛的很好。和其他深的网络FitNet和Highway网络相比,参数更少,但是效果更好。

每层响应分析

每层BN层和ReLU层中间的数据,ResNet的方差都比plain的小,证明了3.1节,残差块比普通更接近0,更容易学习。

深度残差网络

探索超过1000层的网络

n=200,构造了1202层的网络,和110层的网络相比,训练误差差不多,但是测试误差高,可能是由于过拟合导致了泛化性能变差,将来使用正则化和dropout进行测试。

深度残差网络

PASCAL和COCO的目标检测比赛

基于Faster R-CNN框架,使用101层的残差网络代替VGG16进行特征提取,都比原来要好,COCO相对提升了28%。

深度残差网络