GRU 浅析

文章目录

  • 1. GRU 简介
  • 2. GRU 详解
    • 2.1 重置门
    • 2.2 更新门
  • 3. GRU 的 PyTorch 实现

1. GRU 简介

  门控循环单元 (Gate Recurrent Unit, GRU) 于 2014 年提出,原论文为《Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling》。GRU 是循环神经网络的一种,和 LSTM 一样,是为了解决长期依赖问题。GRU 总体结构与 RNN 相近,如下图

GRU 浅析_第1张图片

但 GRU 的思想却与 LSTM 更加相似,反映在其内部结构上。如下图所示

GRU 浅析_第2张图片

  LSTM 使用三个门 (遗忘门、输入门和输出门) 来控制信息传递,GRU 将其缩减为两个 (重置门和更新门)。GRU 去除了单元状态,转而使用隐藏状态来传输信息,因此其参数减少,效率更高。虽然 GRU 对 LSTM 做了很多简化,但其依旧保持着与 LSTM 相近的效果。

2. GRU 详解

  要想掌握 GRU,最好先理解 LSTM。关于 LSTM 的讲解,推荐本人另一篇博客《LSTM 浅析》。GRU 有两个门,重置门决定如何把新的输入与之前的记忆结合,更新门决定多少先前的记忆起作用。重置门和更新门的结构如下图

GRU 浅析_第3张图片

2.1 重置门

  GRU 中的隐藏状态 h t h_t ht 与 LSTM 中不同,可视为 LSTM 中单元状态和隐藏状态的混合,记录着历史信息。重置门为上图蓝框部分。重置门计算参数 r t ∈ ( 0 , 1 ) r_t \in (0, 1) rt(0,1),将 r t r_t rt 作为比例因子,控制着 h t − 1 h_{t-1} ht1 中将有多少信息被保留。重置门部分主要完成两项工作,一是参数 r t r_t rt 的计算
r t = σ ( W r ⋅ [ h t − 1 , x t ] ) r_t = \sigma(W_r \cdot [h_{t-1}, x_t]) rt=σ(Wr[ht1,xt])
二是将 r t r_t rt h t − 1 h_{t-1} ht1 相乘,得到候选隐藏状态 h ~ t \tilde{h}_t h~t
h ~ t = σ ( W o ⋅ [ r t ⊙ h t − 1 , x t ] + b o ) \tilde{h}_t = \sigma(W_o \cdot [r_t \odot h_{t-1}, x_t] +b_o) h~t=σ(Wo[rtht1,xt]+bo)
h ~ t \tilde{h}_t h~t 包含了历史信息和当前时刻的新输入。

  重置门的值越小,流入信息越少/先前信息遗忘得越多。重置门有助于捕捉时间序列里的短期依赖关系

2.2 更新门

  更新门的作用类似于 LSTM 中的遗忘门和输入门,决定着 h t h_t ht 将从 h t − 1 h_{t-1} ht1 中保留多少信息 (不经过非线性变换), 以及需要从 h ~ t \tilde{h}_t h~t 中接受多少新信息。更新门为上图红框部分。在 LSTM 中,遗忘门和输入门是互补关系,具有一定的冗余性。GRU 直接使用一个门 z t z_t zt 来保持输入和遗忘间的平衡。更新门部分主要完成两项工作,一是参数 z t z_t zt 的计算
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 h_t ht 的计算
h t = ( 1 − z t ) ⊙ h t − 1 + z t ⊙ h ^ t h_t = (1-z_t) \odot h_{t-1} + z_t \odot \hat{h}_t ht=(1zt)ht1+zth^t
   z t z_t zt 控制着 h t − 1 h_{t-1} ht1 x t x_t xt 有多大比例流入 h t h_t ht 中,更新门的值越大,流入信息越多。更新门有助于捕捉时间序列里的长期依赖关系

3. GRU 的 PyTorch 实现

To be continue…

参考

  1. LSTM;

你可能感兴趣的:(神经网络浅析,GRU)