1. LSTM网络定义
长短期记忆网络——通常被称为 LSTM,是一种特殊的 RNN,能够学习长期依赖性。由 Hochreiter 和 Schmidhuber(1997)提出的,并且在接下来的工作中被许多人改进和推广。LSTM 在各种各样的问题上表现非常出色,现在被广泛使用。
LSTM 被明确设计用来避免长期依赖性问题。长时间记住信息实际上是 LSTM 的默认行为,而不是需要努力学习的东西!
所有递归神经网络都具有神经网络的链式重复模块。在标准的 RNN 中,这个重复模块具有非常简单的结构,只有单个 tanh 层。
LSTM 也具有这种类似的链式结构,但重复模块具有不同的结构。不是一个单独的神经网络层,而是四个,并且以非常特殊的方式进行交互。
2. LSTM的核心思想
LSTM 的关键是细胞状态(cell state),即图中上方的水平线。它贯穿整个链条,只有一些次要的线性交互作用。信息很容易以不变的方式流过。LSTM可以通过“门”结构实现向细胞状态添加或移除信息的操作。
“门”结构通过一个 sigmoid 的神经层和一个逐点相乘的操作来实现信息选择通过。LSTM通过三个这样的门结构来实现信息的保护和控制。这三个门分别输入门(input gate)、遗忘门(forget gate)和输出门(output gate)。
2.1 遗忘门
LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息,这一过程由遗忘门来完成,其过程如下图所示。
遗忘门会读取$h{t-1}$和$x_t$,输出一个在 0到 1之间的数值给每个在细胞状态$C{t-1}$中的数字。1表示“完全保留”,0 表示“完全舍弃”。
对于语言模型,若已知先前的词汇预测下一词汇,当前一刻细胞状态包括当前主语的性别,这信息需要保留下来帮助我们使用正确的代词。但当我们看到一个新的主语时,我们需要忘记先前的主语。
2.2 输入门
下一步是决定让多少新的信息加入到细胞状态中来。实现这个需要包括两个步骤:
一个“输入门”的 sigmoid网络层确定哪些信息需要更新
一个 tanh 网络层创建一个新的备选值向量—— $ \hat C_t $可以用来添加到细胞状态
之后,我们把这两部分联合起来,对细胞状态进行一个更新,其过程如下图。
在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。
2.3 输出门
现在更新旧的细胞状态 $C_{t-1}$ 更新到 $C_t$。然后,我们对旧的状态乘 $f_t$,用来忘记我们决定忘记的事。然后我们加上 $i_t*\hat C_t$,这是新的候选值,根据我们对每个状态决定的更新值按比例进行缩放。
最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪些部分将输出出去。然后,我们把细胞状态输入 $tanh$处理(把数值调整到 $−1$和 $1$ 之间)再和 sigmoid 网络层的输出相乘,这样我们就可以输出想要输出的部分。
同样,以语言模型为例子,一旦出现一个主语,主语的信息会影响到随后出现的动词。例如,知道主语是单数还是复数,就可以知道随后动词的形式。