1. What is LSTM

在正式介绍长短期记忆网络(Long Short-Term Memory Networks,简称 LSTM)之前,先考虑一个现实例子。比如说,在观看视频时,你记得上一个场景;或者在阅读书籍时,你知道前一章发生了什么。循环神经网络(RNN)的工作原理与之类似,它们记住之前的信息,并利用这些信息来处理当前输入。RNN 的缺点是,由于梯度消失,它们无法记住长期依赖关系。而 LSTM 的设计初衷就是为了避免长期依赖问题。

在深度学习中,LSTM 是一种序列神经网络,它能够让信息持续留存。它是一种特殊的循环神经网络,能够处理 RNN 所面临的梯度消失问题。LSTM 由 Hochreiter 和 Schmidhuber 设计,解决了传统 RNN 和机器学习算法所引发的问题。LSTM 模型可以使用 Keras 库在 Python 中实现。

与传统神经网络不同,LSTM 融入了反馈连接,使其能够处理完整的数据序列,而不仅仅是单个数据点。这使得它在理解和预测时间序列、文本和语音等序列数据中的模式方面非常有效,它擅长捕捉长期依赖关系,非常适合序列预测任务。

LSTM 已成为人工智能和深度学习中的强大工具,通过从序列数据中挖掘有价值的信息,在各个领域实现了突破。

2. LSTM Architecture

LSTM 解决了 RNN 面临的梯度消失问题,本节将介绍 LSTM 的架构,来了解它是如何解决这个问题的。

从高层次来看,LSTM 的工作方式与 RNN 单元非常相似。以下是 LSTM 网络的内部运行机制示意图,LSTM 网络架构由三个部分组成,如下图所示,每个部分执行各自的功能。LSTM 的这三个部分被称为门,它们控制信息进出记忆单元。

image.png

  • 第 1 部分,称为遗忘门(Forget Gate),单元决定来自上一个时间戳的信息是要记住还是要遗忘;
  • 在第 2 部分,称为输入门(Input Gate),单元尝试从输入到该单元的信息中学习新内容;
  • 在第 3 部分,称为输出门(Output Gate),单元将当前时间戳更新后的信息传递到下一个时间戳。

LSTM 的这一个循环被视为一个单步时间。由这三个门和一个记忆单元(memory cell)或 lstm 单元(lstm cell)组成的 LSTM 单元(LSTM unit),可以看作是传统前馈神经网络中的一层神经元,每个神经元都有一个隐藏层和一个当前状态。

与 RNN 类似,LSTM 也有一个隐藏状态,其中 H(t-1) 表示上一个时间戳的隐藏状态,Ht 表示当前时间戳的隐藏状态。除此之外,LSTM 还有一个单元状态,分别用 C(t-1) 和 C(t) 表示上一个和当前时间戳的单元状态。

这里的隐藏状态被称为短期记忆,而单元状态被称为长期记忆。请参考下图。值得注意的是,单元状态会携带所有时间戳的信息。

image.png 让我们通过一个例子来理解 LSTM 是如何工作的。这里我们有两个用句号隔开的句子,第一个句子是:Bob is a nice person.,第二个句子是:Dan on the other hand is evil.。很明显,在第一个句子中,我们谈论的是 Bob,一旦遇到句号,我们就开始谈论 Dan 了。

当我们从第一个句子过渡到第二个句子时,我们的网络应该意识到我们不再谈论 Bob 了。现在我们的主题是 Dan。在这里,网络的遗忘门允许它忘掉关于 Bob 的信息。让我们来了解一下这些门在长短期记忆网络架构中所起的作用。

2.1. Forget Gate

在 LSTM 神经网络的一个单元中,第一步是决定我们是应该保留上一个时间戳的信息还是忘掉它。这是遗忘门的公式:

$$ \begin{equation} \textbf{Forget Gate: } f_t = \sigma (x_t * U_f + H_{t-1} * W_f) \end{equation} $$

  • $X_t$:当前时间戳的输入;
  • $U_f$:与输入相关的权重;
  • $H_{t-1}$:上一个时间戳的隐藏状态;
  • $W_f$:与隐藏状态相关的权重矩阵。

随后,对其应用一个$Sigmoid$函数。这将使$f_t$成为一个介于$0$和$1$之间的数字。如下所示,这个$f_t$随后会与前一个时间戳的单元状态相乘:

$$ \begin{equation} \begin{aligned} C_{t-1} * f_t= \left{ \begin{array}{ll} 0, &\text{if } f_t = 0 \textcolor{purple}{\text{ (forget everything)}}\ C_{t-1}, &\text{if } f_t = 1 \textcolor{purple}{\text{ (forget nothing)}} \end{array}\right. \end{aligned} \end{equation} $$

2.2. Input Gate

在这两个句子中:Bob knows swimming. He told me over the phone that he had served the navy for four long years.,我们都在谈论 Bob。然而,这两个句子给出了关于 Bob 的不同信息。在第一个句子中,我们得知他会游泳。而第二个句子表明,他使用了电话并且在海军服役了四年。

现在思考一下,基于第一个句子给出的上下文,第二个句子中的哪条信息至关重要呢?是他用电话传达信息,还是他在海军服役这件事。在这种情况下,他是用电话还是其他任何通信方式来传递信息并不重要。重要的是他曾在海军服役这一事实,这是我们希望模型在未来计算中记住的内容。这就是 Input Gate 的任务。

Input Gate 用于量化输入所携带新信息的重要性。这是 Input Gate 的公式:

$$ \textbf{Input Gate: }i_t = \sigma (x_t * U_i + H_{t-1} * W_i) $$

  • $X_t$:当前时间戳 t 的输入;
  • $U_i$:输入的权重矩阵;
  • $H_{t-1}$:前一个时间戳的隐藏状态;
  • $W_i$:与隐藏状态相关联的输入权重矩阵。

我们再次对其应用了$Sigmoid 函数。结果,时间戳 t 处的 I 值将介于 0 和 1 之间。

2.3. New Information

$$ N_t = \tanh{(x_t*U_c + H_{t-1}*W_c)} \textcolor{purple}{\text{ (new information)}} $$

现在,需要传递到单元状态的新信息是前一个时间戳$t-1$的隐藏状态和时间戳$t$的输入$x$的函数。这里的激活函数是双曲正切函数(tanh)。由于 tanh 的作用,新信息的值将介于$-1$和$1$之间。如果$N_t$的值为负,则从当前时间戳的单元状态中减去该信息;如果值为正,则将该信息添加到当前时间戳的单元状态中。

然而,$N_t$不会直接添加到单元状态中。更新后的公式如下:

$$ C_t = f_t * C_{t-1} + i_{t} * N_t \textcolor{purple}{\text{ (udpating cell state)}} $$

这里,$C_{t-1}是当前时间戳的单元状态,其他的是我们之前计算出的值。

2.4. Output Gate

现在来看这句话:Bob single-handedly fought the enemy and died for his country. For his contributions, brave______.

在这个任务中,我们必须完成第二个句子。

现在,我们一看到Brave这个词,就知道我们说的是一个人。在这个句子中,只有 Bob 是英勇的,我们不能说敌人英勇,或者国家英勇。所以根据当前的预期,我们必须给出一个相关的词来填空。这个词就是我们的输出,这就是输出门的功能。

这是输出门的公式,它与前面两个门非常相似:

$$ \textbf{Output Gate: } o_t = \sigma{x_t * U_o + H_{t-1} * W_o} $$

由于这个$sigmoid$函数,它的值也将介于$0$和$1$之间。现在要计算当前的隐藏状态,我们将使用$O_t$和更新后的细胞状态的双曲正切函数(tanh)。如下所示:

$$ H_t = o_t * \tanh{(C_t)} $$

结果表明,隐藏状态是长期记忆($C_t$)和当前输出的函数。如果你需要获取当前时间步的输出,只需对隐藏状态$H_t$应用$SoftMax$激活函数:

$$ Output = SoftMax(H_t) $$

在这里,输出中得分最高的标记就是预测结果。

这是 LSTM 网络更直观的示意图。

image.png

3. Bidirectional LSTM

双向长短期记忆网络(Bidirectional LSTMs,Long Short-Term Memory)是一种 RNN 架构,它能够以正向和反向两个方向处理输入数据。在传统的 LSTM 中,信息仅从过去流向未来,并基于先前的上下文进行预测。然而,在双向长短期记忆网络中,网络还会考虑未来的上下文,使其能够捕捉到两个方向上的依赖关系。

双向长短期记忆网络由两个 LSTM 网络层组成,一个以正向处理输入序列,另一个以反向处理。这使得网络能够同时获取过去和未来时间步的信息。因此,双向长短期记忆网络对于那些需要全面理解输入序列的任务特别有用,例如自然语言处理任务中的情感分析、机器翻译和命名实体识别。

通过整合来自两个方向的信息,双向长短期记忆网络增强了模型捕捉长期依赖关系的能力,并在复杂的序列数据中做出更准确的预测。

4. Conclusion

在本文中,我们介绍了长短期记忆 LSTM 网络模型的基础知识和序列架构。了解其工作原理有助于您轻松且更深入地设计 LSTM 网络模型。这是一个重要的主题,因为 LSTM 模型在人工智能领域被广泛应用于自然语言处理任务,如语言建模和机器翻译。LSTM 的其他一些应用包括语音识别、图像字幕生成、手写识别以及通过学习时间序列数据进行时间序列预测等。