长短期记忆网络LSTM(1)

在处理序列信息中我们已经有了RNN,但是在实践中发现,RNN只能存储短期记忆,也就是说只能理解上下文,而不能把握整篇的全部内容。
因此,我们就需要能够长期记忆的模型。
LSTM全称为Long Short-Term Memory,即长短期记忆网络。它是一种特殊的RNN网络,该网络设计出来是为了解决长依赖问题。该网络由Hochreiter & Schmidhuber引入,并有许多人对其进行了改进和普及。

LSTM的结构

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

标准RNN中的重复模块包含一个单层

LSTM也具有这种链式结构,只是在CNN的基础上,每个重复模块增加了三个神经网络层,如下图所示

LSTM中的重复模块包含四个神经网络层

图中的绿色大框代表单元模块;黄色方框代表神经网络层;粉色圆圈代表逐点操作;箭头表示向量转换,从一个节点输出到另一个节点输入;合并的行表示串联,而分叉的行表示要复制的内容,并且副本将到达不同的位置。

LSTM的核心思想

顶部这条水平贯穿的线,叫长期记忆C线(细胞状态),神经网络就是通过它来达到序列学习的目的。
LSTM在C线的基础上添加了三个门,从而拥有了对细胞状态进行删除或添加信息的能力。

这个门(gate)是一种选择性的让信息通过的方式。它是由一个Sigmoid层和一个点乘运算组成。

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

三个门分别是忘记门、输入门和输出门。

遗忘门(forget gate)

顾名思义,要遗忘或丢弃一些信息。它决定了上一时刻的单元状态$ C_{t-1} $有多少保留到当前时刻$ C_{t} $

数学原理:把t-1时的长期记忆输入$ C_{t-1} $乘上一个遗忘因子$ f_{x} $ 。遗忘因子是由短期记忆$ h_{t-1} $以及事件信息x来计算。
遗忘因子计算公式:
$ f_{t} = \sigma(W_{f} \cdot [h_{t-1}, x_{t}]+b_{f}) $

输入门/记忆门(input gate)

输入门的作用是确定什么样的新信息被存放在细胞状态中。包括两个部分:

  • sigmoid层,决定什么值需要更新;
  • tanh层,创建一个新的候选值向量,生成候选记忆。

针对遗忘门中丢弃的属性信息,在本单元模块找到新的属性信息,添加进去,以补充丢弃的属性信息。

数学原理:接受从遗忘门输出的长期记忆$ i_{t} $,以及从学习门输出的短期记忆$ \overline{ C_{t} } $,然后直接把两者合并起来。
计算公式:
$ i_{t} = \sigma(W_{f} \cdot [h_{t-1}, x_{t}]+b_{f}) $
$ \overline{C_{t}} = \tanh(W_{C} \cdot [h_{t-1}, x_{t}]+b_{C}) $
至此,已经更新旧的细胞状态 $ C_{t-1} $ 得到 $ C_{t} $
$ C_{t} = f_{t} * C_{t-1} +i_{t} * \overline{C_{t}} $

输出门(output gate)

最终,我们要根据细胞状态,确定输出值。首先我们使用一个Sigmiod函数来去确定细胞状态的哪部分需要输出,然后把细胞状态通过tanh层处理,两者相乘得到最终我们想要输出的信息。

数学原理:通过一个Sigmoid函数得到$ o_{t} $,$ o_{t} $与$ \tanh(C_{t}) $ 相乘,最终得到$ h_{t} $
计算公式:
$ o_{t} = \sigma(W_{o} \cdot [h_{t-1}, x_{t}]+b_{o}) $
$ h_{t} = o_{t} * \tanh(W_{C}) $

0%