梯度消失同爆炸係乜嘢?
喺訓練深度神經網絡時,梯度係用嚟更新參數嘅關鍵信號。當梯度出現極端情況時,會產生兩個問題:
梯度消失 Vanishing
當梯度喺網絡深層嘅反向傳播過程中變得極小,接近零時,前層嘅權重幾乎唔會更新,導致模型學習停滯。
- 原因:激活函數嘅斜率持續小於1(例如sigmoid最大斜率0.25)
- 影響:深層網絡嘅早期層學習極慢或完全停止
- 好似:「傳聲筒」每個人細聲80%,傳10個人後聽唔到原信息
梯度爆炸 Exploding
當梯度喺反向傳播過程中變得極大時,會導致參數更新過度,Loss發散或變成NaN,網絡訓練崩潰。
- 原因:權重過大或激活函數斜率大於1
- 影響:參數更新過度,網絡不穩定,Loss激增
- 好似:八卦新聞人人加鹽加醋20%,傳幾個就變世界末日
點解會發生?
反向傳播本質上係連乘操作。一個L層網絡嘅梯度計算:
∂Loss/∂W_l = ∂Loss/∂a_L × ∂a_L/∂a_{L-1} × … × ∂a_{l+1}/∂a_l × ∂a_l/∂W_l
呢個連乘嘅關鍵係:
- 如果每層乘數 < 1,連乘後會趨近零(消失)
- 如果每層乘數 > 1,連乘後會增長好快(爆炸)
解決方法
- 合適初始化:Xavier/Glorot (sigmoid)、He (ReLU)
- 改用更好嘅激活函數:ReLU、LeakyReLU 代替 sigmoid
- 層正規化:控制每一層嘅輸出範圍
- 跳接連接:允許梯度繞過某些層直接傳遞
- 梯度裁剪:限制梯度嘅最大範數
點用呢個示範
- 調節網絡深度、權重大小、激活函數斜率,觀察梯度變化
- 試試「引發消失」同「引發爆炸」按鈕,即刻見到兩種問題
- 揀啲解決方法(跳接、層正規化、梯度裁剪),睇下佢哋點樣幫手穩定訓練
- 觀察梯度流動同埋Loss曲線嘅變化