勾配の消失と爆発

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

David Cecchini

Data Scientist

RNNモデルの学習

展開したRNNモデル。文末まで各入力語への順伝播と、時間方向の誤差逆伝播で重みを更新する様子

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

順伝播と関与する変数の数式定義を表示

例: $$a_2 = f(W_a, a_1, x_2)$$

$$= f(W_a, f(W_a, a_0, x_1), x_2)$$

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

誤差逆伝播の段階と数式定義を示す

次を思い出してください:

$$ a_T = f(W_a, a_{T-1}, x_T) $$

$a_T$ は $a_{T-1}$ に依存し、$a_{T-1}$ は $a_{T-2}$ と $W_a$ に依存…と続きます。

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

BPTT の続き

導関数を計算すると

$$ \frac{\partial a_t}{\partial W_a} = (W_a)^{t-1}g(X) $$

  • $(W_a)^{t-1}$ は 0 に収束し得る

  • または $+\infty$ に発散し得る!

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

勾配問題の解決策

既知の対策:

勾配爆発

  • クリッピング/スケーリング

勾配消失

  • 行列 W の初期化を改善
  • 正則化を用いる
  • tanh/sigmoid/softmax の代わりに ReLU
  • LSTM または GRU を使用!
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

練習しましょう!

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

Preparing Video For Download...