文章目录
- 一、RNN产生的问题
- 二、RNN和LSTM的结构比较
- 三、RNN和LSTM的区别
- 四、LSTM的图例
- 五、LSTM的细胞状态
- 六、LSTM的“门”结构
- 七、LSTM的三个控制门
- 八、LSTM网络的变种
- 九、双向RNN、LSTM
一、RNN产生的问题
由于RNN模型需要实现长期记忆的话需要将当前的隐藏状态的计算与前n次的计算挂钩,即:
那样的话计算量会呈指数式增长,导致模型训练的时间大幅增加,因此RNN模型一般不直接用来进行长期记忆计算。另外,传统RNN处理不了长期依赖问题,这是个致命伤。但LSTM解决了这个问题。
二、RNN和LSTM的结构比较
所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的RNN中,这个重复的模块只有一个非常简单的结构,例如一个 tanh层。
LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
(LSTM中的重复模块包含四个交互的层)
三、RNN和LSTM的区别
- RNN没有细胞状态,LSTM通过细胞状态记忆信息。
- RNN激活函数只有tanh, LSTM通过输入门、遗忘门、输出门引入sigmoid函数并结合tanh函数,添加求和操作,减少梯度消失和梯度爆炸的可能性。
- RNN只能够处理短期依赖问题,LSTM既能够处理短期依赖问题,又能够处理长期依赖问题。
四、LSTM的图例
在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。
五、LSTM的细胞状态
LSTM 的关键就是细胞状态(cell),水平线在图上方贯穿运行。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
六、LSTM的“门”结构
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个sigmoid 神经网络层和一个pointwise 乘法操作。
Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!
七、LSTM的三个控制门
(1)forget gate: 选择忘记过去某些信息
在我们LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记层完成。该门会读取h_ t-1和x_t, 输出一个在0到1之间的数值,给每个在细胞状态C_t-1中的数字。1表示“完全保留”,0表示“完全舍弃”。
让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的类别,因此正确的代词可以被选择出来。当我们看到新的代词,我们希望忘记旧的代词。
(2)input gate:记忆现在的某些信息
下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称“输入门层”决定什么值我们将要更新。然后,一个tanh层创建一个新的候选值向量,~C__t,会被加入到状态中。下一步,我们会将这两个信息来产生对状态的更新。
在我们语言模型的例子中,我们希望增加新的代词的类别到细胞状态中,来替代旧的需要忘记的代词。
(3)LSTM的“细胞状态更新”
(将过去的记忆和现在的记忆进行合并)
现在是更新旧细胞状态的时间了,C_ t-1 更新为C_t。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。我们把旧状态与f_ t相乘,丢弃掉我们确定需要丢弃的信息。接着加上i t*~{C} t(当前状态)。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的类别信息并添加新的信息的地方。
(4)output gate:输出信息
最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个sigmoid层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
在语言模型的例子中,因为他就看到了一个代词,可能需要输出与一个动词相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。
八、LSTM网络的变种
8.1 peephole connection
我们到目前为止都还在介绍正常的LSTM。但是不是所有的LSTM都长成一个样子的。实际上,几乎所有包含LSTM的论文都采用了微小的变体。差异非常小,但是也值得拿出来讲一下。
其中一个流形的LSTM变体,就是由Gers & Schmidhuber (2000) 提出的,增加了“peephole connection" (窥视孔连接)。是说,我们让门层也会接受细胞状态的输入。下面的图例中, 我们增加了peephole 到每个门上,但是许多论文会加入部分的peephole而非所有都加。
8.2 coupled
另一个变体是通过使用coupled忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是同时做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态。
8.3 GRU
Gated Recurrent Unit (GRU)是由Cho, et al. (2014)提出。它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的LSTM模型要简单。效果和LSTM差不多,但是参数少了1/3,不容易过拟合。
8.4 SRU
SRU (Simple Recurrent Unit)提出更激进的架构,去掉了前后时刻计算的依赖。SRU相比cuDNN的 LSTM训练提速5-10 倍左右。
Xt代表t时刻的输入; W、b代表权重和偏置; f,代表t时刻的遗忘门(forget gate) ;rt代表t时刻的重置门(resetgate) ; Ct和ht分别代表t时刻的状态和最终的输出;σ和g分别代表Sigmoid函数和激活函数(tanh、relu) ;公式中的⊙代表矩阵对应元素间的操作。
九、双向RNN、LSTM
双向RNN/LSTM就是进行正反两次的特征循环,让网络模型对于更早的信息也具有良好的处理能力,即将序列的正方向上得到的输出结果作为反方向上的输入,按照反序列的方式再进行一次特征的循环处理。然后将两次得到的结果组合起来做为总的输出。