卷积神经网络之 - 残差⽹络(RESNET)
本文建议阅读时间 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 层。
从一个信念说起
在 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 构建块)。
第一个构建层,由 1 个普通卷积层和最大池化层构建。
第二个构建层,由 3 个残差模块构成。
第三、第四、第五构建层,都是由降采样残差模块开始,紧接着 3 个、5 个、2 个残差模块。
ResNet 各个版本的网络架构如下所示:
实验结果
一个概念:10 -crops: 取图片(左上,左下,右上,右下,正中)以及它们的水平翻转。这 10 个 crops 在 CNN 下的预测输出取平均作为最终预测结果。
图像分类
ILSVRC
其中 plain-34 就是普通的卷积叠加起来的网络,把 ResNet 深度一直加深,错误率也一直降低
10-Crop + 多尺度全卷积 + 6 个模型融合,错误率降到了 3.57%
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)相关推荐
- 神经网络与卷积神经网络,深度残差卷积神经网络
深度残差网络是卷积网络的一种吗 谷歌人工智能写作项目:神经网络伪原创 深度残差网络是卷积网络的一种吗 神经网络的历史是什么? 沃伦·麦卡洛克和沃尔特·皮茨(1943)基于数学和一种称为阈值逻辑的算法创 ...
- 卷积神经网络之(使用重复元素的网络)VGG
卷积神经网络之VGG VGG提出了可以通过重复使用简单的基础块来构建深度模型的思路. VGG模型 VGG块的组成规律是: 连续使用数个相同的填充为1,.窗口形状为3*3的卷积层 后接一个步幅为2.窗口 ...
- 深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)
1. CNN卷积神经网络的经典网络综述 下面图片参照博客:http://blog.csdn.net/cyh_24/article/details/51440344 2. LeNet-5网络 输入尺寸: ...
- 卷积 对图像进行卷积操作 卷积神经网络
目录 卷积 对图像进行卷积操作 卷积神经网络 卷积(Filtering) 池化(下采样)(Pooling) 修正线性单元(Rectified Linear Units)(ReLus激活函数) 全连接层 ...
- 水很深的深度学习-卷积神经网络篇
什么是卷积 先将一个函数反转,然后滑动叠加 最容易理解的对卷积(convolution)的解释_bitcarmanlee的博客-CSDN博客_卷积 这篇文章可以深入理解下卷积 卷积操作 步长:卷积核移 ...
- 深度学习 实验六 卷积神经网络(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 ...
- 图像分类经典卷积神经网络—ResNet论文翻译(中英文对照版)—Deep Residual Learning for Image Recognition(深度残差学习的图像识别)
图像分类经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为中英文对照版,纯中文版请稳步:[ResNet纯中文版] Deep Residual Learning for Image ...
- 图像分类经典卷积神经网络—ResNet论文翻译(纯中文版)—Deep Residual Learning for Image Recognition(深度残差学习的图像识别)
图像分类经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为纯中文版,中英文对照版请稳步:[ResNet中英文对照版] Deep Residual Learning for Ima ...
- 基于Pytorch再次解读ResNet现代卷积神经网络
个人简介:CSDN百万访问量博主,普普通通男大学生,深度学习算法.医学图像处理专攻,偶尔也搞全栈开发,没事就写文章,you feel me? 博客地址:lixiang.blog.csdn.net 基于 ...
最新文章
- maven 生成 xml
- burst tx 功能 开启_Serverspeeder 锐速config配置文件详解
- ZOJ - 2706 Thermal Death of the Universe(线段树)
- pom.xml里发布和下载包
- mysql配置两个猪数据库_Linux下安装启动多个Mysql
- 操作技巧:在Python Shell里如何清屏
- JAVA简单的SWING及AWT
- 4.9.5 通用注释
- SysUtils.StrLCat
- maven 编译命令
- UltraEdit(UE)如何设置去掉.bak备份文件?
- HTML前端代码分析(查看网站黑链的几种方法)暗链是什么意思
- 基于SpringBoot的旅游景点与酒店预定系统
- 厦门高考成绩查询2021,2021厦门市地区高考成绩排名查询,厦门市高考各高中成绩喜报榜单...
- Excel创建堆积柱形混合折线图
- Ubuntu下解压rar的分卷文件 faster_rcnn_models.part1.rar
- python爬虫-喜马拉雅_晚安妈妈睡前故事
- 【yolo5】目标检测数据集制作
- python中bytearray函数_Python内置函数—bytearray
- Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook解决方法
热门文章
- 橡胶垫片的特点与用途
- 在线绘制流程图网站、思维导图网站总结
- python爬取京东手机数据_Python数据爬虫学习笔记(21)爬取京东商品JSON信息并解析...
- POI设置excel样式
- java个人理财代码_基于JavaEE的个人理财系统
- linux 隐藏命令参数,linux – 在ps中隐藏命令的参数
- 销量惨淡,广告费ACOS飙升
- PoisonGAN: Generative Poisoning Attacks Against Federated Learning in Edge Computing Systems 阅读报告
- JNI中创建新的线程回调java方法的技巧
- 原创如何看机械硬盘SMART信息