长短期记忆网络(LSTM)

一. 什么是LSTM

Long Short Term Memory(LSTM,长短期记忆)是一种特殊的递归神经网络。这种网络与一般的前馈神经网络不同,LSTM可以利用时间序列对输入进行分析。
简而言之,当使用前馈神经网络时,神经网络会认为我们t时刻输入的内容与t+1时刻输入的内容完全无关,对于许多情况,例如图片分类识别这是毫无问题的,可对于一些情景,如自然语言处理(NLP)或者需要分析类似于连拍照片这样的数据时,合理运用t或之前的输入来处理t+n时刻,显然可以更加合理地运用输入的信息。

1.1 Recurrent Neural Networks(RNN)

为了运用到时间维度上的信息,人们设计了递归神经网络(RNN,Recurssion Neural Network),RNN是包含循环的网络,允许信息持久化。一个简单的递归神经网络可以用这种方式表示:
长短期记忆网络(LSTM)_第1张图片
在图中,xt是在t时刻的输入信息,ht是在t时刻的输入信息,我们可以看到神经网络模块A会递归地调用自身并将t-1时刻的信息传递给t时刻。循环可以使得信息可以从当前步传递到下一步。

RNN可以被看做是一个神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:
长短期记忆网络(LSTM)_第2张图片
链式的特征揭示了RNN本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。
并且RNN也已经被人们应用了。在过去几年中,RNN在语音识别、语言建模、翻译、图片描述等问题上已经取得一定成功,并且这个列表还在增长。

一些更丰富有趣的RNN成功应用:http://karpathy.github.io/2015/05/21/rnn-effectiveness/

1.2 长期依赖(Long-Term Dependencies)问题

递归神经网络在许多情况下运行良好,特别是在对短时间序列数据的分析时十分方便。
但上图所示的递归神经网络存在长期依赖问题:递归神经网络只能处理我们需要较接近的上下文的情况,这是这种网络结构本身的问题。

有时候我们仅需知道先前的信息来执行当前的任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测“the clouds are in the sky”最后的词,我们并不需要任何其他的上下文,因此下一个词很显然就应该是sky。在这样的场景中,相关的信息和预测的词位置之间的间隔非常小,RNN可以学会使用先前的信息。
长短期记忆网络(LSTM)_第3张图片
但是同样会有一些更加复杂的场景,假设我们试着去预测“I grew up in France… I speak fluent French”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,需要先提前到的离当前位置很远的France的上下文。这说明相关信息和当前预测位置之间的间隔就肯定变得相当大。
不幸的是,在这个间隔不断增大时,RNN会丧失学习到连接如此远的信息的能力。
长短期记忆网络(LSTM)_第4张图片
理论上,RNN绝对可以处理这样的长期依赖问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 肯定不能够成功学习到这些知识。

此外,这种简单的RNN还很容易出现两种两种在神经网络中臭名昭著的问题:梯度消失问题和梯度爆炸问题。

二. 为什么需要LSTM

LSTM从设计之处就被用于解决一般递归神经网络中普遍存在的长期依赖问题,使用LSTM可以有效传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略。与此同时,LSTM还可以解决RNN的梯度消失/爆炸问题。

三.LSTM的直觉解释

LSTM的设计借鉴了人类对于自然语言处理的直觉性经验。

  1. 在一个时间序列中,不是所有信息都是同等有效的,大多数情况存在“关键词”或者“关键帧”;
  2. 我们会在从头到尾的阅读的时候“自动”概括已阅读部分的内容并且用之前的内容帮助理解后文。

基于以上这两点,LSTM的设计者提出了“长短期记忆”的概念:只有一部分的信息需要长期记忆,而有的信息可以不记下来。同时,我们还需要一套机制可以动态处理神经网络的“记忆”,因为有的信息可能一开始价值很高,后面价值逐渐衰减,这时候我们也需要让神经网络学会“遗忘”特定的信息。

四. LSTM网络

Long Short Term网络,一般叫做LSTM,是一种RNN特殊的类型,可以学习长期依赖信息。LSTM由Hochreiter & Schmidhuber (1997)提出,并被Alex Graves进行了改良和推广。在很多问题,LSTM都取得巨大的成功,并得到了广泛的使用。

LSTM通过刻意的设计来避免长期依赖问题,记住长期的信息在实践中是LSTM的默认行为,而非需要付出很大代价才能获得的能力。
所有RNN都具有一种重复神经网络模块的链式的形式。在标准的RNN中,这个重复的模块只有一个非常简单的结构,例如一个tanh层。
长短期记忆网络(LSTM)_第5张图片

A在t-1时刻的输出值ht-1被复制到了t时刻,与t时刻的输入xt整合后经过一个带权重和偏置的tanh函数后形成输出,并继续将数据复制到t+1时刻。

LSTM同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
长短期记忆网络(LSTM)_第6张图片
其中图中使用的各种元素图标解释如下图所示:
长短期记忆网络(LSTM)_第7张图片
在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表pointwise的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

pointwise操作(对位操作):
如果我要对向量<1, 2, 3> 和 <1, 3, 5>进行逐分量的相乘操作,会获得结果 <1, 6, 15>
layer函数层:一个函数层拥有两个属性,权重向量(weight)和偏置向量(bias),对于输入向量A的每一个分量i,函数层会对其进行以下操作(假设激活函数为F(x)):Outputi=F(Wi·Ai+bi),常见的激活函数(也就是套在最外面的F(x))有ReLU(线性修正单元),sigmoid(写作σ)和tanh。

4.1 LSTM的核心思想

LSTM的关键就是细胞状态,水平线在图上方贯穿运行。
细胞状态类似于传送带,直接在整个链上运行,只有一些少量的线性交互,信息在上面流传保持不变会很容易。
长短期记忆网络(LSTM)_第8张图片
LSTM有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个sigmoid神经网络层和一个pointwise乘法操作。
长短期记忆网络(LSTM)_第9张图片
sigmoid层输出0-1之间的数值,描述每个部分有多少量可以通过。0代表“不许任何量通过”,1就指“允许任意量通过”。

LSTM有三个门,来保护和控制细胞状态。

4.2 逐步理解LSTM

在LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息。这个通过一个称为忘记门层完成。该门会读取ht-1和xt,输出一个在0-1之间的数字给每个在细胞状态Ct-1中的数字。1表示“完全保留”,0表示“完全舍弃”。

让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。
长短期记忆网络(LSTM)_第10张图片
下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid层称“输入门层”,决定什么值我们将要更新。然后,一个tanh层创建一个新的候选值向量^Ct,会被加到状态中,下一步,我们会讲这两个信息来产生对状态的更新。
在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。
长短期记忆网络(LSTM)_第11张图片
现在是更新旧细胞状态的时间了,Ct-1更新为Ct。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。

我们把旧状态与ft相乘,丢弃掉我们需要确定丢弃的信息,接着加上it*^Ct,这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。
长短期记忆网络(LSTM)_第12张图片
最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。
首先,我们运行一个sigmoid层来决定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
在语言模型的例子中,因为他就看到了一个代词,可能需要输出与一个动词相关的信息。例如,可能输出是否代词是单数还是复数,这样如果是动词的话,我们也知道动词需要进行的词形变化。
长短期记忆网络(LSTM)_第13张图片

五. LSTM的变体

前面介绍的LSTM是最基本的LSTM,但不是所有的LSTM都长成一个样子。实际上,几乎所有包含LSTM的论文都采用了微小的变体。差异非常小,但也值得拿出来讲一下。
其中一个流行的LSTM变体,就是由Gers & Schmidhuber (2000) 提出的,增加了“peephole connection”,就是说,我们让门层也会接受细胞状态的输入。
长短期记忆网络(LSTM)_第14张图片
上图的图例中,我们增加了peephole到每个门上,但是许多论文会加入部分的peephole而非所有都加。

另一个变体是通过使用coupled忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些已经忘记旧的信息的那些状态。
长短期记忆网络(LSTM)_第15张图片
另一个改动较大的变体是Gated Recurrent Unit(GRU),这是由Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的LSTM模型要简单,也是非常流行的变体。
长短期记忆网络(LSTM)_第16张图片

这里只是部分流行的LSTM变体,当然还有很多其他的,如Yao, et al. (2015) 提出的 Depth Gated RNN。还有用一些完全不同的观点来解决长期依赖的问题,如Koutnik, et al. (2014) 提出的 Clockwork RNN。

要问哪个变体是最好的?其中的差异性真的重要吗?Greff, et al. (2015) 给出了流行变体的比较,结论是他们基本上是一样的。Jozefowicz, et al. (2015) 则在超过 1 万种 RNN 架构上进行了测试,发现一些架构在某些任务上也取得了比 LSTM 更好的结果。

参考文章:
https://zhuanlan.zhihu.com/p/123857569
https://www.cnblogs.com/wangduo/p/6773601.html

你可能感兴趣的:(知识点库,lstm,人工智能,rnn)