LSTM网络简介:近年来,LSTM神经网络在文本和音乐生成以及时间序列预测方面得到了广泛的应用。
循环神经网络
人类不会每一秒钟都从头开始思考。当你读这篇文章的时候,你理解每一个单词都是基于你对之前单词的理解。你不会把所有的东西都扔掉,重新开始思考。你的思想有毅力。
传统的神经网络做不到这一点,这似乎是一个主要的缺点。例如,假设您想要对电影中每一点发生的事件进行分类。目前还不清楚传统的神经网络如何利用其对电影中先前事件的推理来为后来的事件提供信息。
循环(有时也翻译做递归)神经网络解决了这个问题。它们是包含循环的网络,允许信息持续存在。
循环神经网络有循环。
在上面的图中,神经网络A查看一些输入x_t并输出一个值h_t。循环允许信息从网络的一个步骤传递到下一个步骤。
这些循环使得循环神经网络看起来有点神秘。然而,如果你多想一下,就会发现它们和普通的神经网络并没有太大的不同。循环神经网络可以看作是同一网络的多个副本,每个副本都向后继网络传递一条消息。考虑一下如果我们展开循环会发生什么:
一个展开的循环神经网络。
这种链式性质揭示了循环神经网络与序列和列表密切相关。它们是神经网络用来处理这些数据的自然结构。
它们确实被使用了!在过去的几年里,把RNNs应用到各种各样的问题上取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕等等。我将把关于RNNs可以实现的惊人壮举的讨论留给Andrej Karpathy的优秀博客文章《循环神经网络的不合理有效性》。但它们真的很神奇。
这些成功的关键是使用“LSTMs”,这是一种非常特殊的循环神经网络,它在许多任务中都比标准版本运行得好得多。几乎所有基于循环神经网络的激动人心的结果都是用它们实现的。本文将探索这些LSTMs。
长期依赖的问题
RNNs的一个吸引人的地方是,他们可能能够将以前的信息与现在的任务联系起来,例如使用以前的视频帧可能有助于理解现在的帧。如果RNNs能做到这一点,它们将非常有用。但他们能吗?视情况而定。
有时候,我们只需要查看最近的信息就可以执行当前的任务。例如,考虑一个语言模型,它试图根据前面的单词预测下一个单词。如果我们试图预测“云在天空中”中的最后一个单词,我们不需要任何进一步的上下文——很明显下一个单词将是天空。在这种情况下,相关信息和需要信息的地方之间的差距很小,RNNs可以学习使用过去的信息。
但也有一些情况,我们需要更多的上下文。试着预测课文中的最后一个单词“我在法国长大……我说一口流利的法语。”“最近的信息显示,下一个单词很可能是一种语言的名字,但如果我们想缩小范围,我们需要更早的法语语境。”相关信息与需要它的点之间的差距完全有可能变得非常大。
不幸的是,随着这种差距的扩大,RNNs无法学会连接信息。
理论上,RNNs绝对有能力处理这种“长期依赖”。“一个人可以仔细地为他们选择参数来解决这种形式的玩具问题。遗憾的是,在实践中,RNNs似乎不能学习它们。Hochreiter(1991)[德语]和Bengio等人(1994)对这个问题进行了深入研究,他们发现了一些非常基本的原因,解释了为什么这个问题可能很难。
谢天谢地,LSTMs没有这个问题!
LSTM网络
长短期记忆网络通常被称为“LSTMs”,是一种特殊的RNN,能够学习长期依赖关系。它们由Hochreiter & Schmidhuber(1997)引入,并在随后的工作中被许多人提炼和推广。他们在各种各样的问题上都做得非常好,现在被广泛使用。
LSTMs的设计是为了避免长期依赖问题。长时间记住信息实际上是他们的默认行为,而不是他们努力学习的东西!
所有的递归神经网络都具有一串重复的神经网络模块的形式。在标准的RNNs中,这个重复模块有一个非常简单的结构,比如一个tanh层。
标准RNN中的重复模块包含一个单层。
LSTMs也有类似链的结构,但是重复模块有不同的结构。不是只有一个神经网络层,而是有四个,以一种非常特殊的方式相互作用。
LSTM中的重复模块包含四个交互层。
不要担心事情的细节。稍后,我们将逐步介绍LSTM图。现在,让我们试着熟悉一下我们将要使用的符号。
在上面的图中,每一行都带有一个完整的向量,从一个节点的输出到其他节点的输入。粉色圆圈表示点化操作,比如向量加法,而黄色框表示学习神经网络层。行合并表示连接,而行分叉表示被复制的内容和复制到不同位置的内容。
LSTMs背后的核心思想
LSTMs的关键是单元格状态,即贯穿图顶部的水平线。
细胞状态有点像传送带。它沿着整个链一直向下,只有一些很小的线性相互作用。信息很容易不加改变地沿着它流动。
LSTM确实有能力删除或添加信息到细胞状态,由称为门的结构小心地控制。
门是一种选择性地让信息通过的方法。它们由sigmoid神经网络层和点乘运算组成。
sigmoid层输出0到1之间的数字,描述每个组件应该通过的数量。值0表示“不让任何东西通过”,而值1表示“让所有东西通过!”
LSTM有三个这样的门,用来保护和控制单元状态。
逐步完成LSTM
LSTM的第一步是决定要从单元格状态丢弃什么信息。这个决定是由一个叫做“忘记门”的sigmoid层做出的。它查看h_{t-1}和x_t,为细胞状态C_{t-1}中的每个数字输出一个介于0和1之间的数字。一个1表示“完全保留这个”,而0表示“完全删除这个”。
让我们回到语言模型的例子,该模型试图根据前面的所有单词预测下一个单词。在这样的问题中,单元格状态可能包括当前主体的性别,以便使用正确的代词。当我们看到一个新的主题时,我们想要忘记旧主题的性别。
下一步是决定要在单元格状态中存储哪些新信息。它有两部分。首先,一个名为“input gate layer”的sigmoid层决定要更新哪些值。接下来,tanh层创建一个新的候选值向量,\tilde{C}_t,可以将其添加到状态中。在下一个步骤中,我们将把这两者结合起来创建对状态的更新。
在我们的语言模型示例中,我们希望将新主体的性别添加到单元格状态,以替换我们正在遗忘的旧主体。
现在是时候将旧的细胞状态C_{t-1}更新为新的细胞状态C_t了。前面的步骤已经决定了要做什么,我们只需要实际去做。
我们将旧状态乘以f_t,忘记了我们之前决定忘记的事情。然后加上i_t*\tilde{C}_t。这是新的候选值,按我们决定更新每个状态值的大小进行缩放。
在语言模型中,这是我们实际删除关于旧主题性别的信息并添加新信息的地方,正如我们在前面的步骤中决定的那样。
最后,我们需要决定输出什么。这个输出将基于我们的单元格状态,但将是经过过滤的版本。首先,我们运行一个sigmoid层,它决定要输出单元格状态的哪些部分。然后,我们将单元格状态放入tanh(将值推到-1和1之间),并将其乘以sigmoid门的输出,这样我们只输出我们决定输出的部分。
对于语言模型示例,由于它只是看到了一个主题,所以它可能希望输出与动词相关的信息,以防接下来会发生什么。例如,它可以输出主语是单数还是复数,这样我们就知道如果主语是单数或复数,那么动词应该变成什么形式。
长短时记忆的变异
到目前为止,我所描述的是一个非常正常的LSTM。但并不是所有的lstm都与上面的相同。事实上,似乎几乎所有涉及LSTMs的论文都使用了稍微不同的版本。差异很小,但值得一提的是其中的一些。
一种流行的LSTM变体,由Gers和Schmidhuber(2000)引入,增加了“窥视孔连接”。“这意味着我们让Gate层观察细胞状态。
上面的图表给所有的门都增加了窥视孔,但是很多论文只会给出一些窥视孔,而没有其他的。
另一种变化是使用耦合忘记和输入门。我们不是单独决定忘记什么和应该添加什么新信息,而是一起做这些决定。我们只会忘记什么时候在它的位置上输入东西。我们只在忘记旧值时才向状态输入新值。
LSTM的一个稍微显著的变化是由Cho等人(2014)引入的门控复发单元,或GRU。它将遗忘和输入门组合成一个“更新门”。“它还融合了细胞状态和隐藏状态,并做出一些其他的改变。得到的模型比标准LSTM模型更简单,并且越来越受欢迎。
这些只是最引人注目的LSTM变体中的几个。还有很多其他的,比如姚等人(2015)的《深度门控RNNs》。还有一些完全不同的方法来处理长期依赖关系,比如Koutnik等人(2014)的Clockwork RNNs。
这些变体中哪个是最好的?这些差异重要吗?Greff等人(2015)对流行的变体进行了很好的比较,发现它们几乎是相同的。Jozefowicz等人(2015)测试了一万多个RNN架构,发现有些架构在某些任务上比LSTMs工作得更好。
结论
早些时候,我提到了人们使用RNNs所取得的显著成果。基本上所有这些都是使用LSTMs实现的。他们真的能更好地完成大多数任务!
以一组方程式的形式写下来,LSTMs看起来相当吓人。希望在本文中一步一步地介绍它们能让它们更容易理解。
LSTMs是我们使用RNNs实现目标的一大步。人们很自然地会想:还有什么更大的进步吗?研究人员普遍认为:“是的!下一步就是集中注意力!这个想法是让RNN的每一步都从更大的信息集合中挑选信息。例如,如果使用RNN创建描述图像的标题,它可能会选择图像的一部分来查看它输出的每个单词。事实上,Xu, et al.(2015)正是这样做的——如果你想探索注意力,这可能是一个有趣的起点!使用注意力已经有了很多令人兴奋的结果,而且似乎更多的结果即将到来……
注意力并不是RNN研究中唯一令人兴奋的线索。例如,Kalchbrenner等人(2015)的Grid LSTMs看起来非常有前途。在生成模型中使用RNNs的工作——如Gregor, et al. (2015), Chung, et al.(2015),或Bayer & Osendorfer(2015)——似乎也非常有趣。在过去的几年里,对于递归神经网络来说是一个激动人心的时期,而未来的神经网络将会更加激动人心!