ResNet

  • 残差快
  • ResNet网络
  • 总结

ResNet也被称为残差网络,是由何凯明为主的Microsoft Research的4位学者在2015年首次提出,获得了2015年ILSVRC分类任务的第一名,还在ImageNet检测、ImageNet定位、COCO检测和COCO分割的任务中获得了第一名。也可以说是卷积神经网络中最常用的网络之一,并深刻影响了后来的深度神经网络的设计,不仅在计算机视觉领域取得发展,在nlp领域如transformer等模型里也有应用。
原论文地址:Deep Residual Learning for Image Recognition
Code:resnet
在文章开头,作者先给出了下面这张图:

这里作者想要表达的是虽然卷积神经网络能以堆叠层的方式提取丰富特征,但当层数多起来时也面临着梯度消失与梯度爆炸的问题,这个问题往往可以通过batch normalization等方法处理,但是作者发现当更深层次的网络能够开始收敛时,另一个退化问题就暴露出来了:随着网络深度的增加,精度趋于饱和,然后迅速退化。出乎意料的是,这种退化不是由过拟合引起的,在适当深度的模型中添加更多的层会导致更高的训练误差。在上图可以看到56层的堆叠网络在训练集测试集上的效果并没有20层的好,精度退化问题就出现了,基于解决这一问题,作者提出了ResNet,先看一下这个网络的结果(左图是普通网络的18层和34层的结果,右边是ResNet18层和34层的结果):

很明显,ResNet很好的解决了退化问题。下面是对于ResNet的简单介绍。

残差快

ResNet块的输出不同于AlexNet等网络,它还额外加上了原输入的信息,若原输入为x,f为堆叠层的运算,ResNet的输出则是f(x)+x,如下图所示(注意这里的输入与输出shape与channels都是一样的,因为它们要相加):

上图中从输入到输出额外的一条线作者将它称为Identity short-cut connections,这个是ResNet网络的核心。上图整个被称为残差快,在原论文中一个残差块有两种不同的结构,分别如下:

左图中,输入x分别经过一个3x3卷积、batch normliaztion、relu激活、3x3卷积和batch normliaztion,由于需要与原输入shape与channel数相同,所以每个卷积层的padding都为1,stride多维1,最后加上原输入x得到一个残差快的输出。右图也是一样,不过由于对输入加了一个1x1的卷积核,所以对形状与channels数可以做适当改变,比如像下图就将shape减半,通道数加倍:

ResNet网络

由于ResNet系列中网络较多,这里只写一下作者在原论文中贴出的layer-34版本的ResNet-34(34层的ResNet),也是最上面那张图里的,其他网络如ResNet-50、ResNet-101等等也大同小异,无非是多了几层,具体差异如下图:

可以把他们中间的层分成4块,像是GoogleNet的stage,分别是conv2_x、conv3_x、conv4_x与conv5_x,如conv2_x中的3x3,64表示经过3x3的卷积层,输出channel数为64;x2、x3表示两个、三个残差快连接在一起。这里列举了ResNet-34与VGG-19和34-layer plain(普通网络)的结构对比图:

最右边就是ResNet-34的网络结构,图中实线的Identity short-cut connections表示上面残差块中的没有1x1卷积核的,而虚线表示有1x1卷积核的。可以通过计算看到每个卷积块的输入与输出的channel数与shape都是一样的,最后接一个全局平均池化得到一个4d张量,flatten之后然后再接一个全连接得到形状为(samples,1000)的最后输出(由于ImageNet类别数是1000)。

总结

ResNet由于残差连接解决了前面提出的问题,以至于能训练出更深的网络,能达到1000层,原因是什么?
首先,若不使用残差连接,假设一层的输出为y=f(x),在反向传播时的梯度就是 ∂ y ∂ w \frac{\partial y}{\partial w} ∂w∂y​,则参数更新的时候就是 w = w − η ∂ y ∂ w w=w-\eta \frac{\partial y}{\partial w} w=w−η∂w∂y​;若再加一层,输出变为 y ′ = g ( f ( x ) ) y^{'}=g(f(x)) y′=g(f(x)),则梯度变成 ∂ y ′ ∂ w = ∂ y ′ ∂ y × ∂ y ∂ w \frac{\partial y'}{\partial w}=\frac{\partial y'}{\partial y}\times{\frac{\partial y}{\partial w}} ∂w∂y′​=∂y∂y′​×∂w∂y​, ∂ y ∂ w \frac{\partial y}{\partial w} ∂w∂y​不变,但是层数越多 ∂ y ∂ w \frac{\partial y}{\partial w} ∂w∂y​前面的偏导也越多,如果这些偏导都小于1,当层数过大时, ∂ y ∂ w \frac{\partial y}{\partial w} ∂w∂y​就会被缩小很多,导致后面对前层参数做梯度更新时特别慢,造成梯度消失。
若使用ResNet结构,它的输出可以看成 y ′ ′ = g ( f ( x ) ) + f ( x ) y''=g(f(x))+f(x) y′′=g(f(x))+f(x),即为原输入加上输出,此时的梯度就为 ∂ y ′ ′ ∂ w = ∂ y ′ ∂ w + ∂ y ∂ w \frac{\partial y''}{\partial w}=\frac{\partial y'}{\partial w}+{\frac{\partial y}{\partial w}} ∂w∂y′′​=∂w∂y′​+∂w∂y​,这时梯度不同于不使用残差连接时的,乘法变成了加法,增大了梯度,使得梯度更新的时候不会特别小,模型收敛时也会更快。不小的梯度使得在层数变多时也能不带来梯度消失的问题。

具体细节可见作者源代码:https://github.com/KaimingHe/deep-residual-networks
也可参照沐神代码地址:https://zh-v2.d2l.ai/chapter_convolutional-modern/resnet.html

参考资料:李沐—动手学深度学习v2
深度学习笔记 11/20

ResNet结构与论文理解相关推荐

  1. ResNet 论文理解含视频

    ResNet 论文理解 问题导引论文理解 Q1.神经网络真的越深越好吗? Q2. 为什么加深网络会带来退化问题? Q3. 如何构建更深层的网络? 基于残差的深度学习框架 Residual Learni ...

  2. Transformer(二)--论文理解:transformer 结构详解

    转载请注明出处:https://blog.csdn.net/nocml/article/details/110920221 本系列传送门: Transformer(一)–论文翻译:Attention ...

  3. resnet结构_来聊聊ResNet及其变种

    加入极市专业CV交流群,与 10000+来自港科大.北大.清华.中科院.CMU.腾讯.百度 等名校名企视觉开发者互动交流! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总,行业技术交流.关注 ...

  4. MobileNetV3 论文理解,以及tensorflow、pytorch相关代码

    MobileNetV3论文理解,以及tensorflow+pytorch代码 MobileNetV3相关 论文地址 Block结构变化 算法内部微结构变化 网络整体结构 网络性能 Tensorflow ...

  5. bottleneck resnet网络_关于ResNet网络的一点理解(网络结构、building block 及 “bottleneck” building block)...

    [时间]2018.10.05 [题目]关于ResNet网络的一点理解(网络结构.building block 及 "bottleneck" building block) 概述 本 ...

  6. SCI写作|Tweet转发最多的好文之一:写好结构化论文(背景-内容-结论)的十条规则!...

    来源 | 学位与写作 布雷特•门斯 (Brett Mensh) 和康拉德•科尔丁 (Konrad Kording) 总结出了写好结构化论文的10条规则.门斯在回应<自然>杂志职业特点栏目采 ...

  7. 图卷积网络进行骨骼识别代码_【骨骼行为识别】2s-AGCN论文理解

    Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition 论文链接: https:/ ...

  8. (pytorch-深度学习系列)ResNet残差网络的理解-学习笔记

    ResNet残差网络的理解 ResNet伴随文章 Deep Residual Learning for Image Recognition 诞生,该文章是MSRA何凯明团队在2015年ImageNet ...

  9. resnet结构_经典卷积网络(二)-ResNet

    一.ResNet(总结自csdn文章) 随着网络的加深,出现了训练集准确率下降的现象,确定这不是由于Overfit过拟合造成的.作者针对这个问题提出了一种全新的网络,叫深度残差网络,它允许网络尽可能的 ...

最新文章

  1. 网站前中期外链优化少不了这三点!
  2. 如何在网页中禁止使用鼠标右键?几种方法和大家分享
  3. sqlplus: error while loading shared libraries
  4. Winform开发中另一种样式的OutLookBar工具条
  5. c语言open参数,ifstream :: open()的C类型参数
  6. Django启动服务器时,报错mysql的2059错误的原因。
  7. bash shell函数的定义及变量的简单说明
  8. 这样写代码,真是帅到没有朋友
  9. fetch请求报错:
  10. Java将Word文档转换为PDF的完美工具
  11. 时间基准控件外观的设置纠正
  12. 问世间最大的乐趣是什么?
  13. 毕业论文外文文献在哪里找?
  14. Latex 摘要部分
  15. linux usb挂载日志,linux系统usb挂载
  16. Android 图片控件ImageView
  17. Win7 Win2003 双系统重装2003以后修复Windows 7 系统启动项
  18. SAP中利润中心清单输出请求处理实例
  19. 知识扫盲_常用电平标准(TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232)
  20. 学HTML5要英语数学吗,数学和英语不好的人能学编程吗?

热门文章

  1. webp格式的图片如何在html中应用
  2. 【Pandas】Pandas数据分析题
  3. 关于cpu 使用率【转】
  4. 京东宣布涨薪,两年内将员工平均年薪从14薪涨到16薪!
  5. 网站图标的生成和使用--web前端
  6. 为了在上海租房,我用python连夜爬了20000多条房源信息
  7. 基于SSM框架的电商平台后台管理系统
  8. 项目经理论坛_做好项目经理,应该向华为学习
  9. C#集合利用System.Linq.Enumerable.Select()方法执行集合类型转换
  10. 2012华东架构师大会将于2012年11月18日在上海举办