深度理解RNN的梯度消失和LSTM为什么能解决梯度消失
一、RNN的梯度消失有什么不同之处
先说结论:RNN的梯度等于近距离梯度与远距离梯度的和,RNN的梯度消失是远距离梯度的消失,而近距离梯度不会消失,同时总的梯度不会消失,从而导致总的梯度由近距离梯度占主导。
提到梯度消失,你肯定会说是因为网络层次太深,导致导数连乘项太多,所以梯度很小。这种回答适用于深度神经网络,但不适用于RNN。
因为RNN的梯度是一个和!!而且RNN的是共享一套参数的!
但我们在理解RNN的时候,经常喜欢把RNN按时间序列展开,可能会误解RNN是多套参数的,但其实是共用一套参数。
假设时间序列为3,将RNN展开就如上图所示,每一个时刻的隐状态和输出分别如下式:
假设我们现在处理的任务只需要用t=3时刻的输出去训练模型:
l
对Wx,Ws,Wo求偏导:
根据公式可以看出:时间序列越长,梯度连乘就越多,这就导致远距离梯度越小
二、LSTM为什么能解决RNN的梯度消失问题
LSTM有三个门:分别是遗忘门、输入门和输出门。
遗忘门:
输入门:
输出门:
细胞状态:
隐状态:
在前面的文章中,我们知道RNN梯度消失或梯度爆炸的原因是由于,如果我们想办法将这一大坨去掉,就可以解决梯度问题了,而LSTM通过门机制解决了这个问题:
,
我们知道,f(t)和o(t)是用sigmoid函数激励的,而sigmoid函数长这样:
经过sigmoid函数映射之后的值非常容易趋近于0或者1,因此的这种一大坨问题就可以顺利解决。即当门为1时,梯度可以顺畅的在LSTM中传播,当门为0时,上一时刻的信息对当前时刻没有影响,也就没必要传递梯度回去更新参数了。
深度理解RNN的梯度消失和LSTM为什么能解决梯度消失相关推荐
- 如何深度理解RNN?——看图就好!
欢迎来到循环神经网络的插图指南.我是迈克尔,也被称为LearnedVector,我是AI语音领域的机器学习工程师.如果你刚刚开始使用ML并希望在Recurrent神经网络背后获得一些直觉,那么这篇文章 ...
- PyTorch-09 循环神经网络RNNLSTM (时间序列表示、RNN循环神经网络、RNN Layer使用、时间序列预测案例、RNN训练难题、解决梯度离散LSTM、LSTM使用、情感分类问题实战)
PyTorch-09 循环神经网络RNN&LSTM (时间序列表示.RNN循环神经网络.RNN Layer使用.时间序列预测案例(一层的预测点的案例).RNN训练难题(梯度爆炸和梯度离散)和解 ...
- 基于Tensorflow2.x低阶API搭建神经网络模型并训练及解决梯度爆炸与消失方法实践
1. 低阶API神经网络模型 1.1. 关于tf.Module 关于Tensorflow 2.x,最令我觉得有意思的功能就是tf.function和AutoGraph了.他们可以把Python风格的代 ...
- 如何解决梯度消失和梯度爆炸?
何为梯度消失,梯度爆炸? 目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化.这样做是有一定原因的,首先,深层网络由许多非线性层堆 ...
- [深度学习]理解RNN, GRU, LSTM 网络
Recurrent Neural Networks(RNN) 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义 ...
- 【深度学习系列(六)】:RNN系列(2):RNN的基础单元之LSTM、GRU以及SRU
目录 一.LSTM网络 1.1.遗忘门 1.2.输入门 1.3.输出门 二.GRU网络 2.1.重置门 2.2.更新门 三.SRU网络 3.1.SRU网络结构 3.2.SRU并行优化 四.总结 人对一 ...
- RNN梯度爆炸原因和LSTM解决梯度消失解释
RNN梯度爆炸原因: 经典的RNN结构如下图所示: 假设我们的时间序列只有三段, 为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为 . 则对于一次训练任务 ...
- 理解RNN、LSTM、GRU和Gradient Vanishing
最近在学习cs224n: Natural Language Processing with Deep Learning课程时,对RNN.LSTM和GRU的原理有了更深一层的理解,对LSTM和GRU如何 ...
- 多种深度模型实现手写字母MNIST的识别(CNN,RNN,DNN,逻辑回归,CRNN,LSTM/Bi-LSTM,GRU/Bi-GRU)
多种深度模型实现手写字母MNIST的识别(CNN,RNN,DNN,逻辑回归,CRNN,LSTM/Bi-LSTM,GRU/Bi-GRU 1.CNN模型 1.1 代码 1.2 运行结果 2.RNN模型 2 ...
最新文章
- Maven学习(八)继承和聚合
- 韩顺平循序渐进学java 第10.11讲 继承.重载.覆盖
- python之SSH远程登录
- java uppercase方法_java-方法引用
- 谷歌浏览器linux太耗电,Chrome浏览器太耗电?微软出招
- php额拍戏,像这种会演戏的演员,给我焊在剧组365天拍戏可以吗?
- C++静态成员函数指针
- JavaScript基础学习--05自定义属性、索引值
- 2018年全国大学生电子设计竞赛TI杯赛题简单回顾和准备经验分享
- html中div页面布局,前端入门篇(二):利用Div + CSS快速布局页面
- Aliplayer 阿里云播放器自定义视弹出框 包含全屏
- 使用netsh interface ip set 命令实现快速切换IP地址及DNS地址
- 数据结构——哈夫曼树
- 无法定位程序输入点,于动态链接库xxx上的可能原因及解决方法
- 安装onnx遇到error信息:Couldn‘t build proto file
- c语言触屏滑动图片,jQuery手机触屏滑动的响应式图片轮播效果
- mac 安装node.js
- 虚拟试衣-DiOr论文解读
- 2021四川省资阳市高考成绩查询,2021资阳中考查询系统
- 物联网毕设选题 stm32车牌识别系统设计与实现 - 嵌入式 单片机