GRU (gated recurrent unit) は、長期記憶を可能にした再帰型ニューラルネットワークの一つである。通常の RNN は勾配を逆伝播することによって学習を行うが、状態 t が長くなると、その勾配が消失したりあるいは発散したりすることが指摘された。LSTM や GRU は勾配消失問題を解決するために提唱されたアーキテクチャである。
GRU ブロックの構造
GRU ネットワークは、通常の RNN と同じく、データが入力層、中間層、出力層の順で伝播される。しかし、RNN の中間層はニューラルネットワークと同様に活性化関数が 1 つだけであるのに対して、GRU の中間層には複数の活性化関数が用意され、複雑な演算が行われている。
リセットゲート
GRU のリセットゲートでは、現在の状態で入力した情報 xt と一つ前の状態から伝達された情報(長期記憶) ht-1 をもとに記憶率 rt を計算している。ここで計算した記憶率を、一つ前に状態から伝達された長期記憶 ht-1 にかけることによって、長期記憶を忘却させるのか、それとも保持させるのかを制御している。LSTM の忘却ゲートとほぼ同じような考えとなっている。
\[ \mathbf{r}_{t} = \sigma \left( \mathbf{W}_{r} \mathbf{x}_{t} + \mathbf{U}_{r} \mathbf{h}_{t-1} + \mathbf{b}_{r} \right) \]アップデートゲート
アップデートゲートでは、前の状態から伝達された長期記憶 ht と、現在の状態から作り出された記憶 \(\tilde{\mathbf{h}}_{t} \) を、(1 - z) : z の割合で混合して、新しい長期記憶を作り出している。
入力情報 xt とリセットした長期記憶 ht-1 から情報を計算する。ここで計算される情報は、長期記憶に加わる候補となる。
\[ \tilde{\mathbf{h}}_{t} = \tanh \left( \mathbf{W}_{h} \mathbf{x}_{t} + \mathbf{r}_{t} \odot \left( \mathbf{U}_{h} \mathbf{h}_{t-1} \right) + \mathbf{b}_{h} \right) \]次に、古い長期記憶と現在の記憶を混合する割合 zt を計算する。
\[ \mathbf{z}_{t} = \sigma \left( \mathbf{W}_{z} \mathbf{x}_{t} + \mathbf{U}_{z} \mathbf{h}_{t-1} + \mathbf{b}_{z} \right) \]最後に、長期記憶を更新して、次の状態に渡す。
\[ \mathbf{h}_{t} = \left( 1 - \mathbf{z}_{t}\right) \odot \mathbf{h}_{t-1} + \mathbf{z}_{t} \odot \tilde{\mathbf{h}}_{t} \]References
- Understanding LSTM Networks. 2015. colah's blog