RNN

RNN1(Recurrent Neural Network)是一种循环神经网络,用于处理序列数据。与传统的前馈神经网络不同,RNN具有循环连接,使得它可以在处理序列时保持一种记忆状态。

在 RNN 中,每个时间步都有一个隐藏状态(hidden state),它可以接收当前时间步的输入和上一个时间步的隐藏状态作为输入。隐藏状态的输出不仅取决于当前时间步的输入,还取决于之前所有时间步的输入。这种循环连接使得RNN可以处理变长序列,并且能够捕捉到序列中的时序信息。

循环神经网络-1
RNN 的计算过程非常简单: $$ h_{t}=f(w_{hh}h_{t-1} + w_{xh}x_t) $$

RNN 在自然语言处理(NLP)等领域有广泛的应用,例如语言建模、机器翻译、情感分析等任务。由于 RNN 能够处理变长序列,并且可以保持记忆状态,它在处理自然语言时可以考虑上下文的信息,捕捉到词语之间的依赖关系和语义信息。

此外,RNN 也可以应用于时间序列预测,例如股票价格预测、天气预测等。RNN 可以根据过去的时间序列数据预测未来的趋势,对于具有时序依赖的数据具有一定的优势。

然而,传统的RNN在处理长序列时存在梯度消失和梯度爆炸的问题,这限制了其对长期依赖关系的建模能力。为了解决这个问题,出现了一些改进的 RNN 变体,如长短期记忆网络(LSTM)和门控循环单元(GRU),它们引入了门控机制来控制记忆状态的更新,改善了对长期依赖的建模能力。

LSTM

LSTM2(Long Short-Term Memory)是一种改进的循环神经网络(RNN)架构,旨在解决传统 RNN 中的梯度消失和梯度爆炸问题,以及增强对长期依赖关系的建模能力。

LSTM 引入了一个记忆单元(memory cell),该单元可以存储和访问信息,并通过门控机制来控制信息的流动。LSTM 的关键部分包括输入门(input gate)、遗忘门(forget gate)、输出门(output gate)。

循环神经网络-2

遗忘门(forget gate)

循环神经网络-3
LSTM 的第一步就是决定我们要从单元状态中丢弃什么信息。这个决定由一个 sigmoid 层做出,称为“遗忘门层(forget gate layer)”。它查看 $h_{t-1}$ 和 $x_t$,并且为单元状态 $C_{t-1}$ 中的每个数字输出一个 0 和 1 之间的数字。1 代表“完全保持这个数字”,而 0 表示“完全遗忘”。

回到我们语言模型的例子,试图根据所有以前的单词来预测下一个单词。在这样的问题中,单元状态可能包括当前主题(subject)的性质,从而可以使用正确的代词。当我们看到一个新主题时,我们想要忘记老主题的性质。

输入门(input gate)

循环神经网络-5
下一步是决定我们要在单元状态下存储的新信息。这包含两部分。首先,一个称为“输入门层(input gate layer)”的 sigmoid 层决定我们将更新哪些值。然后,一个 tanh 层创建一个可以被添加到状态中的新候选值向量 $\tilde{C_{t}}$ 。在下一步中,结合这两个门来创建对状态的更新。
循环神经网络-4
现在是将旧的单元状态 $C_{t-1}$ 更新为新的单元状态 $C_t$ 的时候了。以前的步骤已经决定了要做什么,我们只需要实际去做就行了。

我们将旧的状态乘以 ft,去忘记那些我们之前决定忘记的东西。然后我们向状态中添加 $t_{t}*\tilde{C_t}$ 。这是新的候选值,并且按照我们决定更新每个状态值的程度来缩放。

对于语言模型来说,这就是我们实际删除旧主题性质的信息,并添加新信息的地方,正如我们在之前的步骤中决定的那样。

输出门(output gate)

循环神经网络-6
最后,我们需要决定输出的信息。此输出将基于我们的单元状态,但将是一个过滤后的版本。首先,我们运行一个 sigmoid 层,它决定了我们要输出单元状态的哪些部分。然后,我们让单元状态通过 tanh(将值变为 −1 和 1 之间),并将其乘以 sigmoid 门的输出,以便我们只输出我们决定输出的部分。

以语言模型为例,由于它只看到一个主题,如果后续是一个动词,它可能需要输出与动词相关的信息。例如,它可能会输出主题是单数还是复数,以便我们知道接下来的动词应该是什么形式。

GRU

循环神经网络-7
LSTM 的一个稍微更显着的变种是由 Cho, et al. (2014) 提出的门控循环单元或者称为 GRU。它将忘记门和输入门组合成一个单一的“更新门”,它还合并了单元状态和隐藏状态,并进行了一些其他更改。所得到的模型比标准 LSTM 模型更简单,并且越来越受欢迎。


  1. 循环神经网络详解(RNN/LSTM/GRU)  https://www.zhihu.com/tardis/zm/art/636756912?source_id=1003  ↩︎

  2. LSTM 网络原理:通过图解,一步一步“走过”LSTM  https://xiaosheng.blog/2017/09/16/what-is-lstm  ↩︎