• 《Deep Residual Learning for Image Recognition》
  • 2015,kaiming He et al,ResNet。

ResNet由微软研究院的kaiming He等4名华人提出,通过使用Residual Unit成功训练152层深的神经网络,在ILSVRC 2015比赛中获得了冠军,取得3.57%的top5错误率,同时参数量却比VGGNet低,效果非常突出。ResNet的结构可以极快地加速超深神经网络的训练,模型的准确率也有非常大的提升。
ResNet最初的灵感出自这个问题:在不断增加神经网络的深度时,会出现一个Degradation(退化)的问题,即准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。这并不是过拟合的问题,因为不光在测试集上误差增大,训练集本身误差也会增大。

假设有一个比较浅的网络达到了饱和的准确率,那么后面再加上几个y=x的全等映射层,起码误差不会增加,即更深的网络不应该带来训练集上误差上升。而这里提到的使用全等映射直接将前一层输出传到后面的思想,就是ResNet的灵感来源。假定某段神经网络的输入是x,期望输出是H(x),如果我们直接把输入x传到输出作为初始结果,那么此时我们需要学习的目标就是F(x) = H(x) - x。如图所示,这就是一个ResNet的残差学习单元(Residual Unit),
ResNet相当于将学习目标改变了,不再是学习一个完整的输出H(x),只是输出和输入的差别H(x)-x,即残差。

这个Residual block通过shortcut connection实现,通过shortcut将这个block的输入和输出进行一个element-wise的加叠,这个简单的加法并不会给网络增加额外的参数和计算量,同时却可以大大增加模型的训练速度、提高训练效果,并且当模型的层数加深时,这个简单的结构能够很好的解决退化问题。
接下来,作者就设计实验来证明自己的观点。
下图为VGGNet-19,以及一个34层深的普通卷积神经网络,和34层深的ResNet网络的对比图。可以看到普通直连的卷积神经网络和ResNet的最大区别在于,ResNet有很多旁路的支线将输入直接连到后面的层,使得后面的层直接学习残差,这种结构也被称为shortcut或skip connections。
传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。

模型构建好进行实验,在plain上观察到明显的退化现象,而ResNet上不仅没有退化,34层网络的效果反而比18层的更好,而且收敛速度更快。

对于shortcut的方式,作者提出了三个选项:
A. 使用恒等映射,如果residual block的输入输出维度不一致,对增加的维度用0来填充;
B. 在block输入输出维度一致时使用恒等映射,不一致时使用线性投影以保证维度一致;
C. 对于所有的block均使用线性投影。
对这三个选项都进行了实验,发现虽然C的效果好于B的效果好于A的效果,但是差距很小,因此线性投影并不是必需的,而使用0填充时,可以保证模型的复杂度最低,这对于更深的网络是更加有利的。
模型结构图中,我们可以清楚的”实线“和”虚线“两种连接方式,
1)实线的的Connection部分都是3x3x64的特征图,他们的channel个数一致,所以采用计算方式:
y=F(x)+x
2)虚线的的Connection部分分别是3x3x64和3x3x128的特征图,他们的channel个数不同(64和128),所以采用计算方式:
y=F(x)+Wx
其中W是卷积操作,用来调整x的channel维度的。
在ResNet的论文中,除了两层的残差学习单元,还有三层的残差学习单元。两层的残差学习单元中包含两个相同输出通道数(因为残差等于目标输出减去输入,即H(x) - x,因此输入、输出维度需保持一致)的33卷积;而3层的残差网络则使用了11卷积,并且是在中间33的卷积前后都使用了11的卷积,有先降维再升维的操作。另外,如果有输入、输出维度不同的情况,我们可以对x做一个线性映射变换维度,再连接到后面的层。
两层和三层的ResNet残差学习模块:

三层结构拥有相同数量的层又减少了参数量,因此可以拓展成更深的模型。于是作者提出了50、101、152层的ResNet,而且不仅没有出现退化问题,错误率也大大降低,同时计算复杂度也保持在很低的程度。
ResNet在不同层数时的网络配置,其中基础结构很类似,都是前面提到的两层和三层的残差学习单元的堆叠。

ResNet在ImageNet上的结果:

在使用了ResNet的结构后,可以发现层数不断加深导致的训练集上误差增大的现象被消除了,ResNet网络的训练误差会随着层数增加而逐渐减少,并且在测试集上的表现也会变好。在ResNet推出后不久,Google就借鉴了ResNet的精髓,提出了Inception V4和Inception ResNet V2,并通过融合这两个模型,在ILSVRC数据集上取得了惊人的3.08%的错误率。可见,ResNet及其思想对卷积神经网络研究的贡献确实非常显著,具有很强的推广性。


注:博众家之所长,集群英之荟萃。

卷积神经网络的网络结构——ResNet相关推荐

  1. 卷积神经网络的网络结构——以LeNet-5为例

    卷积神经网络的网络结构--以LeNet-5为例 2016-03-29  天狼舰  文章来源  阅 497  转 9 转藏到我的图书馆 微信 分享: QQ空间 QQ好友 新浪微博 腾讯微博 推荐给朋友 ...

  2. 深度学习(7): 卷积神经网络2——网络结构

    文章目录 1 卷积神经网络的结构 1.1 输入层 1.2 卷积层 1.3 Pooling层 1.4 全连接层 1.5 输出层 2 卷积操作 2.1 Padding操作 2.2 滑动窗口卷积操作 2.3 ...

  3. 卷积神经网络AlexNet和ResNet比较[2021论文]

    本文是一篇人工智能前沿算法课设小论文,主要内容是对于经典模型AlexNet和ResNet的比较.整体上比较完整,由于是从文档上搬上来,所以在排版上有一些不规范,需要完整论文或者参考文献私信可免费提供. ...

  4. 卷积神经网络的网络结构——VGGNet

    ######<Very Deep Convolutional Networks for Large-scale Image Recognition> 2014,牛津大学计算机视觉组(Vis ...

  5. CNN卷积神经网络的网络结构和学习原理

    卷积神经网络,主要是对图片进行处理.假如需要对一个1000*1000的图片进行分类,如果用传统的机器学习或者DNN,如要输入1000000个特征,当然也可以提前用一些方法进行降维,但是处理还是不方便. ...

  6. RegNet——颠覆常规神经网络认知的卷积神经网络(网络结构详解+详细注释代码+核心思想讲解)——pytorch实现

            RegNet的博客的准备我可谓是话费了很多的时间,参考了诸多大佬的资料,主要是网上对于这个网络的讲解有点少,毕竟这个网络很新.网上可以参考的资料太少,耗费了相当多的时间,不过一切都是值 ...

  7. 卷积神经网络——Alexnet8网络结构及python实现

    简介: 上一节介绍了比较简单的LeNet-5网络结构,随着GPU的发展,电脑运算速度也越来越快,这就会让人去挖掘更复杂更深层次的卷积结构,于是有了双GPU运行的Alexnet8网络结构,包含了五个卷积 ...

  8. 卷积神经网络(CNN)综述

    目录 1. 卷积神经网络概念 2. 卷积神经网络的特点 2.1 局部区域连接 2.2 权值共享 2.3 降采样 3. 卷积神经网络的结构 3.1 卷积层 3.2 池化层 4. 卷积神经网络的研究进展 ...

  9. CS231n课程笔记翻译9:卷积神经网络笔记

    译者注:本文翻译自斯坦福CS231n课程笔记ConvNet notes,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客和猴子翻译完成,堃堃和李艺颖进行校对修改. 原文如下 内容列 ...

最新文章

  1. 分布式文件系统(HDFS)与 linux系统文件系统 对比
  2. 为什么java需要静态类_java – 为什么OOP中静态类的最佳实践有所不同?
  3. ​MobileViT 它来了!Apple 提出轻量、通用、适用于移动设备的Transformer!
  4. PowerDesigner(四)-业务处理模型
  5. mysql 小写null 大写null_mysql中的null字段值的处理及大小写问题
  6. 修改蓝牙耳机按键映射_拆解报告:QCY T4 TWS蓝牙耳机
  7. 手机的寿命到底是多久,你多长时间换一次手机?
  8. 自动化测试十大疑问解答 软件测试人必看
  9. 数据恢复的学习旅程开始
  10. hdu-5673 Robot(默次金数)
  11. Oracle 定时任务(dbms_jobs)、expdp 与 impdp 数据泵导入导出
  12. linux 蓝牙测试程序下载,Linux下蓝牙测试软件包和命令介绍
  13. 宗成庆《自然语言理解》第二章作业
  14. JSONObject.fromObject 日期类型转换问题
  15. MATLAB篇之层次分析法
  16. linux oel7没有网络,OEL7.2下Oracle11.2.0.4RAC部署
  17. EAN13条形码校验公式及代码实现
  18. x264去方块滤波函数解析(二)
  19. 「罗马人的故事 II 汉尼拔战记」读后感
  20. 深度学习图片分类实战学习

热门文章

  1. PHP查询附近的人及其距离的实现方法
  2. 语音专题第一讲,麦克风阵列的语音信号处理技术
  3. C语言 数组中插入一个数
  4. Scrapy反爬与反反爬
  5. Linux unrar命令如何按目录解压rar文件
  6. 图纸打印什么时候用蓝图_cad图怎么打印成施工蓝图
  7. 牛顿迭代法是一种速度很快的迭代方法,但是它需要预先求得导函数。若用差商代替导数,可得下列弦截法
  8. python123app_Python实现iOS APP 自动化打包
  9. 死锁(死锁的发生条件、预防死锁、避免死锁)
  10. C语言实现归并排序——2路归并排序