Understanding LSTM Networks
Recurrent Neural Networks
人类不会每秒钟都从头开始思考。当你阅读这篇文章时,你是根据你对前几个词的理解来理解每个词的。你不会把一切都扔掉,再从头开始思考。你的思想具有持续性。
传统的神经网络无法做到这一点,这似乎是一个重大的缺陷。例如,想象一下,你想对一部电影中的每一个点发生什么样的事件进行分类。目前还不清楚传统的神经网络如何利用其对电影中以前事件的推理为后来的事件提供信息。
递归神经网络解决了这个问题。它们是带有循环的网络,允许信息持续存在。
在上图中网络,A获取一些输入Xt,输出一个值ht。一个循环允许信息从网络的一个步骤传递到下一个步骤。这些循环使递归神经网络看起来有点神秘。然而,如果你多想一点,就会发现它们与普通的神经网络并没有什么不同。递归神经网络可以被认为是同一个网络的多个副本,每个副本都向后继者传递一个信息。考虑一下如果我们展开循环会发生什么。
这种链状性质揭示了递归神经网络与序列和列表密切相关。它们是用于此类数据的神经网络的自然架构。
它们当然也被使用了!在过去的几年里,将RNNs应用于各种问题上取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕......这个名单还在继续。我将把关于一个人可以用RNN实现的惊人壮举的讨论留给Andrej Karpathy的优秀博文《循环神经网络的不合理的有效性》。但它们确实非常惊人。
这些成功的关键是使用 "LSTM",这是一种非常特殊的递归神经网络,对于许多任务来说,它比标准版本好得多。几乎所有基于递归神经网络的令人兴奋的结果都是通过它们实现的。这篇文章将探讨的就是这些LSTMs。
The Problem of Long-Term Dependencies
RNNs的吸引力之一是它们能够将以前的信息与当前的任务联系起来,例如使用以前的视频帧可能为理解当前帧提供信息。如果RNN能做到这一点,它们就会非常有用。但它们能做到吗?这取决于。
有时,我们只需要看最近的信息来执行当前的任务。例如,考虑一个语言模型试图根据以前的单词来预测下一个单词。如果我们试图预测 "云在天上 "中的最后一个词,我们不需要任何进一步的背景--很明显,下一个词将是天空。在这种情况下,如果相关信息和需要它的地方之间的差距很小,RNN可以学习使用过去的信息。
但也有一些情况,我们需要更多的背景。考虑一下试图预测 "我在法国长大......我会说流利的法语 "这段文字中的最后一个词。最近的信息表明,下一个词可能是一种语言的名称,但如果我们想缩小哪种语言的范围,我们需要法国的背景,从更早的时候开始。相关信息和需要信息的点之间的差距完全有可能变得非常大。
不幸的是,随着这一差距的扩大,RNN变得无法学习连接信息。
在理论上,RNN绝对有能力处理这种 "长期依赖"。人类可以为它们仔细挑选参数来解决这种形式的玩具问题。可悲的是,在实践中,RNN似乎无法学习它们。Hochreiter(1991)[德语]和Bengio等人(1994)对这个问题进行了深入探讨,他们发现了一些非常基本的原因,为什么它可能很难。
值得庆幸的是,LSTM不存在这个问题!
LSTM Networks
长短时记忆网络--通常被称为 "LSTM"--是一种特殊的RNN,能够学习长期依赖关系。它们是由Hochreiter和Schmidhuber(1997)提出的,并在随后的工作中被许多人完善和推广。
LSTM被明确地设计为避免长期依赖性问题。长时间记忆信息实际上是它们的默认行为,而不是它们努力学习的东西!
所有的递归神经网络都有一个神经网络的重复模块链的形式。在标准的RNN中,这个重复模块会有一个非常简单的结构,比如一个单Tanh层。
LSTM也有这种类似链条的结构,但重复模块的结构不同。不是只有一个神经网络层,而是有四个,以一种非常特殊的方式进行互动。
不要担心细节问题。我们之后会一步一步地看完LSTM图。现在,让我们试着熟悉一下我们将要使用的符号。
在上图中,每条线都承载着整个向量,从一个节点的输出到其他节点的输入。粉红色的圆圈代表点状操作,如向量加法,而黄色的盒子是学习的神经网络层。合并的线表示串联,而分叉的线表示其内容被复制,副本到不同位置。
The Core Idea Behind LSTMs (LSTM背后的核心理念)
LSTM的关键是单元状态,即贯穿图表顶部的那条水平线。
单元状态有点像一个传送带。它在整个链条上直行,只有一些小的线性互动。信息很容易沿着它不变地流动。
LSTM确实有能力删除或增加单元状态的信息,由称为门的结构来进行控制。
门是一种可以选择让信息通过的方式。它们是由一个sigmoid神经网层和一个点式乘法运算组成的。
sigmoid层输出的数字介于0和1之间,描述了每种成分应该被允许通过的程度。0的值意味着 "什么都不放",而1的值意味着 "什么都放!"
一个LSTM有三个这样的门,以保护和控制单元的状态。(有一个输入门,一个遗忘门,一个输出门)
Step-by-Step LSTM Walk Through(逐步分析LSTM)
我们的LSTM的第一步是决定我们要从细胞状态中丢弃什么信息。这个决定是由一个叫做 "遗忘门层 "的sigmoid层做出的。它查看ht-1和xt,并为细胞状态Ct-1中的每个数字输出一个0到1的数字。1代表 "完全保留这个",而0代表 "完全摆脱这个"。
让我们回到我们的例子,一个语言模型试图根据之前所有的词来预测下一个词。在这样的问题中,单元格的状态可能包括当前主语的性别,这样就可以使用正确的代词。当我们看到一个新的主语时,我们希望忘记旧主语的性别。
下一步是决定我们要在细胞状态中储存什么新信息。这有两个部分。首先,一个被称为 "输入门层 "的sigmoid层决定我们要更新哪些值。接下来,一个tanh层创建了一个新的候选值的向量,可以被添加到状态中。在下一步中,我们将把这两者结合起来,创建一个状态的更新。
在我们的语言模型的例子中,我们想把新主体的性别添加到单元格状态中,以取代我们正在遗忘的旧主体。
现在是时候将旧的细胞状态Ct-1更新为新的细胞状态Ct。前面的步骤已经决定了要做什么,我们只需要真正去做。
我们用旧状态乘以ft,忘记我们之前决定忘记的事情。然后我们把它加上∗。这就是新的候选值,以我们决定更新每个状态值的程度为尺度。
在语言模型的情况下,这就是我们实际上放弃了关于旧主体的性别的信息,而加入了新的信息,正如我们在前面的步骤中所决定的那样。
最后,我们需要决定我们要输出什么。这个输出将基于我们的细胞状态,但将是一个过滤的版本。首先,我们运行一个sigmoid层,决定我们要输出的细胞状态的哪些部分。然后,我们将细胞状态通过tanh(将数值推至-1和1之间),并乘以sigmoid门的输出,这样我们就只输出我们决定的部分。
对于语言模型的例子,由于它刚刚看到了一个主语,它可能想输出与动词相关的信息,以备接下来的事情发生。例如,它可能会输出主语是单数还是复数,这样我们就知道如果接下来是动词的话,应该用什么形式来连接。
Variants on Long Short Term Memory(长短时记忆的变体)
到目前为止,我所描述的是一个很正常的LSTM。但并不是所有的LSTM都和上面的一样。事实上,似乎几乎每篇涉及LSTM的论文都使用了一个略有不同的版本。这些差异很小,但值得一提的是其中一些。
由Gers & Schmidhuber (2000)介绍的一个流行的LSTM变体是增加 "窥视孔连接"。这意味着我们让门层看一下单元格的状态。
上图在所有门上都增加了窥视孔,但许多论文会给出一些窥视孔,而不是其他。
另一种变化是使用耦合的遗忘门和输入门。我们不是单独决定什么要忘记,什么要添加新的信息,而是一起做这些决定。只有当我们要输入一些东西来代替它时,我们才会忘记。我们只有在忘记旧的东西时才向状态输入新的值。
Cho等人(2014年)介绍的LSTM的一个略微夸张的变化是门控循环单元,或称GRU。它将遗忘门和输入门合并为一个单一的 "更新门"。它还合并了细胞状态和隐藏状态,并做了一些其他的改变。由此产生的模型比标准的LSTM模型更简单,并且已经越来越受欢迎。
这些只是最引人注目的LSTM变种中的几个。还有很多其他的,比如Yao, et al.(2015)的Depth Gated RNNs。还有一些完全不同的方法来处理长期依赖关系,如Koutnik等人(2014)的Clockwork RNNs。
这些变体中哪个是最好的?这些差异重要吗?Greff, et al. (2015)对流行的变体做了一个很好的比较,发现它们都是差不多的。Jozefowicz等人(2015)测试了超过一万个RNN架构,发现一些在某些任务上比LSTMs效果更好。
Conclusion
早些时候,我提到了人们用RNNs取得的显著成果。基本上所有这些都是用LSTMs实现的。对于大多数任务来说,它们的效果确实要好得多!
作为一组方程式,LSTM看起来很吓人。希望在这篇文章中一步步走过它们,能让它们变得更容易接近。
LSTM是我们能用RNN完成的一个重要步骤。我们很自然地想知道:是否还有另一个大步骤?研究人员中的一个共同观点是。"是的!有一个下一步,而且是注意!" 这个想法是让RNN的每一步都从一些更大的信息集合中挑选信息进行观察。例如,如果你使用一个RNN来创建一个描述图像的标题,它可能会为它输出的每一个词挑选图像的一部分来查看。事实上,Xu等人(2015)正是这样做的--如果你想探索注意力,这可能是一个有趣的起点 已经有许多使用注意力的真正令人兴奋的结果,而且似乎更多的结果就在眼前......
注意力并不是RNN研究中唯一令人兴奋的线索。例如,Kalchbrenner等人(2015)的Grid LSTMs似乎非常有前途。在生成模型中使用RNN的工作--如Gregor, et al.(2015)、Chung, et al.(2015)或Bayer & Osendorfer(2015)--也显得非常有趣。过去的几年是递归神经网络的一个激动人心的时刻,而未来的几年将更加激动人心
参考资料:翻译来自于这篇文章
https://colah.github.io/posts/2015-08-Understanding-LSTMs/
信息来源于网络,侵删。