RNN梯度爆炸原因:

经典的RNN结构如下图所示:

假设我们的时间序列只有三段, 为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下:

假设在t=3时刻,损失函数为

则对于一次训练任务的损失函数为 ,即每一时刻损失值的累加。

使用随机梯度下降法训练RNN其实就是对 以及 求偏导,并不断调整它们以使L尽可能达到最小的过程。

现在假设我们我们的时间序列只有三段,t1,t2,t3。

我们只对t3时刻的 求偏导(其他时刻类似):

可以看出对于 求偏导并没有长期依赖,但是对于 求偏导,会随着时间序列产生长期依赖。因为 随着时间序列向前传播,而 又是 的函数。

根据上述求偏导的过程,我们可以得出任意时刻对 求偏导的公式:

任意时刻对 求偏导的公式同上。

如果加上激活函数,

=

激活函数tanh和它的导数图像如下。

由上图可以看出 ,对于训练过程大部分情况下tanh的导数是小于1的,因为很少情况下会出现 ,如果 也是一个大于0小于1的值,则当t很大时 ,就会趋近于0,和 趋近与0是一个道理。同理当 很大时 就会趋近于无穷,这就是RNN中梯度消失和爆炸的原因。

至于怎么避免这种现象,让我在看看 梯度消失和爆炸的根本原因就是 这一坨,要消除这种情况就需要把这一坨在求偏导的过程中去掉,至于怎么去掉,一种办法就是使 另一种办法就是使 。其实这就是LSTM做的事情。

转载:https://zhuanlan.zhihu.com/p/28687529

LSTM解决梯度消失解释:从公式上和内容上两方面解释

从公式角度解释:

先上一张LSTM的经典图:

至于这张图的详细介绍请参考:Understanding LSTM Networks

下面假设你已经阅读过Understanding LSTM Networks这篇文章了,并且了解了LSTM的组成结构。

RNN梯度消失和爆炸的原因这篇文章中提到的RNN结构可以抽象成下面这幅图:

而LSTM可以抽象成这样:

三个×分别代表的就是forget gate,input gate,output gate,而我认为LSTM最关键的就是forget gate这个部件。这三个gate是如何控制流入流出的呢,其实就是通过下面 三个函数来控制,因为 (代表sigmoid函数) 的值是介于0到1之间的,刚好用趋近于0时表示流入不能通过gate,趋近于1时表示流入可以通过gate。

当前的状态 类似与传统RNN 。将LSTM的状态表达式展开后得:

如果加上激活函数,

RNN梯度消失和爆炸的原因这篇文章中传统RNN求偏导的过程包含

对于LSTM同样也包含这样的一项,但是在LSTM中

假设 ,则 的函数图像如下图所示:

可以看到该函数值基本上不是0就是1。

再看看RNN梯度消失和爆炸的原因这篇文章中传统RNN的求偏导过程:

如果在LSTM中上式可能就会变成:

因为 ,这样就解决了传统RNN中梯度消失的问题。

转载:https://zhuanlan.zhihu.com/p/28749444

从内容角度解释:

LSTM 的核心思想

LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。
细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

Paste_Image.png

LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。

Paste_Image.png

Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!

LSTM 拥有三个门,来保护和控制细胞状态。

逐步理解 LSTM

在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取 h_{t-1}x_t,输出一个在 0 到 1 之间的数值给每个在细胞状态 C_{t-1} 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语

决定丢弃信息

下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,\tilde{C}_t,会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。
在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。

确定更新的信息

现在是更新旧细胞状态的时间了,C_{t-1} 更新为 C_t。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。
我们把旧状态与 f_t 相乘,丢弃掉我们确定需要丢弃的信息。接着加上 i_t * \tilde{C}_t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。

更新细胞状态

最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。

输出信息

转载:https://www.cnblogs.com/hellcat/p/7182541.html?utm_source=itdadao&utm_medium=referral

RNN梯度爆炸原因和LSTM解决梯度消失解释相关推荐

  1. LSTM解决梯度消失问题

    "LSTM 能解决梯度消失/梯度爆炸"是对 LSTM 的经典误解. 1.首先需要明确的是,RNN 中的梯度消失/梯度爆炸和普通的 MLP 或者深层 CNN 中梯度消失/梯度爆炸的含 ...

  2. 梯度消失、梯度爆炸及其表现和解决方法

    一.梯度消失 梯度消失出现的原因: 在深层网络中,如果激活函数的导数小于1,根据链式求导法则,靠近输入层的参数的梯度因为乘了很多的小于1的数而越来越小,最终就会趋近于0,例如sigmoid函数,其导数 ...

  3. 时序数据采样、原始循环神经网络RNN、RNN梯度爆炸原因推导

    时序数据的采样 随机采样 每个样本是原始序列上任意截取的一段序列.相邻的两个随机小批量在原始序列上的位置不一定相毗邻.因此,我们无法用一个小批量最终时间步的隐藏状态来初始化下一个小批量的隐藏状态.在训 ...

  4. BN层的解释说明(包含梯度消失和梯度爆炸的原理及解决方法)

    基础知识(梯度爆炸和梯度消失): 梯度爆炸:可以用这个图直观呈现,也就是梯度变化为正无穷或者负无穷(个人理解). 梯度消失: 简单来说就是梯度接近0,神经网络的权重不再更新,继续训练学习不到图像的特征 ...

  5. lstm解决梯度消失

    本人认为: lstm只能缓解梯度消失,并不能完全解决:因为最新的状态单元可以是过去的一个线性组合,过去的信息传递到现在主要是由每个时间步的遗忘门参数连乘决定的: 而rnn是过去时间序列的一个连乘:由参 ...

  6. 彻底看懂RNN,LSTM,GRU,用数学原理解释梯度消失或者梯度爆炸

    Recurrent Neutral Network 章节 RNN概述 LSTM GRU 梯度困区 Seq2Seq模型 何去何从 模型之外 RNN概述 为什么它叫做递归神经网络呢?与其他网络有何不同?接 ...

  7. PyTorch-09 循环神经网络RNNLSTM (时间序列表示、RNN循环神经网络、RNN Layer使用、时间序列预测案例、RNN训练难题、解决梯度离散LSTM、LSTM使用、情感分类问题实战)

    PyTorch-09 循环神经网络RNN&LSTM (时间序列表示.RNN循环神经网络.RNN Layer使用.时间序列预测案例(一层的预测点的案例).RNN训练难题(梯度爆炸和梯度离散)和解 ...

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

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

  9. 梯度消失和梯度爆炸_出现梯度消失与梯度爆炸的原因以及解决方案

    在学习李宏毅老师机器学习的相关视频时,课下做了一个有关神经网络的小Demo,但是运行效果总是不尽人意,上网查询资料,才发现是梯度爆炸和梯度消失惹的祸.今天就让我们一起来学习一下梯度消失与梯度爆炸的概念 ...

最新文章

  1. 值得推荐!安利8个小众好用的宝藏工具,解决各种需求
  2. AFNetworking 2.0使用(持续更新)
  3. cad二次开发--添加对象到模型空间中
  4. android 一个字符串分两行显示_【Android】DataBindinglt;中gt;
  5. Effective Java~57. 将局部变量的作用域最小化
  6. pcap java_java解析Pcap(io.pkts)
  7. linux目录与文件
  8. 思考的乐趣-Matrix67数学笔记
  9. [转载].程序匠人 - 程序调试(除错)过程中的一些雕虫小技
  10. 计算机应用和轨道交通哪个好,轻轨学校对重庆和男生有什么好处
  11. 3A算法—自动对焦(AF)
  12. 关于个人的年度小目标
  13. 中水处理设备可提高水资源利用率说明
  14. 【论文阅读】Efficient Illuminant Estimation for Color Constancy Using Grey Pixels
  15. linux boost库安装
  16. 修改testlink服务器ip,简单明了的TestLink配置手册
  17. 诚邀:每日十万+提问,知乎精准推荐如何做得更好?
  18. 微型计算机原理及应用 课程设计,微型计算机原理及应用课程设计.docx
  19. java 火焰_利用火焰图查找java耗时最长的方法
  20. 什么是网盾高防CDN,它的优势有哪些?

热门文章

  1. mysql创建用户和远程登录授权
  2. 关于jsp页面下,重置选择框的数据的操作!
  3. MyEclipse2014 优化设置
  4. 将一个普通 JAR 文件打包为 plugin 的一个问题
  5. 面试时被问如何进行接口测试怎么回答
  6. html5怎么在index设置背景,index.html · huangliusong/HTML5Canvas知乎登录页面动态线条背景动画代码 - Gitee.com...
  7. 08-10 性能瓶颈证据链
  8. java sax解析复杂xml_SAX解析复杂的xml字符串
  9. android经典的消费生产模式,生产消费者模式与Handler
  10. python飞机大战创建多个敌机_Python 项目飞机大战- 03 游戏背景和敌机出场