Skip to content

Backpropagation 如何重用 Chain Rule|CMU 07-280 第 12 堂

2026年8月22日1 分鐘
TL;DRLecture 12 把神經網路視為 computation graph:forward pass 保存中間量,backward pass 從 loss 開始傳遞 upstream gradient,並用線性層、activation 與 softmax 的局部規則一次算出全部參數梯度。

🌏 English version

影片狀態:已查核:官方公開頁未列對應錄影。 影片來源與說明

Spring 2026 第 12 講的官方題名是 Neural Networks (cont.),日期為 2 月 19 日;本文標題用 Backpropagation,是因為公開 slides 的主體正是向量化反向傳播。Fall 2026 把該講直接改名 Backpropagation,但本文的版本與材料仍鎖定 Spring。官方課表未列逐講公開錄影連結。

承上問題:會表示,不等於算得出梯度

Lecture 11 已定義 multilayer network。若為每個 weight 個別展開 chain rule,同一段路徑的導數會重算很多次。Backprop 的關鍵不是新微積分,而是 dynamic programming:一個節點先彙總下游傳回的 gradient,再把結果分配給它的輸入與參數。

Universal approximation theorem 只說適當寬度的網路能近似廣泛函數;它不保證有限資料下會 generalize、不保證 gradient descent 找到那組參數,也不說所需網路很小。表達能力與可訓練性是兩個問題。

完整概念脈絡:forward 保存值,backward 傳遞敏感度

對一層 z=Wa+b,若 backward 收到 δz=∂J/∂z,局部規則是:

∂J/∂a = Wᵀ δz
∂J/∂W = δz aᵀ
∂J/∂b = δz

第一式把 sensitivity 傳回前層;後兩式產生本層參數梯度。對 element-wise sigmoid:

δz = δa ⊙ a ⊙ (1-a)

對 ReLU,正的 pre-activation 讓 gradient 通過,負值把它截成零。Forward pass 因此要保存 a 或 z,backward 才能使用局部 derivative。

Softmax 單獨求 Jacobian 看似複雜,但和 cross-entropy 合併後,logits 的梯度簡化為:

∂J/∂z = ŷ - y

這和 Lecture 9 的 logistic gradient 是同一個結構:預測機率減去真實 one-hot。HW6 特別要求推導這個結果,因為實作時合併 layer 能避免建立完整 K×K Jacobian。

可重做推導:兩層線性網路的一個 backward pass

令:

x=[2,1]ᵀ, W=[3,-1], b=0
z=Wx=5, J=(z-y)², y=4

先從 loss 開始:∂J/∂z=2(z-y)=2。套線性層規則:

∂J/∂W = 2 xᵀ = [4,2]
∂J/∂b = 2
∂J/∂x = Wᵀ 2 = [6,-2]ᵀ

這個例子很小,卻完整展示 upstream gradient 的角色。若前面再接一層,∂J/∂x 就不是拿來更新資料,而是作為前一層收到的 gradient。

Recitation/HW 對應

Recitation 6 以具體 2→2→1 網路手算兩個 weight derivatives,要求把 chain expression 一段一段寫出。HW6 再把相同工作向量化:linear layer 的 input、weight、bias gradients,sigmoid 的 Hadamard product,以及 softmax-cross-entropy 的 ŷ-y。

這份 HW 是目前公開材料中最接近「自己實作 autograd primitive」的部分。不過只有 written PDF 並不包含完整 autograder 與 staff feedback;匿名自學應另外寫 finite-difference gradient check。

延伸對照:backprop 與 gradient descent 不是同一件事

Backprop 計算 ∇θJ;gradient descent 決定怎麼用它更新 θ。前者是 efficient differentiation,後者是 optimization rule。SGD、momentum 或 Adam 都能使用 backprop 產生的 gradient。把兩者混成一個名詞,會無法定位問題到底出在 derivative、learning rate 還是 optimizer state。

下一講暫停模型推導,改問更高一層的問題:即使我們能有效最佳化 objective,那個 objective 是否真的代表人類想要的結果?

今晚可以做的動作

實作 linear_forward 與 linear_backward,再用中央差分檢查一個 weight:(J(w+ε)-J(w-ε))/(2ε)。讓 analytic 與 numerical gradient 的相對誤差低於你設定的容忍值,再加入 sigmoid。最後用一筆三類 one-hot 資料驗證 softmax-cross-entropy 對 logits 的 gradient 是 ŷ-y。

課程影片來源

已核對 Spring 2026 官方課表:對應講次公開列出投影片、講義與練習,未列本課講次的公開錄影連結,因此本文提供教材入口,沒有對應講次播放器。課表中的 Géron/Karpathy 影片是延伸閱讀,CMU-Qatar NumPy 錄影是另列的 Recitation 0,均不能當成本文講次錄影。

官方來源:

查核日期:2026-10-10。

官方材料與讀取範圍

本文使用 Lecture 12 slides、Neural Networks pre-reading、Recitation 6 解答及 HW6。Slides 先談 universal approximation,再用 scalar 與 matrix calculus 展開 backprop;本文不把 theorem 誤讀成「任何網路都容易訓練」。

更新紀錄

  • 2026-10-10:標註影片狀態,核對錄影來源與取得方式。
  • 2026-10-10:重查影片狀態。即時回官方課程頁與公開影音來源查證,仍未找到該講公開錄影,狀態維持不變。

參考資料