反向傳播
反向傳播是網路學習的方式:在前向傳播產生一個預測與一個損失(衡量錯得多離譜的數字)之後,反向傳播算出每一個權重對該誤差貢獻了多少,於是每個權重都能被微調以降低誤差。巧妙之處在於對數百萬個參數一次性地高效完成此事。其想法是逐層往回分配「責任」:輸出層的誤差可直接得知,再用微積分的連鎖律(chain rule)把該誤差傳播到前面的層。
反向傳播就是套用在損失上的反向模式自動微分。連鎖律說,要得到損失 L 對某個前層參數的梯度,你要沿著從該參數到 L 的路徑把局部導數相乘。具體地,從輸出開始計算誤差訊號 delta^(L) = dL/dz^(L),再用 delta^(l) = (W^(l+1))^T·delta^(l+1) 並逐元素乘上 phi'(z^(l)) 往回傳播(轉置把誤差送回前一層,phi' 套上激活的局部斜率),然後讀出參數梯度 dL/dW^(l) = delta^(l)·(a^(l-1))^T 與 dL/db^(l) = delta^(l)。
對一個多輸入(參數)、單輸出(純量損失)的函數,反向模式微分在單一次反向傳播中算出所有梯度,成本約與一次前向傳播相當,遠比逐一擾動每個參數便宜(後者每個參數要花一次前向傳播,在數十億權重下毫無希望)。這個不對稱性正是深度學習在計算上可行的全部原因。梯度接著交給最佳化器(SGD、Adam),由它逆著梯度方向走一小步。
反向傳播只計算梯度;它本身並不保證學得起來。它的連乘鏈正是讓極深或遞迴網路苦於梯度消失或爆炸的原因,這促成了 ReLU 激活、謹慎的權重初始化、正規化層以及殘差(skip)連接。ResNet 的 skip 連接造出一條梯度捷徑,讓誤差訊號無損地抵達前層,這正是擁有數百層的網路得以訓練的原因。每個視覺模型,從 CNN 到 ViT 到擴散模型的 U-Net,都是靠反向傳播訓練的。
對單一線性單元 y_hat = wx + b、平方誤差損失 L = (y_hat - y)^2,連鎖律給出 dL/dw = 2(y_hat - y)·x 與 dL/db = 2(y_hat - y)。共用的因子 2(y_hat - y) 就是誤差訊號 delta;反向傳播算它一次,並在兩個梯度中重複使用。
為何重要:反向傳播是精確的,不是近似;給定計算圖,它在浮點誤差範圍內計算出真正的梯度。近似的是最佳化(隨機、在小批次上進行)與模型本身,而非微分。