序列模型简介——RNN, Bidirectional RNN, LSTM, GRU

54次阅读

共计 2612 个字符,预计需要花费 7 分钟才能阅读完成。

摘要:序列模型大集合——RNN, Bidirectional RNN, LSTM, GRU
既然我们已经有了前馈网络和 CNN,为什么我们还需要序列模型呢?这些模型的问题在于,当给定一系列的数据时,它们表现的性能很差。序列数据的一个例子是音频的剪辑,其中包含一系列的人说过的话。另一个例子是英文句子,它包含一系列的单词。前馈网络和 CNN 采用一个固定长度作为输入,但是,当你看这些句子的时候,并非所有的句子都有相同的长度。你可以通过将所有的输入填充到一个固定的长度来解决这个问题。然而,它们的表现仍然比 RNN 要差,因为这些传统模型不了解给定输入的上下文环境。这就是序列模型和前馈模型的主要区别所在。对于一个句子,当看到一个词的时候,序列模型试图从在同一个句子中前面的词推导出关系。当我们读一个句子的时候,不会每次遇到一个新词都会再从头开始。我们会根据对所读过单词的理解来处理之后的每个单词。
循环神经网络(Recurrent Neural Network,RNN)

循环神经网络如上图所示。在一个时间步骤中的每个节点都接收来自上一个节点的输入,并且这可以用一个 feedback 循环来表示。我们可以深入这个 feedback 循环并以下图来表示。在每个时间步骤中,我们取一个输入 x_i 和前一个节点的输出 a_i-1,对其进行计算,并生成一个输出 h_i。这个输出被取出来之后再提供给下一个节点。此过程将一直继续,直到所有时间步骤都被评估完成。

描述如何在每个时间步骤上计算输出的方程式,如下所示:

在循环神经网络中的反向传播发生在图 2 中所示箭头的相反方向上。像所有其它的反向传播技术一样,我们评估一个损失函数,并获取梯度来更新权重参数。循环神经网络中有意思的部分是从右到左出现的反向传播。由于参数从最后的时间步骤更新到最初的时间步骤,这被称为通过时间的反向传播。
长短期记忆(Long Short-Term Memory)— LSTM 网络
循环神经网络的缺点是,随着时间步骤长度的增大,它无法从差得很远的时间步骤中获得上下文环境。

为了理解时间步骤 t + 1 的上下文环境,我们有可能需要了解时间步骤 0 和 1 中的表示。但是,由于它们相差很远,因此它们所学的表示无法在时间步骤 t + 1 上向前移动,进而对其起作用。“我在法国长大……我能说一口流利的法语”,要理解你说的法语,网络就必须远远地往后查找。但是,它不能这么做,这个问题可以归咎于梯度消失的原因。因此,循环神经网络只能记住短期存储序列。
为了解决这个问题,Hochreiter & Schmidhuber 提出了一种称为长短期记忆网络。

LSTM 网络的结构与循环神经网络保持一致,而重复模块会进行更多的操作。增强重复模块使 LSTM 网络能够记住长期依赖关系。让我们试着分解每个操作,来帮助网络更好地记忆。
1、忘记门操作

我们从当前时间步骤获取输入,并从前一时间步骤获取学习的表示,之后将它们连接起来。我们将连接后的值传递给一个 sigmoid 函数,该函数输出一个介于 0 和 1 之间的值(f_t)。我们在 f_t 和 c_t- 1 之间做元素的乘积。如果一个值为 0,那么从 c_t- 1 中去掉,如果这个值为 1,则完全通过。因此,这种操作也被称为“忘记门操作”。
2、更新门操作

上图表示的是“更新门操作”。我们将来自当前时间步骤中的值和前一时间步骤中已学习的表示连接起来。将连接的值通过一个 tanh 函数进行传递,我们生成一些候选值,并通过一个 sigmoid 函数传递,从候选值中选择一些值,所选的候选值将会被更新到 c_t-1。
3、输出门操作

我们将当前时间步骤的值和前一时间步骤已学习的表示连接起来,并经由一个 sigmoid 函数传递来选择将要用作输出的值。我们获取单元状态并请求一个 tanh 函数,然后执行元素方式操作,其只允许选定的输出通过。
现在,在一个单一单元中要完成很多的操作。当使用更大的网络时,与循环神经网络相比,训练时间将显著地增加。如果想要减少你的训练时间,但同时也使用一个能记住长期依赖关系的网络,那么还有另一个替代 LSTM 网络的方法,它被称为门控循环单元。
门控循环单元(Gated Recurrent Unit,GRU Network)
与 LSTM 网络不同的是,门控循环单元没有单元状态,并且有 2 个门而不是 3 个(忘记、更新和输出)。

门控循环单元使用一个更新门和一个重置门。更新门决定了应该让多少之前的信息通过,而重置门则决定了应该丢弃多少之前的信息。在上面的图中,z_t 表示更新门操作,通过使用一个 sigmoid 函数,我们决定让哪些之前的信息通过。h_t 表示重置门操作,我们将前一时间步骤和当前时间步骤的连接值与 r_t 相乘。这将产生我们希望从前一时间步骤中所放弃的值。
尽管门控循环单元在计算效率上比 LSTM 网络要高,但由于门的数量减少,它在表现方面仍然排在 LSTM 网络之后。因此,当我们需要更快地训练并且手头没有太多计算资源的情况下,还是可以选择使用门控循环单元的。
双向循环神经网络

所有上述双向 RNN 网络的一个主要问题是,它们从之前的时间步骤中学习表示。有时,你有可能需要从未来的时间步骤中学习表示,以便更好地理解上下文环境并消除歧义。通过接下来的列子,“He said, Teddy bears are on sale”and“He said, Teddy Roosevelt was a great President。在上面的两句话中,当我们看到“Teddy”和前两个词“He said”的时候,我们有可能无法理解这个句子是指 President 还是 Teddy bears。因此,为了解决这种歧义性,我们需要往前查找。这就是双向 RNN 所能实现的。
双向 RNN 中的重复模块可以是常规 RNN、LSTM 或是 GRU。双向 RNN 的结构和连接如图 10 所示。有两种类型的连接,一种是向前的,这有助于我们从之前的表示中进行学习,另一种是向后的,这有助于我们从未来的表示中进行学习。
正向传播分两步完成:

我们从左向右移动,从初始时间步骤开始计算值,一直持续到到达最终时间步骤为止;
我们从右向左移动,从最后一个时间步骤开始计算值,一直持续到到达最终时间步骤为止;

结论
将双向循环神经网络与 LSTM 模块相结合可以显著地提高性能,当将它们与监控机制相结合的时候,你可以在机器翻译、情感化分析等实例中获得最高水品的性能表现。希望本文对大家有帮助。

本文作者:【方向】阅读原文
本文为云栖社区原创内容,未经允许不得转载。

正文完
 0