RNN梯度消失和爆炸的原因

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


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

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

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

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

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

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

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

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

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

如果加上激活函数,  ,

则  = 

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


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

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

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的求偏导过程:

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

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

来源:
 https://zhuanlan.zhihu.com/p/28749444

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

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/jins-note/p/10853788.html

RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题相关推荐

  1. LSTM如何解决梯度消失或爆炸的?

    from:https://zhuanlan.zhihu.com/p/44163528 哪些问题? 梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习. 梯度爆炸会使得学习不稳定 ...

  2. ztree在刷新时第一个父节点消失_从反向传播推导到梯度消失and爆炸的原因及解决方案(从DNN到RNN,内附详细反向传播公式推导)...

    引言:参加了一家公司的面试和另一家公司的笔试,都问到了这个题!看来很有必要好好准备一下,自己动手推了公式,果然理解更深入了!持续准备面试中... 一. 概述: 想要真正了解梯度爆炸和消失问题,必须手推 ...

  3. 梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法

    一.引入:梯度更新规则 目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,更新优化深度网络的权值.这样做是有一定原因的,首先,深层网络由许多非线性层堆叠而来 ...

  4. LSTM如何解决梯度消失

    哪些问题? 梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习. 梯度爆炸会使得学习不稳定, 参数变化太大导致无法获取最优参数. 在深度多层感知机网络中,梯度爆炸会导致网络不稳 ...

  5. RNN梯度爆炸原因和LSTM解决梯度消失解释

    RNN梯度爆炸原因: 经典的RNN结构如下图所示: 假设我们的时间序列只有三段, 为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为 . 则对于一次训练任务 ...

  6. 梯度消失与梯度爆炸产生原因及解决方法

    1 .什么是梯度消失和梯度爆炸 在反向传播过程中需要对激活函数进行求导,如果导数大于1,那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆炸.同样如果导数小于1,那么随着网络层数的增 ...

  7. RNN梯度消失和爆炸

    原文:链接 也可以参考:解释的也很清晰 建议先看第一个 一,经典的RNN结构如下图所示: 假设我们的时间序列只有三段,  为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3 ...

  8. LSTM解决梯度消失问题

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

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

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

最新文章

  1. 程序员到了35 岁就要被裁员?
  2. PPT怎么在剪映_剪映怎么剪辑音乐?添加、分割、导入音乐,图文详解!
  3. C语言程序设计——设计一个学生管理系统(完美运行的程序(●‘◡‘●))
  4. 使用UGUI绘制自定义几何图形
  5. oracle字符nul怎么输入,oracle - 如何摆脱Oracle数据库中的NUL字符? - 堆栈内存溢出...
  6. 网络编程之 字节序和深入理解bind()函数
  7. BGP路径属性分类与实验(华为设备)
  8. 把C++语言的书读薄
  9. 深入理解strcpy,strncpy
  10. bound、frame、position、anchorPoint
  11. RHEL6 下搭建 nginx + uwsgi + cgi 平台
  12. lopatkin俄大神精简中文系统 DREY PIP MICRO BOX LITE区别
  13. 在windows 2008 R2上无法运行vc 2015的程序,显示缺少api-ms-win-crt-string-|1-1-0.dll的解决
  14. 计算机打印的接口类型,按打印机与计算机的接口类型:可分为并行、串行和USB接口...
  15. Pytorch之Optim(优化器)
  16. android构建系统总览
  17. git大坑---cleanup
  18. 一起学习LLVM(一)
  19. html2day(合并单元格,有序、无序列表,input、select、textarea表单)
  20. pcr扩增mix试剂选购相关问题

热门文章

  1. 5G研发大幕开启 终端硝烟已燃
  2. 【Java8精华教程】一起爪哇Java8——好用的Stream
  3. Java集合源码学习(四)HashMap
  4. Lua中的字符串函数库
  5. c++中的输入输出方法
  6. 微服务架构的优势与不足(二)
  7. Spark Streaming学习笔记
  8. Maven让资源文件处理插件能够解析资源文件中的Maven属性
  9. Spring MVC 实现原理
  10. .net Forms身份验证不能用在应用的分布式部署中吗?