你有沒有訓練過模型,突然 loss 飆高、參數變亂,甚至直接變成 NaN?
你可以把它想成,反向傳播時的梯度太大,更新一步跨太遠,模型一下子就失去控制。
梯度爆炸常出現在深層網路或長序列模型裡,處理不好時,訓練會又不穩又難收斂。
你可以把它想成一個把抽象概念拉回日常判斷的提示,先知道它解決什麼問題,再看技術細節。
容易混淆
梯度爆炸 vs 梯度消失 梯度消失是訊號傳回去越來越小,學習像踩不到油門。 梯度爆炸是訊號越傳越大,更新像直接衝出車道。 最關鍵的區別:是太小,還是太大。
梯度爆炸 vs 學習率太高 學習率太高也會讓更新過猛。 梯度爆炸是梯度本身放大;學習率太高則是每一步都踩太重。 最關鍵的區別:問題出在梯度,還是出在步幅。
梯度爆炸 vs 訓練資料有雜訊 資料雜訊會讓模型學得不穩。 梯度爆炸更像數值運算在訓練過程中失控。 最關鍵的區別:資料問題,還是數值穩定問題。
記住這句就好
梯度一失控,更新就會衝過頭。
實際案例
RNN 處理很長的序列 長序列反向傳播時,梯度可能一路放大,最後讓模型發散。 Before:學到一半就不穩。After:加梯度裁剪後,訓練曲線通常會穩很多。
深層網路訓練初期 如果初始化、學習率或正規化沒調好,梯度可能在前幾輪就爆掉。 Before:loss 抖動非常大。After:把更新幅度壓住,才有機會正常收斂。
算法與應用
常見緩解方法有梯度裁剪、較小的學習率、合適的初始化、批次正規化與權重正則化。
如果你在 RNN、LSTM、Transformer 訓練中看到數值不穩,先檢查梯度大小和更新步幅。
實務上,梯度爆炸和梯度消失常一起出現,通常要一起排查。
情境判斷
Q1(直覺題): 為什麼梯度爆炸會讓訓練不穩?
→ 因為權重更新太大,模型會一下跳過好解,甚至直接發散。
Q2(判斷題): 看到 loss 很震盪,就一定是梯度爆炸嗎?
→ 看情況。也可能是學習率太高、資料太吵或初始化不佳,所以要一起排查。
常見問題
梯度裁剪怎麼幫忙?
它會把過大的梯度縮回合理範圍,避免一步更新太猛。
除了梯度裁剪還有別的方法嗎?
有,像是降低學習率、調整初始化、加批次正規化或做正則化,都能幫忙。
梯度爆炸一定只出現在 RNN 嗎?
不一定。深層網路、殘差堆疊或長序列訓練都可能遇到。