Gated Recurrent Unit(GRU)

在上一篇博客里介绍了LSTM(Long Short-Term Memory),博客地址:LSTM(Long Short-Term Memory)。LSTM相比较最基本的RNN,在NLP的很多应用场景下都表现出了很好的性能,至今依然很常用。但是,LSTM存在一个问题,就是计算开销比较大,因为其内部结构相对复杂。GRU 也是为了旨在解决标准 RNN 中出现的梯度消失问题,可以看做是LSTM的一种变种。其实在大多数情况下GRU的性能和LSTM几乎相差无几(甚至有时候LSTM效果更好,且LSTM是1997年提出的,经受了更多的历史考验),但GRU最大的优势就是 简单(因为只有两个门),计算开销小,更加适用于大规模数据集。

首先上个图来看下GRU的结构(图片来自:colah’s blog《Understanding LSTM Networks》),为了让大家看的更明白,我把图片做了细微的改动,其实就是多加了几个箭头。。如下图所示:

Gated Recurrent Unit(GRU)

其中 rtr_t 表示重置门(reset gate),ztz_t 表示更新门(update gate)。下面就来具体看看这两个门:
一、更新门(update gate)
首先计算更新门,其值在0到1之间:
zt=σ(Wz[ht1,xt])z_t = \sigma(W_z\cdot[h_{t-1},x_t])
其中ht1h_{t-1}为上一个隐藏状态,xtx_t为当前的输入。然后通过一个sigmoid函数得到0到1的结果,其决定了上一个隐藏状态有多少信息被保留下来,且新的内容有多少需要被添加进memory里(被记忆)。

二、重置门(reset gate)
重置门的主要作用就是过去的多少信息需要被遗忘,其计算公式为:
rt=σ(Wr[ht1,xt])r_t = \sigma(W_r\cdot[h_{t-1},x_t])
其实它和更新的计算公式是一样的,只不过是参数不同,更新门和重置门有各自的参数,这个参数都是训练过程中学习得到的。同样,其值在0到1之间。
重置门通过重置ht1h_{t-1},也就是有多少信息需要被遗忘,然后与当前输入xtx_t一起送到tanhtanh函数里得到新的记忆内容h~t\widetilde{h}_t,其计算公式为:
h~t=tanh(W[rtht1,xt])\widetilde{h}_t = tanh(W\cdot[r_t*h_{t-1},x_t])

三、当前时间步的记忆
当前时间步的记忆计算公式为:
ht=zth~t+(1zt)ht1h_t = z_t*\widetilde{h}_t + (1 - z_t)*h_{t-1}
这个信息会被传递到下一个GRU单元里。

bengio组的论文Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling详细对比了GRU和LSTM,有兴趣的同学可以查看下。


参考文献

[1]:Understanding GRU Networks




相关文章: