LSTM网络理解
循环神经网络
人不会在每一秒都是从头开始思考,就像是在读这篇文章时,你会根据从前对几个字的理解来理解每一个字。你不会扔掉之前的一切,开始从头思考,人的思想是持续思考的。
传统的神经网络并不能做到这一点,这似乎是一个重大的缺点。例如,假设您要对影片中每个点发生的事件进行分类。传统的神经网络就无法利用电影中先前的事件来进行推理,从而对后面的事件进行分类。
然而循环神经网络可以解决此类问题,它包含循环的网络,可以使信息持久化。

在上图中,神经网络块 A,不断地接收Xt输入,并输出值ht。循环使得将信息从网络的一个步骤传递到下一个步骤。
这样讲可能还是有点晕,更好的理解方式,也是很多文章的做法,将RNNs的自循环结构展开,像是将同一个网络复制并连成一条线的结构,将自身提取的信息传递给下一个继承者,如下图所示。

这种链式的结构揭示了RNN与序列和列表类型的数据密切相关。好像他们生来就是为了处理序列类型数据的。
在过去的几年里,RNNs在语音识别、文字建模、翻译、字幕等领域有很成功的应用。这些应用都有一个共性就是使用了一种叫LSTM的特殊的RNN网络结构,接下来我们来看看什么是LSTM。
长依赖问题
RNN最有吸引力的一点是它可以将从前的信息与当前任务进行连接,例如使用以前的视频帧来帮助网络理解当前帧。如果RNNs能做到这一点,那将会是非常的有用。但是他们能做到这点吗?答案是不一定。

理论上RNNs是能够处理这种“长依赖”问题的。通过调参来解决这种问题。但是在实践过程中RNNs无法学习到这种特征。Hochreiter (1991) [German] 和Bengio, et al. (1994)深入研究过为什么RNNs没法学习到这种特征。
幸好LSTM这种特殊的RNN是没有这个问题的。
LSTM网络
LSTMs也具有这种链式结构,但是它的重复单元不同于标准RNN网络里的单元只有一个网络层,它的内部有四个网络层。LSTMs的结构如下图所示。

让我们来一步一步的了解LSTMs,在解释LSTMs的详细结构时先定义一下图中各个符号的含义,符号包括下面几种:

图中黄色方块是学习的神经网络层,似于CNN里的激活函数操作,粉色圆圈表示点乘操作,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作。
LSTMs的核心思想
LSTMs的核心是cell状态,用贯穿cell的水平线表示。
cell状态像一个传送带,它在整个链条中一直沿直线运行,只有一些较小的线性相互作用。信息不加改变地流动非常容易。

LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。
门能够有选择性的决定让哪些信息通过。其实门的结构很简单,就是一个sigmoid层和一个点乘操作的组合。如下图所示:

sigmoid函数输出的是介于0到1之间的值,这代表有多少信息能够流过sigmoid层。0表示都不能通过,1表示都能通过。
一个LSTM里面包含三个门来控制cell状态。
一步一步理解LSTM
前面提到LSTM由三个门来控制细胞状态,这三个门分别称为遗忘门、输入门和输出门。下面一个一个的来讲述。
下面将更新旧的细胞信息,变为新的细胞信息
。更新的规则就是通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息
的一部分得到新的细胞信息
。更新操作如下图所示
更新完细胞状态后需要根据输入的和
来判断输出细胞的哪些状态特征,这里需要将输入经过一个称为输出门的sigmoid层得到判断条件,然后将细胞状态经过tanh层得到一个-1~1之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该RNN单元的输出。该步骤如下图所示
还是拿语言模型来举例说明,在预测动词形式的时候,我们需要通过输入的主语是单数还是复数来推断输出门输出的预测动词是单数形式还是复数形式。
LSTM的变种
其中一个很受欢迎的变式由Gers & Schmidhuber (2000)提出,它在LSTM的结构中加入了“peephole connections.”结构,peephole connections结构的作用是允许各个门结构能够看到细胞信息,具体如下图所示。
上图为所有门都添加了peephole,但是许多论文都会提供一些窥孔,而没有其他。
另一个变化是使用耦合的忘记门和输入门。不同于之前的LSTM结构,我们利用所有信息来做决定,而不是分别决定要忘记什么以及应该向其中添加新信息。 我们只会在要输入某些内容时才忘记它。 我们只会在忘记较旧的内容时才向状态输入新值。

其中重置门为上图中前面那个门,决定了如何将新的输入信息与前面的记忆相结合。更新门为上图中后面那个门,定义了前面记忆保存到当前时间步的量。由于该变式的简单有效,后来被广泛应用。
这里介绍的只是一些较为有名的LSTM变式,关于LSTM的变式其实还有很多种,像 Yao, et al. (2015)提出的Depth Gated RNNs。还有其他用于解决长依赖问题的方法,如由 Koutnik, et al. (2014)提出的 Clockwork RNNs。
至于哪种变式效果最好?各种差异对LSTM的影响有多少?这些问题 Greff, et al. (2015)做了一些对比,结论是他们基本是一样的
总结
之前也提到过RNNs取得了不错的成绩,这些成绩很多是基于LSTMs来做的,说明LSTMs适用于大部分的序列场景应用。
一般文章写法会堆一堆公式吓唬人,希望本文一步一步的拆分能有助于大家的理解。
LSTMs对于RNNs的使用是一大进步。那么现在还有个问题,是否还有更大的进步?对于很多研究者来说,但是是肯定的,那就是attention的问世。attention的思想是让RNN在每一步挑选信息的时候都能从更大的信息集里面挑选出有用信息。例如,利用RNN模型为一帧图片生成字母,它将会选择图片有用的部分来得到有用的输入,从而生成有效的输出。事实上, Xu, et al.(2015) 已经这么做了,如果你想更深入的了解attention,这会是一个不错的开始。attention方向还有一些振奋人心的研究,但还有很多东西等待探索......
在RNN领域attention并不是唯一一个可以研究的点。比如Kalchbrenner, et al. (2015)提出的Grid LSTMs,Gregor, et al. (2015), Chung, et al. (2015), 和 Bayer & Osendorfer (2015)将RNNs用于生成模型的研究都非常有意思。
在过去几年RNNs方面的研究非常的多,相信以后的研究成果也会更为丰富。

浙公网安备 33010602011771号