梯度消失(Vanishing Gradient):深度學習為何會「短期記憶喪失」
1. 引言:"老闆,聲音聽不到!"
上一次,我們了解了透過反向傳播(Backpropagation)將輸出層的誤差(Loss)傳遞回輸入層進行學習。理論上,層數越深(Deep)就能解決越複雜的問題。
然而,直到 2000 年代初,深度學習仍處於暗淡期。當層數堆疊到 10 層、20 層時,反而出現性能下降或根本無法學習的現象。
情境如下:
- CEO(輸出層): "嘿!產品品質怎麼這麼差!(Loss 發生)"
- 高層 → 部門經理 → 主管…: 這股衝擊應該往下傳遞,
- 新進員工(輸入層): "…?上面說了什麼?我什麼也聽不到?"
最關鍵的前端(輸入層)參數無法被更新,這就是 梯度消失(Vanishing Gradient) 問題。
2. 原因分析:罪魁禍首是「Sigmoid」與「乘法」的結合
為什麼訊號會消失?罪魁禍首是我們長期以來視為深度學習標準的 激活函數 Sigmoid 與 鏈式法則(Chain Rule) 的數學特性。
(1) Sigmoid 的背叛:"過度壓縮的濾鏡"
早期研究者喜愛 Sigmoid,因為它輸出 0 到 1 的值,像是神經元的發火機率。然而從開發者角度看,Sigmoid 就是「把輸入值壓縮」的壓縮機。
- 問題 1:梯度上限(Max Gradient = 0.25)
- 取 Sigmoid 的導數可知,最大值僅 0.25(僅在 x=0 時)。
- 當輸入值稍微偏離 0 時,梯度幾乎趨近 0。
- 形象地說,像把麥克風音量調到最低,無論喊多大聲,傳遞的都是耳語。
(2) 鏈式法則的悲劇:"0.25 的 N 次方"
深度學習的核心更新公式是:
[ w = w - (學習率 \times 梯度) ]
梯度必須存在,才能更新權重。
反向傳播時,從輸出層到輸入層的導數不斷相乘。假設有 30 層,哪怕每層都得到最大值 0.25,結果仍是:
[ 0.25 \times 0.25 \times \dots \times 0.25 \,(30\text{ 次}) \approx 8\times10^{-19} ]
- 結果: 輸入層附近的梯度已低於計算機可表示的下限,直接變成 0(Underflow)。
- 現象: 前端層的權重更新式變成
w = w - 0,學習停滯。 - 比喻: 就像「封包遺失率 99.99% 的網路」,即使後端發送錯誤日誌,前端伺服器也收不到。
3. 解決方案 1:ReLU - "拋棄模擬,走向數位"
解決這個問題的英雄不是複雜的數學,而是一行簡單的程式碼:ReLU(Rectified Linear Unit)。
Jeffrey Hinton 團隊提出時,大家都驚訝:
(1) 導數革命:"1 或 0"
ReLU 的實作如下:
def relu(x):
return max(0, x)
其導數非常明確:
- x > 0(激活): 梯度為 1。
- x ≤ 0(非激活): 梯度為 0。
為什麼重要?在正區間內,無論相乘多少次,梯度不會衰減:
[ 1 \times 1 \times 1 \times \dots \times 1 = 1 ]
ReLU 讓原本被 Sigmoid 消耗的訊號以 無損失 的方式傳遞,CEO 的喊聲能夠清晰傳到 100 層以外的新人。
(2) 性能優化:exp() vs if
Sigmoid 需要計算 exp(x),在 CPU/GPU 上相當昂貴;ReLU 只需一次比較 if x > 0,速度快得多。
(3) 注意事項:Dying ReLU
若輸入為負,梯度為 0,神經元可能永遠不會復活(Dying ReLU)。為此,Leaky ReLU 等變體在負區間給予微小梯度。
4. 解決方案 2:ResNet(殘差連結)- "專用熱線"
有了 ReLU,20~30 層已可堆疊。但人類的貪婪不止於此,想要 100 層、1000 層。此時學習再次失敗。ResNet(Residual Network)成為救世主。
(1) 思路:"只學習變化量"
傳統網路試圖從輸入 x 直接學出完整輸出 H(x)。ResNet 的核心是 Skip Connection(捷徑):
[ Output = F(x) + x ]
這表示:
- 模型不必「重新創造一切」;
- 只需學習「相對於原始輸入的差異(Residual)」。
(2) 反向傳播高速公路(Gradient Superhighway)
在反向傳播時,求導時加法會分配:
[ \frac{\partial Output}{\partial x} = \frac{\partial F(x)}{\partial x} + 1 ]
即使 F(x) 的梯度消失,至少還保留了 1 的梯度,確保訊號能順利傳遞到前端。
- 舊式: 梯度消失 → 停滯。
- ResNet: 透過捷徑,梯度像高速公路般直達輸入層。
這使得我們能夠構建 152 層(ResNet-152)甚至 1000 層的網路。
5. 結論:工程勝利結束深度學習的寒冬
梯度消失問題看似理論上的極限,實際上是工程層面的挑戰。解決方案並非新數學公式,而是簡單的工程技巧。

- ReLU: 拋棄複雜運算,保持線性。
- ResNet: 為阻塞的路徑開闢捷徑。
這兩項技術已成為 Transformer(GPT)、CNN 等現代架構的基礎。
在設計 PyTorch 模型時,若看到 return x + layer(x),就能理解:
"啊,已經安裝了安全帶(Shortcut)以防梯度消失。現在可以放心堆疊層數了!"
目前沒有評論。