经典博客——了解LSTM网络

徐大白
3周前 阅读 211 点赞 2

循环神经网络

人类不会每时每刻从头开始思考。当你读这篇文章时,你会根据你对以前单词的理解来理解每一个单词。你不需要抛开一切,从头思考,因为你的思维是持续的。

传统的神经网络不能做到这一点,这似乎是一个明显的缺点。想象一下,你想把电影中的每一幕发生的事件进行分类。目前还不清楚传统的神经网络如何利用它对电影中先前事件的推理来告知后来的事件。

递归神经网络解决了这个问题。它们是具有循环的网络,允许信息持久化。


循环神经网络具有loop

在上图中,一组神经网络A,查看一些输入XtX_{t} 并输出一个值hth_{t} . 一个循环允许信息从网络的一个步骤传递到下一个步骤。

这些循环使递归神经网络看起来有点神秘。然而,仔细想想你会发现,并不是所有的递归神经网络都与普通的神经网络那么不同。递归神经网络可以被认为是同一网络的多个副本,每一步都传递一个消息给下一步。想想一下,如果我们展开循环会发生什么:

展开的递归神经网络

这种链状性质揭示了递归神经网络与序列和列表密切相关。它们是神经网络用于这些数据的自然体系结构。

它们确实被使用了!在过去的几年里,RNNs在语音识别、语言建模、翻译、图像字幕处理等各种问题上取得了令人难以置信的成功。我将把关于RNNs所能达到的惊人成就的讨论留给Andrej Karpathy的优秀博客文章,递归神经网络的不合理有效性。但它们确实非常神奇。

这些成功的关键是使用“LSTM”,一种非常特殊的递归神经网络,对于许多任务,它比标准版本要好得多。几乎所有的基于递归神经网络的激励结果都是用它们来实现的。这就是本文所要探讨的LSTM。

长期依赖性问题

RNN的吸引力之一是它们可能能够将先前的信息与当前任务连接,例如使用先前的视频帧可以告知对当前帧的理解。如果RNNs能做到这一点,他们将是非常有用的。但是他们能吗?这要看情况而定。

有时,我们只需要查看最近的信息来执行当前的任务。例如,一个语言模型试图根据前面的单词来预测下一个单词。如果我们试图预测“ the cloud are in the sky ”中的最后一个词,我们不需要任何进一步的上下文——很明显,下一个词就是sky。在这种情况下,相关信息与需要的位置之间的差距很小,RNN可以学习使用过去的信息。

但也有一些情况我们需要更多的上下文。试着预测文本中的最后一个词“I grew up in France……I can speak Fluent French ”最近的信息表明下一个词可能是一种语言的名字,但是如果我们想缩小哪种语言,我们需要从法国的上下文出发,进一步考虑。这需要的相关的信息和点之间的差距将变得非常大。

不幸的是,随着这个差距的增长,RNNs变得无法学会连接信息。

理论上,RNN绝对能够处理这种“长期依赖”。人们可以仔细地为它们选择参数来解决这种形式的玩具问题。遗憾的是,在实践中,RNNs似乎不能学习它们。Hochreiter (1991) [German]Bengio, et al. (1994)等人深入研究了这一问题,发现了一些很难理解的基本原因。

谢天谢地,LSTMs没有这个问题!

LSTM网络

长短期记忆网络——通常称为“LSTM”——是一种特殊的RNN,能够学习长期相关性。它们是由 Hochreiter & Schmidhuber (1997)介绍的,并在后续工作中被许多人改进和推广。它们在各种各样的问题上工作得非常好,现在被广泛使用。

LSTM被明确地设计以避免长期依赖性问题。记住长时间的信息实际上是他们的默认行为,而不是他们努力学习的东西!

所有递归神经网络都具有神经网络的重复模块链的形式。在标准RNNs中,这种重复模块将具有非常简单的结构,例如单个tanh层。


标准RNN中的重复模块包含单个层

LSTMs还具有这种链状结构,但重复模块具有不同的结构。而不是有一个单一的神经网络层,有四个,以非常特殊的方式相互作用。

LSTM中的重复模块包含四个相互作用的层

不要担心发生的事情的细节。我们将一步一步地走过LSTM图。现在,让我们试着去适应我们使用的符号。

在上面的图中,每一行携带一个完整的向量,从一个节点的输出到其他节点的输入。粉红色圆圈表示点状运算,如矢量加法,而黄色方框是学习的神经网络层。行合并表示连接,而行分叉表示正在复制的内容以及要到不同位置的副本。

LSTMs背后的核心思想

LSTM的关键是单元格状态,横跨图表顶部的水平行。

单元格状态有点像传送带。它直接在整个链条上运行,只有一些轻微的线性互动。信息很容易沿着它流动。

LSTM确实有能力删除或添加信息到单元格状态,精心调节的结构称为gates

Gates是一种选择性地让信息通过的方式。它们由Sigmoid神经网络层和逐点乘法运算构成。

Sigmoid层输出数字在0和1之间,描述每个分量应该通过多少。零值意味着“不让任何东西通过”,而一个值意味着“让一切通过!”“

一个LSTM有三个gates,以保护和控制电池状态。

循序渐进

LSTM的第一步是决定我们要从单元格状态中丢掉什么信息。这个决定是由一个称为“forget gate layer”的乙状体层做出的,它查看ht1h_{t-1}XtX_{t} ,并输出在单元格状态Ct1C_{t-1} 中的每一个数对应的0和1之间的数目。1个代表“completely keep this ”,而0个代表代表“completely get rid of this”。

让我们回到我们的语言模型的例子,试图根据前面所有的单词来预测下一个单词。在这样的问题中,单元格状态可能包含当前主语的词性,以便可以使用正确的代词。当我们看到一个新主语时,我们常常会忘记前一个主语的词性。

下一步是决定我们要存储在单元格状态中的新信息。这有两个部分。首先,称为“input gate layer”的Sigmoid 层决定我们将更新哪些值。接下来,一个tanh层创建一个新的候选值向量Ct。这可以添加到状态。在下一个步骤中,我们将结合这两个来创建对状态的更新。

在我们的语言模型的示例中,我们希望将新主语的词性添加到单元格状态,以取代我们遗忘的旧主语。

现在可以将旧单元格状态Ct1C_{t-1} 更新为新的单元格状态CtC_{t} 了。前面的步骤已经决定了要做什么,我们只需要实际去做。

我们用ftf_{t} 乘以旧的状态,忘记了我们早就决定忘记的事情。然后我们添加iti_{t} *CtC_{t} ,这是新的候选值,取决于我们决定更新每个状态值的多少。

在语言模型的情况下,正如我们在前面的步骤中决定的,我们将实际删除关于旧主语词性的信息并添加新信息。

最后,我们需要决定我们将输出什么。此输出将基于我们的单元格状态,但是是经过过滤的版本。首先,我们运行一个Sigmoid层,它决定我们要输出的单元格状态的哪些部分。然后,我们将细胞状态通过tanh(将值推到1到1之间)。并将它乘以Sigmoid Gate的输出,以便只输出我们决定的部分。

对于语言模型示例,因为它刚刚看到了一个主语,它可能想要输出与动词相关的信息,以防接下来发生的事情。例如,它可能输出主语是单数还是复数,这样我们就知道动词应该被组合成什么形式,如果这是下一步的话。

长短记忆的变体

我所描述的是一个非常正常的LSTM。但并非所有的LSTMs都与上述相同。事实上,几乎每一篇涉及LSTM的论文都使用了略微不同的版本。差别不大,但值得一提。

Gers & Schmidhuber (2000)介绍的一个流行的LSTM变体是添加“peephole connections”。这意味着我们让 gate 层查看单元格状态。

上面的图把所有的gate都插进了peephole,但是许多论文会给出一些窥视,而不是其他的。

另一种变化是使用耦合遗忘和input gate。不是单独决定忘记什么,而是我们应该添加新信息,我们一起做出这些决定。我们只会忘记在什么地方输入什么东西。当我们忘记旧的东西时,我们只向状态输入新的值。

LSTM的一个稍微更戏剧性的变化是由CHO等人引入的Gate Recurrent Unit(简称“GRU”)Cho, et al. (2014)。它将forget gate 和input gate 组合成一个“update gate”。它还将单元格状态和隐藏状态合并,并进行一些其他更改。由此产生的模型比标准的LSTM模型更简单,并且已经越来越流行。

这只是一些著名的LSTM变体。还有很多其他的,比如姚等 Yao, et al. (2015)。也有一些完全不同的方法来处理长期的依赖关系,比如Koutnik, et al. (2014)的Clockwork RNNs。

这些变体中哪一个最好?这些差别重要吗?Greff, et al. (2015)对流行的变体进行比较,发现它们都是相同的。Jozefowicz, et al. (2015) 测试了一万个以上的RNN体系结构,发现一些在某些任务上比LSTM更好的工作。

结论

早些时候,我提到了RNNs取得的显著成就。基本上所有这些都是使用LSTM实现的。对大多数任务来说,它们确实工作得更好!

作为一组方程,LSTM看起来很吓人。希望在这篇文章中一步一步地学习能使他们更平易近人。

LSTM是我们可以用RNNs完成的一个重大步骤。奇怪的是:还有另一个重要的步骤吗?研究人员的共同观点是:“是的!还有一个步骤,它的注意力!“

这个想法是让RNN的每一步都从大量信息中挑选信息。例如,如果使用RNN创建描述图像的标题,它可能选择图像的一部分来查看输出的每个单词。事实上,徐等人。(2015)做到这一点——如果你想引起人们的注意,这可能是一个有趣的起点。有很多令人兴奋的结果引起了人们的注意,而且似乎更多的事情即将到来。

注意力并不是RNN研究中唯一令人兴奋的线索。例如,Kalchbrenner, et al. (2015) 等的 Grid LSTM似乎非常有前途。在生成模型中使用RNNs工作,如Gregor, et al. (2015)Chung, et al. (2015),或者 Bayer & Osendorfer (2015)——也很有趣。过去的几年对于神经网络来说是一段激动人心的时刻,而未来的人们却只能承诺更多。

原文链接:Understanding LSTM Networks

翻译:徐大白


| 2
登录后可评论,马上登录吧~
评论 ( 1 )
英语高手啊
回复
6天前