反向傳播(Backpropagation):AI 如何追蹤錯誤的「罪魁禍首」 (feat. 鏈式法則)

1. 引言:罪魁禍首就在這裡



在前一篇文章中,我們了解到微分是「告訴我們參數應往哪個方向調整才能減少錯誤的指南針」。

然而深度學習面臨一個致命問題:模型太深(Deep)。

從輸入層到輸出層,層數可能只有數十甚至數百層。

情境:輸出層發現「哇!結果跟正確答案相差十個單位!」,錯誤(Loss)爆發。

問題:究竟誰負責?

我們無法確定是靠近輸入層的參數造成的蝴蝶效應,還是靠近輸出層的參數在最後一刻搞砸了。

此時,深度學習會用一個巧妙的方法找出罪魁禍首:「把責任推給身後的那個人」(Chain Rule)

2. 鏈式法則(Chain Rule):「責任轉嫁」的數學定義

數學教科書中,鏈式法則寫作:

$$\frac{dz}{dx} = \frac{dz}{dy} \cdot \frac{dy}{dx}$$

對開發者來說,這看起來只是個公式,但從組織管理角度來看,它實際上是「責任分配」。

想像一下:A團隊長(輸入) -> B部門長(隱藏) -> C董事(輸出) 的審批流程。

  1. C董事(輸出層) 失敗了(發生錯誤)。
  2. C董事不想全責,分析說:「B部門長給的報告太亂,我的結果也亂了。」($\frac{dz}{dy}$:我的結果被 B 影響了多少)
  3. B部門長反駁:「不,A團隊長給的基礎資料怪異,我的報告也怪異!」($\frac{dy}{dx}$:我的結果被 A 影響了多少)

最終,A團隊長對整個專案(z)的負面影響($\frac{dz}{dx}$)等於 (C 轉嫁給 B 的份量) × (B 轉嫁給 A 的份量)

這就是鏈式法則:把遠距離的因果關係通過中間步驟的乘法連接起來。

3. 反向傳播(Backpropagation):倒灌式除錯



這個「責任轉嫁」的流程被擴展到整個系統,形成了反向傳播

  1. Forward(順傳):輸入資料,得到結果(先完成工作)。
  2. Loss Calculation:與正確答案比較,計算誤差(發生事故)。
  3. Backward(反傳):從輸出層往輸入層回溯,說「因為你,錯誤變成這樣」的過程。

對開發者來說,這就像 從堆疊追蹤(Stack Trace)底部往上閱讀,找出根本原因(Root Cause)

從最終的錯誤訊息(Loss)開始,往上追蹤每個函式呼叫,像 git blame 一樣定位問題。

4. PyTorch 的 Autograd:自動化審計團隊

當我們用 numpy 寫深度學習時,最痛苦的就是手動推導微分公式並編碼。這種矩陣微分往往讓人頭疼。

PyTorch 的偉大之處在於,它把這個複雜的「責任轉嫁」過程畫成 Computational Graph(運算圖),並自動處理。

  • 當你呼叫 loss.backward() 時,
  • PyTorch 的 Autograd 引擎(審計團隊) 立即啟動。
  • 從圖的終點開始,逆向遍歷所有節點,執行鏈式法則(乘法)。
  • 最後為每個參數(Weight)貼上「你的責任份額(Gradient)」的標籤。

我們只需根據這些梯度值更新參數(optimizer.step()),其餘工作交給 Autograd 完成。

5. 結語:但如果責任消失了?(Vanishing Gradient)

即使這套系統看似完美,也存在致命缺陷。

在多次責任轉嫁(乘法)後,層數過深時責任會變成 0,導致梯度消失。

「不是我的錯」× 0.1 × 0.1 × 0.1 … 連續下去,最前面的層會收到「沒有可修正的地方(Gradient = 0)」的錯誤訊號。

這就是著名的 梯度消失(Vanishing Gradient) 問題。現代 AI 如何解決?(提示:ReLUResNet

image of backpropagation