Recurrent Neural Networks

人类不会每秒都从头开始思考。阅读本文时,您会根据对先前单词的理解来理解每个单词。您不会丢掉一切重新开始从头思考,并且你的一些记忆是会有一段时间的留存的。
传统的神经网络无法做到这一点,这似乎是一个重大缺陷。例如,假设您想对电影中每个点发生的事件进行分类。尚不清楚传统的神经网络如何利用其对电影中先前事件的推理来告知后期事件。
递归神经网络解决了这个问题。它们是具有循环的网络,可以使信息持久存在。
Understanding LSTM Networks
在上图中,A由大量的神经网络组成,它得到一些输入xt并输出了值ht。循环(loop)允许信息从网络的一个步骤传递到下一个步骤。
这些循环使递归神经网络显得有些神秘。但是,如果您再想一想,就会发现它们与普通的神经网络并没有什么不同。循环神经网络可以被视为同一网络的多个副本,每个副本都将消息传递给后继者。考虑一下如果展开循环会发生什么:
Understanding LSTM Networks
这种chain-like的性质表明,递归神经网络与sequences和lists密切相关。它们是“天生的”用于此类数据的神经网络架构。
而且我可以肯定它们肯定是被使用过的!在过去的几年中,将RNN应用到各种问题上已经取得了令人难以置信的成功:语音识别,语言建模,翻译,图像字幕…。我将在Andrej Karpathy的出色博客文章“The Unreasonable Effectiveness of Recurrent Neural Networks”中讨论使用RNN可以实现的惊人功能,并且他们真的很棒。
这些成功的关键是使用“ LSTM”,这是一种非常特殊的递归神经网络,对于许多任务而言,它比标准版本要好得多。几乎所有基于递归神经网络的令人兴奋的结果都可以通过它们获得。本文将探讨的就是这些LSTM。

The Problem of Long-Term Dependencies

RNN的吸引人的想法在于它们可以将先前的信息连接到当前任务,例如使用先前的视频帧可能会有助于对当前帧的理解。如果RNN可以做到这一点,它们将非常有用。但是可以吗?
有时,我们只需要查看最新信息即可执行当前任务。例如,考虑一种语言模型,该模型试图根据前一个单词预测下一个单词。如果我们试图预测“the clouds are in the sky,” 的最后一个词,则我们不需要任何进一步的上下文–,很明显,下一个词将是“sky”。在这种情况下,相关信息与所需信息之间的距离很小,RNN可以学习并使用过去的信息。
Understanding LSTM Networks
但是在某些情况下,我们需要更多的上下文。考虑尝试预测文本“我在法国长大……我会说流利的法语”中的最后一个单词。最近的信息表明,下一个单词可能是一种语言的名称,但是如果我们想缩小哪种语言的范围,我们需要“法国”这一背景,或许这个信息会来自距离更长的句子里面。
Understanding LSTM Networks
从理论上讲,RNN绝对有能力处理这种“长期依赖关系”。人类可以为他们精心选择参数,以解决这种形式的问题。可悲的是,在实际中,RNN似乎无法学习它们。 Hochreiter(1991)[German]和Bengio等人对此问题进行了深入探讨,在1994年他们发现了很难做到长短期依赖的一些根本原因。
但是,幸运的是,LSTM没有这个问题!

LSTM Networks

长短期记忆网络(通常称为“ LSTM”)是一种特殊的RNN,能够学习长期依赖关系。它们是由Hochreiter&Schmidhuber(1997)提出的,并在随后的工作中被许多人提炼和推广。它们在各种各样的问题上都表现出色,现已被广泛使用。
LSTM被明确设计为避免长期依赖问题。长时间记住信息实际上是他们的默认行为,而不是他们努力学习的东西!
所有的递归神经网络都具有神经网络的重复模块链的形式。在标准RNN中,此重复模块将具有非常简单的结构,例如单个tanh层。
Understanding LSTM Networks
LSTM也具有这种chain结构,但是重复模块具有不同的结构。而不是只有一个神经网络层,而是有四个,它们以非常特殊的方式进行交互。
Understanding LSTM Networks
先看看一下符号分别表示什么:
Understanding LSTM Networks
在上图中,每条线都承载着整个矢量,从一个节点的输出到另一个节点的输入。

The Core Idea Behind LSTMs

LSTM的关键是cell状态,水平线贯穿图的顶部。
Understanding LSTM Networks
LSTM确实具有向cell状态删除或者添加信息的能力,这些功能由门结构精心调节。
门会选择性地传输信息。它们由Sigmoid神经网络层和逐点乘法运算组成(pointwise multiplication operation)。
Understanding LSTM Networks
sigmoid层输出介于零和一之间的数字,描述应允许每个组件中的多少通过。值为零表示“不让任何内容通过”,而值为1表示“让所有内容通过!”
An LSTM has three of these gates, to protect and control the cell state.

Step-by-Step LSTM Walk Through

LSTM的第一步是决定要从cell state中丢弃哪些信息。该决定由称为“forget gate layer.”的sigmoid层决定。它根据ht-1和xt,为单元状态Ct-1中的每个数字输出介于0和1之间的数字。 1代表“完全保留此信息”,0代表“完全去除此信息”。
让我们回到语言模型的例子,该模型试图根据所有先前的单词来预测下一个单词。在这样的问题中,cell状态可能包括当前受试者的性别,从而可以使用正确的代词。当我们看到新的主题时,我们想要遗忘旧的主题的性别。
Understanding LSTM Networks
下一步是确定要在cell 状态下存储哪些新信息。这包括两个部分。首先,称为“输入门层”的sigmoid层决定了我们将更新哪些值。接下来,tanh层创建一个新候选值C̃ t的向量,该向量可以添加到状态中。在下一步中,我们将两者结合起来以创建该状态的更新。
在我们的语言模型示例中,我们希望将新主题的性别添加到单元格状态,以替换我们忘记的旧主题。
Understanding LSTM Networks
现在是时候将旧的 cell 状态Ct-1更新为新的 cell 状态Ct。前面的步骤已经确定了要做什么,我们只需要按照实际情况进行即可。
我们将旧状态(old state)乘以ft,忘记了我们早先决定遗忘的信息。然后我们加上it * C̃ t。这便是新的候选值,它根据我们的决定对每个状态值的大小进行缩放。
就语言模型而言,也就是我们实际删除旧主题的性别的信息并添加新信息的地方,正如我们在前面的步骤中所确定的那样。
Understanding LSTM Networks
最后,我们需要决定要输出什么。此输出将基于我们的cell状态,但将是过滤后的版本。首先,我们运行一个Sigmoid层,确定要输出的cell状态的哪些部分。然后,我们通过tanh放设置cell状态(将值推到-1和1之间),然后将其乘以Sigmoid的输出,以便仅输出我们预先定义的部分。
对于语言模型示例,由于它只是看到一个主语,因此可能要输出与动词相关的信息,以防万一。例如,它可能输出主语是单数还是复数。
Understanding LSTM Networks

Conclusion

Q1:为什么会有LSTM?解决了什么问题?
A:长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
Q2:LSTM由什么组成?分别作用是什么?
Understanding LSTM Networks
Understanding LSTM Networks
Q3:LSTM与RNN的差异?
它取代了普通的RNN单元,并加入了输入,忘记和输出门。以及cell state:

Understanding LSTM Networks
Understanding LSTM Networks
这些门每个都有自己的一组权重值。整个过程都是可区分的(这意味着我们可以计算梯度并使用它们来更新权重),因此我们可以通过它进行反向传播。
我们希望我们的模型能够知道该忘记什么,该记住什么。因此,当有新的输入输入时,模型首先会忘记它不再需要的任何长期信息。然后,它了解到当前新输入的哪些部分值得使用,并将其保存到长期存储中。
而且,它不会一直使用全部的长期内存,而是学习要重点关注的部分。
基本上,我们需要用于忘记,记住和关注的机制。这就是LSTM的cell为我们提供的。

相关文章: