數學基礎

鏈式法則(chain rule)

/ CHAYN ROOL /

鏈式法則告訴你,如何求出一連串依賴關係的斜率。假設 A 一變會引起 B 變,B 一變又會引起 C 變。那麼你推動 A 時,C 會動多少?鏈式法則的答案漂亮得很簡單:把這些變化率乘起來。如果 A 動會讓 B 動得快兩倍,B 動又讓 C 動得快三倍,那麼 A 動就讓 C 動得快六倍。

把它想成一串齒輪。轉動第一個齒輪,它帶動第二個,第二個再帶動第三個。最後那個齒輪的轉速,是沿途所有傳動比的乘積。鏈式法則正是把這套邏輯改寫成斜率的語言:要對一個嵌在另一個函數裡頭的函數求導,你先對外層求導,再乘以裡頭那部分的導數,像剝洋蔥一樣一層層剝下去。

沒有鏈式法則,深度學習根本無從談起。神經網路是一疊深深的函數,一個接一個地餵下去——上一層的輸出就是下一層的輸入,往往疊到幾十層深。要訓練它,你需要求出「最終誤差」對一個埋在最開頭附近的權重的導數。鏈式法則讓你能沿著這條路把一路上的局部斜率乘起來,從而抵達那裡。反向傳播,本質上就是帶著嚴謹記帳的鏈式法則。它的另一面是個實實在在的危險:把許多個小斜率相乘,乘積會朝零縮去(梯度消失問題),於是靠前的層可能就停止學習了。

設你的最終得分是 y = (3x + 1)²。把外層看成「某個東西的平方」(它的斜率是「那個東西」的2倍),把內層看成 3x + 1(它的斜率是3)。鏈式法則把二者相乘:2·(3x + 1)·3 = 6(3x + 1)。在 x = 1 處,結果是 24——把 x 推動一絲一毫,y 變化得大約要快上24倍。

對外層求導,再乘以內層的導數——斜率像傳動比一樣一環扣一環地連乘。

反向傳播就是鏈式法則,不多也不少——只是帶著仔細的記帳,從網路末端反著往前應用。把一長串小斜率連乘,正是梯度消失的成因,也是極深網路難以訓練的緣由。

又稱
链式法则鏈式法則连锁律chain rule of calculus