第三章、GRU(门控循环网络,Gated Recurrent Unit)
0 前言
在前面我们已经介绍了RNN和LSTM两种循环神经网络,LSTM能及大程度上减少梯度爆炸和梯度消失,但是它的设计结构复杂计算代价高,经过多种尝试及对比提出了新的简化方法GRU。
1 GRU简化了什么
相比LSTM,GRU在以下两点上做了简化:
- 将状态和输出合并,实际上就是恢复到RNN的输入和输出了。
- 将门控从3个减少到两个(即复位门和更新门)
1.1 复位门
通过上面的图,可以很清晰的看到门控值gr=σ(wr[ht−1,xt]+br)g_r=\sigma(w_r[h_{t-1},x_t]+b_r)gr=σ(wr[ht−1,xt]+br)。
并且,该门控值作用于ht−1h_{t-1}ht−1。即对过去的输出做一些筛选变成gr⋅ht−1g_r\cdot h_{t-1}gr⋅ht−1。
最后再将过滤好的gr⋅ht−1g_r\cdot h_{t-1}gr⋅ht−1与输入xtx_txt结合通过tanhtanhtanh激活函数,获取一个在-1到1之间的中间值h~t=tanh(wh[gr⋅ht−1,xt]+bh)\widetilde{h}_t=tanh(w_h[g_r\cdot h_{t-1},x_t]+b_h)ht=tanh(wh[gr⋅ht−1,xt]+bh)。
为什么称其为复位门呢?因为在计算候选隐藏状态时对历史信息的选择性“重置”作用,制前一时刻隐藏状态(历史信息)有多少需要被忽略或“清零”,以便模型能更灵活地捕捉短期依赖关系。
1.2 更新门
根据上图可知,新的门控值依然是根据ht−1,xth_{t-1},x_tht−1,xt而来的,gz=σ(wz[ht−1,xt]+bz)g_z=\sigma(w_z[h_{t-1},x_t]+b_z)gz=σ(wz[ht−1,xt]+bz)。
该门控值拆成了两个,一个是gzg_zgz,另一个是1−gz1-g_z1−gz。
其中gzg_zgz是用来控制复位门的输出h~t\widetilde{h}_tht的,即gz⋅h~tg_z\cdot \widetilde{h}_tgz⋅ht。
而1−gz1-g_z1−gz是用来控制ht−1h_{t-1}ht−1的,即(1−gz)⋅ht−1(1-g_z)\cdot h_{t-1}(1−gz)⋅ht−1。
最后组合形成输出ht=gz⋅h~t+(1−gz)⋅ht−1h_t=g_z\cdot \widetilde{h}_t+(1-g_z)\cdot h_{t-1}ht=gz⋅ht+(1−gz)⋅ht−1