Gated Feedback Recurrent Neural Network
2015, ICML. [paper]
提出了一种新的循环神经网络的架构gated-feedback RNN (GF-RNN),设计了一种全局门控单元(global gating unit)控制信息如何从上层网络传递到底层网络。
作者认为GF-RNN表现好的主要原因在于,它可以自适应地使得不同的RNN层建模不同时间尺度的信息,并且允许层间的信息交互,尤其是在现有方法中比较少见的从上层网络到底层网络的信息传递。
Introduction
时间序列通常包含变化快和变化相对较慢的成分,并且这些内部隐含的不确定的成分通常都是以层次结构的形式出现。
建模这种层次结构最简单的做法就是叠加多层网络[1,2]。而CW-RNN[3]的做法是将隐藏状态的神经元分成多个组,每组按照不同的更新频率进行更新,建模时间序列中包含的不同时间尺度的信息,并且允许不同时间尺度信息之间进行交互。
本文提出的GF-RNN主要想解决的问题是,如何自适应地建模多种时间尺度的信息。
Gated Feedback Recurrent Neural Network
GF-RNN与传统RNN最大的不同就在于,GF-RNN不仅允许信息从上一个时间步的低层隐藏层流入到当前时间步的高层隐藏层中,还允许信息从上一个时间步的高层隐藏层流入到当前时间步的低层隐藏层中,如图(b)。前者是传统的多层RNN中的信息传递方式,如图(a),而后者则是传统多层RNN中没有的。
Global Reset Gate
GF-RNN除了允许信息从上层隐藏层流入下层隐藏层外,还提出了全局重置门(global reset gate) 控制信息如何从上层网络传递到底层网络。
g i → j = σ ( w g i → j h t j − 1 + u g i → j h t − 1 ∗ ) g^{i\to j}=\sigma(\mathrm w^{i\to j}_g\mathrm h^{j-1}_t+\mathrm u^{i\to j}_g\mathrm h^*_{t-1}) gi→j=σ(wgi→jhtj−1+ugi→jht−1∗)
其中, h t j − 1 \mathrm h_t^{j-1} htj−1表示第 t t t个时间步第 j − 1 j-1 j−1层隐藏层, h t − 1 ∗ \mathrm h_{t-1}^* ht−1∗表示第 t − 1 t-1 t−1个时间步所有隐藏层。信息从第 i i i层隐藏层流向第 j j j层隐藏层,由全局重置门 g i → j g^{i→j} gi→j来控制信息传递的量,全局重置门是值域在0到1之间的一个标量。
GF-RNN
简单来说,
传统的多层RNN某个隐藏层 h t j \mathrm h_t^{j} htj融合了当前时间步上一层隐藏层的信息 h t j − 1 \mathrm h_t^{j-1} htj−1和上一个时间步同一层隐藏层的信息 h t − 1 j \mathrm h_{t-1}^j ht−1j,即 h t j = f ( h t j − 1 , h t − 1 j ) \mathrm h_t^j=f(\mathrm h_t^{j-1},\mathrm h_{t-1}^j) htj=f(htj−1,ht−1j);
而GF-RNN则融合了更多的信息,包括当前时间步上一层隐藏层的信息 h t j − 1 \mathrm h_t^{j-1} htj−1和上一个时间步所有隐藏层的信息 h t − 1 ∗ \mathrm h_{t-1}^* ht−1∗,即 h t j = f ( h t j − 1 , h t − 1 ∗ ) \mathrm h_t^j=f(\mathrm h_t^{j-1},\mathrm h_{t-1}^*) htj=f(htj−1,ht−1∗),并且引入了一个全局重置门,自适应地保留上一个时间步各隐藏层的信息。
Experiment
作者做了两个实验,分别是字符级的语言建模和python程序评估(Python program evaluation)。
Character-level language modeling
使用Hutter数据集构建字符级语言模型,Hutter数据集包含拉丁和非拉丁字母,XML和特殊字符。
评价指标是BPC(bits-per-character,每字符比特),表示平均需要多少个比特来表示一个字符,值越小说明模型性能越好。
实验结果如下:
其中,Gated Feedback表示与Stacked RNN具有相同数目的参数,而Gated Feedback L则表示与Stacked RNN具有相同数目的隐藏神经元;Feedback*表示全局重置门全部设置为1,即无限制的保留上一个时间步的所有隐藏层信息。
可以看到,GF-GRU和GF-LSTM对比GRU和LSTM分别都有提升。并且将全局重置门全部设置为1之后,GF-LSTM的性能有所下降,说明全局重置门能够自适应的保留上一个时间步隐藏状态中有用的信息。
给定一段文字,生成这段文字之后可能的内容。不同模型生成的内容如下:
可以看到,在两个例子中,Stacked LSTM都没有生成</username>和</contributor>,说明Stacked LSTM没有成功地学习到XML的文本结构,而GF-LSTM都能够成功地生成</username>和</contributor>,说明GF-LSTM能够更好地学习到XML的文本结构。
Python program evaluation
Python program evaluation,要求给定一段程序,模型能够正确输出这段程序的运行结果。因此模型的输入为一段代码,这段代码的功能可以是简单的四则运算、逻辑运算、if-else语句、for循环等;模型的输出则是这段代码运行的结果。
使用Python program evaluation来验证模型的好坏的好处在于,我们可以人为的控制每一个样本的预测难度,比如嵌套循环的深度、代码的长度,都能够控制预测的难度。这样我们就能构造出不同预测难度的样本,然后观察模型随着预测难度的增加会有怎样的表现。
实验结果:
(c)是由(a)-(b)得到的结果,颜色越红,说明GF-RNN的提升越明显,颜色越蓝,说明提升越不明显。第一行分别是Stacked GRU,GF-GRU和Stacked GRU减GF-GRU的结果;第二行分别是Stacked LSTM,GF-LSTM和Stacked LSTM减GF-LSTM的结果。
可以看到随着预测难度的增加,GF-GRU比GRU的提升越来越显著。
参考文献
[1] Graves, Alex. Generating sequences with recurrent neural networks. arXiv preprint arXiv:1308.0850, 2013.
[2] Hermans, Michiel and Schrauwen, Benjamin. Training and analysing deep recurrent neural networks. In Advances in Neural Information Processing Systems, pp. 190–198, 2013.
[3] Koutnık, Jan, Greff, Klaus, Gomez, Faustino, and Schmidhuber, Jurgen. A clockwork rnn. In Proceedings of the 31st International Conference on Machine Learning (ICML’14), 2014.