🔄 梯度消失同爆炸示範

調節網絡參數,觀察唔同設定對梯度流動嘅影響:

正常
梯度狀態
1.00
輸入層梯度
0
訓練輪次
網絡深度 5
權重初始化大小 1.0
激活函數斜率 1.0

梯度觀察重點:

  • 梯度消失:深層網絡嘅梯度接近於零,前層參數學唔到嘢
  • 梯度爆炸:梯度變得非常大,導致參數更新過度,網絡不穩定
  • 解決方法:跳接連接、層正規化、梯度裁剪、適當初始化

梯度消失同爆炸係乜嘢?

喺訓練深度神經網絡時,梯度係用嚟更新參數嘅關鍵信號。當梯度出現極端情況時,會產生兩個問題:

梯度消失 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,連乘後會增長好快(爆炸)

解決方法

  1. 合適初始化:Xavier/Glorot (sigmoid)、He (ReLU)
  2. 改用更好嘅激活函數:ReLU、LeakyReLU 代替 sigmoid
  3. 層正規化:控制每一層嘅輸出範圍
  4. 跳接連接:允許梯度繞過某些層直接傳遞
  5. 梯度裁剪:限制梯度嘅最大範數

點用呢個示範

  1. 調節網絡深度、權重大小、激活函數斜率,觀察梯度變化
  2. 試試「引發消失」同「引發爆炸」按鈕,即刻見到兩種問題
  3. 揀啲解決方法(跳接、層正規化、梯度裁剪),睇下佢哋點樣幫手穩定訓練
  4. 觀察梯度流動同埋Loss曲線嘅變化