首页 > 其他分享 >学习笔记420—【译】理解LSTM(通俗易懂版)

学习笔记420—【译】理解LSTM(通俗易懂版)

时间:2023-10-08 17:58:02浏览次数:47  
标签:RNNs 细胞 LSTMs 信息 通俗易懂 420 LSTM png

【译】理解LSTM(通俗易懂版)

循环神经网络(Recurrent Neural Networks)

人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。在理解当前文字的时候,你并不会忘记之前看过的文字,从头思考当前文字的含义。

传统的神经网络并不能做到这一点,这是在对这种序列信息(如语音)进行预测时的一个缺点。比如你想对电影中的每个片段去做事件分类,传统的神经网络是很难通过利用前面的事件信息来对后面事件进行分类。

而循环神经网络(下面简称RNNs)可以通过不停的将信息循环操作,保证信息持续存在,从而解决上述问题。RNNs如下图所示


1.png

可以看出A是一组神经网络(可以理解为一个网络的自循环),它的工作是不停的接收x_{t}并且输出h_{t}。从图中可以看出A允许将信息不停的再内部循环,这样使得它可以保证每一步的计算都保存以前的信息。

这样讲可能还是有点晕,更好的理解方式,也是很多文章的做法,将RNNs的自循环结构展开,像是将同一个网络复制并连成一条线的结构,将自身提取的信息传递给下一个继承者,如下图所示。


2.png

这种链式的结构揭示了RNNs与序列和列表类型的数据密切相关。好像他们生来就是为了处理序列类型数据的。

谁说不是呢!在过去的几年里,RNNs在语音识别、文字建模、翻译、字幕等领域有很成功的应用。在Andrej Karpathy写的博客 The Unreasonable Effectiveness of Recurrent Neural Networks中讨论了RNNs取得的惊人成果,这里就不详细讨论了。

很对成功的案例都有一个共性,就是都用了一种叫LSTMs的特殊的RNNs网络结构。下面就来看看什么是LSTMs。

长依赖存在的问题

从之前的描述可以看出来,RNNs理论上是可以将以前的信息与当前的任务进行连接,例如使用以前的视频帧来帮助网络理解当前帧。如果RNNs能做到这一点,那将会是非常的有用。但是他们能做到这点吗?答案是不一定。

有时候我们需要利用近期的信息来执行来处理当前的任务。例如,考虑用一个语言模型通过利用以前的文字信息来预测下一个文字。如果我们需要预测“the clouds are in the sky”这句话的最后一个字,我们不需要其他的信息,通过前面的语境就能知道最后一个字应该是sky。在这种情况下,相关信息与需要该信息的位置距离较近,RNNs能够学习利用以前的信息来对当前任务进行相应的操作。如下图所示通过输入的x_{1}、x_{2}信息来预测出h_{3}

3.png

 

假设现在有个更为复杂的任务,考虑到下面这句话“I grew up in France… I speak fluent French.”,现在需要语言模型通过现有以前的文字信息预测该句话的最后一个字。通过以前文字语境可以预测出最后一个字是某种语言,但是要猜测出French,要根据之前的France语境。这样的任务,不同之前,因为这次的有用信息与需要进行处理信息的地方之间的距离较远,这样容易导致RNNs不能学习到有用的信息,最终推导的任务可能失败。如下图所示。


4.png

理论上RNNs是能够处理这种“长依赖”问题的。通过调参来解决这种问题。但是在实践过程中RNNs无法学习到这种特征。Hochreiter (1991) [German]Bengio, et al. (1994)深入研究过为什么RNNs没法学习到这种特征。

幸好LSTMs这种特殊的RNNs是没有这个问题的。

LSTM 网络

Long Short Term Memory networks(以下简称LSTMs),一种特殊的RNN网络,该网络设计出来是为了解决长依赖问题。该网络由 Hochreiter & Schmidhuber (1997)引入,并有许多人对其进行了改进和普及。他们的工作被用来解决了各种各样的问题,直到目前还被广泛应用。

所有循环神经网络都具有神经网络的重复模块链的形式。 在标准的RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。标准的RNN网络如下图所示


5.png

LSTMs也具有这种链式结构,但是它的重复单元不同于标准RNN网络里的单元只有一个网络层,它的内部有四个网络层。LSTMs的结构如下图所示。


6.png

在解释LSTMs的详细结构时先定义一下图中各个符号的含义,符号包括下面几种


7.png

图中黄色类似于CNN里的激活函数操作,粉色圆圈表示点操作,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作

LSTMs的核心思想

LSTMs的核心是细胞状态,用贯穿细胞的水平线表示。

细胞状态像传送带一样。它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个RNNs。细胞状态如下图所示


8.png

LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。

门能够有选择性的决定让哪些信息通过。其实门的结构很简单,就是一个sigmoid层和一个点乘操作的组合。如下图所示


9.png

因为sigmoid层的输出是0-1的值,这代表有多少信息能够流过sigmoid层。0表示都不能通过,1表示都能通过。

一个LSTM里面包含三个门来控制细胞状态。

一步一步理解LSTM

前面提到LSTM由三个门来控制细胞状态,这三个门分别称为忘记门、输入门和输出门。下面一个一个的来讲述。

LSTM的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为忘记门的sigmoid单元来处理的。它通过查看h_{t-1}x_{t}信息来输出一个0-1之间的向量,该向量里面的0-1值表示细胞状态C_{t-1}中的哪些信息保留或丢弃多少。0表示不保留,1表示都保留。忘记门如下图所示。

10.png

 

下一步是决定给细胞状态添加哪些新的信息。这一步又分为两个步骤,首先,利用h_{t-1}x_{t}通过一个称为输入门的操作来决定更新哪些信息。然后利用h_{t-1}x_{t}通过一个tanh层得到新的候选细胞信息\tilde C_{t},这些信息可能会被更新到细胞信息中。这两步描述如下图所示。

11.png

 

下面将更新旧的细胞信息C_{t-1},变为新的细胞信息C_{t}。更新的规则就是通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息\tilde C_{t}的一部分得到新的细胞信息C_{t}。更新操作如下图所示

12.png

 

更新完细胞状态后需要根据输入的h_{t-1}x_{t}来判断输出细胞的哪些状态特征,这里需要将输入经过一个称为输出门的sigmoid层得到判断条件,然后将细胞状态经过tanh层得到一个-1~1之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该RNN单元的输出。该步骤如下图所示

13.png

 

还是拿语言模型来举例说明,在预测动词形式的时候,我们需要通过输入的主语是单数还是复数来推断输出门输出的预测动词是单数形式还是复数形式。

LSTM的变种

之前描述的LSTM结构是最为普通的。在实际的文章中LSTM的结构存在各种变式,虽然变化都不会太大,但是也值得一提。
其中一个很受欢迎的变式由Gers & Schmidhuber (2000)提出,它在LSTM的结构中加入了“peephole connections.”结构,peephole connections结构的作用是允许各个门结构能够看到细胞信息,具体如下图所示。

14.png

 

上图描绘的是所有门都能看到细胞信息,还有一些变式是在其中的某些门引入细胞信息。

还有一种变式是在忘记门与输入门之间引入一个耦合。不同于之前的LSTM结构,忘记门和输入门是独立的,这个变式是在忘记门删除历史信息的位置加入新的信息,在加入新信息的位置删除旧信息。该结构如下图所示。


15.png

一种比其他形式变化更为显著的LSTM变式是由 Cho, et al. (2014)提出的门循环单元(GRU)。它将忘记门和输入门合并成一个新的门,称为更新门。GRU还有一个门称为重置门。如下图所示

16.png

 

其中重置门为上图中前面那个门,决定了如何将新的输入信息与前面的记忆相结合。更新门为上图中后面那个门,定义了前面记忆保存到当前时间步的量。由于该变式的简单有效,后来被广泛应用。

这里介绍的只是一些较为有名的LSTM变式,关于LSTM的变式其实还有很多种,像 Yao, et al. (2015)提出的Depth Gated RNNs。还有其他用于解决长依赖问题的方法,如由 Koutnik, et al. (2014)提出的 Clockwork RNNs。

至于哪种变式效果最好?各种差异对LSTM的影响有多少?这些问题 Greff, et al. (2015)做了一些对比,结论是他们基本是一样的。 Jozefowicz, et al. (2015)测试了一万多种RNN结构,发现在某些指定任务上有些变式还是由于标准LSTMs的。

总结

之前也提到过RNNs取得了不错的成绩,这些成绩很多是基于LSTMs来做的,说明LSTMs适用于大部分的序列场景应用。
一般文章写法会堆一堆公式吓唬人,希望本文一步一步的拆分能有助于大家的理解。
LSTMs对于RNNs的使用是一大进步。那么现在还有个问题,是否还有更大的进步?对于很多研究者来说,但是是肯定的,那就是attention的问世。attention的思想是让RNN在每一步挑选信息的时候都能从更大的信息集里面挑选出有用信息。例如,利用RNN模型为一帧图片生成字母,它将会选择图片有用的部分来得到有用的输入,从而生成有效的输出。事实上, Xu, et al.(2015) 已经这么做了,如果你想更深入的了解attention,这会是一个不错的开始。attention方向还有一些振奋人心的研究,但还有很多东西等待探索......

在RNN领域attention并不是唯一一个可以研究的点。比如Kalchbrenner, et al. (2015)提出的Grid LSTMs,Gregor, et al. (2015), Chung, et al. (2015), 和 Bayer & Osendorfer (2015)将RNNs用于生成模型的研究都非常有意思。
在过去几年RNNs方面的研究非常的多,相信以后的研究成果也会更为丰富。


参考链接:https://www.jianshu.com/p/95d5c461924c

 

标签:RNNs,细胞,LSTMs,信息,通俗易懂,420,LSTM,png
From: https://www.cnblogs.com/hechangchun/p/17749757.html

相关文章

  • Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
    原文链接:http://tecdat.cn/?p=23689最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。本文探索Python中的长短期记忆(LSTM)网络,以及如何使用它们来进行股市预测 ( 点击文末“阅读原文”获取完整代码数据)。在本文中,你将看到如何使用一个被称为长短时记忆的时间......
  • 通俗易懂拟人的解释 三次握手四次挥手 把 syn ack fin包也拟人化
    当你和一个朋友想要开始交谈时,你们之间需要进行一些特定的动作,就像打招呼一样。这个过程被称为"三次握手"。三次握手的过程可以类比为以下场景:你:嗨!我想和你聊天。朋友:嗯,我也想和你聊天。你:好的,那我们开始吧!在这个过程中,你首先向朋友打招呼并表示你想要聊天,朋友回应并表示他......
  • Windows下ffmpeg调用测试(YUV420P编码)
    1下载静态库和动态库如果你是动态加载,可以直接使用动态库(dlopen等);否则就才用动态+静态的方式(动态库的静态加载方式);或者直接将静态库编译到你的执行程序(纯静态组件使用);https://www.gyan.dev/ffmpeg/builds/#libraries 添加组件vs2022: 属性->c/c++->附加包含目录;将头文件......
  • LSTM滞后性
    原因:回归算法将使用您提供的时间窗口中的值作为样本,以最大程度地减少误差。假设您正在尝试预测时间t的值。输入是以前的收盘价,即t-20到t-1的最后20个输入的时间序列窗口(假设样本输入的timestamp是20)。回归算法可能会学习在时间t-1或t-2处的值作为预测值,因为这样不需要做什么就可以......
  • 设计模式:通俗易懂版
    ......
  • 时间序列预测 | Matlab 粒子群优化长短期记忆网络(PSO-LSTM)的时间序列预测
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • AP51656 PWM和线性调光 LED车灯电源驱动IC 兼容替代PT4115 PT4205
    产品描述AP51656是一款连续电感电流导通模式的降压恒流源用于驱动一颗或多颗串联LED输入电压范围从5V到60V,输出电流可达1.5A。根据不同的输入电压和外部器件,可以驱动高达数十瓦的LED。内置功率开关,采用高端电流采样设置LED平均电流,通过DIM引脚可以接受模拟调光和很宽范围......
  • pytorch nn.LSTM模块参数详解
    nn.LSTM模块参数input_size:输入的维度hidden_size:h的维度num_layers:堆叠LSTM的层数,默认值为1bias:偏置,默认值:Truebatch_first:如果是True,则input为(batch,seq,input_size)。默认值为:False(seq_len,batch,input_size)bidirectional:是否双向传播,默认值为False 输入(in......
  • MySQLSTMT函数详解及使用方法(mysql_stmt())
    MySQL_STMT函数详解及使用方法 MySQL_STMT是MySQL提供的一个CAPI,用于执行预处理语句(Preparedstatements)。相比于直接执行SQL,预处理语句具有更高的运行效率和更好的安全性。本文将详细介绍MySQL_STMT函数的使用方法。 1.创建预处理语句 使用MySQL_STMT,需要先创建一个预......
  • 国标视频云服务EasyGBS国标平台与海康4200平台级联后不能播放的问题解决方法
    国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等......