從偏導數到一支箭頭
第一卷給了你偏導數:凍結除一個之外的所有變量,像回到單變量微積分那樣去求導。對函數 f(x, y),偏導數 d f/d x 和 d f/d y 量度你正朝東、正朝北行走時曲面的斜率。麻煩在於,東和北只是你可以行走的無窮多方向中的兩個,而山坡並不在乎你的地圖恰好指向哪邊。自然的下一個問題才是誠實的那個:從某點出發,沿一個任意方向,地面有多陡?回答它,會把兩個偏導數攏成一個對象,它指向函數最想去的方向。
把偏導數收進一個向量,你就得到[[gradient-steepest-ascent|梯度]],記作 nabla f = (d f/d x, d f/d y, ...)。這裡 nabla 是del 算子——把它讀作一條指令:「取所有一階偏導數,把它們疊成一個向量」。在第一卷裡你把 nabla f 當作一串數字;如今的飛躍,是要把它的方向和長度當作幾何來認真對待。梯度不只是偏導數的記賬。它是一支箭頭,棲居在定義域的每一點;它指向何方、有多長,將原來承載著這個函數全部的一階資訊。
為了把「任意方向上的陡度」說精確,取一個單位向量 u——一個長度恰好為一的方向——並問 f 沿 u 邁步時的變化率。這個變化率就是[[calc-directional-derivative|方向導數]],記作 D_u f。你可以照第一卷定義任何導數的方式來定義它:作為一個極限,D_u f = lim as h -> 0 of (f(point + h u) - f(point)) / h。這恰恰是當你用一個沿方向 u 豎立的平面切開曲面、再看平面切山所得曲線時,你讀到的那個斜率。朝東走、u = (1, 0),便還原出 d f/d x;朝北走、u = (0, 1),便還原出 d f/d y。偏導數不過是兩個特殊的方向導數,而現在我們有了其餘所有的方向。
梯度指向最陡的上坡方向
下面是核心的恆等式,它是全部應用數學裡最有用的方程之一:對一個可微函數,方向導數不過是梯度與你所選方向的點積,D_u f = nabla f . u。這一個公式就是整台引擎。沿坐標軸方向走,復現偏導數;沿任何別的 u 走,你只需把梯度投影到 u 上。計算無窮多個斜率,坍縮為一支箭頭和一次點積。(一句誠實的提醒:這個乾淨的公式假定 f 在該點是真正可微的,而不只是偏導數存在——一個函數可以兩個偏導數都存在,卻仍沿某條對角線撕裂或起稜,那時這條點積法則就失效了。前一篇關於多元可微性的指南,正是這個區別所在之處。)
現在從點積裡榨出幾何來。把它寫成 nabla f . u = |nabla f| |u| cos(theta),其中 theta 是梯度與你的方向之間的夾角。由於 u 是單位向量,|u| = 1,於是 D_u f = |nabla f| cos(theta)。你唯一能掌控的是 theta——而 cos(theta) 在 theta = 0 時最大、等於 1,也就是你與梯度同方向行走時。所以梯度指向最陡上升的方向,而你在那一點任何地方能找到的最陡斜率,恰恰是 |nabla f|,即梯度的長度。掉頭(theta = 180 度,cos = -1),你得到最陡的下降,斜率為 -|nabla f|——以最快的方式指向山下。這正是機器學習那個主力演算法被稱作梯度下降的緣由:要盡可能快地下坡,就朝梯度的相反方向邁步。
還有第三個方向值得單獨成行:當 theta = 90 度,cos(theta) = 0,於是 D_u f = 0。恰好垂直於梯度行走時,函數到一階為止根本不變——你正沿著山坡等高地走,既不爬升也不下降。這組零變化的方向,正是某條等高線的切向,而它直接引出下一個觀念。
與水平集垂直
水平集(等高線、等值線、等勢線)是 f 保持某個單一常值的點的集合——地形圖上那些閉合的圈,每一圈描出一個固定的海拔。釘住一個事實,大量幾何便隨之而來:梯度在每一點都垂直於過該點的水平集。論證正是我們剛剛留意到的那件事。如果你沿一條水平集移動,按定義 f 保持常值,所以它沿那個方向的變化率為零,於是對任何與等高線相切的方向 u,D_u f = nabla f . u = 0。一個非零的梯度,若它與每一個切向的點積都消失,就必定與它們全部正交——它筆直地從等高線裡戳出來。梯度就是等高線的法向。
這正是整套等高線地圖語言背後的秘密,值得讓它沉澱下來。等高線擠得越密,梯度越長(地面越陡——一小步水平就跨過許多海拔層);等高線鋪得越開,梯度越短(地面越緩)。梯度總是以直角穿過等高線,這就是為什麼在山坡上鬆開的玻璃珠會垂直於等高線滾落,也是為什麼河流尋求最陡下降時是橫切等高線、而非沿其流淌。同一個事實一字不差地升級到更高維:對函數 f(x, y, z),水平集是曲面,而 nabla f 是那張曲面的法向量——這是為隱式地由 f(x, y, z) = 常數 定義的曲面找切平面最乾淨的辦法,而那恰恰是隱函數定理(下一篇指南)所立足之處。
二階:黑塞矩陣與碗
梯度是一階導數;要徹底理解一個點,你需要二階。回想第一卷裡的單變量泰勒展開:f(a + h) 約等於 f(a) + f'(a) h + (1/2) f''(a) h^2,即取值,加一個線性傾斜,再加一個二次彎曲。多變量版本恰好保持這個形狀,只是每個導數都長大了。常數仍是一個數。一階項變成梯度與步長的點積:nabla f . h。而二次項需要一隻新生物,因為在多變量裡,二階導數不是一個數,而是一整張網格——每個偏導數的每個偏導數。那張網格就是[[calc-hessian-matrix|黑塞矩陣]] H,二階偏導數構成的矩陣,在兩個變量下 H = [d^2f/dx^2, d^2f/dxdy; d^2f/dydx, d^2f/dy^2]。
Single variable f(a + h) = f(a) + f'(a) h + (1/2) f''(a) h^2 + ...
Several variables f(a + h) = f(a) + (nabla f . h) + (1/2) h^T H h + ...
value gradient term Hessian term
(1st derivative) (2nd derivative)
Hessian H = [ f_xx f_xy ; gradient nabla f = ( f_x , f_y )
f_yx f_yy ] ( H is symmetric: f_xy = f_yx when f is C^2 )
h^T H h is a number: it measures the curvature of f felt along the step h.現在讀這個二階泰勒展開 f(a + h) 約等於 f(a) + nabla f . h + (1/2) h^T H h,留意每一塊各司其職得多麼乾淨。常數說出你在哪兒;梯度項讓逼近曲面傾斜(它就是你早已從線性逼近認得的切平面);而黑塞項 h^T H h 把它彎成一隻碗、一座穹頂或一個鞍。記號 h^T H h 的意思是:取你的步長 h,乘以黑塞矩陣,再與 h 點積一次——結果是一個單一的數,即你沿 h 望去時函數顯出的曲率。一處值得誠實點出的微妙:對二次連續可微的函數,混合偏導數相等,d^2f/dxdy = d^2f/dydx(克萊羅定理),所以黑塞矩陣是對稱的。這種對稱不是裝飾——它正是黑塞矩陣擁有我們即將用到的那套乾淨曲率譜的緣由。
讀懂曲率:峰、谷,還是埡口
黑塞矩陣在這裡掙得了它的工錢。在一個駐點——nabla f = 0 的點,單變量裡 f'(x) = 0 之處的多元類比——梯度項消失,整個局部形狀由二次項 (1/2) h^T H h 決定。於是「這是極大、極小,還是都不是?」這個問題,純粹變成關於黑塞矩陣的問題:h^T H h 是恆正、恆負,還是當你把方向 h 轉一圈時變號?對稱矩陣的這個性質就是它的定性(定號性)。若對每個非零 h 都有 h^T H h > 0,黑塞矩陣是正定的:曲面在每個方向上都向上彎,此點是一隻碗、一個局部極小。若是負定(每個方向都向下彎),則是局部極大。若 h^T H h 在某些方向為正、在另一些方向為負,此點便是[[saddle-point|鞍點]]——一個方向上坡、橫切的方向下坡,像一道山口或馬鞍的坐處。
怎樣不去檢查無窮多個方向 h 就判定定號性?因為黑塞矩陣是對稱的,它有實特徵值,而那些特徵值就是沿著碗最純淨的那些相互垂直的特殊方向上的曲率。符號法則再乾淨不過:特徵值全正即正定(極小),全負即極大,符號混雜即鞍點。對一個 2×2 的黑塞矩陣,這歸結為熟悉的二階導數判別法:算行列式 D = f_xx f_yy - (f_xy)^2。若 D > 0 且 f_xx > 0,你有一個極小;若 D > 0 且 f_xx < 0,是極大;若 D < 0,是鞍點。那個行列式不過是兩個特徵值的乘積,所以 D < 0 意味著它們異號——這恰恰是喬裝打扮的鞍點條件。
把三者合在一起
退一步,看看這三個對象咬合得多麼緊密,因為這種連貫正是本章真正的獎賞。梯度是函數的一階導數——一支箭頭,通過點積編碼了每一個方向上的斜率,指向最陡的上坡,並垂直於水平集。黑塞矩陣是函數的二階導數——一個對稱矩陣,通過 h^T H h 編碼了每一個方向上的曲率,並在駐點處裁定峰、谷還是埡口。方向導數是橋樑:它是你如何從這些「整體導數」對象裡、沿你樂意的任意方向,讀出一個單一的數——一個斜率,或配上黑塞矩陣則是一個曲率。一階導數、二階導數,再加上對它們採樣的配方:多變量函數的全部局部幾何,盡在這三個相伴的觀念之中。
- 算梯度 nabla f,即一階偏導數的向量。它的方向是最陡上升,它的長度 |nabla f| 是最陡的斜率,而它垂直於過該點的水平集。
- 要任意一個所選單位方向 u 上的斜率,就取點積 D_u f = nabla f . u;它等於 |nabla f| cos(theta),沿梯度最大、橫切梯度為零。
- 要分類一個駐點(nabla f = 0 之處),構造二階偏導數的黑塞矩陣 H,並經由特徵值的符號、或對 2×2 經由 D = f_xx f_yy - (f_xy)^2 來檢驗它的定號性。
- 讀出答案:曲率全正是極小,全負是極大,符號混雜是鞍點;某個特徵值為零使判別失效,那就去看更高階的項。
這三件套不是故事的終點,而是它的發射台。緊接著的下一篇指南,會拿「梯度即法向」的觀念和局部線性圖景,證明你能把 f(x, y) = 常數 解出一個變量用其餘變量表示——隱函數定理與反函數定理。再下一級的多元最佳化,整個就棲居於此:令 nabla f = 0 找候選點,讀黑塞矩陣把它們分類,並沿 -nabla f 下坡,在梯度下降與最速下降中真正抵達一個極小。從訓練神經網絡、到塑造機翼、到用最小二乘擬合資料,底下都是一台計算梯度、檢視黑塞矩陣的機器。你剛剛造好了那台機器的兩個齒輪,以及連接它們的軸。