简介

  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,C= Ct-1· Γf + Γi· ~ct(其中~c= tanh(ht-1xt)),文字描述是:输入门的计算结果点乘 ht-1与xt的连接向量经过tanh层计算的结果后,再与上一个神经元细胞经过计算后保留的信息进行相加,则是最终要输出的Ct输入门控制当前计算的新状态以多大程度更新到记忆单元中。

  (3)输出门:输出门决定当前神经原细胞输出的隐向量ht,ht与Ct不同,ht要稍微复杂一点,它是Ct进过tanh计算后与输出门的计算结果进行点乘操作后的结果,用公式描述是:h= 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理解的更多相关文章

  1. [NLP]LSTM理解

    简介 LSTM(Long short-term memory,长短期记忆)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失问题.以下先从RNN介绍. 简说RNN RNN(Recurrent ...

  2. 基于pytorch的CNN、LSTM神经网络模型调参小结

    (Demo) 这是最近两个月来的一个小总结,实现的demo已经上传github,里面包含了CNN.LSTM.BiLSTM.GRU以及CNN与LSTM.BiLSTM的结合还有多层多通道CNN.LSTM. ...

  3. Recurrent Neural Network[Content]

    下面的RNN,LSTM,GRU模型图来自这里 简单的综述 1. RNN 图1.1 标准RNN模型的结构 2. BiRNN 3. LSTM 图3.1 LSTM模型的结构 4. Clockwork RNN ...

  4. RNN及其变体框架

    RNN及其变体框架  含RNN推导 LSTM理解 理解LSTM网络  算法细节理解及参考文献  

  5. 练手项目之image caption问题记录

    小白一个,刚刚费了老大的劲完成一个练手项目--image caption,虽然跑通了,但是评估结果却惨不忍睹.于是贴上大神的作品,留待日后慢慢消化.顺便记录下自己踩坑的一些问题. 先膜拜下大神的作品. ...

  6. [论文] FRCRN:利用频率递归提升特征表征的单通道语音增强

    本文介绍了ICASSP2022 DNS Challenge第二名阿里和新加坡南阳理工大学的技术方案,该方案针对卷积循环网络对频率特征的提取高度受限于卷积编解码器(Convolutional Encod ...

  7. 递归神经网络之理解长短期记忆网络(LSTM NetWorks)(转载)

    递归神经网络 人类并不是每时每刻都从头开始思考.正如你阅读这篇文章的时候,你是在理解前面词语的基础上来理解每个词.你不会丢弃所有已知的信息而从头开始思考.你的思想具有持续性. 传统的神经网络不能做到这 ...

  8. [译] 理解 LSTM 网络

    原文链接:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 吴恩达版:http://www.ai-start.com/dl2017/h ...

  9. 通过keras例子理解LSTM 循环神经网络(RNN)

    博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...

随机推荐

  1. 浏览器访问 www.baidu.com 的过程

    浏览器访问 www.baidu.com 的过程 1 先要解析出www.baidu.com DNS域名解析为服务器 IP 2 得到 IP地址后,客户端会发起TCP请求,以及3次握手建立连接 3 建立连接 ...

  2. Serverless介绍篇(一)云开发在Serverless方面取得了怎样的新成果?

    过去几年间,Serverless 发展迅猛,与其相伴的还有从小程序.移动端等到前后端一体化的演进与实践,也正因如此,从云计算到前端,众多开发者都极为关注.本文介绍了腾讯云CloudBase 的 Ser ...

  3. day25 ATM项目(第一天)

    项目的说明书 项目:ATM + 购物车 项目需求: 1.额度15000或自定义 --> 注册功能 2.实现购物商城,买东西加入购物车,调用信用卡接口结账 --> 购物功能.支付功能 3.可 ...

  4. MYSQL 之 JDBC(四): 增删改查(二)通过ResultSet执行查询操作

    /** * ResultSet:结果集.封装了使用JDBC进行查询的结果. * 1. 调用Statement对象的executeQuery(sql)方法 * 2. ResultSet返回的实际上就是一 ...

  5. java 面向对象(三十三):泛型二 泛型在集合中的使用

    1. 在集合中使用泛型之前的例子 @Test public void test1(){ ArrayList list = new ArrayList(); //需求:存放学生的成绩 list.add( ...

  6. 机器学习实战基础(三十六):随机森林 (三)之 RandomForestClassifier 之 重要属性和接口

    重要属性和接口 至此,我们已经讲完了所有随机森林中的重要参数,为大家复习了一下决策树的参数,并通过n_estimators,random_state,boostrap和oob_score这四个参数帮助 ...

  7. MySQL主从复制--单库复制搭建

    背景说明 负责公司MySQL数仓的搭建和维护,因为前端业务涉及到一次业务表的分库,导致整个平台新增加一台MySQL服务器,需要将该库数据通过主从复制同步至原有的数仓实例. 数据流向说明如下图: 业务环 ...

  8. 采用 Unicode 标点属性方式的正则表达式,可以去掉所有的标点符号,

    public class Test { public static void main(String[] args) { String str = "!!!??!!!!%*)%¥!KTV去符 ...

  9. 数字孪生,数据驱动下的北京 CBD 智能楼宇三维可视化系统

    前言 楼宇作为建筑基础设施的主体,为人们提供着重要的生存空间.随着物联网.人工智能概念的兴起以及智慧城市如火如荼的开展,智能楼宇的重要性越发突显. 随着城市现代化建设的发展,建筑的智能化,特别是公用建 ...

  10. Ubuntu安装Docker(官方文档翻译)

    翻译自Docker官方文档 https://docs.docker.com/engine/installation/linux/ubuntulinux/ 之前因为看不懂官方文档,卡在某个步骤无法完成安 ...