理解LSTM网络—翻译Understanding LSTM Networks

来源:互联网 发布:eve捏人美女数据 编辑:程序博客网 时间:2024/06/15 00:00

写在前面

对colah的博客Understanding LSTM Networks进行了翻译,觉得这篇博客写得特别好,深入浅出,有些地方翻译不到位,希望大家谅解。


循环神经网络—Recurrent Neural networks

时时刻刻人类的思考都不会从头开始。当你读这篇文章的时候,你根据你之前对于单词的理解理解每个单词。你不是扔掉所有而每次都从头开始思考。你的思考具有持久性。[这段话的核心就是时间的延续性]
传统的神经网络并没有做到(持久性),这似乎是一个主要缺陷。例如,假想你想对电影中的每一个时间点发生的事进行分类。对于传统神经网络不确定的是如何利用电影中先前时间的推理来告知后续的时间。[传统神经网络处理时间序列的问题没有优势]
循环神经网络(RNN)解决了这个问题。它们的网络结构中自带循环,使得信息持久化。
带有循环的循环神经网络
在上述图中,A是相当数量的神经网络(一堆神经网络),审查一些输入xt并且产生输出htA的循环使得信息可以从某一步中被传递到接下去的网络中。
这些循环使得RNNs似乎有点神秘。然而,当你思考深入时,结果是这些循环结构相比一般的神经网络并不是完全不同。一个循环神经网络可以被认为是一个网络的多份拷贝,每一个神经网络传递信息给后继。考虑一下我们展开循环会发生什么:
这里写图片描述
链式的特质表明RNNs与序列和列表密切相关。似乎正是RNN的这种天然的结构可以被用来处理这写序列化的数据。
并且他们确实有用!在过去的几年中,应用RNNs来在处理诸如语音识别、语言模型、机器翻译、图像描述等这些问题中取得了不可思议的成功。我把关于一个人使用RNNs可以取得如何令人惊讶的成就的讨论留给Andrej Karpathy的优秀博文,The Unreasonable Effectiveness of Recurrent Neural Networks。但是毫无疑问的是这些成就确实十分令人叹服。
对于这些成就不可或缺的就是LSTM的使用,一种比标准版本在许多任务上都表现的更优异的特殊的RNN。几乎所有基于RNN令人兴奋的成果都是取决于LSTM的使用。这就是这篇文章要探讨的LSTM。


长期依赖的问题

有些关于RNNs的宣称是这些网络能够将先验信息传递给当前任务,例如应用视频之前的帧或许可以加强当前帧的理解。如果RNNs真的可以做到这样,它们将十分有用。但这取决于实际情况。
有时,我们只需查看最近的信息来完成当前任务。比如,一个根据先前单词来预测后续单词的语言模型。如果我们预测 “the clouds are in the sky,” 的最后一个单词,我们不需要很多的上下文信息—很明显下一个单词就是sky。在诸如此类的例子中,先前信息和当前任务的位置差别很小,RNNs可以学习使用之前的信息。
这里写图片描述
但是有些情况下我们需要更多的上下文。考虑这个预测最后一个单词的问题 “I grew up in France… I speak fluent French.”最近的信息(speak fluent)表明下一个单词可能是一种语言的名字,但是当我们想限定这一语种时,我们需要回滚到很久之前的上下文。很可能对于某个点需要的先验信息离它很远。
不幸的是,随着距离的增长,RNNs并不能学会如何连接信息了。
这里写图片描述
理论上,RNNs是绝对能解决这种长期依赖的。人类可以精心挑选参数来解决这种形式的问题。悲伤的是,实际上RNNs并没有学会这种能力。这个问题被Hochreiter (1991) [German] and Bengio, et al. (1994),深入探讨,他们发现了一些长期依赖的的基本原因。
令人欣慰,LSTMs并没有这种问题。


LSTM网络

长短期记忆网络通常被称作LSTM,是一种能够解决长期依赖的特殊的循环神经网络。这由Hochreiter & Schmidhuber (1997)提出,并在后续的研究中被许多人重新定义和推广。LSTMs在很多问题上都取得了巨大成功,现在被广泛应用。
LSTMs显然就是专门设计来避免长期依赖问题的。记忆很长时间间隔的信息是它们默认的行为,而不是努力学习到的能力。
所有的RNNs都有这样的形式:神经网络单元的链式重复。在标准的RNNs中,这些重复的单元将会有一个特别简单的结构,比如一个单一的tanh层。
这里写图片描述
LSTMs也有这样的链式结构,但是这些重复的单元结构不同于标准的RNNs。不同于一个单一的网络层,LSTMs有四个以特殊方式交互的网络层。
这里写图片描述
不要担心接下来讲述的细节。我们将逐步深入LSTM的结构。现在,先试着熟悉即将使用的一些记号。
这里写图片描述
在上述的图中,每条线带有一个完整的向量,从一个节点的输出到另一个节点的输入。紫色圆圈代表逐元素的操作,像向量加法。而黄色方框是神经网络层。合并线代表联结,而分散线标记它的内容(向量等)被拷贝到不同的位置。

LSTMs背后的核心思想

LSTMs的关键是记忆状态单元,就是贯穿图上部的的水平线。状态单元就像一种传送带,它贯穿这个网络链,只有一些小的线性的交互。这使得信息很容易保持不变的流动。
这里写图片描述
LSTM通过门结构的管控具有了增加或删除状态单元的信息的能力。
这些门结构是一种选择信息通过的方式。它们由一个sigmoid网络层和一个逐元素乘法的操作组成。
这里写图片描述
sigmoid层的输出介于0到1,描述的是每一个组件有多少内容可以被通过。0意味着不允许通过,而1意味着全部通过。

逐步理解LSTM的流动

LSTM第一步决定从状态单元丢弃什么信息。这个决定由叫做‘遗忘门’的sigmoid层决定。它审查ht1(上一时刻隐藏单元的输出)和xt(当前时刻的输入),对于状态单元的每一个数字都输出一个对应的介于0和1之间的数值。‘1’代表完全保留而‘0’表示完全丢弃。
让我们回到根据上文单词预测下一个单词的语言模型的例子。在这样的问题中,状态单元可能包括当前对象的性别,以致于正确的代词可以被使用(他or她…)。当我们看到一个新的对象时,我们想忘记旧状态的性别。
简单来说,遗忘门就是决定记忆状态单元的丢弃,让它‘遗忘’一些东西。
这里写图片描述
第二步决定在状态单元中存储哪些新信息。这包括两部分。首先,一个叫做‘输入门’的sigmoid层决定哪些值的更新(与遗忘门类似,前者是哪些值被丢弃)。其次,一个tanh层产生一个候选值向量Ct~用来被更新加到状态单元中。
在我们语言模型的例子中,我们想把新对象的性别加到状态单元中,来代替我们要遗忘的旧对象的性别(先遗忘再更新)。
简单来说,输入门决定状态单元的更新,sigmoid层类似于挑选器而tanh层产生待挑选的候选向量。
这里写图片描述
现在是时候决定状态单元的更新,从Ct1Ct。上述的两步已经决定了如何做,现在我们需要真正实现一下。
我们对旧的状态Ct1乘以ft,遗忘我们决定忘记的早期的内容。然后增加新的内容itC̃ t。这些新的候选向量最终由我们决定每一个状态值更新多少。
在语言模型的例子中,更新的实现是通过遗忘旧对象的性别和增加我们决定的新信息。
总结一下,遗忘门和输入门及候选向量一起决定了状态单元的更新,遗忘旧的内容和增加新的内容。
这里写图片描述
最后,我们需要决定输出的内容,这取决于我们的记忆状态单元,但是是一个过滤后的版本。首先,我们执行一个sigmoid层决定状态单元的哪些部分被输出。然后让状态单元通过一个tanh层(将输入映射到-1到1)产生的输出乘以sigmoid层的输出,这样我们只输出了我们决定输出的部分。
对于语言模型的例子,因为它只看到了一个对象,它或许想输出相关动词的信息,如果这个动词是接下来的单词。例如,它可能想输出这个对象是单数还是复数,这样就决定了如果下一个单词是动词的情况下这个动词的时态。
总结,三个门其实形式相似,都是决定信息的去留,输出门作用于输出的候选向量,而这个候选向量是状态单元经过tanh的非线性转化产生。
这里写图片描述


LSTM的变种

目前为止我描述的是一个十分标准的LSTM。但是并不是所有的LSTMs都和上述的一样。事实上,似乎每一篇涉及LSTM的论文都是有一点不同的版本。这些差异很小,但是有些变化值得一提。
一个流行的由Gers & Schmidhuber (2000)提出的LSTM变种增加了‘窥视连接’。这意味着我们让门结构审查状态单元(状态单元也作为门结构的输入)。
这里写图片描述
上图中给所有的门结构都增加了窥视孔,但是一些论文中只给一些门增加而有的什么也不加。
另一个变种是使用了遗忘输入门。不同于之前将遗忘和增加新信息独立开来,遗忘输入门一起完成这个更新。我们只需要遗忘我们增加新信息的位置。我们只增加我们遗忘了的旧状态的信息。
这里写图片描述
一个更灵活的LSTM变种是GRU,门控循环单元,由Cho, et al. (2014)提出。它把遗忘门和输入门合并成了一个单一的‘更新门’。它也合并了状态单元和隐藏状态(没有输出门,输出和状态单元一样),并作出了一些别的改变。这个模型比标准的LSTM更简单,并且变得越来越流行。
这里写图片描述
这些只是一些典型的LSTM变种。还有许多别的变种,像Yao, et al. (2015)提出的Depth Gated RNNs。也有一些完全不同的解决长期依赖问题的方法,像Koutnik, et al. (2014)提出的Clockwork RNNs 。
哪一个变种是最好的?这些变化重要么?Greff, et al. (2015)做了一个关于流行变种的比较发现几乎他们的效果都一样。Jozefowicz, et al. (2015)测试了超过10000多种的RNN结构,发现在特定的任务中有些比LSTMs效果更好。


结论

开始,我提到了人们用RNNs取得了显著的成果。并且必要的是他们都使用了LSTMs。LSTMs对于大多数任务确实表现的更好!
写下一系列的公式,LSTMs可能会让人望而却步。可以肯定的是,在这篇文章中按部就班深入LSTMs可以更容易理解它。
LSTMs是我们使用RNNs取得成功的重要的一步。呼之欲出的是:有没有更大的一步?学者们有一个共识:是的!这一步就是attention!这个想法是每一步都让RNN从一些很大的信息集合中挑选信息。例如,如果你使用RNN来生成一个图片的描述,它或许只选取图片的一部分产生每一个输出的文字。事实上,Xu, et al. (2015)确实取得了成果—它或许是你想研究attention机制一个好的开端。有很多使用attention机制取得令人激动的成果,似乎这种趋势正在蔓延到每一个角落…
Attention机制不是RNN研究唯一的令人满意的成果。例如,Kalchbrenner, et al. (2015)提出的Grid LSTMs也意义重大。在生成模型中使用RNNs的成果也十分有趣(例如Gregor, et al. (2015), Chung, et al. (2015), or Bayer & Osendorfer (2015))。过去的几年中对于RNNs是一段重要的时光,而接下来的时光只好不差。


感谢

colah提出了很多感谢(这里就就不一一翻译了),但是仍要对colah以及这些先驱者心怀感激!


原创粉丝点击