目录

残差网络

残差块

2 残差网络

为什么叫残差网络

一、背景

1)梯度消失问题

2)网络退化问题

二、ResNets  残差网络

三、网络架构

1)普通网络(Plain Network)

2) 残差网络

3)对比分析

四、解决问题

1)为什么可以解决梯度消失?

2)为什么可以解决网络退化问题?


在VGG中,卷积网络达到了19层,在GoogLeNet中,网络史无前例的达到了22层。那么,网络的精度会随着网络的层数增多而增多吗?在深度学习中,网络层数增多一般会伴着下面几个问题

  1. 计算资源的消耗
  2. 模型容易过拟合
  3. 梯度消失/梯度爆炸问题的产生

问题1可以通过GPU集群来解决,对于一个企业资源并不是很大的问题;
问题2的过拟合通过采集海量数据,并配合Dropout正则化等方法也可以有效避免;
问题3通过Batch Normalization也可以避免。貌似我们只要无脑的增加网络的层数,我们就能从此获益,但实验数据给了我们当头一棒。

作者发现,随着网络层数的增加,网络发生了退化(degradation)的现象:随着网络层数的增多,训练集loss逐渐下降,然后趋于饱和,当你再增加网络深度的话,训练集loss反而会增大。注意这并不是过拟合,因为在过拟合中训练loss是一直减小的。

当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差,或者说如果一个VGG-100网络在第98层使用的是和VGG-16第14层一模一样的特征,那么VGG-100的效果应该会和VGG-16的效果相同。所以,我们可以在VGG-100的98层和14层之间添加一条直接映射(Identity Mapping)来达到此效果。

从信息论的角度讲,由于DPI(数据处理不等式)的存在,在前向传输的过程中,随着层数的加深,Feature Map包含的图像信息会逐层减少,而ResNet的直接映射的加入,保证了 l+1 层的网络一定比 l 层包含更多的图像信息。基于这种使用直接映射来连接网络不同层直接的思想,残差网络应运而生。

残差网络

残差块

残差网络是由一系列残差块组成的(图1)。一个残差块可以用表示为:

2 残差网络

残差网络的搭建分为两步:

  1. 使用VGG公式搭建Plain VGG网络
  2. 在Plain VGG的卷积网络之间插入Identity Mapping,注意需要升维或者降维的时候加入 1×1 卷积。

在实现过程中,一般是直接stack残差块的方式。

为什么叫残差网络

一、背景

1)梯度消失问题

我们发现很深的网络层,由于参数初始化一般更靠近0,这样在训练的过程中更新浅层网络的参数时,很容易随着网络的深入而导致梯度消失,浅层的参数无法更新。

解释

可以看到,假设现在需要更新b1,w2,w3,w4参数因为随机初始化偏向于0,通过链式求导我们会发现,w1w2w3相乘会得到更加接近于0的数,那么所求的这个b1的梯度就接近于0,也就产生了梯度消失的现象。

2)网络退化问题

举个例子,假设已经有了一个最优化的网络结构,是18层。当我们设计网络结构的时候,我们并不知道具体多少层次的网络是最优化的网络结构,假设设计了34层网络结构。那么多出来的16层其实是冗余的,我们希望训练网络的过程中,模型能够自己训练这五层为恒等映射,也就是经过这层时的输入与输出完全一样。但是往往模型很难将这16层恒等映射的参数学习正确,那么就一定会不比最优化的18层网络结构性能好,这就是随着网络深度增加,模型会产生退化现象。它不是由过拟合产生的,而是由冗余的网络层学习了不是恒等映射的参数造成的。

二、ResNets  残差网络

ResNet使用了一个新的思想,ResNet的思想是假设我们涉及一个网络层,存在最优化的网络层次,那么往往我们设计的深层次网络是有很多网络层为冗余层的。那么我们希望这些冗余层能够完成恒等映射,保证经过该恒等层的输入和输出完全相同。具体哪些层是恒等层,这个会有网络训练的时候自己判断出来。

残差网络有什么好处呢?显而易见:因为增加了 x 项,那么该网络求 x 的偏导的时候,多了一项常数 1(对x的求导为1),所以反向传播过程,梯度连乘,也不会造成梯度消失。

可以看到X是这一层残差块的输入,也称作F(x)为残差,x为输入值,F(X)是经过第一层线性变化并激活后的输出,该图表示在残差网络中,第二层进行线性变化之后激活之前,F(x)加入了这一层输入值X,然后再进行激活后输出。在第二层输出值激活前加入X,这条路径称作shortcut连接。

三、网络架构

1)普通网络(Plain Network)

2) 残差网络

把它变成ResNet的方法是加上所有跳跃连接,每两层增加一个捷径,构成一个残差块。如图所示,5个残差块连接在一起构成一个残差网络。

3)对比分析

  如果我们使用标准优化算法训练一个普通网络,比如说梯度下降法,或者其它热门的优化算法。如果没有残差,没有这些捷径或者跳跃连接,凭经验你会发现随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。也就是说,理论上网络深度越深越好。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练。实际上,随着网络深度的加深,训练错误会越来越多

但有了ResNets就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少,就算是训练深达100层的网络也不例外。有人甚至在1000多层的神经网络中做过实验,这样就让我们在训练更深网络的同时,又能保证良好的性能。也许从另外一个角度来看,随着网络越深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。

四、解决问题

1)为什么可以解决梯度消失?

ResNet最终更新某一个节点的参数时,由于h(x)=F(x)+x,使得链式求导后的结果如图所示,不管括号内右边部分的求导参数有多小,因为左边的1的存在,并且将原来的链式求导中的连乘变成了连加状态,都能保证该节点参数更新不会发生梯度消失或梯度爆炸现象。

2)为什么可以解决网络退化问题?

我们发现,假设该层是冗余的,在引入ResNet之前,我们想让该层学习到的参数能够满足h(x)=x,即输入是x,经过该冗余层后,输出仍然为x。但是可以看见,要想学习h(x)=x恒等映射时的这层参数时比较困难的。ResNet想到避免去学习该层恒等映射的参数,使用了如上图的结构,让h(x)=F(x)+x;这里的F(x)我们称作残差项,我们发现,要想让该冗余层能够恒等映射,我们只需要学习F(x)=0。学习F(x)=0比学习h(x)=x要简单,因为一般每层网络中的参数初始化偏向于0,这样在相比于更新该网络层的参数来学习h(x)=x,该冗余层学习F(x)=0的更新参数能够更快收敛,如图所示:

假设该曾网络只经过线性变换,没有bias也没有激活函数。我们发现因为随机初始化权重一般偏向于0,那么经过该网络的输出值为[0.6 0.6],很明显会更接近与[0 0],而不是[2 1],相比与学习h(x)=x,模型要更快到学习F(x)=0。并且ReLU能够将负数激活为0,过滤了负数的线性变化,也能够更快的使得F(x)=0。这样当网络自己决定哪些网络层为冗余层时,使用ResNet的网络很大程度上解决了学习恒等映射的问题,用学习残差F(x)=0更新该冗余层的参数来代替学习h(x)=x更新冗余层的参数。

这样当网络自行决定了哪些层为冗余层后,通过学习残差F(x)=0来让该层网络恒等映射上一层的输入,使得有了这些冗余层的网络效果与没有这些冗余层的网络效果相同,这样很大程度上解决了网络的退化问题

原文:残差网络(Residual Network) - 光彩照人 - 博客园

详解残差网络 - 知乎

残差网络(Residual Network),残差连接(skip-connect)相关推荐

  1. 残差网络(Residual Network,ResNet)原理与结构概述

    残差网络是为了解决模型层数增加时出现梯度消失或梯度爆炸的问题而出现的.传统的神经网络中,尤其是图像处理方面,往往使用非常多的卷积层.池化层等,每一层都是从前一层提取特征,所以随着层数增加一般会出现退化 ...

  2. 残差网络(Residual Network)

    一.背景 1)梯度消失问题 我们发现很深的网络层,由于参数初始化一般更靠近0,这样在训练的过程中更新浅层网络的参数时,很容易随着网络的深入而导致梯度消失,浅层的参数无法更新. 可以看到,假设现在需要更 ...

  3. 深度残差网络_深度残差收缩网络:(三) 网络结构

    1. 回顾一下深度残差网络的结构 在下图中,(a)-(c)分别是三种残差模块,(d)是深度残差网络的整体示意图.BN指的是批标准化(Batch Normalization),ReLU指的是整流线性单元 ...

  4. 大幅减少GPU显存占用:可逆残差网络(The Reversible Residual Network)

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经授权转载自AINLP. 作者:光彩照人 学校:北京邮电大学 研究方向:自然语言处理,精准营销,风险控制 前序: Google AI最新出品的论文R ...

  5. YOLO3+残差网络+FPN详解

    概述 yolo3的论文写的跟个小作文一样,也不知道怎么过的审,里面实质性的东西并不多,做的实验一部分是引用Facebook AI Research的<Focal Loss for Dense O ...

  6. PyTorch实现简单的残差网络

    一.实现过程 残差网络(Residual Network)的特点是容易优化,并且能够通过增加相当的深度来提高准确率.其内部的残差块使用了跳跃连接,缓解了在深度神经网络中增加深度带来的梯度消失问题. 本 ...

  7. Resnet 残差网络使用案例

    Resnet 网络 深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,在各类数据集上都有不凡的表现,Resnet是残差网络(Residu ...

  8. 深度残差网络(Deep Residual Network )

    深度残差网络自从2015年提出以来,在众多比赛中表现优越,且最终获得CVPR 2016年Best Paper Award.大家想必也已经耳熟能详.在这里,只是再简要说说深度残差网络是怎样的网络,关于为 ...

  9. cnpm 网络不能连接_(二十七)通俗易懂理解——Resnet残差网络

    Resnet看相关的文章都比较容易理解,本文主要转自两篇对该内容有较为全面解释和理解的文章. 1. 引言 网络的深度为什么重要? 因为CNN能够提取low/mid/high-level的特征,网络的层 ...

  10. 2.3 残差网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.2 经典网络 回到目录 2.4 残差网络为什么有用? 残差网络 (Residual Networks (ResNets)) 非常非常深的神经网络是很难训练的,因为存在梯度 ...

最新文章

  1. ubuntu下oracle数据的导入,导入oracle数据库命令行
  2. Android——SQLite实现面向对象CRUD
  3. OC第六节 遍历集合、数组排序
  4. 关于UITableView的Cell zhuanzai
  5. Qt——线程类QThread
  6. zabbix自动发现监控redis数据库
  7. 学微电子要学计算机哪种语言,微电子学与计算机,模板.doc
  8. 科研_研究生学术论文写作方法
  9. Vulkan开发实战详解
  10. 从极客到 CEO,开发者应该如何提升技术领导力?
  11. 第十九届泳联水中运动世锦赛
  12. wma转mp3怎么弄_几种值得推荐的WMA转换MP3方法
  13. 贪心算法 | 神秘电报密码——哈夫曼编码
  14. C++Primer 第8章IO流
  15. 【会议笔记】第五届中国健康信息处理大会(CHIP2019)Day02
  16. 从西工大图书馆校外下载论文方法
  17. K-Means聚类实验报告实例
  18. 从一路赞美到嘘声不断 90后创业热潮已宣告死亡
  19. Day01-Dos命令
  20. 哈工大操作系统实验:动手修改操作系统内核,自定义开机界面

热门文章

  1. sir模型 python_SIR传染病模型(附Python代码)
  2. 基于单片机的温度监测系统设计(#0411)
  3. 配置 Linux 阿里源
  4. iOS面试题(多线程篇)
  5. Java工作流引擎学习----JBPM(一)
  6. 运放参数的详细解释和分析
  7. 商业分析的50个网站和分析方法
  8. 以Spring Boot的方式显示图片或下载文件到浏览器
  9. 【读书笔记】《暗时间》
  10. xbox360fsd更新游戏封面_xbox360自制系统fsd更新封面教程