多變量:梯度與極值
這是微積分這一層的第三關(共五關),
也是 最佳化 01–最佳化 03 最佳化那一卷的補課包。
導數關問的是「一條曲線在這一點斜多少」;
真實問題有兩個以上的變數,於是問題變成「一座山在這一點,往哪個方向斜、斜多少」 ——
答案是一個向量,叫梯度。最佳化 01 ⑤ 那支橘色箭頭就是它。
這一關是微積分 03,不算在主線十六關裡。唯一的前置是
導數關 ② 差商:偏導數就是「把其他變數凍住」之後的一維導數。
① 這關在解什麼問題:先說梯度拿來幹嘛
導數關給了你什麼
導數關的 f′(x) 只吃一個變數:
一條曲線、一個坡度。但 最佳化 01 關的地形有兩個變數、
最佳化 03 關的權重更多。
這一關把「一條曲線的斜率」升維成「一座山的斜率」——
那就是最佳化 01 ⑤ 那支橘色箭頭 ∇f。
多變量微分在這套教材裡只為了三件事存在,而三件事都在最佳化那一卷:
- 知道往哪邊走會更低:−∇f 就是下坡最陡的方向 —— 這就是梯度下降(最佳化 01 ⑤⑥), 也是機器學習訓練時每一步在做的事。
- 知道什麼時候停:∇f = 0(一階條件)+ 二階看凹凸(④)——「停下來的地方是谷底,不是山頂或鞍點」。 最佳化 03 ⑥ 的最低風險組合就是這樣確定的。
- 知道約束怎麼咬住你:∇f 垂直於等高線,所以 最佳化 02 ④ 的「相切」才能翻譯成 ∇f ∥ ∇g,再變成乘子 λ。
三件事的共同形狀是「在一個多維地形上找最低點」。 這一關把「地形的坡度」變成一個向量、把「谷底」變成兩條可以動手解的方程式。
梯度與極值在主線十六關的哪些地方已經被用掉了
| 在哪 | 用到什麼 | 你需要哪一節 |
|---|---|---|
| 最佳化 01 ⑤ | 偏導數 ∂f/∂x(只有一句「把 y 當常數的斜率」)、 梯度 ∇f、∇f(v) = A(v − c) | ② 偏導與梯度 |
| 最佳化 01 ④ | 凸性(碗 vs 蛋盤)、Hessian ∇²f 這個字 | ③ · ④ |
| 最佳化 01 ⑥ | 梯度下降的收斂條件 α < 2/λmax(A) | ④(為什麼是特徵值) |
| 最佳化 02 ④ | 相切 ⇔ 法向量平行 ⇔ ∇f ∥ ∇g | ②(∇ 垂直於等高線) |
| 最佳化 03 ⑥ · ⑦ | 「把導數設 0 直接解出最低點」、風險等高線的法向量 2Cw | ② · ③ |
五個位置全部集中在最佳化那一卷(最佳化 01–03)。 所以如果你不是為了最佳化來的,這一關可以先放著 —— 導數關 與 積分關跟它沒有依賴。
本頁符號對照表
| 符號 | 唸法 | 它問的是什麼 | 哪一節 |
|---|---|---|---|
| ∂f/∂x | partial f partial x | 偏導數:只動 x、其他變數當常數時的斜率。∂ 是圓體的 d | ②;最佳化 01 ⑤ 用過 |
| ∇f | nabla f(或 del f) | 梯度:把所有偏導數擺成一個向量。它有方向,所以是向量不是數字 | ②;最佳化 01 ⑤ 用過 |
| f″ | f double prime | 二階導數:斜率自己的斜率。管的是「彎向哪邊」 | ③ |
| ∇²f | Hessian(黑塞矩陣) | 二階導數的多維版:四個二階偏導數排成 2×2 | ④;最佳化 01 ④ 用過 |
| v* | v star | 星號代表「答案」、最優解。∇f(v*) = 0 是它的必要條件 | ③ |
| 正定 | positive definite | 「每個方向都往上彎」。兩個特徵值都是正的就是它 | ④;機率統計 05 ② 用過 |
微積分這一層有五關,你在第 03 關
五關沒有先後綁定(除了這一關與規則關預設你讀過導數關)。卡在哪一關就讀對應那一關:
| 關 | 它回答什麼 | 誰在用 |
|---|---|---|
| 導數 | 「這一點斜多少」 | 最佳化 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 報酬的期望 |
② 偏導數與梯度:兩個以上的變數怎麼量斜率
導數關給了你什麼 導數關 ② 的 f′(x) 只吃一個變數:一條曲線、一個坡度。 但 最佳化 01 關的地形是兩個變數 (x 與 y 決定一個高度), 最佳化 03 關的權重更多。 問題來了:一座山「在某一點的坡度」是多少?這句話本身不完整 —— 你得先說「往哪個方向」。
偏導數:一次只動一個變數
最省事的辦法是一次只問一個方向:先只往 x 走、y 完全不動,那就退回成導數關 ② 的一維問題。
注意第二個位置的 y:兩邊都是同一個 y,一點都沒變。
整條式子讀作:「只把 x 推一小步時,f 變多快」。 這就是 最佳化 01 ⑤ 那句「把 y 當常數的斜率」的完整版。
∂f/∂y 反過來:只推 y,x 當常數。
算法因此完全不用新學:把其他變數當成數字,然後照導數關 ② 那樣微分。 例如 f(x, y) = 3x² + 5xy:
- 算 ∂f/∂x:把 y 看成一個固定的數(例如 7)。 3x² 微分是 6x;5xy 對 x 來說是「常數 5y 乘 x」, 微分是 5y。所以 ∂f/∂x = 6x + 5y。
- 算 ∂f/∂y:這次換 x 當常數。3x² 裡完全沒有 y, 它是常數,微分是 0;5xy 是「常數 5x 乘 y」,微分是 5x。 所以 ∂f/∂y = 5x。
梯度:把偏導數擺成一個向量
它是一個向量,不是一個數字 —— 因為「往哪個方向」這件事本身就需要一個向量來回答。
兩個必記的性質(最佳化 01 ⑤ 現場驗過): ① ∇f 指向上坡最陡的方向,所以下坡走 −∇f; ② ∇f 永遠垂直於等高線。
現場算一次:∇(½vᵀAv) = Av
這條式子在 最佳化 01 ⑤ 與 最佳化 03 ⑦ 被直接拿去用(最佳化 03 那支 2Cw 的箭頭就是它)。這裡把它算出來一次,用的只有上面那兩條偏導數。
設 A = [[a, b], [b, c]](對稱,共變異數矩陣一定對稱), v = (x, y)。先把 ½vᵀAv 攤成一般的兩變數函數:
vᵀAv = x(ax + by) + y(bx + cy) = ax² + bxy + bxy + cy² = ax² + 2bxy + cy²。
中間那兩個 bxy 之所以能合併成 2bxy,就是因為 A 對稱(兩個 b 一樣)。
接著逐座標微分,每一步都用上面那條「其他變數當常數」:
∂f/∂y = ½ ( 2b·x + 2c·y ) = b·x + c·y 第一行:a·x² 對 x 微分是 2a·x(導數關 ② 的 2x 乘上常數 a); 2b·xy 對 x 微分是 2b·y; c·y² 完全沒有 x,是常數,微分是 0。
第二行同理,換成對 y 微分。
那個 ½ 的用途現在看出來了:它剛好把微分生出來的 2 抵掉,式子才會這麼乾淨。
最後把兩個結果擺回向量:
所以:∇(½vᵀAv) = Av。沒有任何一步用到「矩陣微分公式」,全部是兩次一維微分。
兩個立刻可用的推論:
- 沒有 ½ 的版本:∇(vᵀAv) = 2Av。所以 最佳化 03 ⑦ 那支風險等高線的法向量是 2Cw —— 就是這個。
- 谷底不在原點的版本:把 v 換成 v − c, 得到 ∇f(v) = A(v − c) —— 這正是 最佳化 01 ⑤ 寫下的那條式子。
—
—
順帶一個名字:把兩個偏導數再各微分一次,會得到四個數字,排成 2×2 矩陣 —— 那就是 最佳化 01 ④ 用過的 Hessian ∇²f。對 ½vᵀAv 來說它剛好就是 A 本人 (因為 ∇f = Av 對 v 再微分一次就是 A)。凹凸是它管的,④ 節接手。
③ 極值:一階條件找候選,二階條件分辨谷底與山頂
上一節與導數關給了你什麼 導數關 ②:一維的斜率 f′。② 節:多變數版的 ∇f。 最佳化 01 ⑤ 已經讓你看過「把藍點拖到谷底,梯度箭頭縮到消失」。 這一節把那個畫面翻譯成兩條可以動手解的方程式,並補上最佳化 01 關沒有的一維代數版 ——最佳化 03 ⑥ 那句「拋物線把導數設 0 直接解出最低點」就是靠它。
一階條件:谷底的斜率是 0
白話:站在最低點,往哪邊踏都不會更低,所以坡度只能是 0。
滿足這條式子的點叫臨界點(critical point)。它是「候選人」,不是「當選人」。
為什麼只是候選人?因為 f′ = 0 只說「這裡是平的」,而平的地方有三種: 谷底、山頂、以及暫時平一下又繼續走(鞍點 / 反曲點)。 最佳化 01 ⑤ 那個「馬鞍點」選項給的就是第三種。
二階條件:看它彎向哪一邊
要分辨這三種,就問斜率自己的斜率:
右邊那條是它的中央差分量法:分子是「左右兩邊的高度和,減掉中間那點的兩倍」。
直覺:如果曲線是直的,左右兩點的平均剛好等於中間那點,分子=0; 分子是正的就代表兩側翹起來(碗)、負的代表兩側垂下去(拱)。
| 在臨界點 f′(x*) = 0 上 | 那是什麼 | 幾何長相 |
|---|---|---|
| f″(x*) > 0 | 局部最小(谷底) | 向上彎,碗形 |
| f″(x*) < 0 | 局部最大(山頂) | 向下彎,拱形 |
| f″(x*) = 0 | 還不知道,要另外查 | 可能是反曲點 |
多維版本把 f″ > 0 換成「Hessian 是正定的」(完整版在 ④)—— 也就是 最佳化 01 ④ 那句「所有方向都往上彎」。 而所謂凸函數,就是「f″ ≥ 0 到處成立」, 這保證了臨界點只有一個、而且它就是全域最低點 —— 最佳化 01 關那句「往下走一定到得了谷底」的來歷。
—
—
④ 二階條件的多維版:Hessian 與「正定」
上一節給了你什麼 ③ 節的一維版很乾淨:f′ = 0 找候選、f″ 的正負分辨谷底與山頂。 多維的一階條件也很乾淨(∇f = 0,② 節那支箭頭縮到消失)。 但「二階」在多維會變成一個矩陣 —— 因為「彎」這件事在每個方向都可以不一樣。 這一節就把那個矩陣講完,它是 最佳化 01 ④ 那個「碗 vs 蛋盤」的代數版。
四個二階偏導數排成一個 2×2
∂²f/∂x∂y —— 先對 y 再對 x:「往 y 走會不會改變往 x 的坡度」。 這一格就是「兩個方向會互相影響」的量。
這個矩陣叫 Hessian(最佳化 01 ④ 出現過這個字), 寫成 ∇²f 或 H。
它一定對稱(∂²f/∂x∂y = ∂²f/∂y∂x,只要函數夠平滑)—— 所以它跟 03 關的共變異數矩陣 C 一樣, 可以用 04 關那把刀去拆。
本關 ② 節那個 f(v) = ½vᵀAv 的 Hessian 特別好算: ② 節算出 ∇f = Av,也就是 (∂f/∂x, ∂f/∂y) = (a·x + b·y, b·x + c·y)。再各微分一次:
所以二次型的 Hessian 就是 A 本人,而且整片地形每一點都一樣彎 (這正是「二次型的等高線是同心橢圓」的原因)。
判斷是不是谷底:兩個特徵值都要正
一維只要問「f″ 是正還是負」;多維要問「每一個方向都往上彎嗎」。 這個性質有名字,叫正定:
| Hessian 的樣子 | 那個臨界點是什麼 | 幾何長相 | 最佳化 01 關怎麼叫它 |
|---|---|---|---|
| 兩個特徵值都正(正定) | 局部最小(谷底) | 各方向都往上彎的碗 | 「碗」/ 凸 |
| 兩個特徵值都負(負定) | 局部最大(山頂) | 倒過來的碗 | 凹 |
| 一正一負 | 鞍點(都不是) | 馬鞍:一個方向往上、另一個往下 | 最佳化 01 ⑤ 的「馬鞍點」選項 |
| 有特徵值等於 0 | 還不知道,要另外查 | 某個方向是平的水溝 | 退化(秩不滿) |
為什麼是特徵值?因為 04 關說過: 對稱矩陣的特徵向量是它的主軸,特徵值是沿那根軸的伸縮量。 把地形沿主軸切一刀,切出來的就是一條一維拋物線,而它的 f″ 剛好就是那根軸的特徵值。 所以「每個方向都往上彎」=「每個特徵值都正」。
2×2 的快速判別法:行列式與跡
不用真的去解特徵值也能判斷 —— 因為 兩個特徵值的乘積是行列式、和是跡:
det > 0 且 trace < 0 ⟹ 兩個都負 ⟹ 山頂。
det < 0 ⟹ 一正一負(乘積是負的)⟹ 鞍點。
det = 0 ⟹ 有一個是 0 ⟹ 退化,這條判別法失效。
把 ② 節那兩個矩陣代進去驗一次(這兩個就是那張圖上的兩顆按鈕):
| A | det | trace | 結論 | 圖上看到的 |
|---|---|---|---|---|
| [[1, 0], [0, 1]](圓碗) | 1 | 2 | 正定 → 谷底 | 同心圓等高線,原點是最低點 |
| [[2, 0.8], [0.8, 1.4]](拉長歪斜) | 2.16 | 3.4 | 正定 → 谷底 | 歪斜橢圓,原點還是最低點 |
| [[1, 0], [0, −1]](馬鞍) | −1 | 0 | 鞍點 | 最佳化 01 ⑤ 那個馬鞍選項:梯度是 0 但不是谷底 |
第二列的算法:det = 2 × 1.4 − 0.8 × 0.8 = 2.8 − 0.64 = 2.16、 trace = 2 + 1.4 = 3.4。兩個都正 —— 所以 ② 節那顆歪斜的碗真的是碗,你把 v 拖到任何地方都會被梯度指回原點附近。
Hessian 還有一個大用途:牛頓法(用二階資訊決定步伐大小與方向,收斂比梯度下降快得多), 以及二階泰勒展開(把地形在一點附近近似成一個二次碗)。
這套教材沒有任何一處需要它們:最佳化 01–03 關要嘛把導數設 0 直接解、要嘛用梯度下降。 所以這一頁只給你「Hessian 是什麼、怎麼用它判斷谷底」, 不推導牛頓法 —— 需要的時候,你已經有名字可以去查了。
⑤ 這關回答了什麼
為什麼最佳化 01 關非要用「梯度」,不能只講斜率?
因為最佳化 01 關的地形有兩個自變數,「這一點的斜率」這句話沒有唯一答案 —— 往東走跟往北走的坡度不一樣。所以要先問「只動 x 的斜率」與「只動 y 的斜率」 (② 的偏導數),再把兩個答案擺成一個向量,那就是梯度。
擺成向量之後多拿到兩件事,這是純粹的紅利:① 它指向上坡最陡的方向, 所以下坡走 −∇f(梯度下降);② 它垂直於等高線, 所以 最佳化 02 ④「相切」才能翻譯成 「∇f 與 ∇g 平行」。
偏導數為什麼可以「把其他變數當常數」?這樣不是漏掉東西了嗎?
沒有漏,因為你問的問題本來就只動一個變數。∂f/∂x 的定義是 (f(x+h, y) − f(x, y)) / h —— 兩邊的 y 是同一個 y,所以只要 y 沒動,它就只是一個數字。
「其他變數也在動」的情況要用兩個偏導數合起來:往任意方向 u 走的坡度是 ∇f · u(梯度跟方向做 內積)。這就是「梯度垂直於等高線」的證明: 沿等高線走高度不變,所以那個內積是 0(最佳化 01 ⑤ 現場驗過)。
∇(½vᵀAv) = Av 是怎麼算出來的?最佳化 03 關那支 2Cw 又是什麼?
三步,全部在 ②:① 把 ½vᵀAv 攤成 ½(ax² + 2bxy + cy²)(能合併成 2bxy 是因為 A 對稱); ② 逐座標微分,得到 ax + by 與 bx + cy; ③ 那兩個數字擺回向量,剛好就是 Av 的定義。
沒有 ½ 的版本就多一個 2:∇(vᵀAv) = 2Av。 最佳化 03 ⑦ 的目標是 wᵀCw(風險), 所以它的等高線法向量是 2Cw —— 那支箭頭就是這麼來的。
為什麼「梯度 = 0」還不夠?怎麼分辨谷底、山頂與鞍點?
因為 ∇f = 0 只說「這裡是平的」,而平的地方有三種:谷底、山頂、鞍點。 最佳化 01 ⑤ 那個「馬鞍點」選項就是第三種。
分辨要看二階:一維看 f″ 的正負(③), 多維看 Hessian 的特徵值(④)—— 都正是谷底、都負是山頂、一正一負是鞍點。 2×2 有捷徑:det > 0 且 trace > 0 就是谷底,det < 0 就是鞍點。
「凸」跟這一關的二階條件是什麼關係?
凸就是「二階條件到處成立」。一維:f″ ≥ 0 在整個定義域都成立; 多維:Hessian 到處半正定。
它買到的東西很值錢:臨界點只有一個,而且它就是全域最低點 —— 所以「往下走一定到得了谷底」(最佳化 01 ④ 那句話)。 而最佳化 03 關的風險 wᵀCw 必然凸,因為 共變異數矩陣半正定(任何方向的變異數都 ≥ 0)。
這一關跟主線十六關、跟另外四關的關係是什麼?
對主線十六關:① 那張表列了五個位置,全部集中在最佳化 01–03 最佳化。 所以這一關的讀者幾乎都是「卡在最佳化 01 ⑤ 的梯度」或「想知道最佳化 03 ⑦ 那支 2Cw 哪來的」。
對另外四關:導數關(斜率與變化率)是這一關的前置 —— 偏導數就是「把其他變數凍住之後的一維導數」,定義完全一樣。 積分關(面積與累積)跟這一關沒有依賴, 兩邊可以隨便先讀哪一關。 規則關(微分規則與鏈式法則)給的是「凍住其他變數之後」 要套的那幾條規則,而它的 ④ 節說明了最佳化 01 關那支梯度在真實網路裡是誰算的(反向傳播)。 應用關(ML 與交易)把二階導數換個名字叫 Gamma。