理解与入门LSTM网络模型

最近在实验室搞论文,研究的方向是时间序列的预测,接触到了LSTM模型,特地在此记录一下。
下面我翻译了colah大神的 Understanding LSTM Networks 博文,帮助自己理解。可以说看这篇文章就能对lstm模型有了一个大概的了解(渣英语):

Recurrent Neural Networks
人们不会每次都从头开始思考问题。就像当你在阅读这篇文章时,你会根据以前对文字的理解去理解文章中的每个字。你不会忘记掉所有知识,然后再次从头开始思考。可以说,你思考问题是持久性的。
传统的神经网络无法做到这一点,这似乎是它们最主要的一个缺点。 例如,假设您想对电影中每个时间点发生的事件类型进行分类。传统的神经网络目前还无法完全利用之前事件类型的预测结果,来帮助之后的类型预测。
递归神经网络解决了这个问题。 他们是循环的网络,目的是让信息持久化。

这里写图片描述
在上图中,神经网络块A得到了一些输入xt并输出一个值ht。循环网络允许信息从网络的一个神经元传递到下一个神经元。
这些循环使循环神经网络看起来有点神秘。但是,如果你仔细想想,它们与普通的神经网络并没有很大区别。循环神经网络可以被认为是同一网络的多个副本,每个副本都将消息传递给后继者。考虑如果我们展开循环会发生什么:
这里写图片描述
这种链式性质揭示了递归神经网络和序列(与列表)的密切关系。它们天生就是处理这种数据的神经网络。
而且他们真的有用!在过去的几年中,RNN应用于各种问题并取得了令人难以置信的成功:语音识别,语言建模,翻译,图像字幕……这个名单还在增加。
这些成功的关键是使用了“LSTM”,这是一种非常特殊的递归神经网络,对于许多任务来说,它比标准版本要好得多。 几乎所有基于循环神经网络的令人兴奋的结果都是通过它们实现的。 这篇文章将探讨这些LSTMs。

The Problem of Long-Term Dependencies
RNN的吸引力之一是他们可能能够将先前任务的信息连接到当前的任务,例如使用之前视频帧可以帮助加深对当前帧的理解。 如果RNN可以做到这一点,他们会非常有用。 但他们可以吗? 这取决于。
有时,我们只需要查看最近的信息来帮助执行当前的任务。例如,考虑一个语言模型,它试图根据之前的语句来预测下一个词。如果我们试图预测“云在天空中”的最后一个词,我们不需要任何进一步的背景 - 很明显,下一个词是天空中。 在这种情况下,如果相关信息与所需要背景之间的差距很小,RNN可以学习并使用过去的信息。
这里写图片描述
但也有些情况下我们需要更多的上下文信息。 考虑尝试预测“我在法国长大……我会说流利的法语”中的最后一个词。最近的信息表明,下一个单词可能是一种语言的名称,但如果我们想要缩小到哪种语言,我们需要追溯到更远之前,确定是在法国的背景下。 所以,相关信息与背景之间的差距可能会非常大。
不幸的是,随着差距的扩大,RNN变得无法学习怎么去连接信息。
这里写图片描述
理论上,RNN绝对有能力处理这种“长期依赖性”。人类可以仔细挑选参数来解决这种形式的问题。可悲的是,在实践中,RNN似乎无法解决这些问题。 Hochreiter和Bengio等人深入探讨了这个问题,他们发现了一些其中的根本原因。
谢天谢地,LSTMs没有这个问题!

LSTM Networks
长期短期记忆网络 - 通常被称为“LSTM” - 是一种特殊的RNN,能够处理学习的长期依赖性。 它们是由Hochreiter&Schmidhuber提出的,并且在接下来的工作中被许多人提炼和推广.它们能出色的处理各种各样的问题,现在被广泛使用。
LSTM就是为了避免长期依赖性问题而设计的。长时间记住信息实际上是它们的默认行为,不需要去训练学习!
所有递归神经网络都具有链式的神经网络重复模块。 在标准的RNN中,这个重复模块具有非常简单的结构,例如单个tanh层。
这里写图片描述
LSTM也具有这种类似的链式结构,但重复模块内具有不同的结构。 它有四个单独的神经网络层,它们之间以非常特殊的方式进行交互。
这里写图片描述
不要担心其中的细节。 稍后我们将逐步解析这张图。 现在,让我们试着去熟悉我们将使用的符号。
这里写图片描述
在上面的图中,线段包含一个完整的向量,从一个节点的输出到其他节点的输入。 粉色圆圈表示点状操作,如添加向量,而黄色框表示学习神经网络层。 箭头合并表示串联,而箭头分开表示其内容正在被复制,副本将转到不同的位置。

The Core Idea Behind LSTMs
LSTMs的关键思想是cell状态,即贯穿图表顶部的水平线。
cell状态有点像传送带。它贯穿整个链条,只有一些次要的线性交互。 信息很容易以不变的方式流过。
这里写图片描述
LSTM确实有能力删除或增加cell状态的信息,它通过被称为门的结构进行细致的调控。
门是一种可以让信息通过的方式。 它们由sigmoid神经网络层和点积运算组成。

这里写图片描述
sigmoid层输出0到1之间的数字,描述每个组件应该通过多少。值为0意味着“不要让任何事情通过”,而值为1意味着“让所有事情都通过!”
LSTM有三个这些门,用于保护和控制cell状态。

Step-by-Step LSTM Walk Through
LSTM的第一步是决定将从cell状态中扔掉哪些信息。 这个决定是通过一个称为“忘记门层”的sigmoid层来完成的。它查看ht-1和xt,并为cell状态Ct-1中的每个数字输出一个介于0和1之间的数字。 1表示“完全保留这个”,而0表示“完全消除这个”。
让我们回到之前的例子,试图根据以前所有的语句来预测下一个词。在这样的问题场景中,cell状态可能包含当前主体人物的性别,因此可以使用正确的指代词。 当我们看到一个新的人物时,我们想忘记旧人物的性别。
这里写图片描述
下一步是决定我们要在cell状态中存储什么新信息。这有两个部分。首先,称为“输入层”的sigmoid层将决定我们将更新的值。 接下来,tanh层创建一个新的候选向量Ct,它也能添加到cell状态中。 在下一步中,我们将结合这两者来对cell状态进行更新。
在我们的语言模型的例子中,我们希望将新人物的性别添加到cell状态,以替换我们遗忘的旧人物。
这里写图片描述
现在是时候将旧的cell状态Ct-1更新为新的cell状态Ct。 之前的步骤已经决定要做什么,我们只需要真正去做就行。
我们将旧状态乘以ft,忘记了我们之前决定忘记的内容。然后我们添加 It Ct。 这是新的候选值,并根据我们之前决定的更新比例进行缩放。*
就语言模型而言,这是我们实际放弃旧人物性别信息并添加新信息的地方,正如我们在之前做的那样。
这里写图片描述
最后,我们需要决定我们要输出的内容。这个输出将基于我们的cell状态,并且是个过滤的版本。 首先,我们运行一个sigmoid层,它决定我们要输出cell状态的哪些部分。 然后,我们通过tanh(将值推到-1和1之间)将cell状态乘以sigmoid层的输出,以便我们只输出我们决定的部分。
以语言模型为例,由于它刚刚看到了一个人物,因此它可能需要输出与动词相关的信息,以便之后的预测。 例如,它可以输出是单数或者复数,以便我们知道后面应该跟什么形式的动词(例如look和looks)。

最后
一个最基本的LSTM模型大致如上,可以说colah已经介绍的很详细了。它的博客中还提到了一些LSTM模型的变种和相关的结论,这边就不一一翻译了,有兴趣的小伙伴可以点最后的原文链接。
此文非原创,仅为个人翻译,侵删。
附上原文链接:
http://colah.github.io/posts/2015-08-Understanding-LSTMs/

猜你喜欢

转载自blog.csdn.net/ljw761123096/article/details/80063255