http://blog.csdn.net/pipisorry/article/details/71877840

梯度消失

主要是因为网络层数太多,太深,导致梯度无法传播。本质应该是激活函数的饱和性。

梯度爆炸

DNN结果出现nan值?梯度爆炸,导致结果不收敛。都是梯度太大惹的祸,所以可以通过减小学习率(梯度变化直接变小)、减小batch size(累积梯度更小)、 features规格化(避免突然来一个大的输入)。

如在tf中运行到self.train_op = layers.optimize_loss(self.loss, tf.train.get_global_step(), optimizer=self.optimizer, learning_rate=self.learning_rate, clip_gradients=self.clip_norm)时出错:Found Inf or NaN global norm. : Tensor had NaN values

出错可能:

1 输入数据存在nan,需要run部分数据,或者通过tf.Print输出进入模型的features看看。

2 可能就是batch_size/学习率过大

[深度学习:学习率及如何调整]

[神经网络中的激活函数 ]

前馈神经网络的梯度消失和爆炸

前馈神经网络(包括全连接层、卷积层等)可以表示为 ,那么网络输出对 W1 求偏导 ,这里 是相互独立的,一般不会有数值问题,主要问题在于激活函数的导数 f'在饱和区接近于零,导致梯度消失。

RNN网络中的梯度消失和爆炸

循环神经网络的状态循环部分可以表示为 ,这里的问题不仅在于激活函数的导数,还有 W 在不同时刻是共享的,网络输出对 W 的偏导包含 W 的连乘项,稍有不慎( W值偏小或偏大)就会出现梯度消失或爆炸。

...

为什么RNN会产生梯度爆炸和消失问题呢?我们接下来将详细分析一下原因。我们根据式3可得:

上式的定义为矩阵的模的上界。因为上式是一个指数函数,如果t-k很大的话(也就是向前看`很远的时候),会导致对应的误差项的值增长或缩小的非常快,这样就会导致相应的梯度爆炸和梯度消失问题(取决于大于1还是小于1)。

RNN用tanhtanh而不是relurelu的主要目的就是缓解梯度爆炸风险。当然,这个缓解是相对的,用了tanhtanh依然有爆炸的可能性。

Lstm的梯度消失和爆炸

如果我们的任务比较依赖于历史信息,那么“遗忘门”ft就会接近于1,这时候历史的梯度信息也正好不容易消失;如果ft很接近于0,那么就说明我们的任务不依赖于历史信息,这时候就算梯度消失也无妨了。

Gru的梯度消失和爆炸

ref 推导和理论[也来谈谈RNN的梯度消失/爆炸问题]

梯度爆炸和消失问题解决

不幸的是,实践中前面介绍的几种RNNs并不能很好的处理较长的序列。一个主要的原因是,RNN在训练中很容易发生梯度爆炸和梯度消失,这导致训练时梯度不能在较长序列中一直传递下去,从而使RNN无法捕捉到长距离的影响。

解决方案

共同方案:bn [Batch-normalized 应该放在非线性激活层的前面还是后面?]。

梯度爆炸:

梯度爆炸的时候,我们的程序会收到NaN错误。我们也可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。

梯度消失:

更难检测,而且也更难处理一些。总的来说,我们有三种方法应对梯度消失问题:

  1. 合理的初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。
  2. 使用relu代替sigmoid和tanh作为激活函数。[Batch-normalized 应该放在非线性激活层的前面还是后面?]
  3. 使用其他结构的RNNs,比如长短时记忆网络(LTSM)和Gated Recurrent Unit(GRU),这是最流行的做法。

[零基础入门深度学习(5) - 循环神经网络]

from: http://blog.csdn.net/pipisorry/article/details/71877840

ref:

深度学习:梯度消失和梯度爆炸相关推荐

  1. 1.10 梯度消失与梯度爆炸-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.9 归一化输入 回到目录 1.11 神经网络的权重初始化 梯度消失与梯度爆炸 (Vanishing/Expanding Gradients) 训练神经网络,尤其是深度神经 ...

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

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

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

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

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

    首先让我们先来了解一个概念:什么是梯度不稳定呢? 概念:在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或会消失,或会爆炸.这种不稳定性才是深度神经网络中基于梯度学习的根本问题. 产生梯度不稳 ...

  5. 深度学习的实用层面 —— 1.10 梯度消失与梯度爆炸

    训练神经网络,尤其是深度神经网络所面临的一个问题是梯度消失或者梯度爆炸,也就是说,当你训练深度网络时导数或坡度有时会变得非常大或非常小,甚至以指数方式变小,这加大了训练的难度,这里我们将会了解梯度爆炸 ...

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

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

  7. 深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法

    深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法 一.梯度消失和爆炸的根本原因 1. 深层网络角度 2. 激活函数角度 二.梯度消失.爆炸的解决方案 1. 梯度剪切.正则 2. 采用其他的激活函数 ...

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

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

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

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

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

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

最新文章

  1. 前端项目课程7 banner设计注意事项
  2. python表格对齐_python str.format 中文对齐的细节问题,
  3. Web Service 缓存
  4. oracle中的fetchsize,oracle setFetchsize() 优化查询速度
  5. innobackupex参数之 --throttle 限速这个值设置多少合理 原创
  6. expect脚本教程_Expect脚本SSH示例教程
  7. Java Stream forEach()和forEachOrdered()方法
  8. 杨凌职业技术学院计算机专业宿舍,杨凌职业技术学院宿舍条件,宿舍图片和环境空调及分配方法...
  9. win10更新后开不了机_坚决不更新!被微软雪藏的win10系统版本,只要3GB,老爷机的克星!...
  10. 【阿里云生活物联网架构师专题 ⑥】ESP8266接入阿里生活飞燕平台国际版,实现亚马逊Alexa Echo音响语音控制;
  11. CATIA二次开发(一):CAA简介
  12. 怎么创建自己的网站?创建自己网站的步骤
  13. [C#]Windows服务程序[转载西门吹雪的好文章]
  14. 二重积分x^2+y^2_求二重积分∫∫|x^2+y^2-2x|dQ,区域D:X^2+Y^2
  15. Box2D例子——打砖块
  16. Unicode字符列表
  17. Jasper导出excel
  18. Mac如何连接远程服务器
  19. el-select支持远程搜索时是没有下拉箭头icon的
  20. 浅谈DC-IRIS的PID控制方法

热门文章

  1. Java、JSP环境保护与宣传网站的设计与实现
  2. 转行小姐姐的码农之路
  3. 手牵手走过喧嚣的人群
  4. oracle连接长时间未响应,Oracle的pl/sql客户端请求超时未响应的解决方法及装置与流程...
  5. mysql存储过程call_mysql call 存储过程
  6. gcc编译参数-fPIC的一些问题
  7. 如何区分变压器的同名端和异名端
  8. vue获取dom元素值
  9. xv6---Lab1: Xv6 and Unix utilities
  10. 电脑族的营养饮食食谱