梯度消失與爆炸

使用 Keras 建立語言模型的循環神經網路(RNN)

David Cecchini

Data Scientist

訓練 RNN 模型

RNN 模型展開版,顯示從一個輸入詞到句尾的前向傳播,以及穿越時間的反向傳播用來更新權重

使用 Keras 建立語言模型的循環神經網路(RNN)

顯示前向傳播階段與相關變數的數學定義

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

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

使用 Keras 建立語言模型的循環神經網路(RNN)

顯示反向傳播階段與數學定義

請記住:

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

$a_T$ 也依賴 $a_{T-1}$,而 $a_{T-1}$ 依賴 $a_{T-2}$ 與 $W_a$,以此類推!

使用 Keras 建立語言模型的循環神經網路(RNN)

BPTT(續)

計算導數會得到

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

  • $(W_a)^{t-1}$ 可能收斂到 0

  • 或發散到 $+\infty$!

使用 Keras 建立語言模型的循環神經網路(RNN)

梯度問題的解法

常見解法:

梯度爆炸

  • 梯度裁剪/縮放

梯度消失

  • 更好的初始化矩陣 W
  • 使用正規化
  • 用 ReLU 取代 tanh/sigmoid/softmax
  • 改用 LSTM 或 GRU 單元!
使用 Keras 建立語言模型的循環神經網路(RNN)

一起來練習吧!

使用 Keras 建立語言模型的循環神經網路(RNN)

Preparing Video For Download...