梯度消失問題
訓練深度網路意味著把誤差訊號從輸出反向送過每一層,告訴每個權重該如何改變。梯度消失問題就是該訊號在反向傳遞時逐漸縮小,以致它抵達早期層時已萎縮到幾乎為零——而收到近乎零梯度的權重幾乎不更新,於是深度網路最前面的幾層學得痛苦地慢、甚至完全不學。網路在紙面上有深度,實際上卻用不了。它的鏡像,梯度爆炸問題,則是訊號不縮反漲,產生巨大不穩定的更新與 NaN。
起因是連鎖律,它使反向傳播把許多因子相乘。抵達早期層的梯度是一長串逐層項的乘積——大致是各層權重乘以激活函數的導數,一級接一級。若這些因子通常小於一,它們的乘積便隨深度指數衰減(0.8 自乘五十次基本上是零);若通常大於一便爆炸。飽和型激活函數使這在早期網路中格外嚴重:sigmoid 與 tanh 的導數分別至多 0.25 與 1,且當輸入很大時斜率趨近零,所以一大疊它們把梯度扼殺到無。這就是為何在 2010 年代中期之前,訓練超過寥寥數層的網路出了名地困難。
修正之道主要是架構性的,合力解鎖了極深的現代視覺。非飽和激活函數,尤其是 ReLU(對正輸入導數恰為 1,故不會縮小梯度),取代了 sigmoid 與 tanh。細心的權重初始化(ReLU 用 He 初始化、tanh 用 Xavier/Glorot)設定初始尺度,使訊號變異數跨層被保留而非衰減。正規化層(批次與層正規化)讓激活值維持在健康範圍,使導數行為良好。對遞迴網路,LSTM 與 GRU 的閘控創造出一條近乎恆等的路徑,把梯度帶過許多時間步。
對深度而言決定性的修正是 ResNet 的殘差連接(He 等人,2015)。藉由把一層的輸入直接加到它的輸出——y = x + F(x)——殘差區塊創造出一條「梯度高速公路」:那個 +x 項意味著梯度能原封不動地反向流過該加法,完全繞過 F 的乘性衰減。這個單一想法使訓練 50、100、甚至 1000 層的網路成為常態,並成為幾乎每個現代深度模型的結構骨幹,從 ResNet 到 ViT、DETR 與擴散模型內部的 transformer 區塊。
梯度消失與梯度爆炸是同一種乘性不穩定的兩個面向,有互補的修正:殘差連接、正規化與良好初始化對抗消失,而梯度裁剪是防範爆炸的標準守衛。深度模型通常需要同時具備兩種防禦。