再帰型ニューラルネットワークの学習

RNN の学習

再帰型ニューラルネットワーク(RNN)は、入力層、中間層、出力層からなり、そして、このネットワーク構造を時間(状態)軸方向に展開することができる。ある状態 t の中間層は、「入力層からの xt」と「状態 t-1 のときの中間層の出力値」の両方を入力として受け取り、その演算結果を出力層に出力するとともに、次の状態 t+1 にも出力する。

再帰型ニューラルネットワークの構造(展開表現)

順伝播

ここで、状態 t のときの中間層の出力値を st と書く。状態 t の中間層は、「入力層からの値 xt」と「前の状態からの値 st-1」に重みをかけた値を受けとる。それぞれの重みを W と U とすると、以下の式で表現できる。このとき、関数 g は活性化関数で、tanh 関数または ReLU 関数がよく使われる。

\[ s_{t} = g(Ux_{t} + Vs_{t-1}) \]
再帰型ニューラルネットワークの順伝播

このとき、状態 t における出力値 yt^ は次のように計算される。関数 h は活性化関数である。一般的に恒等関数が使われる。また、場合によって、ソフトマックスも使われることがある。

\[ \begin{eqnarray} \hat{y_{t}} &=& h\left(W \times g(Ux_{t} + Vs_{t-1})\right) \\ &=& h\left(W \times g(Ux_{t} + V(g(Ux_{t-1}+Vs_{t-2})))\right) \\ &=& \cdots \end{eqnarray} \]

RNN では状態は遷移するが、ネットワーク上の重み U、V、W は状態によらず一定である。

誤差関数

RNN は入力層、中間層、出力層からなる。そのため、理論上、1 つの値をネットワークに入力すると、1 つの値が出力される。状態 t における出力値を yt^ とする。また、訓練データには、教師ラベルが必ず存在するので、状態 t における教師ラベルを yt とする。このとき、両者の差を損失関数として定義することができる。

\[ J_{t} = \left(y_{t} - \hat{y_{t}} \right)^{2} \]

ある訓練データに n 個の入力があるとき、RNN は n 個の状態を取り、n 個の値を出力する。このとき、損失関数は、これらの n 個の予測値と n 個の教師ラベルの差として定義することができる。

\[ J= \sum_{t}J_{t} = \sum_{t}\left(y_{t} - \hat{y_{t}} \right)^{2} \]

損失関数が定義できれば、この損失関数を最小化するように重み W を求めていく。これには、逆誤差伝播法で行う。

References

  • Suresh H. MIT 6.S191: Sequence Modeling with Neural Networks. 2018. YouTube