深度学习:梯度消失和梯度爆炸
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错误。我们也可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。
梯度消失:
更难检测,而且也更难处理一些。总的来说,我们有三种方法应对梯度消失问题:
- 合理的初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。
- 使用relu代替sigmoid和tanh作为激活函数。[Batch-normalized 应该放在非线性激活层的前面还是后面?]
- 使用其他结构的RNNs,比如长短时记忆网络(LTSM)和Gated Recurrent Unit(GRU),这是最流行的做法。
[零基础入门深度学习(5) - 循环神经网络]
from: http://blog.csdn.net/pipisorry/article/details/71877840
ref:
深度学习:梯度消失和梯度爆炸相关推荐
- 1.10 梯度消失与梯度爆炸-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 1.9 归一化输入 回到目录 1.11 神经网络的权重初始化 梯度消失与梯度爆炸 (Vanishing/Expanding Gradients) 训练神经网络,尤其是深度神经 ...
- 【深度学习】梯度消失和梯度爆炸问题的最完整解析
作者丨奥雷利安 · 杰龙 来源丨机械工业出版社<机器学习实战:基于Scikit-Learn.Keras和TensorFlow> 编辑丨极市平台 1 梯度消失与梯度爆炸 正如我们在第10章中 ...
- 梯度消失和梯度爆炸_知识干货-动手学深度学习-05 梯度消失和梯度爆炸以及Kaggle房价预测...
梯度消失和梯度爆炸 考虑到环境因素的其他问题 Kaggle房价预测 梯度消失和梯度爆炸 深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion). 当神经网络的层数较多 ...
- [深度学习-优化]梯度消失与梯度爆炸的原因以及解决方案
首先让我们先来了解一个概念:什么是梯度不稳定呢? 概念:在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或会消失,或会爆炸.这种不稳定性才是深度神经网络中基于梯度学习的根本问题. 产生梯度不稳 ...
- 深度学习的实用层面 —— 1.10 梯度消失与梯度爆炸
训练神经网络,尤其是深度神经网络所面临的一个问题是梯度消失或者梯度爆炸,也就是说,当你训练深度网络时导数或坡度有时会变得非常大或非常小,甚至以指数方式变小,这加大了训练的难度,这里我们将会了解梯度爆炸 ...
- 动手学深度学习(PyTorch实现)(四)--梯度消失与梯度爆炸
梯度消失与梯度爆炸 1. 梯度消失与梯度爆炸 2. 模型参数的初始化 2.1 PyTorch的默认随机初始化 2.2 Xavier随机初始化 3. 环境因素 3.1 协变量偏移 3.2 标签偏移 3. ...
- 深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法
深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法 一.梯度消失和爆炸的根本原因 1. 深层网络角度 2. 激活函数角度 二.梯度消失.爆炸的解决方案 1. 梯度剪切.正则 2. 采用其他的激活函数 ...
- 动手学深度学习-过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶
一.过拟合.欠拟合及其解决方案 前序知识点 模型选择 正则化:添加参数的惩罚项,防止过拟合.有L2正则化与L1正则化. 奥卡姆剃刀原则:有多个假设模型时,应该选择假设条件最少的. 模型的泛化能力:指模 ...
- 深度学习中的梯度消失、梯度爆炸问题
写在前面: 有些博主对这个问题的解释很好,这里参考了: 详解机器学习中的梯度消失.爆炸原因及其解决方法 我在这方面的工作经验和知识面还不够,还需要积累后再做出更为专业的解答. 参考我之前转发过的一篇文 ...
- 深度学习——梯度消失、梯度爆炸
本文参考:深度学习之3--梯度爆炸与梯度消失 梯度消失和梯度爆炸的根源:深度神经网络结构.反向传播算法 目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过反向传播的方式,指导深 ...
最新文章
- 前端项目课程7 banner设计注意事项
- python表格对齐_python str.format 中文对齐的细节问题,
- Web Service 缓存
- oracle中的fetchsize,oracle setFetchsize() 优化查询速度
- innobackupex参数之 --throttle 限速这个值设置多少合理 原创
- expect脚本教程_Expect脚本SSH示例教程
- Java Stream forEach()和forEachOrdered()方法
- 杨凌职业技术学院计算机专业宿舍,杨凌职业技术学院宿舍条件,宿舍图片和环境空调及分配方法...
- win10更新后开不了机_坚决不更新!被微软雪藏的win10系统版本,只要3GB,老爷机的克星!...
- 【阿里云生活物联网架构师专题 ⑥】ESP8266接入阿里生活飞燕平台国际版,实现亚马逊Alexa Echo音响语音控制;
- CATIA二次开发(一):CAA简介
- 怎么创建自己的网站?创建自己网站的步骤
- [C#]Windows服务程序[转载西门吹雪的好文章]
- 二重积分x^2+y^2_求二重积分∫∫|x^2+y^2-2x|dQ,区域D:X^2+Y^2
- Box2D例子——打砖块
- Unicode字符列表
- Jasper导出excel
- Mac如何连接远程服务器
- el-select支持远程搜索时是没有下拉箭头icon的
- 浅谈DC-IRIS的PID控制方法