首页 > 其他分享 >resnet详细解读

resnet详细解读

时间:2022-12-07 19:44:39浏览次数:73  
标签:映射 残差 网络 resnet 解读 详细 拟合 跨层 恒等

原文链接:https://arxiv.org/abs/1512.03385

摘要

作者提出了一个残差学习结构用来解决非常深网络的退化问题和训练问题。原来的网络是为了拟合一个分布函数,我们重构了网络让它去拟合相较于输入的残差。我们做了充足的实验说明了残差网络更容易被优化,在加深网络的过程中能获得更高的准确率。同时参数量和计算复杂度比VGG小很多。我们在CIFAR-10数据集上建立了100层和1000层的网络。
特征提取的深度是解决计算机视觉诸多问题的核心,我们仅仅加深了残差网络的结构就在COCO物体检测数据集上获得了很高的性能 。

ResNet是何凯明等人在2015年提出的模型,获得了CVPR最佳论文奖,在ILSVRC和COCO上的比赛成绩:(以下比赛项目都是第一)

  1. ImageNet Classification
  2. ImageNet Detection
  3. ImageNet Localization
  4. COCO Detection
  5. COCO Segmentation

介绍

作者发现了网络退化的现象,在CIFAR-10数据集上用了两个模型,分别是56层和20层的模型,在实验中发现五十六层的模型无论是在训练集还是测试集上性能都不如浅层的网络。所以作者得出网络退化不是由梯度消失导致的,也不是过拟合导致的。即不是任何网络都能被相同的优化。
image.png
尝试解决退化问题的一种方案:
image.png
这样可以使得加深模型至少不会在训练集上变的更差。但这种递归结构的网络很难被优化。
解决方法:提出了residual leanring framework:
image.png
假设拟合残差比拟合底层映射要容易。极端情况下,恒等映射已经足够好了,则把残差模块的权重全部设置为0。shortcut connection既没有引入额外的参数,也没有增加计算复杂度。
作者在ImageNet数据集上进行了详尽的实验,发现残差网络:

  1. 易于优化收敛
  2. 解决退化问题
  3. 可以将模型堆叠很深,大大提高准确率

作者的152层残差网络获得了2015年ILSVRC的分类竞赛的冠军和其他各赛道的冠军。

相关工作

为什么想到使用残差?

  1. 对于VLAD和Fisher Vector来说,对残差向量编码比对原始向量编码效率更高
  2. 用Multigrid解偏微分方程(Partial Differential Equations,PDE)时,使用残差向量对于优化更好,收敛速度更快

为什么想到使用跨层连接?

  1. 在多层感知机(multi-layer perceptrons,MLP)中加一层从输入到输出的线性层
  2. GoogLeNet中使用辅助分类器防止梯度爆炸 / 消失
  3. 在此之前已有研究者使用跨层连接对响应和梯度中心化(center)处理
  4. inception结构本质也是跨层连接
  5. highway网络也使用到了跨层连接

深度残差学习

残差学习

假设输入为 x ,有两层全连接层学习到的映射为 H(x) ,也就是说这两层可以渐进(asymptotically)拟合 H(x)。假设 H(x) 与 x 维度相同,那么拟合 H(x) 与拟合残差函数 H(x)−x 等价,令残差函数 F(x)=H(x)−x ,则原函数变为 F(x)+x ,于是直接在原网络的基础上加上一个跨层连接,这里的跨层连接也很简单,就是将x的恒等映射(Identity Mapping)传递过去。

本质也就是不改变目标函数 H(x) ,将网络结构拆成两个分支,一个分支是残差映射 F(x) ,一个分支是恒等映射 x** ,于是网络仅需学习残差映射 F(x) 即可。至于为什么这么做,后面介绍残差结构原理的时候会解释。**
整个残差结构可以形式化定义为 y=F(x,{Wi})+x ,这里的 F(x,{Wi}) 指拟合的残差映射,如上图中有两层全连接层,即 F=W2σ(W1x) ,其中 σ 指ReLU,注意这里为了简洁没有写上bias。当 F 与 x 维度相同时,可以直接逐元素相加;但如果不同,就必须给 x 再加一个线性映射,将其映射到一个与 F 维度相同的向量,此时整个残差结构为 y=F(x,{Wi})+Wsx , Ws 就是一个用于维度匹配的矩阵。其实当 F 与 x 维度相同时也可以用一个方阵 Ws ,但经过后面的实验发现恒等映射更好,尤其是在bottleneck结构中
如果残差结构仅一层,也可以使用,但这样做没什么好处。
注意卷积层和上面基本一样,维度匹配直接用1 x 1卷积升维或降维即可,这样做因为又加了一层ReLU所以增加了网络的非线性拟合性,求和的时候直接每个对应feature map的对应元素相加即可,注意是先相加再ReLU激活。

残差结构为什么有效?

  1. 自适应深度:网络退化问题就体现了多层网络难以拟合恒等映射这种情况,也就是说 H(x) 难以拟合 x ,但使用了残差结构之后,拟合恒等映射变得很容易,直接把网络参数全学习到为0,只留下那个恒等映射的跨层连接即可。
  2. “差分放大器”:假设最优 H(x) 更接近恒等映射,那么网络更容易发现除恒等映射之外微小的波动。
  3. 模型集成:整个ResNet类似于多个网络的集成,原因是删除ResNet的部分网络结点不影响整个网络的性能,但VGGNet会崩溃。
  4. 缓解梯度消失:针对一个残差结构对输入 x 求导就可以知道,由于跨层连接的存在,总梯度在 F(x) 对 x 的导数基础上还会加1。

网络结构

从上面对残差结构的描述可以看出,残差结构既不增加计算复杂度(除了几乎可以忽略的元素相加),又不增加模型的参数量,同时这也为模型间的比较提供了方便。下图的左边是VGG-19;下图的中间是作者仿照VGG19堆叠了34层的网络,记为plain-34,虽然更深了,但FLOPs(代表计算复杂度,multiply-adds)仅为VGG-19的18%(毕竟VGG-19两层全连接层太耗时了);下图的右边是针对中间加入了跨层连接即残差结构,注意实线就是直接恒等变换和后面的feature map相加,虚线就是由于维度不匹配需要先升维后相加。
image.png
升维有两种方式:第一种是直接全补0,这样做优势是不会增加网络的参数;第二种是1 x 1卷积升维,后面实验部分会进行比较。
注意这里除第一个stage之外都会在stage的第一层使用步长为2的卷积来进行下采样,倒数第二层输出的feature map后面是全局平均池化(global average pooling,主要是为了减少最后全连接的参数和计算量),也就是每个feature map求平均值,因为ImageNet输出是1000个类别,所以再连接一层1000个神经元的全连接层,最后再接上一个Softmax。

更深的ResNet
Res18和Res34采用上面的结构,当使用更深的网络结构时,残差结构发生了变化。
image.png
Res50、Res101、Res152采用的是被称为bottleneck的残差结构:

bottleneck的意思就是像沙漏一样,就是先降维再升维。这样做可以大大减少计算量。注意bottleneck中3 x 3的卷积层只有一个,而不是普通结构的两个。

image.png

实现细节

  1. 训练时,和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
  2. 预测时,和AlexNet一样进行TTA,每张图片有10个裁剪;并且和VGGNet一样采用全卷积形式和多尺度TTA,最后对它们的模型输出值取均值即可

实验结果

验证ResNet可以解决网络退化问题

image.png
上表可以看出plain-34相对于plain-18网络退化了,注意根据作者的发现,这个问题并不是梯度消失引起的,因为BN能保证前向传播时,响应值方差不为0,同时观测到反向梯度良好。
这里的实验增维用的是补0的方法,可以看出Res34相对于Res18错误率却得到了提升。结合下图可以得出结论:第一ResNet解决了退化问题;第二Res34效果很好;第三下图比较左边和右边可以看出,虽然Res18的结果和plain-18差不多,但Res18的收敛速度更快。
image.png

跨层连接应该用恒等映射还是更复杂的投影变换?

image.png
这里比较了三种选择:选择A为增维直接补0,其它还是恒等映射;选择B为增维用投影变换,其它还是恒等映射;选择C为所有都用投影变换。
从上面的实验结果可以看出选择C是相对最好的,但实际还是使用选择B,因为对于bottleneck来说,如果不用恒等映射而用投影变换,整个网络的时间复杂度和模型大小会加倍,所以为了效率还是使用选择B。

单模型Res101和Res152的实验结果

image.png
上表更验证了ResNet解决了网络退化问题,注意即使是Res152,也比VGG-16的复杂度低很多_。_(Res152:11.3 billion FLOPs,VGG-16:15.3 billion FLOPs,VGG-19:19.6 billion FLOPs)

CIFAR-10上的实验结果

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

  1. 初始学习率为0.1对于Res110太大,几个epoch之后才开始收敛,所以先用小学习率0.01 warm up网络,等到训练误差低于80%再恢复正常
  2. 作者分析了每一层的响应值的方差(注意响应值和feature map不一样,响应值是BN之后,ReLU或求和之前的值),结果如下图中所示。从图中可以得出:第一残差函数 F(x) 相对于非残差函数更接近0;第二当层数加深,中间部分残差结构对其输入的更改更少。这两点验证了前面对残差结构原理的阐述
  3. 作者还尝试了超过1000层的网络,但发现实验结果也还行,训练集错误率和Res110差不多,测试集错误率比Res110略高一点,由于CIFAR-10数据集比较小,所以可能这里过拟合了。这一点说明残差结构可以适用于非常深的网络,也不会产生退化问题,或者说退化问题不明显

image.pngimage.png
参考文章:

  1. https://zhuanlan.zhihu.com/p/56961832
  2. https://www.bilibili.com/video/BV1vb4y1k7BV/?spm_id_from=333.999.0.0

标签:映射,残差,网络,resnet,解读,详细,拟合,跨层,恒等
From: https://www.cnblogs.com/rainbow-yh/p/16953209.html

相关文章