理解LSTM网络

Recurrent Neural Networks(RNN)

人类是依靠自己过往的经验来学习,如同我们在读文章时,每一时刻,我们对于当前的概念的理解总要添加上对于之前获取的知识经验,总之,我们的思维是有持续性的。

传统的神经网络模型无法做到这一点,而这也是它的主要缺陷之一。

循环神经网络解决了这个难题,所谓循环,简单来说其结构允许信息在网络内留存,也即是,网络是有记忆的。

上图中,表示A表示神经网络的一块,在$$t$$时刻有输入$$X_t$$和输出$$h_t$$,这结构很简单,特别的是中间那一环,表示信息可以在网络内保存和传递。

以上的循环结构也可以拆解为下面的串列结构来理解:

我们可以把一个网络块的循环看成是多个相同的网络之间信息的传递,而这样的结构也就意味着,RNN天生就适合处理与序列相关的数据,如时间序列、NLP中的语言模型、音乐等。

近年来RNN的成功应用是与LSTM划不开联系的。接下来就给大家介绍LSTM网络。

##长期依赖问题

RNN能够利用之前的信息来帮助当前的处理,这是我们对于RNN的期待。但是RNN能够做到这一点是有条件的:需要解决长期依赖问题

举个例子,例如我们需要预测如下句子中的最后一个单词:“the clouds are in the sky”,因为有关的信息与其被需要的位置的距离不远,所以RNN可以轻易解决这个问题。

但是当预测需要更早的信息的时候呢?例如“I grew up in France… I speak fluent French.” 这时候有关的信息与其被需要的位置的距离可能很远。而此时,RNN变得很难处理这个问题。

理论上,RNN应该可以解决这类“长期依赖问题”,但是实际上却无法做到。
幸运的是,LSTM可以解决这个问题!

LSTM 网络

Long Short Term Memory networks,简称为LSTM,是一种可以学习长期依赖的RNN。那么,LSTM为何具有这种能力呢?

我们先来看看标准的RNN形式:

形式很简单,tanh层接受当前时刻的输入$$X_t$$以及上一时刻传来的记忆信息,输出$$h_t$$及记忆信息。

而LSTM在标准的RNN形式下,网络增加到了四层。

此图中,黄色的框格代表神经网络层,粉红色的圆圈代表逐点运算,例如向量相加或者相乘,单条黑色的线代表向量的传输,合并的黑色的线代表向量的连接,分叉的黑色线代表向量的复制(同一向量传送到不同的方向)。

##LSTM网络核心理念

LSTM的核心就是网络内上面的那条水平线,称为cell state $$C_t$$,类似于传送带的功能,它在整个网络内直线传送,只做一些线性的变动,它代表着的是RNN中不变的信息。

LSTM具有对cell state进行增减信息的功能,是靠如下的部件–gate完成的。

gate由一个sigmoid层和逐点乘操作构成,我们都知道sigmoid函数输出的是一个介于0和1之间的数,那么gate的作用就显而易见了:通过sigmoid层的输入决定gate的输入有多少能被输入。而LSTM具有三个gate,都是为了保持和控制cell state。

分步理解LSTM

LSTM结构的第一步是决定我们应该把多少信息从cell state里面丢弃。这是有一个叫做“forget gate”的部分完成的。其接收$$h_{t-1}$$和$$x_t$$,输出一个0和1之间的数,再与上一时刻的cell state$$C_{t-1}$$做逐点乘。

下一步则是决定把多少的新信息存储在cell state里面。首先,一个称为“input gate layer”的sigmoid层决定要更新的信息的多少,接下来一个tanh层产生一个称为$$\tilde{C}_t$$的向量,它代表了新的状态值,最后我们整合以上两者,添加到cell state里面去。

决定了要忘记多少信息并添加多少新信息之后,我们就实际来执行这一步:

最后,我们还需要决定输出的内容。输出主要来自于cell state,但是还是要通过一个tanh层并由sigmoid层决定输出多少。