在上篇文章一文看尽RNN(循环神经网络)中,我们对RNN模型做了总结。由于RNN也有梯度消失的问题,因此很难处理长序列的数据,大牛们对RNN做了改进,得到了RNN的特例LSTM(Long Short-Term Memory),它可以避免常规RNN的梯度消失,因此在工业界得到了广泛的应用。下面我们就对LSTM模型做一个总结。

Long Short Term Memory networks(以下简称LSTMs),一种特殊的RNN网络,该网络设计出来是为了解决长依赖问题。该网络由 Hochreiter & Schmidhuber (1997)引入,并有许多人对其进行了改进和普及。他们的工作被用来解决了各种各样的问题,直到目前还被广泛应用。

1、从RNN到LSTM

在 RNN 模型里,我们讲到了 RNN 具有如下的结构,每个序列索引位置 长短期记忆网络参数 长短期记忆网络的应用_Memory 都有一个隐藏状态 长短期记忆网络参数 长短期记忆网络的应用_Memory_02

长短期记忆网络参数 长短期记忆网络的应用_网络层_03

如果我们略去每层都有 长短期记忆网络参数 长短期记忆网络的应用_Memory_04

所有循环神经网络都具有神经网络的重复模块链的形式。 在标准的RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。

长短期记忆网络参数 长短期记忆网络的应用_长短期记忆网络参数_05

图中可以很清晰看出在隐藏状态长短期记忆网络参数 长短期记忆网络的应用_Memory_02长短期记忆网络参数 长短期记忆网络的应用_循环神经网络_07长短期记忆网络参数 长短期记忆网络的应用_Memory_08 得到。由于 RNN 梯度消失的问题,大牛们对于序列索引位置 长短期记忆网络参数 长短期记忆网络的应用_Memory

LSTMs也具有这种链式结构,但是它的重复单元不同于标准RNN网络里的单元只有一个网络层,它的内部有四个网络层。由于 LSTM 有很多的变种,这里我们以最常见的 LSTM 为例讲述。LSTMs的结构如下图所示。

长短期记忆网络参数 长短期记忆网络的应用_Memory_10

可以看到 LSTM 的结构要比 RNN 的复杂的多,真佩服牛人们怎么想出来这样的结构,然后这样居然就可以解决 RNN 梯度消失的问题。

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

长短期记忆网络参数 长短期记忆网络的应用_网络层_11

在上图中,黄色的盒子是神经网络层,粉红色的圆圈表示点操作,如向量加法乘法,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作。

2、LSTM核心思想

LSTMs的核心是单元状态(Cell State),用贯穿单元的水平线表示。

单元状态有点像传送带。它沿着整个链一直走,只有一些微小的线性相互作用。信息很容易在不改变的情况下流动。单元状态如下图所示。

长短期记忆网络参数 长短期记忆网络的应用_Memory_12

LSTM确实有能力将信息移除或添加到单元状态,并由称为gates的结构小心地进行调节。

门是一种选择性地让信息通过的方式。它们由一个Sigmod网络层和一个点乘运算组成。

长短期记忆网络参数 长短期记忆网络的应用_循环神经网络_13

因为sigmoid层的输出是0-1的值,这代表有多少信息能够流过sigmoid层。0表示都不能通过,1表示都能通过。

一个LSTM里面包含三个门来控制单元状态。

3、一步一步理解LSTM

前面提到LSTM由三个门来控制细胞状态,这三个门分别称为忘记门、输入门和输出门。下面一个一个的来讲述。

3.1 遗忘门(forget gate)

LSTM 的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为遗忘门的 sigmoid 单元来处理的。它通过 长短期记忆网络参数 长短期记忆网络的应用_Memory_14长短期记忆网络参数 长短期记忆网络的应用_网络层_15 信息来输出一个 0-1 之间的向量,该向量里面的 0-1 值表示单元状态 长短期记忆网络参数 长短期记忆网络的应用_网络层_16中的哪些信息保留或丢弃多少。0表示不保留,1表示都保留。遗忘门如下图所示。

长短期记忆网络参数 长短期记忆网络的应用_网络层_17

3.2 输入门(input gate)

要更新单元状态,我们需要输入门。首先,我们将先前的隐藏状态和当前输入传递给 长短期记忆网络参数 长短期记忆网络的应用_网络层_18 函数。这决定了通过将值转换为0到1来更新哪些值。0表示不重要,1表示重要。你还将隐藏状态和当前输入传递给 长短期记忆网络参数 长短期记忆网络的应用_循环神经网络_19 函数,将它们压缩到-1和1之间以帮助调节网络。然后将 长短期记忆网络参数 长短期记忆网络的应用_循环神经网络_19 输出与 长短期记忆网络参数 长短期记忆网络的应用_网络层_18

长短期记忆网络参数 长短期记忆网络的应用_长短期记忆网络参数_22

3.3 单元状态(cell state)

现在我们有足够的信息来计算单元状态。首先,单元状态逐点乘以遗忘向量。如果它乘以接近0的值,则有可能在单元状态中丢弃值。然后我们从输入门获取输出并进行逐点加法,将单元状态更新为神经网络发现相关的新值。这就得到了新的单元状态。

长短期记忆网络参数 长短期记忆网络的应用_Memory_23

3.4 输出门(output gate)

最后我们有输出门。输出门决定下一个隐藏状态是什么。请记住,隐藏状态包含有关先前输入的信息。隐藏状态也用于预测。首先,我们将先前的隐藏状态和当前输入传递给 长短期记忆网络参数 长短期记忆网络的应用_网络层_18 函数。然后我们将新的单元状态传递给 长短期记忆网络参数 长短期记忆网络的应用_循环神经网络_19 函数。将 长短期记忆网络参数 长短期记忆网络的应用_循环神经网络_19 输出与 长短期记忆网络参数 长短期记忆网络的应用_网络层_18

长短期记忆网络参数 长短期记忆网络的应用_长短期记忆网络参数_28

遗忘门决定了哪些内容与前面的时间步相关。

输入门决定了从当前时间步添加哪些信息。

输出门决定下一个隐藏状态应该是什么。

4、LSTM变种

之前描述的LSTM结构是最为普通的。在实际的文章中LSTM的结构存在各种变式,虽然变化都不会太大,但是也值得一提。

其中一个很受欢迎的变式由Gers & Schmidhuber (2000)提出,它在LSTM的结构中加入了“peephole connections.”结构,peephole connections结构的作用是允许各个门结构能够看到细胞信息,具体如下图所示。

长短期记忆网络参数 长短期记忆网络的应用_长短期记忆网络参数_29

上图在所有的门上都增加了“peephole connections.”,但是但许多论文只为部分门添加。

还有一种变式是在忘记门与输入门之间引入一个耦合。不同于之前的LSTM结构,忘记门和输入门是独立的,这个变式是在忘记门删除历史信息的位置加入新的信息,在加入新信息的位置删除旧信息。该结构如下图所示。

长短期记忆网络参数 长短期记忆网络的应用_长短期记忆网络参数_30

一种比其他形式变化更为显著的LSTM变式是由 Cho, et al. (2014)提出的门循环单元(GRU)。它将忘记门和输入门合并成一个新的门,称为更新门。GRU还有一个门称为重置门。如下图所示

长短期记忆网络参数 长短期记忆网络的应用_Memory_31

5、总结

之前也提到过RNNs取得了不错的成绩,这些成绩很多是基于LSTMs来做的,说明LSTMs适用于大部分的序列场景应用。
一般文章写法会堆一堆公式吓唬人,希望本文一步一步的拆分能有助于大家的理解。
LSTMs对于RNNs的使用是一大进步。那么现在还有个问题,是否还有更大的进步?对于很多研究者来说,但是是肯定的,那就是attention的问世。attention的思想是让RNN在每一步挑选信息的时候都能从更大的信息集里面挑选出有用信息。例如,利用RNN模型为一帧图片生成字母,它将会选择图片有用的部分来得到有用的输入,从而生成有效的输出。