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》),为了让大家看的更明白,我把图片做了细微的改动,其实就是多加了几个箭头。。如下图所示:
其中 表示重置门(reset gate), 表示更新门(update gate)。下面就来具体看看这两个门:
一、更新门(update gate)
首先计算更新门,其值在0到1之间:
其中为上一个隐藏状态,为当前的输入。然后通过一个sigmoid函数得到0到1的结果,其决定了上一个隐藏状态有多少信息被保留下来,且新的内容有多少需要被添加进memory里(被记忆)。
二、重置门(reset gate)
重置门的主要作用就是过去的多少信息需要被遗忘,其计算公式为:
其实它和更新的计算公式是一样的,只不过是参数不同,更新门和重置门有各自的参数,这个参数都是训练过程中学习得到的。同样,其值在0到1之间。
重置门通过重置,也就是有多少信息需要被遗忘,然后与当前输入一起送到函数里得到新的记忆内容,其计算公式为:
三、当前时间步的记忆
当前时间步的记忆计算公式为:
这个信息会被传递到下一个GRU单元里。
bengio组的论文Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling详细对比了GRU和LSTM,有兴趣的同学可以查看下。
参考文献
[1]:Understanding GRU Networks