詳細解釋
梯度裁剪(Gradient Clipping)是防止梯度爆炸的技術,當梯度范數超過閾值時進行縮放,穩定循環神經網絡和深度網絡的訓練。
為何需要:
- 梯度爆炸:RNN、Transformer中常見
- 長期依賴:反向傳播時梯度連乘指數增長
- 損失突增:梯度爆炸導致損失變為NaN
- 訓練失敗:不裁剪可能導致模型崩潰
裁剪方法:
- 值裁剪(Value Clipping):
- 將梯度限制在[-threshold, threshold]
- 簡單但破壞梯度方向
- 范數裁剪(Norm Clipping):
- 計算梯度L2范數
- 如果超過max_norm則縮放
- 保持梯度方向
- 推薦方法
典型設置:
- 閾值:1.0到5.0
- RNN/LSTM:通常1.0-5.0
- Transformer:通常1.0
- 大批次:可能需要更大閾值
實現:
- PyTorch:torch.nn.utils.clip_grad_norm_
- TensorFlow:tf.clip_by_norm
- 自動裁剪:部分框架內建
與其他穩定技術:
- 殘差連接:緩解梯度消失
- 層正規化:穩定每層輸入分布
- 梯度裁剪:專門解決梯度爆炸
使用時機:
- 必須:RNN、Transformer訓練
- 建議:深度網絡(>20層)
- 可選:淺層網絡通常不需要
梯度裁剪是訓練序列模型和深層網絡的必備技術。