MODULE CALC 4 — RULES & THE CHAIN RULE

微分規則與鏈式法則

這是微積分這一層的第四關(共五關)。 導數關 ② 給了定義(差商 → 極限), 但沒有人每次要斜率都回去算一次極限 —— 這一關給的是規則: 看一眼式子的形狀,直接寫下導數。
五條規則裡最重要的是最後一條 —— 鏈式法則。 它是神經網路反向傳播的心臟:損失對每一個權重的斜率,全靠它一層一層傳回去。
這一關是微積分 04,不算在主線十六關裡。唯一的前置是 導數關 ②(差商與中央差分);圖上的每一條規則都會跟實測數字現場對帳。

① 這關在解什麼問題:為什麼要背規則

導數關給了你什麼 導數關 ② 你已經有導數的定義f′(x) = limh→0 (f(x+h) − f(x))/h) 與量它的程式做法(中央差分,h = 0.001); 給了兩條現成答案 ((ex)′ = ex(ln x)′ = 1/x); 給了「導數可以當尺用」。
缺的只有一件事:遇到 x²ex 這種組合式子,不想每次都展開差商。 這一關補的就是那套規則。

先講它能幹嘛,再講它是什麼

規則不是為了考試而存在。它解決三件很具體的事

  • 不必每次回去算極限x²ex 用差商要展開 ((x+h)²ex+h − x²ex)/h、還要處理 eh 的極限;用乘積規則兩行就寫完
  • 看得出「哪一項在貢獻斜率」:導數是逐項算的(和差規則), 所以你能指著式子說「這一項貢獻了 2x、那個常數貢獻 0」—— 最佳化 03 ⑥ 把風險式子的導數設 0 就是這樣一項一項寫下來的。
  • 可以寫成程式:每個運算子帶著自己的導數規則,套起來就是自動微分; 而「一層套一層」的那條規則(③ 鏈式)反過來算,就是 反向傳播)—— 機器學習訓練的全部機制。

所以這一關的形狀是:② 同一層的四則運算怎麼微分、③ 一層套一層怎麼微分、 ④ 把 ③ 反過來算就是反向傳播。

這些規則在前面關卡的哪些地方已經被用掉了

跟導數關一樣,這一關的存在理由是「已經用了、但沒教」:

在哪用到哪一條你需要哪一節
02 ⑤ 「平方的導數是 2x」= 冪法則 n = 2 ② 冪
最佳化 02 ② f(x) = (x−2)² ⟹ f′(x) = 2(x−2)冪法則 + 鏈式 (內層 x−2 的斜率剛好是 1,所以看起來像沒用到) ·
積分關 ④ · 機率統計 05 ⑤ −e−λt 微分回 λe−λt鏈式(內層 −λt 的斜率是 −λ,那個 λ 就是這樣掉出來的)
基礎 01 ⑥ d/dx 2x = 2x · ln 2鏈式(把 2x 寫成 ex·ln2
最佳化 03 ⑦ 風險 wᵀCw 的導數 2Cw乘積規則的矩陣版w 出現兩次,所以微分兩次相加) ② 乘積;矩陣版在 多變量關 ②
最佳化 01 ⑤⑥ 梯度下降每一步要的「損失對權重的斜率」 ④ 反向傳播

最後一列是這一關真正的目的地:最佳化 01 關讓你看過球怎麼滾下坡, 但那支梯度箭頭是誰算出來的、怎麼算的,一直沒說。答案就是鏈式法則。

本頁符號對照表

這一頁只多兩個符號,其餘都是導數關用過的:

符號唸法它問的是什麼哪一節
f′(x)f prime of x 導數:f 在 x 這一點的斜率(導數關 ② 的定義) 全頁
g′(x)g prime of x 同一件事,只是換一個函數名。兩層機器的「內層」慣例上叫 g
d/dxd d x 「對 x 微分」這個動作d/dx f(x)f′(x) 完全同義,只是把動作寫在前面
f ∘ gf after g(f 圈 g) 合成:先做 g、再把結果餵給 f,也就是 f(g(x))順序是右邊先做
uu 中間那一層的名字:u = g(x),然後 y = f(u)。取名只為了讓鏈式寫得好看
∂L/∂wpartial L partial w 損失對權重的斜率:反向傳播要算的那個數字。 是圓體的 d(因為 L 有很多變數) 多變量關 ②

積分關多變量關 —— 這一頁不會用到它們。 整頁只有一個變數 x,全部是一維的。

微積分這一層有五關,你在第 04 關

五關沒有先後綁定(除了多變量關與這一關預設你讀過導數關)。卡在哪一關就讀對應那一關:

它回答什麼誰在用
導數「這一點斜多少」最佳化 01 的梯度、最佳化 02 的影子價格、最佳化 03 的「導數設 0」、基礎 01 量過的 eˣ 斜率
積分「這一段總共多少」機率統計 02 的面積 = 機率、機率統計 05 的尾巴、機率統計 01 的臨界值、期望值
多變量「兩個以上的變數怎麼斜」最佳化 01 ⑤ 的 ∇f、最佳化 01 ④ 的凸性、最佳化 03 ⑦ 的 2Cw、最佳化 02 的相切
規則(你在這裡)「不算極限,直接寫下導數」02 ⑤ 的 2x、最佳化 02 ② 的 2(x−2)、機率統計 05 ⑤ 的 λe−λt、反向傳播
應用「這些工具在 ML 與交易的哪裡」選擇權 Delta / Gamma、softmax 與交叉熵、log 報酬的期望

這一關是導數關的續集:導數關講「是什麼」,這一關講「怎麼算得快」。 應用關則把兩關的工具接回 ML 與交易的真實場合。

這一關的全部內容,一句話

同一層的加減乘除各有一條規則(② 節五條);一層套一層只有一條規則 —— 把每一層的斜率乘起來(③ 節鏈式)。從最後一層開始往前乘,就叫反向傳播(④ 節)。

五條規則都會在圖上跟中央差分實測對帳;鏈式那條會被拆成一台看得見的兩層機器。

② 微分規則:和差 · 常數倍 · 冪 · 乘積 · 商

上一節給了你什麼 ① 節說明了為什麼需要規則:差商能算出任何導數,但太慢。 這一節把「同一層四則運算」的五條規則一次擺好, 每一條都在下面那張圖上跟中央差分實測對帳 —— 規則不是要你信,是可以現場驗的。

五條規則,一次擺好

( f ± g )′ = f′ ± g′   ( c · f )′ = c · f′
( xn )′ = n · xn−1
( f · g )′ = f′g + fg′   ( f / g )′ = ( f′g − fg′ ) / g² 第一行是和差常數倍:導數可以逐項算,常數倍原封不動提出來。 順帶一個推論:常數的導數是 0(平的線沒有坡度)。
第二行是冪法則n 可以是負數與分數1/x = x−1√x = x1/2 都吃這一條。
第三行左邊是乘積規則不是 f′g′(下面有數字反證)。 右邊是商規則:分子的順序 f′g − fg′ 不能寫反, 分母是
這張圖在幹嘛
你會看到什麼:橘線=你選的函數 f、 綠點=你站的位置 x、 桃紅直線照規則算出來的切線(斜率取自公式)、 藍虛線沿著整條曲線量出來的導數曲線 (每一點都跑一次中央差分,h = 0.001)。
你可以動什麼:拖綠點換位置;七顆按鈕換函數 (多項式 / √x / 1/x / ex / ln x / 乘積 x²ex / 商 ln x ÷ x)。
要看出什麼:讀數盤第二列左邊是公式算的、右邊是實測的 —— 兩個永遠對到小數第六位,差的只是 10−7 級的浮點殘渣。 而桃紅切線只用了公式那一個數字,卻總是剛好貼在曲線上: 這就是「規則算出來的斜率是真的」的視覺版

函數 f(x) 公式算的切線 實測的導數曲線 f′(x) 你站的位置 x
換一個函數
現在這一格在說

五條規則各自的小卡:公式 · 直覺 · 實測數字

下面五張卡點開就有那一條規則的證據。實測欄位全部是 h = 0.001 的中央差分(跟上面那張圖同一支程式), 你可以在圖上把綠點拖到同一個位置對一次。

① 和差規則:(f ± g)′ = f′ ± g′

公式:兩個函數相加,導數就是兩個導數相加(相減同理)。

直覺:兩件事一起發生的時候,總變化 = 各自的變化相加。 水槽有兩根水管,每秒總進水量就是兩根各自的流量相加 —— 不會互相干擾。 這也是為什麼導數可以逐項算:看到 x³ − 2x + 1 就一項一項寫下 3x²−20

實測(圖上第一顆按鈕,f(x) = x³ − 2x + 1,站在 x = 1.5):

怎麼來的f′(1.5)
逐項寫:3x² − 2 + 03(2.25) − 24.750000
中央差分實測(h = 0.0014.750001

差在小數第六位,那是浮點殘渣,不是規則錯。

② 常數倍規則:(c · f)′ = c · f′

公式:常數乘在外面,微分的時候原封不動留在外面。 特例:常數自己的導數是 0c′ = 0)。

直覺:把整條曲線垂直拉成 c 倍,每一段的「上升」都變 c 倍, 「前進」沒變 —— 所以坡度也變 c 倍。而一條水平線(常數)沒有上升,坡度只能是 0。 這就是為什麼 x³ − 2x + 1 裡那個 +1 對斜率完全沒有貢獻。

實測

函數公式算的公式值實測值
−2x(上面那條多項式的中間那項) −2 · (x)′ = −2−2.000000−2.000000
5·ln xx = 2 5 · (1/x) = 5/22.5000002.500000

第二列可以在圖上驗一半:選 ln x、拖到 x = 2,讀數盤會給 0.5 —— 乘 5 就是 2.5。

③ 冪法則:(xⁿ)′ = n · xⁿ⁻¹(n 可以是負數與分數)

公式:指數往下掉到前面當係數,剩下的指數減 1。

直覺n = 2 就是 導數關 ② 那四行代數的結論 ((x+h)² − x² 展開之後剩 2x); 幾何版是 02 ⑤ 那個正方形:邊長多 h, 面積多出兩條長方形2xh)加一個小角落(,可忽略)。 重點是這一條不只吃正整數1/xn = −1√xn = ½

實測(圖上第二、三顆按鈕):

函數n公式公式值實測值
√xx = 4½ ½x−½ = 1/(2√x)0.2500000.250000
1/xx = 2−1 −1·x−2 = −1/x²−0.250000−0.250000
x = 1.53 3x²6.7500006.750001

1/x 那一列的負號要記:往右走高度下降,坡度當然是負的。

④ 乘積規則:(f · g)′ = f′g + fg′(不是 f′ · g′)

公式一次只微分一個,另一個保持原樣,然後兩項相加。

直覺:把 f · g 想成長方形的面積f 是寬、g 是高。x 動一小步, 寬多了 f′h、高多了 g′h, 面積多出兩條長方形(f′h · gf · g′h) 加一個小角落(f′g′h²,兩個 h 相乘,h → 0 時可忽略)。 除掉 h 就剩 f′g + fg′ —— 那個被丟掉的小角落,就是「為什麼不是 f′g′」的答案

實測(圖上第六顆按鈕,f(x) = x² · ex,站在 x = 1):

算法式子對嗎
乘積規則 2x·ex + x²·ex = 3e 8.154845
中央差分實測h = 0.001 8.154851✓ 對上了
錯的做法 f′ · g′ 2x · ex = 2e 5.436564✗ 差了 2.72

再看一個一眼就知道錯的例子:f = g = xf·g = x²x = 3 的導數是 6; 但 f′ · g′ = 1 × 1 = 1差六倍

⑤ 商規則:(f / g)′ = (f′g − fg′) / g²

公式:分子是「上微下不動 減 上不動下微」,分母是

直覺f/g 就是 f · g−1, 所以它其實是乘積規則 + 冪法則(n = −1)+ 鏈式三條合起來的結果 —— 那個減號來自 g−1 微分出來的負號, 來自 g−2 通分。 所以商規則不是第六條新規則,是前面幾條的組合(推導在 讀完鏈式之後自己就寫得出來)。

實測(圖上第七顆按鈕,f(x) = ln x ÷ x,站在 x = 2):

算法式子
商規則 ((1/x)·x − ln x·1) / x² = (1 − ln 2)/4 0.076713
中央差分實測h = 0.0010.076713
分子寫反 (fg′ − f′g)/g²符號整個翻掉 −0.076713

寫反的後果是正負顛倒 —— 在梯度下降裡就是「往山上爬」。 所以商規則的分子順序值得多記一秒。

兩個最常踩的坑

坑 1:乘積規則寫成 f′g′ 上面那張表已經用數字打死它(8.15 vs 5.44; 的 6 vs 1)。 記法:「一次只動一個」 —— 兩項,各動一個。

坑 2:以為 (xn)′ = n·xn(忘了指數要減 1)。 驗算方式很省事:n = 1(x)′ 一定是 1(斜率 45°的直線), 而 1·x0 = 1 ✓; 如果指數沒減 1 就會得到 1·x = x ✗ ——一眼就抓到。

程式上這五條長什麼樣

你在 PyTorch / TensorFlow 裡寫 loss.backward() 的時候, 背後就是這五條規則被寫成程式:每一個運算子都帶著自己的導數規則 (加法、乘法、次方、explog 各一條), 框架把它們按照你的式子串起來。這叫自動微分(autodiff)。

它不是數值微分(不是中央差分那種),也不是符號微分(不是幫你把式子化簡)—— 它是「照著規則一步一步套」。所以它精確到浮點極限, 而中央差分永遠有一點 h 帶進來的誤差 (導數關 ② 那張表)。 上面那張圖故意兩種都算,就是要讓你看到兩者差多少 —— 差在 10−7, 所以在教材裡用哪一個都行;在訓練一億個參數的模型時,就只能用自動微分。

這五條規則只處理「同一層」的組合(相加、相乘、相除)。 真正的難題是「一層套一層」——e−λt 是「先算 −λt、再餵給 exp」。那需要第六條規則,下一節。

③ 鏈式法則:一層套一層,斜率乘起來

上一節給了你什麼 ② 節的五條規則全部處理「同一層」:f + gf · gf / g。 但 積分關 ④ 那條 e−λt最佳化 02 ② 那條 (x−2)²基礎 01 ⑥ 那條 2x 都是套進去的形狀。這一節就是那一條規則 —— 而它同時是整套機器學習訓練的機制。

先講直覺:兩段匯率相乘

你有台幣,想知道「多一塊台幣、最後會變成多少日圓」。中間要換兩次: 台幣 → 美金 → 日圓。假設美金對台幣的匯率是 1/32(多 1 台幣 = 多 0.03125 美金)、 日圓對美金是 150(多 1 美金 = 多 150 日圓)。那麼多 1 台幣 = 多 0.03125 × 150 = 4.69 日圓。

你剛剛用的就是鏈式法則。「匯率」就是斜率(多一單位變多少), 而兩段換算的斜率是相乘的

( f ∘ g )′(x) = f′( g(x) ) · g′(x)  等價寫法:dy/dx = dy/du · du/dx g —— 內層(先做的那一層),它把 x 變成 u = g(x)
f —— 外層(後做的那一層),它把 u 變成 y = f(u)
f′( g(x) ) —— 注意這個括號:外層的斜率要在 u = g(x) 這一點算,不是在 x 那一點。這是最容易錯的地方。
右邊那個寫法(dy/du · du/dx)好記到有點作弊: 看起來就像 du 上下對消。它不是嚴格的證明,但方向永遠對。
這兩張圖在幹嘛
你會看到什麼:上圖是一台兩層機器的示意圖灰箭頭由左往右是前向(x 進去、 先乘上 w 變成 u、再餵給外層 f 變成 y、最後算出損失 L); 藍字是每一層自己的局部斜率綠箭頭由右往左是累積乘起來的結果紅色那一格 L 是 ④ 節的主角,這一節先看左邊兩格)。
下圖是合成函數本人橘線h(x) = f(w·x)桃紅線= 在 x 這一點的切線,它的斜率就是上圖兩個藍字乘起來的那個數
你可以動什麼:拖下圖的綠點換 x; w 滑桿換內層斜率(−2 → 3); 三顆按鈕換外層 f( / eu / ln u)。
要看出什麼:讀數盤最後兩列是這一節的全部證據: 「內層斜率 × 外層斜率」跟「直接量合成曲線的斜率」永遠相等w 調成 2 倍,合成斜率也變 2 倍(內層斜率直接乘進去)。 w 調成負的,合成斜率換號 拖 x:內層斜率不動(它是常數 w),但外層斜率跟著 u 變 —— 因為外層的斜率要在 u = w·x 那一點算。

前向(左 → 右) 每一層的局部斜率 反向累積(右 → 左) 損失 L(④ 節) 合成函數 h(x)
內層斜率 w(u = w·x)
外層 f(u)
現在這一格在說

三個你已經見過的例子,現在有來歷了

下面三條式子分別出現在機率統計 05 關、最佳化 02 關、基礎 01 關,當時都是直接寫下答案。 每一條都是「外層斜率 × 內層斜率」

式子內層 g(斜率)外層 f(斜率)乘起來在某點對帳
e2x 2x2 eueu 2e2x x=1:14.778112
實測 14.778122
1 − e−t/2
機率統計 05 ⑤ · 積分關 ④
−t/2−½ −eu−eu ½e−t/2 t=3:0.111565
實測 0.111565
(x−2)²
最佳化 02 ②
x−21 2u 2(x−2) x=0.5:−3.000000
實測 −3.000000
2x
基礎 01 ⑥
x·ln2ln2 eueu 2x·ln2 x=1:1.386294
實測 1.386294

第二列解答了一個老問題:積分關 ④ 那條密度 λe−λt前面那個 λ 是哪來的 —— 它就是內層 −λt 的斜率被乘進來的。 第四列解答了另一個:基礎 01 ⑥ 那句「換底會多一個常數 ln 2」,那個常數就是內層斜率。

最常見的錯:忘了乘內層斜率

(e2x)′ = e2x錯的, 正確是 2e2x。在 x = 1 對帳:

  • 忘了乘:e² = 7.389056
  • 正確:2e² = 14.778112,中央差分實測 14.778122

差剛好兩倍,也就是漏掉的那個內層斜率。 自我檢查的辦法:問「括號裡面是不是純粹的 x」。 如果裡面是 2x−λtx−2w·x,就一定還要乘一次那一層的斜率。

三層以上:就是連乘

鏈式法則不限兩層。三層 y = f(g(k(x))) 的斜率是:

dy/dx = f′ · g′ · k′ (每一項都在「它自己那一層的輸入」上算) 白話:從最裡面走到最外面,把每一層的斜率乘起來,一層都不能漏。
n 層就是 n 個數字相乘 —— 這件事很簡單,但後果很大: 乘起來的東西可能一路縮小(0.510 ≈ 0.001) 或一路放大(1.510 ≈ 57.7)。 ④ 節會給這兩個現象的名字。

上面那張示意圖其實已經畫了三層(x → u → y → L)—— 只是這一節只用左邊兩層。第三層是損失,下一節接手。

④ 反向傳播:鏈式法則 + 從最後一層往前算

上一節給了你什麼 ③ 節給了鏈式法則(dy/dx = dy/du · du/dx) 與那台兩層機器。這一節只多做一件事:在最右邊接上「損失」,然後從損失開始往左算。 這個動作有名字,叫反向傳播(backpropagation)—— 而它算出來的東西(∂L/∂w)正是 最佳化 01 ⑤⑥ 那支梯度箭頭。

訓練一個模型,只有三步

不管網路多深、參數多少,訓練的每一步都是同樣三件事:

  1. 前向:資料進去,一層一層算到最後,得到輸出 y損失 L(「錯多少」的分數,例如 L = ½(y − t)²t 是正確答案)。
  2. 反向:問「每一個權重動一點,L 會變多少」—— 也就是每個權重的 ∂L/∂w這一步全靠鏈式法則。
  3. 更新w ← w − α · ∂L/∂w —— 往斜率的反方向走一小步。這就是梯度下降最佳化 01 ⑤⑥ 那顆滾下坡的球, 那一關已經有完整的互動視覺化,這裡不重做)。

第 2 步就是這一關的目的地。把 ③ 節那台機器的損失接上, ∂L/∂w 只是三個斜率相乘:

∂L/∂w = ∂L/∂y · ∂y/∂u · ∂u/∂w ∂L/∂y = y − t —— 損失對輸出的斜率 (½(y−t)² 用冪法則 + 鏈式,內層 y−t 斜率 1)。 白話就是「錯了多少、往哪邊錯」。
∂y/∂u = f′(u) —— 那一層自己的局部斜率(③ 節的外層斜率)。
∂u/∂w = x —— 因為 u = w·x, 對 w 微分時 x 是常數係數(常數倍規則)。 所以「輸入越大,這個權重的梯度越大」。
三個相乘 —— 這就是全部。深一層就多乘一個數字。

用 ③ 節那台機器現場算一次

下面這張表吃的是上一節那張圖的當前狀態(回去拖綠點或動 w 滑桿,這裡的數字會跟著變)。正確答案固定設成 t = 2

為什麼要「反向」?因為可以共用

鏈式法則本身沒有方向 —— 那三個數字乘起來,先乘哪個都一樣。 「反向」是效率問題,不是數學問題。

假設網路有 10 層、每層一堆權重。如果從前面往後算, 每一個權重都要自己從頭乘到尾(∂u/∂w 一路乘到 ∂L/∂y)——每個權重都重算一次整條鏈

如果從最後往前算,那條鏈的後半段(∂L/∂y∂L/∂u…)對同一層的所有權重都是同一個數字, 算一次、往前傳、大家共用。這就是「反向」省下的東西: 成本從「參數個數 × 層數」降到「一次前向 + 一次反向」。

所以上面那張示意圖的綠色箭頭是由右往左的: 每往左一格,只做一次乘法(乘上那一層的局部斜率), 而乘完的結果就是下一格要用的東西。

連乘的兩個後果:梯度消失與梯度爆炸

既然 n 層的梯度是 n 個數字相乘,那些數字的大小會累積

  • 每層局部斜率都是 0.5 → 10 層之後 0.510 ≈ 0.00098。 最前面幾層的梯度幾乎是 0,怎麼訓練都不動 ——梯度消失(vanishing gradient)。
  • 每層局部斜率都是 1.5 → 10 層之後 1.510 ≈ 57.7。 更新一步就衝過頭、損失變 NaN ——梯度爆炸(exploding gradient)。

這兩個名詞在深度學習裡出現的頻率極高,而它們的全部內容就是「小於 1 的東西乘很多次會趨近 0」 —— 跟 基礎 01 ⑦ 那個「等距 = 等倍數」是同一個算術。 你在 ③ 節的圖上把 w 拉到 0.2 再看 ∂L/∂w, 就是這件事的兩層迷你版。

實務上的對策(殘差連接、normalization、梯度裁剪、換激活函數)全部是在 控制那串乘數的大小。這一頁不展開,但你現在知道它們在對付什麼。

兩種自動微分:為什麼 ML 選反向

自動微分有兩個方向,差別只在「先乘哪一頭」:

  • 前向模式(forward mode):一次算出「一個輸入所有輸出」的斜率。 輸入少、輸出多的時候划算。
  • 反向模式(reverse mode,也就是反向傳播):一次算出「一個輸出所有輸入」的斜率。 輸出少、輸入多的時候划算。

機器學習剛好是後者的極端:輸出只有一個純量(損失 L), 輸入是幾百萬到幾千億個參數。所以 ML 幾乎只用反向模式 —— 一次反向就拿到所有參數的梯度

代價是要把前向的中間結果存下來(反向時要用),所以訓練吃記憶體。 這就是「batch size 開太大會 OOM」的來歷之一。

拿到 ∂L/∂w 之後的那一步(往反方向走一小步) 在 最佳化 01 ⑤⑥; 多個參數一起看(∇L 是個向量、學習率 α 的上限跟特徵值有關)在 多變量關 ②把這一套接到真正的模型(softmax、交叉熵)在 應用關 ③

⑤ 這關回答了什麼

為什麼要背規則?每次用差商算不行嗎?

行,但太慢,而且看不出結構。差商永遠算得出答案 (導數關 ② 就是這樣量的), 但 x²ex 要展開 ((x+h)²ex+h − x²ex)/h、還要處理 eh 的極限;乘積規則兩行就寫完。

更重要的是規則可以寫成程式:每個運算子帶著自己的導數規則、按式子串起來 —— 那就是自動微分,也是 loss.backward() 背後的東西( 末尾)。

乘積規則為什麼不是 f′ · g′?

因為面積多出來的是兩條長方形,不是那個小角落。f·g 看成寬 f、高 g 的長方形: x 動一小步 h,面積增加 f′h·g(右邊長出一條)+ f·g′h(上面長出一條)+ f′g′h²(角落那一小塊)。 除以 h 之後,前兩項留下 f′g + fg′,角落那項還帶著一個 h —— h → 0 時它消失。而 f′g′ 就是那個消失的角落。

數字反證:f = g = xx = 3(x²)′ = 6,但 f′g′ = 1x²exx = 1:正確 8.154845、 錯的做法 5.436564( 的第四張卡)。

鏈式法則一句話是什麼?怎麼確定沒漏乘內層?

一句話:一層套一層的時候,把每一層的斜率乘起來。 (f∘g)′(x) = f′(g(x))·g′(x) —— 注意外層的斜率要在 u = g(x) 那一點算,不是在 x。

檢查方式:看括號裡面是不是「純粹的 x」。 如果裡面是 2x−λtx−2w·x,就一定還要再乘一次那一層的斜率。 (e2x)′ 寫成 e2x 會少掉剛好兩倍(7.389 vs 14.778, 的坑)。

機率統計 05 關那條 1 − e−t/2 微分回 ½e−t/2,λ 是哪一步冒出來的?

是內層的斜率。拆成兩層:內層 u = −λt(斜率 −λ)、外層 −eu(斜率 −eu)。乘起來 (−e−λt) × (−λ) = λe−λt —— 兩個負號抵掉,λ 從內層被乘出來。

所以 積分關 ④ 那條密度前面的 λ 不是湊的, 它是鏈式法則的產物。在 t = 3λ = ½ 對帳: 公式 0.111565、中央差分實測 0.111565( 的表)。

反向傳播跟鏈式法則差在哪?為什麼一定要「反向」?

鏈式法則是數學,反向傳播是「算它的順序」。 那幾個斜率相乘,先乘哪一個都得到同樣的答案;但從最後一層往前算可以共用: 鏈的後半段對同一層的所有權重都是同一個數字,算一次往前傳就好。

從前面往後算的話,每個權重都要重跑一整條鏈。 所以反向模式的成本是「一次前向 + 一次反向」,跟參數個數幾乎無關 —— 對「一個純量損失、幾億個參數」這種形狀( 末尾)差距是天文級的。

這一關跟另外四關、跟主線十六關的關係是什麼?

對主線十六關:它不引入新概念,只把 02 ⑤ 的 2x、 最佳化 02 ② 的 2(x−2)、機率統計 05 ⑤ 的 λe−λt、 基礎 01 ⑥ 的 ln 2、最佳化 03 ⑦ 的 2Cw 補上算法( 那張表六個位置)。

對另外四關:導數關是它的前置(規則全部從差商的定義推出來); 積分關的捷徑(基本定理)反過來要「猜一個微分之後等於 f 的函數」, 猜的時候用的就是這一關的規則多變量關把這裡的一維規則升維 (偏導數就是「凍住其他變數」之後套同一批規則); 應用關則把鏈式法則接到 softmax 與交叉熵上, 並用二階導數解釋選擇權的 Gamma。

從這裡去哪裡

你是為了「反向傳播到底在算什麼」來的:你已經拿到了。 接下來看它在真實模型裡長什麼樣 —— 應用關 ③ 的 softmax 與交叉熵(那裡的梯度剛好化簡成 p − y), 然後回 最佳化 01 ⑤⑥ 看更新那一步。

你是為了手算變快來的: 的五張小卡就是清單, 配 導數關 ③exln x 兩條,日常九成的式子都夠了。

你是為了多個變數來的:多變量關 ② —— 那裡把「一次只動一個變數」變成偏導數、把答案擺成梯度向量。