作者:LogM
本文原載於 https://segmentfault.com/u/logm/articles ,不允許轉載~
文章中的數學公式若無法正確顯示,請參見:正確顯示數學公式的小技巧
1. RNN
$$H_t = \phi(W_{xh}X_t + W_{hh}H_{t-1} + b_h)$$
$$O_t = W_{hq}H_t + b_q$$
其中,$\phi$ 爲激活函數。RNN 容易出現"梯度爆炸"和"梯度衰減",應對梯度衰減的方式是使用 GRU 或 LSTM,應對梯度爆炸的方式是"裁剪梯度":
$$min(\frac{\theta}{||g||})g$$
其中,$g$ 爲求得的梯度,限制梯度的 $L_2$ 範數的值不超過 $\theta$。
2. GRU
- 重置門:
$$R_t = \sigma(W_{xr}X_t + W_{hr}H_{t-1} + b_r)$$
- 更新門:
$$Z_t = \sigma(W_{xz}X_t + W_{hz}H_{t-1} + b_z)$$
- 候選隱狀態:
$$\tilde{H_t} = tanh[W_{xh}X_t + W_{hh}(R_t \odot H_{t-1}) + b_h]$$
- 隱狀態:
$$H_t = Z_t \odot H_{t-1} + (1-Z_t) \odot \tilde{H_t}$$
其中,$\sigma$ 爲 sigmoid 函數,$\odot$ 表示 element-wise 乘法。
3. LSTM
- 輸入門:
$$I_t = \sigma(W_{xi}X_t + W_{hi}H_{t-1} + b_i)$$
- 遺忘門:
$$F_t = \sigma(W_{xf}X_t + W_{hf}H_{t-1} + b_f)$$
- 輸出門:
$$O_t = \sigma(W_{xo}X_t + W_{ho}H_{t-1} + b_o)$$
- 候選記憶細胞:
$$\tilde{C_t} = tanh(W_{xc}X_t + W_{hc}H_{t-1} + b_c)$$
- 記憶細胞:
$$C_t = F_t \odot C_{t-1} + I_t \odot \tilde{C_t}$$
- 隱狀態:
$$H_t = O_t \odot tanh(C_t)$$
4. 參考資料
- 動手學深度學習:https://github.com/d2l-ai/d2l-zh