目录

ResNet解析

0 前言

1 基础

2 残差块

3 总结

参考


ResNet解析

0 前言

论文:《Deep Residual Learning for Image Recognition》

论文地址:Deep Residual Learning for Image Recognition | IEEE Conference Publication | IEEE Xplore

1 基础

经典网络ResNet(Residual Networks)由Kaiming He等人于2015年提出, 它在2015年的ImageNet图像识别 挑战赛夺魁,并深刻影响了后来的深度神经⽹络的设计。

在ResNet网络提出之前,传统的卷积神经网络都是通过将一系列卷积层与下采样层进行堆叠得到的。但是当堆叠到一定网络深度时,就会出现两个问题。

1)梯度消失或梯度爆炸。

2)退化问题(degradation problem)。

在ResNet论文中说通过数据的预处理以及在网络中使用BN(Batch Normalization)层能够解决梯度消失或者梯度爆炸问题。但是对于退化问题(随着网络层数的加深,效果还会变差,如下图所示)并没有很好的解决办法。

随着我们设计越来越深的⽹络,深刻理解“新添加的层如何提升神经⽹络的性能”变得⾄关重要。更重要的是设计⽹络的能⼒,在这种⽹络中,添加层会使⽹络更具表现⼒。假设有⼀类特定的神经⽹络结构 ,它包括学习速率和其他超参数设置。对于所有,存在⼀些参数集(例如权重和偏置),这些参数可以通过在合适的数据集上进⾏训练而获得。现在假设是我们真正想要找到的函数,如果是 ,那我们可以轻而易举的训练得到它,但通常我们不会那么幸运。相反,我们将尝试找到⼀个函数 ,这是我们在 中的最佳选择。例如,给定⼀个具有 X 特性和 y 标签的数据集,我们可以尝试通过解决以下优化问题来找到它:
怎样得到更近似真正 的函数呢?唯⼀合理的可能性是,我们需要设计⼀个更强⼤的结构 F。换句 话说,我们预计  “更近似”。然而,如果 ,则⽆法保证新的体系“更近似”。如下图所⽰,对于⾮嵌套函数(non-nested function)类(下图左),较复杂的函数类并不总是向“真”函 数 ​靠拢(复杂度由 F1 向 F6 递增)。虽然 F3 ⽐ F1 更接近 ​,但F6 却离的更远了。相 反对于下图右侧的嵌套函数(nested function)类 F1 . . . ⊆ F6,我们可以避免上述问题。

只有当较复杂的函数类包含较小的函数类时,我们才能确保提⾼它们的性能。对于深度神经⽹络,如 果我们能将新添加的层训练成 恒等映射(identity function)f(x) = x ,新模型和原模型将同样有效。同时,由于新模型可能得出更优的解来拟合训练数据集,因此添加层似乎更容易降低训练误差。
从另一个角度来理解:

我们可以设想:当我们直接对网络进行简单的堆叠到特别长,网络内部的特征在其中某一层已经达到了最佳的情况,这时候剩下层应该不对改特征做任何改变,也就是说,对一个特别深的深度网络而言,该网络的浅层形式的解空间应该是这个深度网络解空间的子集,换句话说,相对于浅层网络更深的网络至少不会有更差的效果,但是因为网络degradation的问题,这并不成立。

那么,我们退而求其次,已知有网络degradation的情况下,不求加深度能提高准确性,能不能至少让深度网络实现和浅层网络一样的性能,即让深度网络后面的层至少实现恒等映射的作用。

针对这⼀问题,何恺明等⼈提出了残差⽹络(ResNet。残差⽹络的核⼼思想是:每个附加层都应该更容易地包含原始函数作为其元素之⼀。于是,残差块(residual blocks)便诞⽣了,这个设计对如何建⽴深层神经⽹络产⽣了深远的影响。

2 残差块

假设我们的原始输⼊为 x ,而希望学出的理想映射为 f(x) ,下图左图虚线框中的部分需要直接拟合出该映射 f(x) ,而右图虚线框中的部分则需要拟合出残差映射 f(x) x残差映射在现实中往往更容易优化。以本节开头提到的恒等映射作为我们希望学出的理想映射 f(x) ,我们只需将下图中右图虚线框内上⽅的加权运算(如仿射)的权重和偏置参数设成 0,那么 f(x) 即为恒等映射。实际中,当理想映射 f(x) 极接近于恒等映射时,残差映射也易于捕捉恒等映射的细微波动。右图是 ResNet 的基础结构--残差块(residual block)。在残差块中,输⼊可通过跨层数据线路更快地向前传播。

ResNet 沿⽤了 VGG 完整的 3 × 3 卷积层设计。残差块⾥⾸先有 2 个有相同输出通道数的 3 × 3 卷积层。每 个卷积层后接⼀个批量归⼀化层BN和 ReLU 激活函数。然后我们通过跨层数据通路,跳过这 2 个卷积运算,将输⼊直接加在最后的 ReLU 激活函数前。这样的设计要求 2 个卷积层的输出与输⼊形状⼀样,从而可以相加。如果想改变通道数,就需要引⼊⼀个额外的 1 × 1 卷积层来将输⼊变换成需要的形状后再做相加运算。

使用残差块之后随着网络层数的加深,效果变好而不是变差(图来自论文)。

ResNet 的前两层为:输出通道数为 64、步幅为 2 的 7 × 7 卷积层,后接步幅为 2 的 3 × 3 的最⼤汇聚层。
ResNet 则使⽤ 4 个由残差块组成的模块,每个模块使⽤若⼲个同样输出通道数的残差块。第⼀个模块的通道数同输⼊通道数⼀致。由于之前已经使⽤了步幅为2 的最⼤汇聚层,所以⽆须减小⾼和宽。之后的每个模块在第⼀个残差块⾥将上⼀个模块的通道数翻倍,并将⾼和宽减半。
每个模块有 4 个卷积层(不包括恒等映射的 1 × 1 卷积层)。加上第⼀个 7 × 7 卷积层和最后⼀个全连接层,共有 18 层。
注:恒等映射的 1 × 1 卷积层能够在top1上提升大概0.5%的准确率

 RseNet 网络具体参数图

3 总结

  1. 学习嵌套函数(nested function)是训练神经⽹络的理想情况。在深层神经⽹络中,学习另⼀层作为恒等映射(identity function)较容易(尽管这是⼀个极端情况)。
  2. 残差映射可以更容易地学习同⼀函数,例如将权重层中的参数近似为零。
  3. 利⽤残差块(residual blocks)可以训练出⼀个有效的深层神经⽹络:输⼊可以通过层间的残余连接更快地向前传播。
  4. 残差⽹络(ResNet)对随后的深层神经⽹络设计产⽣了深远影响,⽆论是卷积类⽹络还是全连接类⽹络。
  5. 使用BN层加速训练,丢弃了Dropout.

参考

李沐 《动手学深度学习》

(44条消息) 深度学习网络篇——ResNet_PRIS-SCMonkey的博客-CSDN博客_深度学习网络

(44条消息) 六、ResNet网络详细解析(超详细哦)_会哭泣的猫的博客-CSDN博客_resnet网络

【动手学深度学习】06-ResNet解析相关推荐

  1. 伯禹公益AI《动手学深度学习PyTorch版》Task 06 学习笔记

    伯禹公益AI<动手学深度学习PyTorch版>Task 06 学习笔记 Task 06:批量归一化和残差网络:凸优化:梯度下降 微信昵称:WarmIce 批量归一化和残差网络 BN和Res ...

  2. 《动手学深度学习v2》之细致解析(1)内容及介绍及安装

    前言 作者来自北京某不知名985,现在是本科在读学生,专业是数据科学与大数据技术,班上同学都太卷了,没办法,需要学习深度学习,经大佬介绍,在B站上找到了一个很不错的资源,李沐老师的<动手学深度学 ...

  3. 《动手学深度学习》课后习题3

    <动手学深度学习>学习网址: 参考资料 <动手学深度学习>中文版官网教材: PyTorch中文文档: 部分PyTorch代码来自GitHub开源仓库: <动手学>: ...

  4. 「动手学深度学习」在B站火到没谁,加这个免费实操平台,妥妥天花板!

    论 AI 圈活菩萨,非李沐老师莫属. 前有编写「动手学深度学习」,成就圈内入门经典,后又在B站免费讲斯坦福 AI 课,一则艰深硬核讲论文的视频播放量36万,不少课题组从导师到见习本科生都在追番. 如此 ...

  5. 资源 | 李沐等人开源中文书《动手学深度学习》预览版上线

    来源:机器之心 本文约2000字,建议阅读10分钟. 本文为大家介绍了一本交互式深度学习书籍. 近日,由 Aston Zhang.李沐等人所著图书<动手学深度学习>放出了在线预览版,以供读 ...

  6. 《动手学深度学习》PyTorch版本

    Dive-Into-Deep-Learning-PyTorch-PDF 简介   本项目对中文版<动手学深度学习>中的代码进行整理,并参考一些优秀的GitHub项目给出基于PyTorch的 ...

  7. (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅰ

    开源项目地址:d2l-ai/d2l-zh 教材官网:https://zh.d2l.ai/ 书介绍:https://zh-v2.d2l.ai/ 笔记基于2021年7月26日发布的版本,书及代码下载地址在 ...

  8. 李沐《动手学深度学习》PyTorch 实现版开源,瞬间登上 GitHub 热榜!

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 李沐,亚马逊 AI 主任科学家,名声在外!半年前,由李沐.Aston Zhang 等人合力打造 ...

  9. 【深度学习】李沐《动手学深度学习》的PyTorch实现已完成

    这个项目是中文版<动手学深度学习>中的代码进行整理,用Pytorch实现,是目前全网最全的Pytorch版本. 项目作者:吴振宇博士 简介   Dive-Into-Deep-Learnin ...

最新文章

  1. java输入输出及文件_java输入输出流及文件操作
  2. ICML新研究提出泛化能力评估新指标:直接上向量余弦距离就OK,还开源了相关代码...
  3. OS / Linux / 文件描述符以及 file 结构体
  4. Get JSON with the jQuery getJSON Method
  5. i春秋DMZ大型靶场实验(四)Hash基础
  6. eclipse鼠标变十了_Eclipse在过去十年中的主要成就
  7. win8 打开计算机配置,win8.1 更改电脑配置无法使用
  8. 调查VMware View Composer失败代码(2085204)
  9. [CodeForces 372A] Counting Kangaroos is Fun
  10. java输出long最大值_Java调用long的最大值和最小值
  11. html怎么统计总访问量,如何实现对网站页面访问量的统计?
  12. 水花兄弟(Splash Brothers)
  13. 假如生活欺骗了你 (普希金诗歌)
  14. 微信公众号多域名回调系统
  15. proxmox的安装
  16. 求解单位冲激响应的笔记
  17. java秒表计时器_Java实现的计时器【秒表】功能示例
  18. 实时系统vxWorks - timer定时应用
  19. mysql难不难_mysql数据库难学吗?
  20. Nginx 相关问题(持续更新一:Cookie问题)

热门文章

  1. 【MySQL基础教程】事务详细介绍
  2. 弘辽科技:淘宝14天降权会恢复吗?多久能恢复正常?
  3. [脑科学]-这才是心理学
  4. xshow-2. 使用HTML 5 Boilerplate构建前端
  5. zzuli oj 1122 小明同学的调查作业
  6. 视频教程-OpenGL入门2019版-其他
  7. 世界上第一台计算机内存容量,29、世界上第一台电子计算机ENIAC诞生于.doc
  8. Ubuntu系统安装微信(解决高分辨率屏幕问题及图标显示问题)
  9. 为何 Linus 一个人就能写出这么强的系统?
  10. SQLite安装配置详细教程2023版