本文建议阅读时间 8 min

本文作者:铜豌豆 & Leong

残差神经网络 (ResNet) 是由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出的。ResNet 在 2015 年的 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中取得了图像分类、检测、定位三个冠军。2016 年 CVPR 论文:《Deep Residual Learning for Image Recognition》就介绍了 ResNet,该论文截至当前 (2020.1.3) 已被引用超过 36500 次。

残差神经网络的主要贡献是发现了 “退化现象(Degradation)”,并针对退化现象发明了“快捷连接(Shortcut connection)”(或者跳过连接),极大的消除了深度过大的神经网络训练困难问题。神经网络的 “深度” 首次突破了 100 层、最大的神经网络甚至超过了 1000 层。

ILSVRC 2015 图像分类排名

ResNet 论文网址 : https://arxiv.org/ab s/1512.03385

从一个信念说起

在 2012 年的 ILSVRC 挑战赛中,AlexNet 取得了冠军,并且大幅度领先于第二名。由此引发了对 AlexNet 广泛研究,并让大家树立了一个信念 ——“越深网络准确率越高”。这个信念随着 VGGNet、Inception v1、Inception v2、Inception v3 不断验证、不断强化,得到越来越多的认可,但是,始终有一个问题无法回避,这个信念正确吗?
它是正确的,至少在理论上是正确的。

假设一个层数较少的神经网络已经达到了较高准确率,我们可以在这个神经网络之后,拼接一段恒等变换的网络层,这些恒等变换的网络层对输入数据不做任何转换,直接返回(y=x),就能得到一个深度较大的神经网络,并且,这个深度较大的神经网络的准确率等于拼接之前的神经网络准确率,准确率没有理由降低。

层数较多的神经网络,可由较浅的神经网络和恒等变换网络拼接而成,下图所示。


退化现象与对策

在讲退化这个概念之前先说一下梯度消失 (Gradients Vanishing) 和梯度爆炸 (Gradients Exploding) 这个概念。也就是在训练神经网络的时候,导数或坡度有时会变得非常大,或者非常小,多个层以后梯度将以指数方式变大或者变小,这加大了训练的难度。

当网络很深时,很小的数乘起来将会变成 0(梯度消失),很大的数乘起来会变得非常大(梯度爆炸)

通过实验,ResNet 随着网络层不断的加深,模型的准确率先是不断的提高,达到最大值(准确率饱和),然后随着网络深度的继续增加,模型准确率毫无征兆的出现大幅度的降低。以下曲线显示 20 层普通网络的训练误差和测试误差低于 56 层普通网络,这个现象与 “越深的网络准确率越高” 的信念显然是矛盾的、冲突的。ResNet 团队把这一现象称为 “退化(Degradation)”。

ResNet 团队把退化现象归因为深层神经网络难以实现 “恒等变换(y=x)”。乍一看,让人难以置信,原来能够模拟任何函数的深层神经网络,竟然无法实现恒等变换这么简单的映射了?

让我们来回想深度学习的起源,与传统的机器学习相比,深度学习的关键特征在于网络层数更深、非线性转换(激活)、自动的特征提取和特征转换,其中,非线性转换是关键目标,它将数据映射到高纬空间以便于更好的完成 “数据分类”。随着网络深度的不断增大,所引入的激活函数也越来越多,数据被映射到更加离散的空间,此时已经难以让数据回到原点(恒等变换)。或者说,神经网络将这些数据映射回原点所需要的计算量,已经远远超过我们所能承受的。

退化现象让我们对非线性转换进行反思,非线性转换极大的提高了数据分类能力,但是,随着网络的深度不断的加大,我们在非线性转换方面已经走的太远,竟然无法实现线性转换。显然,在神经网络中增加线性转换分支成为很好的选择,于是,ResNet  团队在  ResNet  模块中增加了快捷连接分支,在线性转换和非线性转换之间寻求一个平衡。

残差网络

为了解决梯度消失 / 爆炸的问题,添加了一个跳过 / 快捷方式连接,将输入 x 添加到经过几个权重层之后的输出中,如下图所示:

残差网络构建块

输出为 H (x) = F (x) + x,权重层实际上是学习一种残差映射:F (x) = H (x) - x,即使权重层的梯度消失了,我们仍然始终具有标识 x 可以转移回较早的层。

ResNet 网络架构

按照这个思路,ResNet  团队分别构建了带有  “快捷连接(Shortcut Connection)”  的  ResNet  构建块、以及降采样的  ResNet  构建块,区别是降采样构建块的主杆分支上增加了一个  1×1  的卷积操作,见下图

下图展示了 34 层 ResNet 模型的架构图,仿照 AlexNet 的 8 层网络结构,我们也将 ResNet 划分成 8 个构建层(Building Layer)。一个构建层可以包含一个或多个网络层、以及一个或多个构建块(如 ResNet 构建块)。

34 层 ResNet 模型架构图(此图来源于《TensorFlow 深度学习实战大全 》)

第一个构建层,由 1 个普通卷积层和最大池化层构建。

第二个构建层,由 3 个残差模块构成。

第三、第四、第五构建层,都是由降采样残差模块开始,紧接着 3 个、5 个、2 个残差模块。

ResNet 各个版本的网络架构如下所示:

实验结果

一个概念:10 -crops: 取图片(左上,左下,右上,右下,正中)以及它们的水平翻转。这 10 个 crops 在 CNN 下的预测输出取平均作为最终预测结果。

  • 图像分类

  1. ILSVRC

其中 plain-34 就是普通的卷积叠加起来的网络,把 ResNet 深度一直加深,错误率也一直降低

10-Crop + 多尺度全卷积

10-Crop + 多尺度全卷积 + 6 个模型融合,错误率降到了 3.57%

  1. CIFAR-10 数据集

作者们干脆把网络深度加到了 1202 层,此时网络优化起来也没有那么困难,即仍可以收敛,但是,当层数从 110 增加到 1202 时,发现错误率从 6.43%增加到 7.93%,可能是因为 CIFAR10 样本少,层数增大到 1202 层时会因为 overfit 造成错误率提升。

  • 目标检测

PASCAL VOC 2007/2012 数据集 mAP (%) 测试结果如下:

MS COCO 数据集 mAP (%) 测试结果如下:

通过将 ResNet-101 应用于 Faster R-CNN,ResNet 可以获得比 VGG-16 更好的性能。

参考资料:

  • 《TensorFlow 深度学习实战大全 》作者:李明军

  • https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf

  • https://towardsdatascience.com/review-resnet-winner-of-ilsvrc-2015-image-classification-localization-detection-e39402bfa5d8

  • 吴恩达视频_梯度消失 / 爆炸:https://www.bilibili.com/video/av48340026?p=10

- END -

如果看到这里,说明你喜欢这篇文章,请转发、点赞。扫描下方二维码或者微信搜索「perfectaguang」,添加好友后即可获得10套程序员全栈课程+1000套PPT和简历模板向我私聊「进群」二字即可进入高质量交流群。

扫描二维码进群↓

在看 

卷积神经网络之 - 残差⽹络(RESNET)相关推荐

  1. 神经网络与卷积神经网络,深度残差卷积神经网络

    深度残差网络是卷积网络的一种吗 谷歌人工智能写作项目:神经网络伪原创 深度残差网络是卷积网络的一种吗 神经网络的历史是什么? 沃伦·麦卡洛克和沃尔特·皮茨(1943)基于数学和一种称为阈值逻辑的算法创 ...

  2. 卷积神经网络之(使用重复元素的网络)VGG

    卷积神经网络之VGG VGG提出了可以通过重复使用简单的基础块来构建深度模型的思路. VGG模型 VGG块的组成规律是: 连续使用数个相同的填充为1,.窗口形状为3*3的卷积层 后接一个步幅为2.窗口 ...

  3. 深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)

    1. CNN卷积神经网络的经典网络综述 下面图片参照博客:http://blog.csdn.net/cyh_24/article/details/51440344 2. LeNet-5网络 输入尺寸: ...

  4. 卷积 对图像进行卷积操作 卷积神经网络

    目录 卷积 对图像进行卷积操作 卷积神经网络 卷积(Filtering) 池化(下采样)(Pooling) 修正线性单元(Rectified Linear Units)(ReLus激活函数) 全连接层 ...

  5. 水很深的深度学习-卷积神经网络篇

    什么是卷积 先将一个函数反转,然后滑动叠加 最容易理解的对卷积(convolution)的解释_bitcarmanlee的博客-CSDN博客_卷积 这篇文章可以深入理解下卷积 卷积操作 步长:卷积核移 ...

  6. 深度学习 实验六 卷积神经网络(1)卷积 torch.nn

    目录 第5章 卷积神经网络 5.1 卷积 5.1.1 二维卷积运算 5.1.2 二维卷积算子 5.1.3 二维卷积的参数量和计算量 5.1.4 感受野 5.1.5 卷积的变种 5.1.5.1 步长(S ...

  7. 图像分类经典卷积神经网络—ResNet论文翻译(中英文对照版)—Deep Residual Learning for Image Recognition(深度残差学习的图像识别)

    图像分类经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为中英文对照版,纯中文版请稳步:[ResNet纯中文版] Deep Residual Learning for Image ...

  8. 图像分类经典卷积神经网络—ResNet论文翻译(纯中文版)—Deep Residual Learning for Image Recognition(深度残差学习的图像识别)

    图像分类经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为纯中文版,中英文对照版请稳步:[ResNet中英文对照版] Deep Residual Learning for Ima ...

  9. 基于Pytorch再次解读ResNet现代卷积神经网络

    个人简介:CSDN百万访问量博主,普普通通男大学生,深度学习算法.医学图像处理专攻,偶尔也搞全栈开发,没事就写文章,you feel me? 博客地址:lixiang.blog.csdn.net 基于 ...

最新文章

  1. maven 生成 xml
  2. burst tx 功能 开启_Serverspeeder 锐速config配置文件详解
  3. ZOJ - 2706 Thermal Death of the Universe(线段树)
  4. pom.xml里发布和下载包
  5. mysql配置两个猪数据库_Linux下安装启动多个Mysql
  6. 操作技巧:在Python Shell里如何清屏
  7. JAVA简单的SWING及AWT
  8. 4.9.5 通用注释
  9. SysUtils.StrLCat
  10. maven 编译命令
  11. UltraEdit(UE)如何设置去掉.bak备份文件?
  12. HTML前端代码分析(查看网站黑链的几种方法)暗链是什么意思
  13. 基于SpringBoot的旅游景点与酒店预定系统
  14. 厦门高考成绩查询2021,2021厦门市地区高考成绩排名查询,厦门市高考各高中成绩喜报榜单...
  15. Excel创建堆积柱形混合折线图
  16. Ubuntu下解压rar的分卷文件 faster_rcnn_models.part1.rar
  17. python爬虫-喜马拉雅_晚安妈妈睡前故事
  18. 【yolo5】目标检测数据集制作
  19. python中bytearray函数_Python内置函数—bytearray
  20. Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook解决方法

热门文章

  1. 橡胶垫片的特点与用途
  2. 在线绘制流程图网站、思维导图网站总结
  3. python爬取京东手机数据_Python数据爬虫学习笔记(21)爬取京东商品JSON信息并解析...
  4. POI设置excel样式
  5. java个人理财代码_基于JavaEE的个人理财系统
  6. linux 隐藏命令参数,linux – 在ps中隐藏命令的参数
  7. 销量惨淡,广告费ACOS飙升
  8. PoisonGAN: Generative Poisoning Attacks Against Federated Learning in Edge Computing Systems 阅读报告
  9. JNI中创建新的线程回调java方法的技巧
  10. 原创如何看机械硬盘SMART信息