反向傳播(Backpropagation):AI 如何追蹤錯誤的「罪魁禍首」 (feat. 鏈式法則)
1. 引言:罪魁禍首就在這裡
在前一篇文章中,我們了解到微分是「告訴我們參數應往哪個方向調整才能減少錯誤的指南針」。
然而深度學習面臨一個致命問題:模型太深(Deep)。
從輸入層到輸出層,層數可能只有數十甚至數百層。
情境:輸出層發現「哇!結果跟正確答案相差十個單位!」,錯誤(Loss)爆發。
問題:究竟誰負責?
我們無法確定是靠近輸入層的參數造成的蝴蝶效應,還是靠近輸出層的參數在最後一刻搞砸了。
此時,深度學習會用一個巧妙的方法找出罪魁禍首:「把責任推給身後的那個人」(Chain Rule)。
2. 鏈式法則(Chain Rule):「責任轉嫁」的數學定義
數學教科書中,鏈式法則寫作:
$$\frac{dz}{dx} = \frac{dz}{dy} \cdot \frac{dy}{dx}$$
對開發者來說,這看起來只是個公式,但從組織管理角度來看,它實際上是「責任分配」。
想像一下:A團隊長(輸入) -> B部門長(隱藏) -> C董事(輸出) 的審批流程。
- C董事(輸出層) 失敗了(發生錯誤)。
- C董事不想全責,分析說:「B部門長給的報告太亂,我的結果也亂了。」($\frac{dz}{dy}$:我的結果被 B 影響了多少)
- B部門長反駁:「不,A團隊長給的基礎資料怪異,我的報告也怪異!」($\frac{dy}{dx}$:我的結果被 A 影響了多少)
最終,A團隊長對整個專案(z)的負面影響($\frac{dz}{dx}$)等於 (C 轉嫁給 B 的份量) × (B 轉嫁給 A 的份量)。
這就是鏈式法則:把遠距離的因果關係通過中間步驟的乘法連接起來。
3. 反向傳播(Backpropagation):倒灌式除錯
這個「責任轉嫁」的流程被擴展到整個系統,形成了反向傳播。
- Forward(順傳):輸入資料,得到結果(先完成工作)。
- Loss Calculation:與正確答案比較,計算誤差(發生事故)。
- 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 如何解決?(提示:ReLU 與 ResNet)

目前沒有評論。