威威學長|高中數學
在單變數的世界裡,切線斜率永遠只有一種答案。你在圖形上選定一個點,沿著 $x$ 軸往右走,函數值怎麼變就是怎麼變,沒有第二個方向可以挑,所以一個題目只會吐出一個數字。 山坡不吃這一套。想像一下你站在一座小山丘上,手上有兩支測坡度的儀器,一支往正東量,一支往正北量。同一個位置,兩支的讀數通常不會一樣:往東也許還在爬,往北已經緩下來,繞到另一側甚至變成下坡。這裡的麻煩不在計算,在詞彙。只說「這裡的坡度是 $0.3$」,你根本沒交代自己是朝哪個方向量的。😅 要描述一整座山,得知道每個方向的變化率,而方向有無窮多個,一個一個量也量不完。數學先挑兩把最方便的尺:沿 $x$ 軸方向的變化率,與沿 $y$ 軸方向的變化率。先算這兩個,剩下的方向都有辦法從它們拼回來。
只動一個變數:偏導數
先看一個乾淨的例子,$f(x,y)=x^2y$。它吃兩個輸入、吐一個數字:$f(2,3)=12$、$f(1,-1)=-1$、$f(-2,1)=4$。 現在問「$f$ 對 $x$ 的變化率」。做法是先把 $y$ 釘在某個數字上,例如假設 $y=3$,函數就退化成 $f(x,3)=3x^2$,這是你已經會的一元函數,對 $x$ 微分得到 $6x$。但 $y$ 不一定等於 $3$,所以把 $3$ 換回 $y$,答案是 $2xy$,記成 $$\frac{\partial f}{\partial x}=2xy$$ 那個長得像 $d$、又不是 $d$ 的符號 $\partial$(唸 partial,也常有人唸 del),差別在「心裡還有沒有其他變數」。$\frac{dy}{dx}$ 只有一條路,沒得選;$\frac{\partial f}{\partial x}$ 則是「$y$ 還站在旁邊,只是現在不動它」,讀作「$f$ 對 $x$ 的偏導數」。同一招對 $y$ 用一次,$x$ 全部當常數: $$\frac{\partial f}{\partial y}=x^2$$ $x^2$ 對 $y$ 來說是一塊係數,跟著 $y$ 一起走的那個一次方被微分吃掉,係數原封不動留下來。 「把其他變數當常數」有精確的定義撐著,不是隨口講的口訣。把 $y$ 固定在 $b$,沿著水平線切出一條只認 $x$ 的函數,再對它取導數: $$f_x(a,b)=\lim_{h\to 0}\frac{f(a+h,b)-f(a,b)}{h}$$ 極限存在時,這個值就是 $\frac{\partial f}{\partial x}$ 在 $(a,b)$ 的值。算題時你不需要每次回到這一行,但要知道「當常數」這個動作動的是哪一條式子,它跟單變數的導數定義是同一個極限。 換一個稍微有咬勁的:$f(x,y)=x^2y+\sin(xy)$。 $$\frac{\partial f}{\partial x}=2xy+y\cos(xy)$$ 第一項照舊;第二項需要連鎖律,因為 $\sin$ 裡面裝的不是 $x$ 而是一整個 $xy$,對 $x$ 微分時要再乘上內部的導數 $y$。輪到 $y$ 的時候: $$\frac{\partial f}{\partial y}=x^2+x\cos(xy)$$ $x^2y$ 的 $x^2$ 這回是係數,微分後留下 $x^2$;$\sin(xy)$ 的內部對 $y$ 的導數則是 $x$。兩個答案長得幾乎一樣,只差外面那個因數是 $y$ 還是 $x$;這種近乎對稱的形狀可以拿來自我檢查,抄錯一個符號通常一眼就看得出來。順手代一組數字進去看:$f_x(1,0)=0+0\cdot\cos 0=0$,$f_y(1,0)=1+1\cdot\cos 0=2$。在 $(1,0)$ 這個位置,往 $y$ 方向走比往 $x$ 方向走有感得多。
👑 威威說重點:偏導數就是把其他變數全部按暫停,只讓一個變數播放,然後做你已經會的一元微分。$\partial$ 與 $d$ 的差別,只在「旁邊還有幾個變數站著」。
沿著一條路走:連鎖律
真實問題很少讓兩個變數各走各的。假設有個量同時被兩個因素推著跑,你就會看到 $x=x(t)$、$y=y(t)$ 這種設定:兩個變數都是時間 $t$ 的函數。函數值 $f$ 自己不會動,但它腳下的 $x$ 與 $y$ 都在動,所以 $f$ 也被拖著變。問題變成:$f$ 對 $t$ 的變化率是多少。 從樹狀圖看最清楚。$f$ 在頂端,$x$ 與 $y$ 夾在中間,$t$ 在最底下。從 $t$ 爬到 $f$ 有兩條路:一條經過 $x$,一條經過 $y$。每條路的貢獻是路邊所有導數相乘,一條路給出 $\frac{\partial f}{\partial x}\cdot\frac{dx}{dt}$,另一條給出 $\frac{\partial f}{\partial y}\cdot\frac{dy}{dt}$。兩條路同時在作用,所以合起來是加: $$\frac{df}{dt}=\frac{\partial f}{\partial x}\frac{dx}{dt}+\frac{\partial f}{\partial y}\frac{dy}{dt}$$ 左邊用的是圓滾滾的 $d$,不是 $\partial$,因為沿著一條固定的路徑走,$f$ 到頭來只受 $t$ 一個變數擺布,這是貨真價實的一元導數。 拿前面的 $f=x^2y+\sin(xy)$ 走一次,順便驗算。取 $x(t)=t^2$、$y(t)=t$: $$\frac{\partial f}{\partial x}=2xy+y\cos(xy)=2t^3+t\cos(t^3),\qquad \frac{dx}{dt}=2t$$ $$\frac{\partial f}{\partial y}=x^2+x\cos(xy)=t^4+t^2\cos(t^3),\qquad \frac{dy}{dt}=1$$ 兩項相加: $$\frac{df}{dt}=\left(2t^3+t\cos(t^3)\right)\cdot 2t+\left(t^4+t^2\cos(t^3)\right)\cdot 1=5t^4+3t^2\cos(t^3)$$ 怕中途滑掉,就直接代入檢查:$f(t)=(t^2)^2\cdot t+\sin(t^2\cdot t)=t^5+\sin(t^3)$,對 $t$ 微分是 $5t^4+3t^2\cos(t^3)$,兩邊一致 ✓。代 $t=1$ 看數量級也通:$5+3\cos 1\approx 5+1.62=6.62$。 這條公式順便回答了一開始「坡度要交代方向」的麻煩。$\frac{\partial f}{\partial y}$ 單獨看,只是「只動 $y$ 的那個版本」;乘上 $\frac{dy}{dt}$ 之後,它才變成「$y$ 在真實世界裡跑得多快」乘上「$y$ 對 $f$ 的影響力」。所以某個偏導數很小並不等於它不重要,只要那個變數跑得飛快,這一項照樣可以主導整個答案。🙃
樹狀圖:有幾條路徑就加幾項
規則只有兩句話:從自變數沿著分支爬到 $f$,每一條路徑上的導數相乘;所有路徑的乘積再相加,有幾條路徑就加幾項。項數不是背來的,是數出來的。 三變數版本長這樣,$f(x,y,z)$ 而 $x$、$y$、$z$ 都是 $t$ 的函數,樹上有三條分支: $$\frac{df}{dt}=\frac{\partial f}{\partial x}\frac{dx}{dt}+\frac{\partial f}{\partial y}\frac{dy}{dt}+\frac{\partial f}{\partial z}\frac{dz}{dt}$$ 每一項的骨架完全相同,換掉的只是名字,所以不必另外背一條新公式。 中間變數多一層也吃得下。$f(x,y)$ 而 $x=x(s,t)$、$y=y(s,t)$,現在問 $f$ 對 $s$ 的變化率,把 $t$ 按住不動,路徑仍然是兩條: $$\frac{\partial f}{\partial s}=\frac{\partial f}{\partial x}\frac{\partial x}{\partial s}+\frac{\partial f}{\partial y}\frac{\partial y}{\partial s}$$ 最後這一行左邊寫 $\partial$ 而不是 $d$,因為 $f$ 其實還依賴 $t$,只是這題不讓 $t$ 動。符號是線索:$d$ 表示只剩一個變數,$\partial$ 表示旁邊還有變數被按著。 樹狀圖真正的價值是把「漏了什麼」變成看得見的圖。路徑畫出來,幾條就是幾項;錯的時候你不需要重讀定義,只要回去數分支。
⚠️ 學長的警告:連鎖律最常見的兩種死法——路徑漏掉一條(少寫一項),以及把「相乘」寫成「相加」($\frac{\partial f}{\partial x}+\frac{dx}{dt}$)。樹畫完先數項數,再開始動筆,這兩種錯會少掉大半。
這條規則養活了梯度下降與反向傳播
這條連鎖律不是考題裡的裝飾品,它是機器學習整條路上最常被呼叫的一行。訓練模型時,你要最小化的東西是一個函數 $L(w_1,w_2,\dots,w_n)$,輸入是模型的參數,輸出是一個數字:現在到底有多糟。參數動輒幾百萬個,任務是找到讓 $L$ 最低的那一組。 梯度就是把所有偏導數排成一個向量,寫成 $\nabla L$($\nabla$ 唸 nabla),分量依序是 $\frac{\partial L}{\partial w_1}$ 到 $\frac{\partial L}{\partial w_n}$。它的意思是「只動第一個參數會怎樣、只動第二個會怎樣」的完整清單。梯度下降的做法很直白,照著清單往反方向挪一小步: $$w_i\leftarrow w_i-\eta\frac{\partial L}{\partial w_i}$$ $\eta$ 叫學習率,決定一步願意跨多大。每一步都要一份新的清單,所以「怎麼快速算出所有偏導數」是整套方法的成本所在。 反向傳播處理的就是這件事。網路是好幾層函數疊起來的,$L$ 到頭來是一大堆中間變數的函數,要算 $\frac{\partial L}{\partial w}$ 就得沿著計算圖把偏導數一項一項相乘再相加。上面那張樹狀圖,只是樹很深、葉子很多,所以值得寫成程式。這裡停在概念層次就好,批次大小、正規化、自動微分怎麼實作,是另一門課的內容。想先看單變數版的同一個動作(把導數設成 $0$ 找最低點),最適直線的微積分證明做的就是同一個套路。參數不只一個的時候,完整版在梯度下降與損失函數最小化,而統計課最常拿它開刀的地方是多元迴歸。
換你動手
練習 1:設 $f(x,y)=x^2y^3+x\cos y$,求 $\frac{\partial f}{\partial x}$ 與 $\frac{\partial f}{\partial y}$。 對 $x$ 微分時 $y$ 全程當常數:$x^2y^3$ 給出 $2xy^3$;$x\cos y$ 裡的 $\cos y$ 是一整塊係數,跟著 $x$ 一起出來,得到 $\cos y$。所以 $\frac{\partial f}{\partial x}=2xy^3+\cos y$。換成對 $y$ 微分:$x^2y^3$ 給出 $3x^2y^2$;$x\cos y$ 的 $x$ 是係數,$\cos y$ 微分得 $-\sin y$,所以 $\frac{\partial f}{\partial y}=3x^2y^2-x\sin y$。檢查一下符號:$y$ 那邊多出來的負號來自 $\cos$ 的導數,不是抄錯。 練習 2:$f(x,y)=x^2y$,沿著路徑 $x(t)=\cos t$、$y(t)=\sin t$,求 $\frac{df}{dt}$,並在 $t=0$ 檢查。 兩個偏導數是 $\frac{\partial f}{\partial x}=2xy=2\cos t\sin t$ 與 $\frac{\partial f}{\partial y}=x^2=\cos^2t$;路徑的速度是 $\frac{dx}{dt}=-\sin t$、$\frac{dy}{dt}=\cos t$。兩條路徑相加: $$\frac{df}{dt}=2\cos t\sin t\cdot(-\sin t)+\cos^2t\cdot\cos t=-2\cos t\sin^2t+\cos^3t$$ 直接代入驗算:$f(t)=\cos^2t\sin t$,微分得 $2\cos t(-\sin t)\sin t+\cos^2t\cos t$,同一條式子 ✓。$t=0$ 時 $\cos 0=1$、$\sin 0=0$,答案 $-0+1=1$。這條路徑走的是單位圓,$x$、$y$ 的大小都被夾在 $-1$ 到 $1$ 之間,但 $f$ 自己還是可以變,別把兩個變數的有界誤讀成答案有界。 練習 3:$f(x,y)=x^2+y^2$,而 $x=u+v$、$y=uv$,求 $\frac{\partial f}{\partial u}$。 樹狀圖有兩條路徑:$f\to x\to u$ 與 $f\to y\to u$。邊上的導數依序是 $\frac{\partial f}{\partial x}=2x$、$\frac{\partial x}{\partial u}=1$、$\frac{\partial f}{\partial y}=2y$、$\frac{\partial y}{\partial u}=v$,所以 $$\frac{\partial f}{\partial u}=2x\cdot 1+2y\cdot v=2(u+v)+2uv^2$$ (最後一步把 $x=u+v$、$y=uv$ 代回去,$2uv\cdot v=2uv^2$。)想確認就整條代掉:$f=(u+v)^2+u^2v^2$,對 $u$ 微分得 $2(u+v)+2uv^2$,兩條路通到同一個地方。這裡 $\frac{\partial y}{\partial u}=v$ 是關鍵的一步,$v$ 在對 $u$ 微分時被當成常數,很多人會下意識寫成 $1$。
挑一件今天就能做完的事:拿一張紙,寫下 $f(x,y)=x^2y$,畫出 $f\to x\to t$、$f\to y\to t$ 的樹狀圖,然後取 $x(t)=t^3$、$y(t)=t$,先用連鎖律算 $\frac{df}{dt}$,再整條代入直接微分算一次,看看兩個答案有沒有對上。兩個都算出來的那一刻,這條公式就從課本的字變成你自己的工具了。😎 如果兩邊答案不一樣,通常不是微分算錯,是漏掉一條分支或漏乘一個 $\frac{dx}{dt}$。把你畫的樹拍下來丟給我,我們一起找是哪一根樹枝不見了。