Gated Recurrent Unit(GRU)

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》),为了让大家看的更明白,我把图片做了细微的改动,其实就是多加了几个箭头。。如下图所示:

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

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

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

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


参考文献

[1]:Understanding GRU Networks




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值