导读
既然我们已经有了前馈网络和CNN,为什么还需要序列模型呢?
介绍:我们为什么需要序列模型?
既然我们已经有了前馈网络和CNN,为什么还需要序列模型呢?这些模型的问题在于,当给的数据是序列数据时,它们的性能很差。序列数据的一个例子是一个音频,其中包含一系列口语单词,另一个例子是英语中包含一系列单词的句子。前馈网络和CNN采用固定长度作为输入,但是,当你看句子时,并不是所有的句子都是相同的长度。你可以通过将所有输入填充到一个固定的大小来解决这个问题。但是,它们的性能仍然比RNN差,因为这些传统模型不理解给定输入的上下文。这就是序列模型和前馈模型的主要区别所在。给定一个句子,当看到一个单词时,序列模型试图从同一个句子中前面的单词推导出相互关系。这也类似于人类的思维方式。当我们阅读一个句子时,我们不会每次遇到一个新单词就从头开始。我们在理解之前读过的单词的基础上处理每个单词。
循环神经网络
图1 循环神经网络
循环神经网络如图1所示。每个节点在一个时间步中接受来自前一个节点的输入,这可以使用反馈循环来表示。我们可以展开这个反馈循环并将其表示为如下图所示。在每个时间步中,我们取一个输入x_i和a_i-1(前一个节点的输出)并对其执行计算,生成一个输出h_i。这个输出被获取并提供给下一个节点。这个过程一直持续到所有的时间步都得到评估。
图2 循环神经网络
下面这个方程描述了如何在每个时间步上计算输出。
图3 循环神经网络
在循环神经网络中,反向传播发生在图2所示箭头的相反方向。与所有其他反向传播技术一样,我们计算一个损失函数并获得梯度来更新权重参数。反向传播在RNN中最有趣的部分是从右到左进行的。由于参数是从最终时间步骤更新到初始时间步骤的,所以这称为时间的反向传播。
长短时记忆网络:LSTM
RNN的缺点是,随着时间步的变长,它不能从后面很远的时间步中获得上下文。
图4 循环神经网络
要理解时间步t+1的上下文,我们可能需要知道时间步骤0和1的表示。但是,由于它们远远落在后面,因此它们学习到的特征表示不可能传播的太远,从而在时间步t+1上产生影响。例句:我在法国长大……我讲一口流利的法语”,要了解你讲法语,网络需要回过头去看很远的地方。但是,它不能这样做,这个问题可以归因于梯度消失的原因。因此,RNN只能记住短期记忆序列。
为了解决这个问题,Hochreiter & Schmidhuber提出了一种名为长短期记忆的新网络。
图5 LSTM
LSTM网络的结构与RNN相同,但是重复模块执行更多的操作。增强重复模块使得LSTM网络能够记住长期依赖关系。让我们试着把每个有助于网络记忆的操作分解开来。
1. 遗忘门的操作
图6 遗忘门
我们从当前时间步骤中获取输入和从上一个时间步骤中获得的表示,并将它们连接起来。我们将拼接起来的值传递给sigmoid函数,该函数输出0到1之间的值(f_t)。我们对f_t和c_t-1进行元素乘法。如果一个值是0,那么它就从c_t-1中消去了,如果这个值是1,那么它就完全通过了。因此,这种操作也称为“遗忘门操作”。
2. 更新门操作
图7 更新门
上图为“更新门操作”。我们将当前时间步中的值与前一个时间步中学习到的表示拼接起来。通过tanh函数传递拼接的值,我们生成候选值,并通过sigmoid函数传递它,我们从候选值中选择要选择的值。选择之后的候选值更新到c_t-1中。
3. 输出门操作
图8 更新操作,输出操作
我们将当前时间步的值与前一个时间步的学习表示串联起来,并将其传递给sigmoid函数,以选择我们将使用哪些值作为输出。我们获取单元状态并使用一个tanh函数,执行一个元素加操作,该操作只允许通过所选的输出。
这是在单个单元中要做的很多操作。当使用更大的网络时,训练时间与RNN相比会显著增加。如果希望减少训练时间,并且使用能够记住长期依赖关系的网络,那么LSTM还有一种替代方案。它被称为门控循环单元(GRU)。
门控循环单元:GRU
GRU不同于LSTM网络,它没有单元状态,有2个门而不是3个门(忘记、更新、输出)。
图9 门控循环单元
门控循环单元使用更新门和复位门。更新门决定应该让过去的多少信息通过,复位门决定应该丢弃过去的多少信息。在上面的图中,z_t表示update gate操作,通过使用sigmoid函数,我们决定让哪些值通过。h_t表示复位门操作,其中我们将前一个时间步和当前时间步的串联值与r_t相乘。这将生成我们希望从前面的时间步中丢弃的值。
尽管GRU的计算效率比LSTM网络高,但是由于门的减少,它的性能仍然排在LSTM网络之后。因此,GRU可以用于我们需要更快的训练和没有太多的计算能力的时候。
双向RNN
图10 双向RNN
上述所有网络的一个主要问题是,它们从以前的时间步中学习表示。有时候,为了更好地理解上下文和消除歧义,你可能必须从将来的时间步中学习表示。举个例子,“他说,泰迪熊在打折”,“他说,泰迪·罗斯福是一位伟大的总统”。在以上两个句子中,当我们看到单词“Teddy”和前两个单词“He said”时,我们可能无法理解这个句子是指总统还是泰迪熊。因此,要解决这种不确定性,我们需要向前看。这就是双向RNNs的功能。
双向RNN中的循环模块可以是常规的RNN、LSTM或GRU。双向RNN的结构和连接如图10所示。有两种类型的联系,一种是向前的时间联系,这有助于我们从以前的表述中学习,另一种是向后的时间联系,这有助于我们从未来的表述中学习。
正向传播分为两个步骤:
- 从左到右移动,从初始时间步长开始计算直到我们到达最后的时间步长
- 从右向左移动,从最后一个时间步长开始计算直到到达初始时间步长
结论
将双向RNN与LSTM模块相结合可以显著提高你的性能,当你将其与注意机制相结合时,你将获得机器翻译、情绪分析等用例的最新性能。希望本文对你有所帮助。里面有很多数学方程,我希望不会太吓人。如果你还有什么疑问,请告诉我,我会尽力解答。
作者:Rohith Gandhi
编译:ronghuaiyang
英文原文:https://towardsdatascience.com/introduction-to-sequence-models-rnn-bidirectional-rnn-lstm-gru-73927ec9df15
本文为专栏文章,来自:AI公园,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/76065.html 。