【论文笔记】ResNet

0.ResNet关键点:

  1. 利用残差结构让网络能够更深、收敛速度更快、优化更容易,同时参数相对之前的模型更少、复杂度更低
  2. 解决深网络退化、难以训练的问题
  3. 适用于多种计算机视觉任务

1.Introduction

深度网络模型通过端到端、多层级的方式抽取了低、中、高级别的特征,并且可以通过增加网络层的数量来丰富特征的级别。事实表明,越深的网络模型能够带来更好的分类效果。

增加网络深度可能会遇到的问题:
(a)梯度消失和梯度爆炸(vanishing / exploding gradients)
解决方式:1)初始化;2)BN等方式解决。

(b)当更深的网络能够开始收敛时,就会出现退化(degradation)问题:即当网络层数多得饱和了,加更多层进去会导致优化困难、且训练误差和预测误差更大了,注意这里误差更大并不是由过拟合导致的。作者通过加入残差结构解决退化问题。*过拟合指模型在训练数据上的损失不断减小,在测试数据上的损失先减小再增大在这里插入图片描述

1.1ResNet思路分析

深度网络比如56层参数更多,已经包含了20层的解空间,应该效果会比20层的网络更好。考虑一个训练好的网络结构,如果加深层数的时候,不是单纯的堆叠更多的层,而是堆上去一层使得堆叠后的输出和堆叠前的输出相同,也就是恒等映射/单位映射(identity mapping),然后再继续训练。这种情况下,按理说训练得到的结果不应该更差,因为在训练开始之前已经将加层之前的水平作为初始了,然而实验结果表明在网络层数达到一定的深度之后,结果会变差,这就是退化问题。这里至少说明传统的多层网络结构的非线性表达很难去表示恒等映射(identity mapping),或者说你不得不承认目前的训练方法或许有点问题,才使得深层网络很难去找到一个好的参数去表示恒等映射(identity mapping)。
因此,作者提出了这样的思想:如果可以学习到恒等映射,那么与其让叠加层去学习这个完整的映射,还不如去学习在浅层网络上的变化是什么,如果确实是恒等映射的话,那么叠加的这一层的参数应该被压缩至零。

1.2 残差结构为什么有效?

自适应深度:使网络更容易在某些层学到恒等变换(identity mapping)。在某些层执行恒等变换是一种构造性解,使更深的模型的性能至少不低于较浅的模型。这也是作者原始论文指出的动机。

“差分放大器”:假设最优 H ( X ) H(X) H(X) 更接近恒等映射,那么网络更容易发现除恒等映射之外微小的波动。

模型集成:残差网络是很多浅层网络的集成(ensemble),层数的指数级那么多。主要的实验证据是:把 ResNet 中的某些层直接删掉,模型的性能几乎不下降。具体解释详见这篇论文

缓解梯度消失:残差网络使信息更容易在各层之间流动,包括在前向传播时提供特征重用,在反向传播时缓解梯度信号消失。具体解释见这篇论文

2. Network Architectures

在这里插入图片描述
残差结构既不增加计算复杂度(除了几乎可以忽略的元素相加),又不增加模型的参数量,同时这也为模型间的比较提供了方便。下图的左边是VGG-19;下图的中间是作者仿照VGG19堆叠了34层的网络,记为plain-34,虽然更深了,但FLOPs(代表计算复杂度,multiply-adds)仅为VGG-19的18%;下图的右边是针对中间加入了跨层连接即残差结构,注意实线就是直接恒等变换和后面的feature map相加,虚线就是由于维度不匹配需要先升维后相加。

升维有两种方式:

第一种是直接全补0,这样做优势是不会增加网络的参数;

第二种是1 x 1卷积升维,后面实验部分会进行比较。

注意这里除第一个stage之外都会在stage的第一层使用步长为2的卷积来进行下采样,倒数第二层输出的feature map后面是全局平均池化(global average pooling,VGGNet预测时转化成全卷积网络的时候也用到了)。因为ImageNet输出是1000个类别,所以再连接一层1000个神经元的全连接层,最后再接上一个Softmax。

Res50、Res101、Res152采用的是被称为bottleneck的残差结构:
在这里插入图片描述
bottleneck结构就是前面先用1 x 1卷积降维,后面再用1 x 1卷积升维以符合维度大小,这样做可以大大减少计算量。注意bottleneck中3 x 3的卷积层只有一个,而不是普通结构的两个。

3.Experiment

3.1实验细节

(a)训练过程:
和AlexNet、VGGNet一样先每张图片减均值;数据增强:利用VGGNet的多尺度处理,从区间[256, 480]随机取一个数S ,将原图resize到短边长度为 S ,然后再从这张图随机裁剪出224 x 224大小的图片以及其水平翻转作为模型的输入,除此之外还用了AlexNet的颜色增强;在卷积之后ReLU之前用了BN;优化网络初始化方法(参考论文)https://arxiv.org/abs/1502.01852;所有的网络都是从头开始训练;优化使用SGD,batch size = 256,学习率初始值0.1,每当验证集误差开始上升LR就除以10,总迭代次数达到60万次,weight decay = 0.0001,momentum = 0.9;不使用dropout

(b)预测过程:
和AlexNet一样进行TTA,每张图片有10个裁剪;并且和VGGNet一样采用全卷积形式和多尺度TTA,最后对它们的模型输出值取均值即可

3.2ImageNet Classification

在ImageNet上验证ResNet可以解决网络退化问题
下表展示了ImageNet上ResNet不同深度网络的网络结构
在这里插入图片描述
这里的实验增维用的是补0的方法,可以看出Res34相对于Res18错误率明显下降。结合下图可以得出结论:第一ResNet解决了退化问题;第二Res34效果很好;第三下图比较左边和右边可以看出,虽然Res18的结果和plain-18差不多,但Res18的收敛速度更快。
在这里插入图片描述
下表可以看出plain-34相对于plain-18网络退化了,注意根据作者的发现,这个问题并不是梯度消失引起的,因为BN能保证前向传播时,响应值方差不为0,同时观测到反向梯度良好。(疑问:响应值方差和梯度消失有什么关系呢,是如何反映梯度消失的结果的呢?)
在这里插入图片描述

3.2.1 跨层连接方式的探讨

跨层连接应该用恒等映射还是更复杂的投影变换?这里比较了三种选择:

A. 使用恒等映射,如果residual block的输入输出维度不一致,对增加的维度用0来填充;

B. 在block输入输出维度一致时使用恒等映射,不一致时使用线性投影以保证维度一致;

C. 对于所有的block均使用线性投影。

*线性投影:相加之前在 x x x 之前乘一个矩阵调整维度

从上面的实验结果可以看出选择C是相对最好的,但实际还是使用选择B,因为对于bottleneck来说,如果不用恒等映射而用投影变换,整个网络的时间复杂度和模型大小会加倍,所以为了效率还是使用选择B。
在这里插入图片描述
上表更验证了ResNet解决了网络退化问题,注意即使是Res152,也比VGG-16的复杂度低很多。(Res152:11.3 billion FLOPs,VGG-16:15.3 billion FLOPs,VGG-19:19.6 billion FLOPs)
在这里插入图片描述

3.3CIFAR-10上的实验结果

这里作者主要是研究很深的网络,并不是为了得到更好的结果,所以这里重点说几点:

(a)初始学习率为0.1对于Res110太大,几个epoch之后才开始收敛,所以先用小学习率0.01 warm up网络,等到训练误差低于80%再恢复正常

(b)作者分析了每一层的响应值的方差(注意响应值和feature map不一样,响应值是BN之后,ReLU或求和之前的值),从图中可以得出:第一残差函数 F(X) 相对于非残差函数更接近0;第二当层数加深,中间部分残差结构对其输入的更改更少。这两点验证了前面对残差结构原理的阐述

(c)作者还尝试了超过1000层的网络,训练集错误率和Res110差不多,测试集错误率比Res110略高一点,由于CIFAR-10数据集比较小,所以可能这里过拟合了。这一点说明残差结构可以适用于非常深的网络,也不会产生退化问题,或者说退化问题不明显

在这里插入图片描述

在这里插入图片描述
CIFAR-10上的实验结果
在这里插入图片描述
PASCAL和MS COCO数据集上目标检测任务
在这里插入图片描述

Reference

https://zhuanlan.zhihu.com/p/56961832

https://www.cnblogs.com/xiaoboge/p/10456937.html

https://www.zhihu.com/question/52375139/answer/324911165

https://zhuanlan.zhihu.com/p/54289848

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值