単層 RNN

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

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

順伝播

状態 t のときの中間層の出力値 ht は、「入力層からの値 xt」と「前の状態からの値 ht-1」それぞれに重み V と U をかけ、その和を活性化関数に代入することで計算される。このとき、活性化関数 φ は tanh 関数または ReLU 関数がよく使われる。

\[ \mathbf{z}_{t} = \mathbf{U}\mathbf{x}_{t} + \mathbf{V}\mathbf{z}_{t-1} + \mathbf{b}_{z} \] \[ \mathbf{h}_{t} = \phi \left( \mathbf{z}_{t} \right) \]
再帰型ニューラルネットワークの順伝播

また、状態 t のときの出力値は、中間層から出力された値 ht に重みをかけ、それを活性化関数に代入することで計算される。

\[ \mathbf{y}_{t} = \phi \left( \mathbf{W}\mathbf{h}_{t} + \mathbf{b}_{y} \right) \]

誤差関数

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