首先让我们先来了解一个概念:什么是梯度不稳定呢?

概念:在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或会消失,或会爆炸。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。

产生梯度不稳定的根本原因:前面层上的梯度是来自后面层上梯度的乘积。当存在过多的层时,就会出现梯度不稳定场景,比如梯度消失和梯度爆炸。

划重点:梯度消失和梯度爆炸属于梯度不稳定的范畴

1.梯度消失与梯度爆炸的概念

梯度消失:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度消失。

梯度爆炸:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度爆炸。

其实梯度消失和梯度爆炸是一回事,只是表现的形式,以及产生的原因不一样。

2.梯度消失与梯度爆炸的产生原因

梯度消失:(1)隐藏层的层数过多;(2)采用了不合适的激活函数(更容易产生梯度消失,但是也有可能产生梯度爆炸)

梯度爆炸:(1)隐藏层的层数过多;(2)权重的初始化值过大

以下将从这3个角度解释产生这两种现象的根本原因

(1)隐藏层的层数过多

总结:从深层网络角度来讲,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久,前几层的权值和刚开始随机初始化的值差不多。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足。具体见下图:


从上图可以非常容易的看出来:对于四个隐层的网络来说,第四隐藏层比第一隐藏层的更新速度慢了两个数量级!!!

(2)激活函数

我们以下图的反向传播为例,假设输入只有一个特征,没有偏置单元,每层只有一个神经元:


我们先进行前向传播,这里将Sigmoid激励函数写为s(x):
z1 = w1x
a1 = s(z1)
z2 = w2
a1
a2 = s(z2)

zn = wn*an-1 (这里n-1是下标)
an = s(zn)
根据链式求导和反向传播,我们很容易得出,其中C是代价函数

s(x)为sigmoid函数,其导数的图像如下图所示:

如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为0标准差为1的高斯分布。因此所有的权重通常会满足|wj|<1,而s’是小于0.25的值,所以当∣s′(zn)wn∣<1|s'(z_n)w_n|<1∣s′(zn​)wn​∣<1,那么当神经网络特别深的时候,梯度呈指数级衰减,导数在每一层至少会被压缩为原来的1/4,当z值绝对值特别大时,导数趋于0,正是因为这两个原因,从输出层不断向输入层反向传播训练时,导数很容易逐渐变为0,使得权重和偏差参数无法被更新,导致神经网络无法被优化,训练永远不会收敛到良好的解决方案。

(3)初始化权重的值过大

当∣s′(zn)wn∣>1|s'(z_n)w_n|>1∣s′(zn​)wn​∣>1,也就是w比较大的情况下,根据2式的链式相乘可得(反向传播),则前面的网络层比后面的网络层梯度变化更快,引起了梯度爆炸的问题。所以,在一般的神经网络中,权重的初始化一般都利用高斯分布(正态分布)随机产生权重值。

3.梯度消失与梯度爆炸的解决方案

梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑一下三种方案解决:
(1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。(几种激活函数的比较见我的博客)
(2)用Batch Normalization。(对于Batch Normalization的理解可以见我的博客)
(3)LSTM的结构设计也可以改善RNN中的梯度消失问题。

[深度学习-优化]梯度消失与梯度爆炸的原因以及解决方案相关推荐

  1. 深度学习 --- 优化入门一(梯度下降所面临的问题)

    前面几节详细介绍了卷积神经网络和深度卷积神经网络,这个网络可以说是为图像处理量身制作,同时在2010年,hintion带领的团队使用AlexNet网络(深度卷积网络)在ImageNet大赛中获得冠军, ...

  2. 深度学习 --- 优化入门三(梯度消失和激活函数ReLU)

    前两篇的优化主要是针对梯度的存在的问题,如鞍点,局部最优,梯度悬崖这些问题的优化,本节将详细探讨梯度消失问题,梯度消失问题在BP的网络里详细的介绍过(兴趣有请的查看我的这篇文章),然后主要精力介绍Ru ...

  3. ubuntu之路——day8.1 深度学习优化算法之mini-batch梯度下降法

    所谓Mini-batch梯度下降法就是划分训练集和测试集为等分的数个子集,比如原来有500W个样本,将其划分为5000个baby batch,每个子集中有1000个样本,然后每次对一个mini-bat ...

  4. 【深度学习】梯度消失和梯度爆炸问题的最完整解析

    作者丨奥雷利安 · 杰龙 来源丨机械工业出版社<机器学习实战:基于Scikit-Learn.Keras和TensorFlow> 编辑丨极市平台 1 梯度消失与梯度爆炸 正如我们在第10章中 ...

  5. 梯度消失和梯度爆炸_知识干货-动手学深度学习-05 梯度消失和梯度爆炸以及Kaggle房价预测...

    梯度消失和梯度爆炸 考虑到环境因素的其他问题 Kaggle房价预测 梯度消失和梯度爆炸 深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion). 当神经网络的层数较多 ...

  6. 动手学深度学习(PyTorch实现)(四)--梯度消失与梯度爆炸

    梯度消失与梯度爆炸 1. 梯度消失与梯度爆炸 2. 模型参数的初始化 2.1 PyTorch的默认随机初始化 2.2 Xavier随机初始化 3. 环境因素 3.1 协变量偏移 3.2 标签偏移 3. ...

  7. 动手学深度学习-过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

    一.过拟合.欠拟合及其解决方案 前序知识点 模型选择 正则化:添加参数的惩罚项,防止过拟合.有L2正则化与L1正则化. 奥卡姆剃刀原则:有多个假设模型时,应该选择假设条件最少的. 模型的泛化能力:指模 ...

  8. 深度学习中的梯度消失、梯度爆炸问题

    写在前面: 有些博主对这个问题的解释很好,这里参考了: 详解机器学习中的梯度消失.爆炸原因及其解决方法 我在这方面的工作经验和知识面还不够,还需要积累后再做出更为专业的解答. 参考我之前转发过的一篇文 ...

  9. 深度学习——梯度消失、梯度爆炸

    本文参考:深度学习之3--梯度爆炸与梯度消失 梯度消失和梯度爆炸的根源:深度神经网络结构.反向传播算法 目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过反向传播的方式,指导深 ...

最新文章

  1. Bootstrap基础二十七 多媒体对象(Media Object)
  2. 游戏与算法的必经之路
  3. [转]sql,N/$/#/@的含义和作用
  4. windbg linux内核调试,使用Windbg调试window内核
  5. Silverlight+WCF 新手实例 象棋 该谁下棋-A下B停(二十八)
  6. 学堂在线《sql server轻松学》数据库第5-8章习题答案
  7. 测试点击屏幕次数的软件_显示器响应时间测试软件
  8. php封装webservice_php实现webservice实例_PHP
  9. gg修改器偏移量修改_gg修改器无root权限版
  10. SAP在采购和销售中的税务处理-增值税
  11. iphone6s维修定位服务器,iphone6s修理点
  12. MySQL查询语句练习题(面试时可能会遇到哦!)
  13. 基于人工鱼群优化可倒摆法(QIP)控制器附matlab代码
  14. [从零手写VIO|第五节]——后端优化实践——单目BA求解代码解析
  15. 需要小程序源码/模板的进
  16. (转)阈值?阀值??
  17. p720自带的磁带机备份aix系统
  18. 近级压降和电弧产生原因
  19. 中富金石老师靠谱分析:2022年国企改革将着力于三个方向
  20. python数组堆叠,堆叠数组-python数据处理

热门文章

  1. 编程之美2014 热身赛 题目3 : 树上的三角形
  2. android数据序列化的实现
  3. Nest入门教程 - 模块
  4. 如何使用 IntelliJ IDEA 2017 配置PHP开发环境 及项目搭建
  5. 不要再写这样的神级代码了!
  6. Spring Boot(十三):整合Redis哨兵,集群模式实践
  7. 使用FastReport报表工具生成图片格式文档
  8. SpringMVC 文件上传
  9. Python项目中 封装日志模块logging 及快速调用方法
  10. 【Python爬虫】股票数据定向爬虫