RNN LSTM GRU BRNN介绍

为什么我们需要序列模型?

当你用前向神经网络或者CNN去处理序列模型的时候,表现的很差。我们常见的序列模型的例子:一段语音或者一句包含序列化单词的英语句子。前向传播或者CNN需要这些句子保持同样的额长度,但是我们都知道一句话里不同单词的长度都是不同的。如果你把这些语句变成同样的长度作为一个输入的话,这些传统的模型还是不能理解这些输入的含义。给定一段话,当观察某一个单词的时候你会发现,序列化模型都在努力寻找每个单词与上下文之间的联系。这就符合我们人的想法,当你看到一个新的单词的时候,你也会从上下文之间联系去推断这个单词的含义。

Rccurrent Neural Network

循环神经网络如上图所示,每个时隙的每个节点都从前一个节点获取输入,可以用一个循环来表示。对于每一个时隙,我们选取x_i和a_i-1(前一个结点的输出)作为后一个节点的输入,经过计算以后得到输入h_i.这个输出可以被传到下一个节点,直到所有的时隙都被计算好了以后。

下面是RNN的计算公式:

反向传播在RNN中与图2所示的传播过程方向相反。与其他的反向传播算法一样,我们计算损失函数,获取梯度去更新我们的权重参数。最有意义的一个地方是,RNN中的反向传播是从右向左。当所有的参数从最后的时隙到初始的时隙都更新完之后,就完成了整个反向传播的过程。

Long short -Term Memory - LSTM Network

RNN的缺点就是无法从比较靠后的时隙中获取信息。

为了了解t+1时隙的内容,我们需要知道知道0和1时隙的信息,但是他们太靠后了以至于无法将有效的信息传递过来进行推导。例如:I grew up in France …… I speak fluent French。为了了解你说法语,网络必须要回头去看,但是它无法做到这一点,这个问题要归结于间便消失的原因,因为RNN只适用于短期记忆序列。

为了解决这个问题,Hochreiter & Schmidhuber 提出了 LSTM.

LSTM的主体结构和RNN相同,但是重复模块进行了更多的运算,扩展重复模块使得LSTM能够记住长短序列。接下来让我们去了解一下各部分的运算。

1. Forget gate operation


我们将输入和前一个时隙的输出串联起来,并且将串联的值传递到sigmoid函数产生一个输出value(f_t),处于0-1之间。我们在f_t和c_t-1之间进行逐元素乘法。如果值为0,则从c_t-1中消除,如果值为1,则完全通过。因此,该操作也称为“忘记门操作”。

2. Update gate operation


上图就是“Update gate operation”,我们将当前时隙的值和之前时隙中学习到的值串联起来。将这个串联的值传到到tanh函数中,我们会得到一个候选值,并且将候选值传到sigmoid函数中,所选取的候选值就是更新的c_t-1.

3. Output gate operation

我们连接当前时间步长的值和前一时间步的学习表示,并通过sigmoid函数传递它,以选择我们将用作输出的值。我们采用单元状态并应用tanh函数并执行元素操作,该操作仅允许选定的输出。

现在,这是在单个单元格中完成的大量操作。当使用更大的网络时,与RNN相比,训练时间将显着增加。如果想要减少训练时间,还可以使用能够记住长期依赖关系的网络,还可以选择LSTM。它被称为门控循环单元(GRU)。

Gated Recurrent Unit-GRU Network


GRU不同于LSTM,只有两个门,一个是update gate和reset gate. Update gate决定了有多少信息可以被传递,而reset gate有多少被传递的信息可以被丢弃。上图中展示了,update gate 函数,采用的是sigmoid函数,我们决定了什么值可以倍传递到后面,h_t表示复位门操作,其中我们将前一时间步和当前时间步的连接值乘以r_t。这会生成我们希望从之前的时间步骤中丢弃的值。

即便GRU计算效率高于LSTM,由于门的减少,它的表现不如LSTM网络。但是,GRU训练更快,并且不需要太多的计算资源。

Bidirectional RNN


所有上述网络的一个主要问题是他们从之前的时间步骤学习表示。有时,您可能需要从未来的时间步骤学习表示,以更好地理解上下文并消除歧义。拿下面的例子,“He said, Teddy bears are on sale” and “He said, Teddy Roosevelt was a great President”在上面两句话中,当我们看到“泰迪”这个词和前面两个词“他说”时,我们可能无法理解句子是指总统还是泰迪熊。因此,要解决这种模糊性,我们需要展望未来。这就是双向RNN所实现的目标。

双向RNN中的重复模块可以是传统的RNN,LSTM或GRU。双向RNN的结构和连接如图9所示。有两种类型的连接,一种是在时间上前进,这有助于我们从以前的表示中学习,另一种在时间上向后学习,这有助于我们从未来的表示中学习。

前向传播分两步完成:

我们从左向右移动,从我们计算值的初始时间步开始,直到我们到达最后的时间步
我们从右向左移动,从最后时间步开始,我们计算值,直到达到初始时间步

Conclusion

将双向RNN与LSTM模块相结合可以显着提高性能,当你将它们与注意机制混淆时,可以在机器翻译,情感分析等用例中获得最先进的性能。

你可能感兴趣的:(原创,机器学习)