【ディープラーニング基礎⑨】リカレントニューラルネットワークの勾配問題とゲート機構

に公開

はじめに

リカレントニューラルネットワークには勾配消失/勾配爆発という問題が起きます。これを解消するために生まれたゲート機構について解説します。

リカレントニューラルネットワークとは

回帰結合層を持ち、時系列データや系列データ(例: テキスト、音声)の依存関係を捉えるために使用されます。過去の情報を保持しながら、現在のデータを処理する循環構造を持ちます。

リカレントニューラルネットワーク(RNN)での内部状態の更新式

概要

中間ユニットの値+過去の内部情報を新しい内部情報にする

数式

RNNの内部状態 h_t は次のように更新されます:

h_t = f(W_x x_t + W_h h_{t-1} + b)
  • h_t: 現在の内部状態(隠れ状態)。
  • x_t: 現在の入力データ。
  • h_{t-1}: 前時刻の内部状態。
  • W_x: 入力データに対する重み行列。
  • W_h: 内部状態に対する重み行列。
  • b: バイアス項。
  • f: 活性化関数(一般にtanhやReLU)。

勾配消失と勾配爆発の発生

概要

RNNでは、出力誤差を各層に逆伝播させる際、勾配(誤差)が次々と乗算されます。時系列が長い場合、この連続的な乗算が問題を引き起こします。難しいことを書いていますが、スカラーで考えれば、べき乗になってしまうのが問題だというわけです。なぜならば1より小さい場合には0に収束し、大きい場合は無限に発散するからです。

数式

勾配の逆伝播

誤差はチェーンルールに従って伝播します。内部状態における勾配は以下のように計算されます:

\frac{\partial L}{\partial W_h} = \sum_{t=1}^{T} \frac{\partial L}{\partial h_t} \cdot \frac{\partial h_t}{\partial h_{t-1}} \cdot \frac{\partial h_{t-1}}{\partial W_h}
  • \frac{\partial h_t}{\partial h_{t-1}} がキーとなる項で、これはおおよそ W_h の固有値や活性化関数の導関数によってスケールされます。

勾配消失

  • \frac{\partial h_t}{\partial h_{t-1}} が1未満の場合、時系列が長くなるにつれて勾配は指数的に小さくなります。これが勾配消失です。
  • 結果として、モデルは過去の情報をほとんど学習できなくなります。

勾配爆発

  • \frac{\partial h_t}{\partial h_{t-1}} が1を大きく超える場合、時系列が長くなるにつれて勾配は指数的に大きくなります。これが勾配爆発です。
  • 計算が不安定になり、モデルが発散します。

ゲート機構による解決(LSTMとGRU)

LSTM(Long Short-Term Memory)やGRU(Gated Recurrent Unit)は、RNNの弱点である勾配消失問題を解決するために開発されました。これらはゲート機構を導入して、重要な情報を選択的に保持・忘却できるようにしています。

1. LSTM(長短期記憶ネットワーク)

概要

LSTMは「情報を選択的に記憶・忘却する仕組み」を持っています。
LSTMには3つの「ゲート」があり、これらを使って情報を操作します:

  • 忘却ゲート: 過去の情報の中で不要なものを忘れる。
  • 入力ゲート: 新しい情報をどれだけ記憶するかを決める。
  • 出力ゲート: 次の層に出力する情報を選択する。

数式

  1. 忘却ゲート (f_t)
    どの情報を「忘れる」かを制御します。

    f_t = \sigma(W_f [h_{t-1}, x_t] + b_f)
  2. 入力ゲート (i_t)
    どの情報を「記憶」に追加するかを制御します。

    i_t = \sigma(W_i [h_{t-1}, x_t] + b_i)

    記憶の候補値:

    \tilde{C}_t = \tanh(W_C [h_{t-1}, x_t] + b_C)
  3. 出力ゲート (o_t)
    どの情報を「出力」として使うかを制御します。

    o_t = \sigma(W_o [h_{t-1}, x_t] + b_o)

状態の更新

  • セル状態 (C_t):

    C_t = f_t \cdot C_{t-1} + i_t \cdot \tilde{C}_t
  • 内部状態 (h_t):

    h_t = o_t \cdot \tanh(C_t)

この仕組みにより、LSTMは必要な情報を長期間にわたって保持し、不必要な情報を忘れることで、長期依存問題を緩和します。

2. GRU(ゲート付き回帰ユニット)

概要

GRUでは、「忘却ゲート」と「入力ゲート」を統合し、2つのゲートだけを使用します。LSTMよりもパラメータが高速です。:

  • 更新ゲート: 過去の情報をどれだけ保持するか決める。
  • リセットゲート: 過去の情報をどれだけ無視するか決める。

数式

  1. 更新ゲート (z_t)
    過去の情報をどれだけ保持するかを制御します。

    z_t = \sigma(W_z [h_{t-1}, x_t] + b_z)
  2. リセットゲート (r_t)
    過去の情報をどれだけ無視するかを制御します。

    r_t = \sigma(W_r [h_{t-1}, x_t] + b_r)

状態の更新

  • 新しい内部状態 (\tilde{h}_t):

    \tilde{h}_t = \tanh(W [r_t \cdot h_{t-1}, x_t] + b)
  • 最終的な内部状態 (h_t):

    h_t = z_t \cdot h_{t-1} + (1 - z_t) \cdot \tilde{h}_t

GRUは計算がLSTMより軽量で、ほぼ同等の性能を発揮します。

LSTM/GRUのメリット

  • ゲート機構により、重要な情報を保持しつつ不必要な情報を忘れるという制御が可能。
  • 勾配消失を防ぎ、長期依存関係を学習できる。
  • GRUはLSTMに比べて構造が簡単で計算効率が良い。

結論

  • RNNは内部状態の再帰構造により、時系列依存を捉えるが、勾配消失/爆発が起きやすい。
  • LSTMやGRUはゲート機構を導入し、必要な情報を選択的に保持・忘却することで、これらの問題を解決し、長期依存問題に強いモデルとして活用されています。

Discussion