初心者データサイエンティストの備忘録

調べたことは全部ここに書いて自分の辞書を作る

【深層学習】RNN・LSTM・UGRNN・GRUの関係性:勾配消失問題の解決とパラメータの削減

はじめに

 深層学習を読んでいます。本記事では、本書のChapter 6 に記載の系列データに用いる深層学習モデル間の関係性、および各モデルの構造図や順伝播の式を紹介します。

問題設定

 モデルを紹介する前に、系列データについて説明します。深層学習では、系列データを下記のように定義しています。

個々の要素が順序付きの集まり


\boldsymbol{x}^1, \boldsymbol{x}^2, \boldsymbol{x}^3, \dots, \boldsymbol{x}^T
として与えられるデータ

系列データの例としては、株価の値動きや文章などが考えられます。以下に系列データに関する問題例を2つ挙げます。

1.株価予測
 一つ目の例として、株価予測を挙げます。例えば、2024/7/29から8/2までの日経平均株価始値を使い、8/3の始値を予測する問題を考えます。このとき、説明変数は

 \boldsymbol{x}^1  \boldsymbol{x}^2  \boldsymbol{x}^3  \boldsymbol{x}^4  \boldsymbol{x}^5
38,139.12 38,241.35 38,140.77 38,781.56 37,444.17

です。 t=1が7/29を、 t=5が8/2を表しています。また、目的変数は8/3の始値です。

 この問題は、複数の時刻の説明変数を使い、一つの目的変数を予測する問題です(図1)。

図1:株価予測の説明変数と目的変数

2.品詞分類
 二つ目の例として、文章中に含まれる単語の品詞分類を挙げます。例えば、"I have a pen"という文章に含まれる単語の品詞を予測する問題を考えます。このとき、説明変数は

 \boldsymbol{x}^1  \boldsymbol{x}^2  \boldsymbol{x}^3  \boldsymbol{x}^4
I have a pen

です。また、目的変数は

 \boldsymbol{d}^1  \boldsymbol{d}^2  \boldsymbol{d}^3  \boldsymbol{d}^4
名詞 動詞 冠詞 名詞

です。

  この問題は、複数の時刻の説明変数を使い、複数の目的変数を予測する問題です(図2)。

図2:品詞分類の説明変数と目的変数

 系列データを使った問題の例を2つ挙げました。これらの問題はいずれも、目的変数がその時刻の説明変数だけでなく、前の時刻の説明変数にも依存しています。そのため、通常の深層学習モデルでは、 \boldsymbol{x}を説明変数、 \boldsymbol{y}を目的変数として p(\boldsymbol{y}|\boldsymbol{x})モデリングしますが、系列データを扱う場合は、 p(\boldsymbol{y}|\boldsymbol{x} ^ t, \boldsymbol{x} ^ {t-1}, \dots, \boldsymbol{x} ^ 1)モデリングする必要があります。このような要件に対応するために開発されたのが、今回紹介するRNN、LSTM、UGRNN、GRUの4つのモデルです。

系列データのための深層学習モデル

 本記事では系列データを扱うための深層学習モデルを4種類紹介します。

  • リカレントニューラルネットワーク(以下RNN)
  • 長・短期記憶(以下LSTM)
  • 更新ゲートRNN(以下UGRNN)
  • ゲート付きRNN(以下GRU)

 これらのモデルについては、以下の特徴があります。

モデル名 モデルの特徴
RNN 系列データを扱う深層学習モデルの中で、最も基本のモデル
LSTM RNNが陥りやすい勾配消失の危険性を抑えるために開発されたモデル
UGRNN パラメータが多く学習に時間がかかるLSTMを簡素化したモデル
GRU LSTMよりはパラメータが少なく、UGRNNよりは表現力が高いモデル

 これらのモデルは非常に複雑で理解が難しいです。そこで本記事では、各モデルの構造図と順伝播の式を明記することで、分かりやすくまとめることを目指します。

RNN

 まずは、最も基本的なモデルRNNを紹介します。
 RNNは説明変数 \boldsymbol{x} ^ tを一旦内部状態 \boldsymbol{z} ^ tに変換し、それを出力 \boldsymbol{v} ^ tに変換します。さらに、出力 \boldsymbol{v} ^ tを目的変数 \boldsymbol{y} ^ tに変換します。このとき、前の時刻の内部状態を、後の時刻の内部状態に反映させることによって p(\boldsymbol{y}|\boldsymbol{x} ^ t, \boldsymbol{x} ^ {t-1}, \dots, \boldsymbol{x} ^ 1)モデリングしています。
 図3は以上の説明をまとめたものです。

図3:RNNの構造

 次に、順伝播の式を説明するにあたり、各ベクトルと行列の成分を下記のように定義します。

  • 入力: \boldsymbol{x} ^ {t} = (x _ i ^ t)
  • 内部状態: \boldsymbol{z} ^ {t} = (z _ j ^ t)
  • 出力層への入力: \boldsymbol{v} ^ {t} = (v _ k ^ t)
  • 出力: \boldsymbol{y} ^ {t} = (y _ k ^ t)
  • 入力 \boldsymbol{x} ^ {t}と内部状態 \boldsymbol{z} ^ {t}間のパラメータ: W ^ {\rm in} = (w _ {ji} ^ {\rm in})
  • 内部状態 \boldsymbol{z} ^ {t-1} \boldsymbol{z} ^ {t}間のパラメータ: W = (w _ {jj ^ \prime})
  • 内部状態 \boldsymbol{z} ^ {t}と出力層 \boldsymbol{v} ^ {t}間のパラメータ: W ^ {\rm out} = (w _ {kj} ^ {\rm out})

 推定対象のパラメータは W, W ^ {\rm in}, W ^ {\rm out}です。
 このとき、順伝播の式を成分表記すると、


\begin{eqnarray}
z_j^t &=& f\left(\sum_{j^\prime} w_{jj^\prime} z_{j^\prime}^{t-1} + \sum_i w_{ji}^{\rm in} x_i^{t}\right) \tag{1} \\
v_k^t &=& \sum_j w_{kj}^{\rm out} z_j^t  \tag{2} \\
y_k^t &=& f^{\rm out}(v_k^t) \tag{3} 
\end{eqnarray}

となります。ただし、 fは活性化関数です。双曲線正接関数 {\rm tanh}などが使われます。また、 f ^ {\rm out}は出力層の活性化関数です。問題設定に応じてソフトマックス関数などが使われます。

 (1)~(3)式を行列表記すると下記になります。


\begin{eqnarray}
\boldsymbol{z}^t &=& \boldsymbol{f}\left(W \boldsymbol{z}^{t-1} + W^{\rm in} \boldsymbol{x}^t\right) \tag{4} \\
\boldsymbol{v}^t &=& W^{\rm out} \boldsymbol{z}^t \tag{5}  \\
\boldsymbol{y}^t &=& \boldsymbol{f}^{\rm out} (\boldsymbol{v}^t) \tag{6}  \\
\end{eqnarray}

 ただし、 \boldsymbol{a}=(a _ 1, \dots, a _ n)に対して \boldsymbol{f}(\boldsymbol{a}) = (f(a _ 1), \dots, f(a _ n)), \ \boldsymbol{f}^{\rm out}(\boldsymbol{a}) = (f^{\rm out}(a _ 1), \dots, f^{\rm out}(a _ n))です。

 (4)~(6)式を見ればわかるように、RNNはネットワークの説明変数 \boldsymbol{x} ^ tを内部表現 \boldsymbol{z} ^ tに変換し、それを最終的な目的変数 \boldsymbol{y} ^ tに変換しています。また、(4)式より \boldsymbol{z} ^ t \boldsymbol{z} ^ {t-1}に依存しており、この構造によって過去の説明変数 \boldsymbol{x} ^ {1}, \boldsymbol{x} ^ {2}, \dots, \boldsymbol{x} ^ {t-1}が現在の目的変数 \boldsymbol{y} ^ tに反映されるようになっています。

 RNNは系列データを扱う深層学習モデルとしてはシンプルな構造をしています。しかし、勾配消失が起きやすいことが知られています。この問題を緩和させるために開発されたモデルが、次に紹介するLSTMです。

LSTM

 RNNの勾配消失を抑えたモデルLSTMを紹介します。
 LSTMはRNNに「入力ゲート」、「忘却ゲート」、「出力ゲート」と呼ばれる3つのゲートを加えたモデルです。LSTMを図示すると図4のようになります。

図4:LSTMの構造

 図4は恐ろしく複雑ですが、私は下記の様に理解しています。

  • 入力ゲート \boldsymbol{g} ^ {I, t}と忘却ゲート \boldsymbol{g} ^ {F, t}は、同時刻の入力 \boldsymbol{x} ^ {t}や1時刻前の内部状態 \boldsymbol{s} ^ {t-1}, \boldsymbol{z} ^ {t-1}に依存する
  • 出力ゲート \boldsymbol{g} ^ {O, t}は、同時刻の入力 \boldsymbol{x} ^ {t}や内部状態 \boldsymbol{s} ^ {t}、1時刻前の内部状態 \boldsymbol{z} ^ {t-1}に依存する
  • 内部状態 \boldsymbol{s} ^ {t}は、同時刻の入力 \boldsymbol{x} ^ {t}や入力ゲート \boldsymbol{g} ^ {I, t}、忘却ゲート \boldsymbol{g} ^ {F, t}に依存する
  • 内部状態 \boldsymbol{z} ^ {t}は、同時刻の内部状態 \boldsymbol{s} ^ {t}や忘却ゲート \boldsymbol{g} ^ {F, t}に依存する
  • 上記以外のノード \boldsymbol{u} ^ {t}, \boldsymbol{y} ^ {t}はRNNと同じ

 もちろん細かいことをいえば、 \boldsymbol{z} ^ {t} \boldsymbol{s} ^ {t}などを経由して過去の入力 \boldsymbol{x} ^ {1}, \boldsymbol{x} ^ {2}, \dots, \boldsymbol{x} ^ {t-1}に依存しています。しかし、とりあえずエッジで直接つながっているノード間の関係を理解しておけばOKかなと思っています。

 RNNと同様に順伝播の式も説明します。RNNの順伝播の式を説明する際に定義したベクトルと行列に加え、LSTMで新しく使われる各ベクトルと行列の成分を下記のように定義します。

  • 内部状態: \boldsymbol{u} ^ {t} = (u _ j ^ t), \boldsymbol{s} ^ {t} = (s _ j ^ t)
  • 入力ゲート: \boldsymbol{g} ^ {I, t} = (g _ j ^ {I, t})
  • 忘却ゲート: \boldsymbol{g} ^ {F, t} = (g _ j ^ {F, t})
  • 出力ゲート: \boldsymbol{g} ^ {O, t} = (g _ j ^ {O, t})
  • 入力 \boldsymbol{x} ^ {t}と入力ゲート \boldsymbol{g} ^ {I, t}間のパラメータ: W ^ {I, {\rm in}} = (w _ {ji} ^ {I, {\rm in}})
  • 内部状態 \boldsymbol{z} ^ {t-1}と入力ゲート \boldsymbol{g} ^ {I, t}間のパラメータ: W ^ I = (w _ {jj ^ \prime} ^ {I})
  • 内部状態 \boldsymbol{s} ^ {t-1}と入力ゲート \boldsymbol{g} ^ {I, t}間のパラメータ: \boldsymbol{w} ^ {I} = (w _  j ^ I)
  • 入力 \boldsymbol{x} ^ {t}と忘却ゲート \boldsymbol{g} ^ {F, t}間のパラメータ: W ^ {F, {\rm in}} = (w_{ji} ^ {F, {\rm in}})
  • 内部状態 \boldsymbol{z} ^ {t-1}と忘却ゲート \boldsymbol{g} ^ {F, t}間のパラメータ: W ^ F = (w _ {jj ^ \prime} ^ {F})
  • 内部状態 \boldsymbol{s} ^ {t-1}と忘却ゲート \boldsymbol{g} ^ {F, t}間のパラメータ: \boldsymbol{w} ^ {F} = (w _  j ^ F)
  • 入力 \boldsymbol{x} ^ {t}と出力ゲート \boldsymbol{g} ^ {O, t}間のパラメータ: W ^ {O, {\rm in}} = (w_{ji} ^ {O, {\rm in}})
  • 内部状態 \boldsymbol{z} ^ {t-1}と忘却ゲート \boldsymbol{g} ^ {O, t}間のパラメータ: W ^ O = (w _ {jj ^ \prime} ^ {O})
  • 内部状態 \boldsymbol{s} ^ {t}と忘却ゲート \boldsymbol{g} ^ {O, t}間のパラメータ: \boldsymbol{w} ^ {O} = (w _  j ^ O)

 推定対象のパラメータはRNNで用いた W, W ^ {\rm in}, W ^ {\rm out}に加え、 W ^ {I, {\rm in}}, W ^ I, \boldsymbol{w} ^ {I}, W ^ {F, {\rm in}}, W ^ F, \boldsymbol{w} ^ {F}, W ^ {O, {\rm in}}, W ^ O, \boldsymbol{w} ^ {O}です。
 このとき、順伝播の式を成分表記すると、


\begin{eqnarray}
u_j^t &=& \sum_i w_{ji}^{\rm in} x_i^{t} + \sum_{j^\prime} w_{jj^\prime} z_{j^\prime}^{t-1} \tag{7} \\
s_j^t &=& g_j^{F, t} s_j^{t-1} + g_j^{I, t} f(u_j^t) \tag{8} \\
z_j^t &=& g_j^{O, t} f(s_j^t) \tag{9} \\
v_k^t &=& \sum_j w_{kj}^{\rm out} z_j^t \tag{10} \\
y_k^t &=& f^{\rm out}(v_k^t) \tag{11} \\
g_j^{I, t} &=& \sigma\left(\sum_i w_{ji}^{I, {\rm in}} x_i^{t} + \sum_{j^\prime} w_{jj^\prime}^{I} z_{j^\prime}^{t-1} + w_j^I s_j^{t-1} \right) \tag{12} \\
g_j^{F, t} &=& \sigma\left(\sum_i w_{ji}^{F, {\rm in}} x_i^{t} + \sum_{j^\prime} w_{jj^\prime}^{F} z_{j^\prime}^{t-1} + w_j^F s_j^{t-1} \right) \tag{13} \\
g_j^{O, t} &=& \sigma\left(\sum_i w_{ji}^{O, {\rm in}} x_i^{t} + \sum_{j^\prime} w_{jj^\prime}^{O} z_{j^\prime}^{t-1} + w_j^O s_j^{t} \right) \tag{14} \\
\end{eqnarray}

となります。ただし、 \sigmaシグモイド関数です。

 (7)~(14)式を行列表記すると下記になります。


\begin{eqnarray}
\boldsymbol{u}^t &=& W^{\rm in} \boldsymbol{x}^t + W \boldsymbol{z}^{t-1} \\
\boldsymbol{s}^t &=& \boldsymbol{g}^{F, t} \odot \boldsymbol{s}^{t-1} + \boldsymbol{g}^{I, t} \odot f\left(\boldsymbol{u}^{t}\right) \\
\boldsymbol{z}^t &=& \boldsymbol{g}^{O, t} \odot f\left(\boldsymbol{s}^{t}\right) \\
\boldsymbol{v}^t &=& W^{\rm out} \boldsymbol{z}^t \\
\boldsymbol{y}^t &=& f^{\rm out}\left(\boldsymbol{v}^t\right) \\
\boldsymbol{g}^{I, t} &=& \boldsymbol{\sigma} \left( W^{I, {\rm in}}\boldsymbol{x}^t+ W^I \boldsymbol{z}^{t-1} + \boldsymbol{w}^I \odot \boldsymbol{s}^{t-1} \right) \\
\boldsymbol{g}^{F, t} &=& \boldsymbol{\sigma} \left( W^{F, {\rm in}}\boldsymbol{x}^t+ W^F \boldsymbol{z}^{t-1} + \boldsymbol{w}^F \odot \boldsymbol{s}^{t-1} \right) \\
\boldsymbol{g}^{O, t} &=& \boldsymbol{\sigma} \left( W^{O, {\rm in}}\boldsymbol{x}^t+ W^O \boldsymbol{z}^{t-1} + \boldsymbol{w}^O \odot \boldsymbol{s}^{t} \right) \\
\end{eqnarray}

 ただし、 \odotはベクトルの成分積です。つまり、 \boldsymbol{a} = (a _ 1, a _ 2, \dots, a _ n),\ \boldsymbol{b} = (b _ 1, b _ 2, \dots, b _ n)に対して \boldsymbol{a} \odot \boldsymbol{b} = (a _ 1 b _ 1, a _ 2 b _ 2, \dots, a _ nb _ n)です。また、 \boldsymbol{\sigma}(\boldsymbol{a}) = (\sigma(a _ 1), \sigma(a _ 2), \dots, \sigma(a _ n))です。

 LSTMはRNNに「入力ゲート」、「忘却ゲート」、「出力ゲート」を加えたモデルです。これにより、RNNよりも細かくデータの流れを制御できます。そのため、LSTMの方がRNNより表現力が高くなっています。 また、本記事では詳細に触れませんが、LSTMはRNNより勾配消失が起きにくいことが知られています。LSTMがRNNよりも勾配消失を抑えられる理由については、別の記事で詳しく解説する予定です。

 一方で、LSTMは推定対象のパラメータが多いので、学習に時間がかかるという問題があります。この問題を緩和させるために開発されたモデルが、次に紹介するUGRNNです。

UGRNN

 LSTMのパラメータを減らしたモデルUGRNNを紹介します。
 UGRNNはLSTMの「忘却ゲート」と「入力ゲート」を一つの「更新ゲート」に統合したモデルです。LSTMでは過去の内部状態と現在の説明変数を、「忘却ゲート」と「更新ゲート」の比、つまり g _ j ^ {F, t}:g _ j ^ {I, t}で混ぜ合わせて現在の内部状態に反映させます。一方、UGRNNでは「更新ゲート  g _ j ^ {U, t}」のみを使用し、過去の内部状態と現在の入力を g _ j ^ {U, t}:(1-g _ j ^ {U, t})の比率で混ぜ合わせて現在の内部状態に反映させます。さらに、LSTMでは内部状態を出力に伝える際に、「出力ゲート  g _ j ^ {O, t}」を掛けていましたが、UGRNNでは廃止しています。
 このような工夫により、LSTMでは推定対象のパラメータが多く学習に時間がかかっていた問題が、UGRNNでは緩和されています。
 UGRNNを図示すると図5のようになります。

図5:UGRNNの構造

 RNN、LSTMと同様に順伝播の式も説明します。RNN、LSTMの順伝播の式を説明する際に定義したベクトルと行列に加え、UGRNNで新しく使われる各ベクトルの成分を下記のように定義します。

  • 更新ゲート: \boldsymbol{g}^{U, t} = (g _ j ^ {U, t})
  • 入力 \boldsymbol{x} ^ tと更新ゲート \boldsymbol{g}^{U, t}間のパラメータ: W^{U, {\rm in}} = (w_{ji}^{U, {\rm in}})
  • 内部状態 \boldsymbol{z} ^ {t-1}と更新ゲート \boldsymbol{g}^{U, t}間のパラメータ: W^{U} = (w_{jj ^ \prime}^{U})

 推定対象のパラメータはRNNで用いた W, W ^ {\rm in}, W ^ {\rm out}に加え、 W^{U, {\rm in}}, W^{U}です。
 このとき、順伝播の式を成分表記すると、


\begin{eqnarray}
u_j^t &=& \sum_i w_{ji}^{\rm in} x_i^{t} + \sum_{j^\prime} w_{jj^\prime} z_{j^\prime}^{t-1} \tag{15} \\
z_j^t &=& g_j^{U, t} z_j^{t-1} + \left(1-g_j^{U, t}\right) f(u_j^t) \tag{16} \\
v_k^t &=& \sum_j w_{kj}^{\rm out} z_j^t \tag{17} \\
y_k^t &=& f^{\rm out}(v_k^t) \tag{18} \\
g_j^{U, t} &=& \sigma\left(\sum_i w_{ji}^{U, {\rm in}} x_i^{t} + \sum_{j^\prime} w_{jj^\prime}^{U} z_{j^\prime}^{t-1} \right) \tag{19} \\
\end{eqnarray}

となります。

 (15)~(19)式を行列表記すると下記になります。


\begin{eqnarray}
\boldsymbol{u}^t &=& W^{\rm in} \boldsymbol{x}^t + W \boldsymbol{z}^{t-1} \\
\boldsymbol{z}^t &=& \boldsymbol{g}^{U, t} \odot \boldsymbol{z}^{t-1} + \left(1-\boldsymbol{g}^{U, t} \right) \odot f\left(\boldsymbol{u}^{t}\right) \\
\boldsymbol{v}^t &=& W^{\rm out} \boldsymbol{z}^t \\
\boldsymbol{y}^t &=& f^{\rm out}\left(\boldsymbol{v}^t\right) \\
\boldsymbol{g}^{U, t} &=& \boldsymbol{\sigma} \left( W^{U, {\rm in}}\boldsymbol{x}^t+ W^U \boldsymbol{z}^{t-1} \right) \\
\end{eqnarray}

 ただし、 1-\boldsymbol{g}^{U, t} = (1-g_1^{U, t}, 1-g_2^{U, t}, \dots, 1-g_J^{U, t})です。

 UGRNNはLSTMの「忘却ゲート」と「入力ゲート」を一つの「更新ゲート」に統合し、かつ「出力ゲート」を廃止したモデルです。これにより、LSTMから推定対象のパラメータを減らせることができ、学習にかかる時間の短縮が期待されます。

 一方で、UGRNNはLSTMより簡素化されているため、表現力が落ちているという問題があります。そこで、LSTMよりは簡素化されているものの、UGRNNよりは複雑なGRUというモデルを最後に紹介します。

GRU

 LSTMよりは簡素化されているが、UGRNNより複雑なモデルGRUを紹介します。
 GRUはUGRNNに「初期化ゲート」を追加したモデルです。この初期化ゲートは、前の時刻の内部状態 \boldsymbol{z} ^ {t-1}を次の時刻の内部状態 \boldsymbol{u} ^ {t}にどれだけ反映させるかを制御します。UGRNNでは、一時刻前の内部状態 \boldsymbol{z} ^ {t-1}が次の内部状態 \boldsymbol{u} ^ {t}に、時刻によらないパラメータ Wを用いて、 W \boldsymbol{z} ^ {t-1}で伝播します。しかし、GRUでは時刻に依存する初期化ゲート \boldsymbol{g} ^ {R, t}を用いて、一時刻前の内部状態 \boldsymbol{z} ^ {t-1}が次の内部状態 \boldsymbol{u} ^ {t} W \boldsymbol{g} ^ {R, t} \odot \boldsymbol{z} ^ {t-1}で伝播します。このような工夫により、GRUはUGRNNよりも高い表現力を持ちます。
 GRUの構造を図示すると、図6のようになります。

図6:GRUの構造

 これまで紹介したモデルと同様にGRUの順伝播の式も説明します。これまで紹介した順伝播の式を説明する際に定義したベクトルと行列に加え、GRUで新しく使われる各ベクトルと行列の成分を下記のように定義します。

  • 初期化ゲート: \boldsymbol{g} ^ {R, t} = (g _ j ^ {R, t})
  • 入力 \boldsymbol{x} ^ tと初期化ゲート \boldsymbol{g}^{R, t}間のパラメータ: W^{R, {\rm in}} = (w_{ji}^{R, {\rm in}})
  • 内部状態 \boldsymbol{z} ^ {t-1}と初期化ゲート \boldsymbol{g}^{R, t}間のパラメータ: W^{R} = (w_{jj ^ \prime}^{R})

 推定対象のパラメータはUGRNNで用いた W, W ^ {\rm in}, W ^ {\rm out}, W ^ {U, {\rm in}}, W ^ {U}に加え、 W^{R, {\rm in}}, W^{R}です。
 このとき、順伝播の式を成分表記すると、


\begin{eqnarray}
u_j^t &=& \sum_i w_{ji}^{\rm in} x_i^{t} + \left(\sum_{j^\prime} w_{jj^\prime} g_{j^\prime}^{R, t} \right) z_{j}^{t-1} \tag{20} \\
z_j^t &=& g_j^{U, t} z_j^{t-1} + \left(1-g_j^{U, t}\right) f(u_j^t) \tag{21} \\
v_k^t &=& \sum_j w_{kj}^{\rm out} z_j^t \tag{22} \\
y_k^t &=& f^{\rm out}(v_k^t) \tag{23} \\
g_j^{R, t} &=& \sigma\left(\sum_i w_{ji}^{R, {\rm in}} x_i^{t} + \sum_{j^\prime} w_{jj^\prime}^{R} z_{j^\prime}^{t-1} \right) \tag{24} \\
g_j^{U, t} &=& \sigma\left(\sum_i w_{ji}^{U, {\rm in}} x_i^{t} + \sum_{j^\prime} w_{jj^\prime}^{U} z_{j^\prime}^{t-1} \right) \tag{25} \\
\end{eqnarray}

となります。
 (20)~(25)式を行列表記すると下記になります。


\begin{eqnarray}
\boldsymbol{u}^t &=& W^{\rm in} \boldsymbol{x}^t + W \boldsymbol{g}^{R, t} \odot \boldsymbol{z}^{t-1} \\
\boldsymbol{z}^t &=& \boldsymbol{g}^{U, t} \odot \boldsymbol{z}^{t-1} + \left(1-\boldsymbol{g}^{U, t} \right) \odot f\left(\boldsymbol{u}^{t}\right) \\
\boldsymbol{v}^t &=& W^{\rm out} \boldsymbol{z}^t \\
\boldsymbol{y}^t &=& f^{\rm out}\left(\boldsymbol{v}^t\right) \\
\boldsymbol{g}^{R, t} &=& \boldsymbol{\sigma} \left( W^{R, {\rm in}}\boldsymbol{x}^t+ W^R \boldsymbol{z}^{t-1} \right) \\
\boldsymbol{g}^{U, t} &=& \boldsymbol{\sigma} \left( W^{U, {\rm in}}\boldsymbol{x}^t+ W^U \boldsymbol{z}^{t-1} \right) \\
\end{eqnarray}

 GRUは、UGRNNに「初期化ゲート」を追加したモデルです。具体的には、UGRNNの(16)式が(21)式に置き換わっています。これにより、GRUはUGRNNよりも高い表現力を持ちます。一方で、GRUはLSTMよりもパラメータが少ないです。これにより、LSTMの学習時間よりもGRUの学習時間が短いことが期待されます。
 一般にモデルに含まれるパラメータの数と、そのモデルの表現力にはトレードオフの関係性があります。パラメータを多くすることで、伝播していくデータの流れを細かく制御できるためです。逆にパラメータを少なくすると、伝播していくデータの流れを大雑把にしか制御できなくなります。
 GRUはLSTMのパラメータが多いという短所と、UGRNNの表現力が低いという短所の両方を補うモデルといえるでしょう。

 ここまで、系列データを対象とした4種類の深層学習モデル(RNN、LSTM、UGRNN、GRU)を紹介してきました。次のまとめの章でこれらのモデルについてまとめようと思います。

まとめ

 本記事では、系列データを扱うための深層学習モデルを4種類紹介しました。

 系列データとは、順序がある要素の集まりを指します。例として、株価の推移や文章などが挙げられます。このようなデータは、前の時刻の入力が後の時刻の状態に影響を与えるという特徴を持っています。

 このような系列データの特徴を反映させた深層学習モデルとしてRNNが開発されました。RNNはシンプルで直感的な構造を持っていますが、系列データが長くなると層が深くなり、勾配消失が発生しやすくなります。そこで、RNNに「入力ゲート」「忘却ゲート」「出力ゲート」という3つのゲートを追加して、勾配消失の危険性を抑えたLSTMが開発されました。LSTMがRNNよりも勾配消失を抑えられる理由については、別の記事で詳しく解説する予定です。

 一方で、LSTMにはパラメータが多いという短所があり、それによりモデルの学習時間が長くなる傾向にあります。この問題を解決するため、LSTMの「忘却ゲート」と「入力ゲート」を1つの「更新ゲート」に統合したUGRNNが開発されました。UGRNNにはLSTMほどの表現力はありませんが、パラメータが少ないため、学習時間の短縮が期待できます。

 さらに、LSTMよりもパラメータが少なく、かつUGRNNよりも表現力が高いGRUというモデルも開発されています。