LSTM理解
简介
LSTM(Long short-term memory,长短期记忆)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失问题。以下先从RNN介绍。
简说RNN
RNN(Recurrent Neural Network,循环神经网络)是一种处理序列数据的神经网络。下图是它的结构:

RNN优点:它能处理序列数据,并且有记忆能力,能够利用上文信息。
RNN缺点:
- 梯度消失:对于获取长距离依赖的效果不是很好(即如果上文信息离当前输入距离太远的话,理论上它是能够记得上文信息,但是事实上并不是这样,所以它并不能很好地处理长距离依赖问题)
- 梯度爆炸
- RNN较难训练
注:长距离依赖处理效果不佳的原因是使用tanh或者relu作为激活函数。(如果是sigmoid函数则不会)
LSTM结构
LSTM也是一种RNN,因此它也是一种循环结构,不同的是RNN神经元内部只用tan层进行计算,而LSTM是有4个全连接层进行计算的,LSTM的内部结构如下图所示。

上图中符号的含义如下图所示,黄色方框类似于CNN中的激活函数操作,粉色圆圈表示点操作,单箭头表示数据流向,下图中第四个符号表示两个向量的连接操作,第五个符号表示向量的拷贝操作,且上图中的σ表示sigmoid层(该层的输出时0-1的值,0表示不能通过,1表示能通过)。

现在来描述LSTM的内部操作,具体内容如下图所示:

LSTM的核心是细胞状态——最上层的横穿整个细胞的水平线,它通过门来控制信息的增加或者删除。
那么什么是门呢?门是一种用来选择信息通过与否的方式,它由一个sigmoid层和点乘操作组成。LSTM共有三个门,分别是遗忘门,输入门和输出门,具体内容如下所述:
(1)遗忘门:遗忘门决定丢弃哪些信息,输入是上一个神经元细胞的计算结果ht-1以及当前的输入向量xt,二者联接并通过遗忘门后(sigmoid会决定哪些信息留下,哪些信息丢弃),会生成一个0-1向量Γft(维度与上一个神经元细胞的输出向量Ct-1相同),Γft与Ct-1进行点乘操作后,就会获取上一个神经元细胞经过计算后保留的信息。遗忘门控制前一步记忆单元中的信息有多大程度被遗忘掉。
(2)输入门:表示要保存的信息或者待更新的信息,如上图所示是ht-1与xt的连接向量,经过sigmoid层后得到的结果Γit,这就是输入门的输出结果了。但是接下来我们要计算该神经元细胞的输出结果,即新细胞的更新状态:Ct,Ct = Ct-1· Γft + Γit · ~ct(其中~ct = tanh(ht-1,xt)),文字描述是:输入门的计算结果点乘 ht-1与xt的连接向量经过tanh层计算的结果后,再与上一个神经元细胞经过计算后保留的信息进行相加,则是最终要输出的Ct。输入门控制当前计算的新状态以多大程度更新到记忆单元中。
(3)输出门:输出门决定当前神经原细胞输出的隐向量ht,ht与Ct不同,ht要稍微复杂一点,它是Ct进过tanh计算后与输出门的计算结果进行点乘操作后的结果,用公式描述是:ht = tanh(ct) · Γot。输出门控制当前的输出有多大程度上取决于当前的记忆单元。
在一个训练好的网络中,当输入的序列中没有重要信息时。LSTM的遗忘门的值接近于1,输入门的值接近于0,此时过去的记忆会被保存,从而实现了长期记忆的功能;当输入的序列中出现了重要的信息时,LSTM应当把其存入记忆中,此时其输入门的值会接近于1;当输入的序列中出现了重要信息,且该信息意味着之前的记忆不再重要时,输入门的值接近于1,而遗忘门的值接近于0,这样旧的记忆被遗忘,新的重要信息被记忆。经过这样的设计,整个网络更容易学习到序列之间的长期依赖。
LSTM具体实现步骤
1、首先,输入上一个神经元细胞输出的隐藏层向量和当前神经元细胞的输入,并将其连接起来。
2、将步骤1中的结果传入遗忘门中,该层将删除不相关的信息。
3、一个备选层将用步骤1中的结果创建,这一层将保存可能的会加入细胞状态的值或者说信息。
4、将步骤1中的结果传入输入门中,这一层决定步骤4的备选层中哪些信息应该加入到细胞状态中去。
5、步骤2、3、4计算结束后,用这三个步骤计算后的向量和上一个神经元细胞传出的细胞状态向量来更新当前细胞的细胞状态。
6、结果就被计算完了。
7、将结果和新的细胞状态进行点乘则是当前细胞状态的隐向量。
LSTM如何避免梯度消失与梯度爆炸
RNN中的梯度消失/爆炸与CNN中的含义不同,CNN中不同的层有不同的参数,每个参数都有自己的梯度;而RNN中同样的权重在各个时间步中共享,所以最终的梯度等于各个时间步的梯度和。因此,RNN中的梯度不会消失,它只会遗忘远距离的依赖关系,而被近距离的梯度所主导。但是LSTM中的梯度传播有很多条路径,最主要的一条是当前细胞的状态更新这一过程,该过程中只有逐元素的相乘和相加操作,梯度流最稳定,因此基本不会发生梯度消失或者梯度爆炸;但是其他的传播路径依然有梯度消失或者爆炸风险,而最终的梯度计算是各个梯度路径的和,因此LSTM仍然有梯度消失或者爆炸的风险,只是这个风险被大幅降低了。
总结
LSTM优点:LSTM降低了梯度消失或者梯度爆炸的风险,并且比RNN具有更强的长距离依赖能力。
LSTM缺点:
- LSTM处理长距离依赖的能力依然不够,因此Transformer横空出世,它具有比LSTM更强的长距离依赖处理能力。
- 它的计算很费时。每个细胞中都有4个全连接层(MLP),因此如果LSTM的时间跨度很大的话,计算量会很大也很费时。
参考:https://www.cnblogs.com/mj-selina/p/12463265.html
LSTM理解的更多相关文章
- [NLP]LSTM理解
简介 LSTM(Long short-term memory,长短期记忆)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失问题.以下先从RNN介绍. 简说RNN RNN(Recurrent ...
- 基于pytorch的CNN、LSTM神经网络模型调参小结
(Demo) 这是最近两个月来的一个小总结,实现的demo已经上传github,里面包含了CNN.LSTM.BiLSTM.GRU以及CNN与LSTM.BiLSTM的结合还有多层多通道CNN.LSTM. ...
- Recurrent Neural Network[Content]
下面的RNN,LSTM,GRU模型图来自这里 简单的综述 1. RNN 图1.1 标准RNN模型的结构 2. BiRNN 3. LSTM 图3.1 LSTM模型的结构 4. Clockwork RNN ...
- RNN及其变体框架
RNN及其变体框架 含RNN推导 LSTM理解 理解LSTM网络 算法细节理解及参考文献
- 练手项目之image caption问题记录
小白一个,刚刚费了老大的劲完成一个练手项目--image caption,虽然跑通了,但是评估结果却惨不忍睹.于是贴上大神的作品,留待日后慢慢消化.顺便记录下自己踩坑的一些问题. 先膜拜下大神的作品. ...
- [论文] FRCRN:利用频率递归提升特征表征的单通道语音增强
本文介绍了ICASSP2022 DNS Challenge第二名阿里和新加坡南阳理工大学的技术方案,该方案针对卷积循环网络对频率特征的提取高度受限于卷积编解码器(Convolutional Encod ...
- 递归神经网络之理解长短期记忆网络(LSTM NetWorks)(转载)
递归神经网络 人类并不是每时每刻都从头开始思考.正如你阅读这篇文章的时候,你是在理解前面词语的基础上来理解每个词.你不会丢弃所有已知的信息而从头开始思考.你的思想具有持续性. 传统的神经网络不能做到这 ...
- [译] 理解 LSTM 网络
原文链接:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 吴恩达版:http://www.ai-start.com/dl2017/h ...
- 通过keras例子理解LSTM 循环神经网络(RNN)
博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...
随机推荐
- (一)学习了解OrchardCore笔记——开篇:基于asp.net core的OrchardCore
想深入了解OrchadCore源码许久了,但是读源码的时候遇到很多问题而网上的参考资料太少了(几乎都是OrchadCms不带OrchardCore的),现在解决得差不多了,做下笔记方便自己查看,有错误 ...
- Redis RDB 分析工具 rdbtools 说明
背景 Redis是基于内存的KV数据库,内存作为存储介质,关注其内存的使用情况是一个重要指标,解析其内部的存储信息是给出优化方法和维护的最基本要求.解析内存有二种方法:第一个是通过scan遍历所有ke ...
- Python面向对象01 /面向对象初识、面向对象结构、类、self、实例化对象
Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象初识 2. 面向 ...
- P2058 海港 (洛谷)
这个题复制过来真的有点恶心,懒得手打,以后再搬题面吧. 今天我双更了,AC这个题我就完成某谷春令营第一课的作业了(假的) 这个题是个双指针.非常友善.一直往里读入就可以了,遇见不是一条船的乘客输出这一 ...
- 学会Markdown不仅可以用来编写文档,还可以制作自己的简历,真香!
程序员的简历要简洁明了,不要太多花哨的修饰,突出重点即可,使用markdown就可以很好的满足写一份简历的需求 Markdown 简历模板 这里我贡献一下我自己的markdown简历模板,简历效果如下 ...
- javascript算法 最短路径问题
var obj = { 1: [2, 3], 2: [1, 4, 5], 3: [1, 7, 8], 4: [2, 7], 7: [4, 8], } var 起点 = 1 var 终点 = 8 var ...
- C++语法小记---函数模板
函数模板 函数模板的目的是代码复用 普通函数和模板函数可以形成重载,调时优先调用普通函数,其次调用模板函数 模板函数要编译两次,第一次是具现出具体的函数,第二次是对具现出的函数进行编译 函数模板调用特 ...
- windows下nginx问题:[crit] 796#7096: *1 GetFileAttributesEx() "F: ginx-1.12.2\html\dist" failed (123: The filename, directory name, or volume label syntax is incorrect), client: 127.0.0.1, server: localho
错误信息: 2019/09/09 13:54:37 [crit] 796#7096: *1 GetFileAttributesEx() "F: ginx-1.12.2\html\dist&q ...
- Nginx(一)Linux上的Nginx安装步骤
一.Windows下安装 解压:nginx-windows 双击: nginx.exe 能看到nginx欢迎界面说明,nginx安装成功 演示下 nginx做静态服务器 二.Linux下安装 (1). ...
- windows 下安装YApi及集成Idea的YapiUpload
一准备工具 Mongodb Node和npm 二文档地址 https://hellosean1025.github.io/yapi/ 三安装步骤 1.安装Mongodb,请参考 2.安装Node,请参 ...