Skip to content

偏差與變異、正規化與模型選擇:模型該多複雜|Stanford CS229 第 6 堂

2026年10月12日1 分鐘
TL;DR這堂課把測試誤差拆成雜訊 σ²、偏差平方、變異三項,再用 ridge regression 的閉式解說明正規化怎麼把特徵值從 λ 推到 λ+ρ,用一點偏差換掉大量變異。後半堂講雙降、ImageNet-V2,以及用開發集、k 折交叉驗證與 successive halving 挑超參數。

🌏 English version

影片狀態:已附影片。 這篇依 Stanford Online 公開的 Spring 2026 第 6 堂錄影的英文字幕寫成,公式記號對照 2026 主講義第 8 章與第 9 章;字幕看不到板書與投影片畫面,公式的寫法是依講者口述與講義還原的。

第 6 堂是 Stanford CS229 進入神經網路之前的最後一堂。前五堂(到上一堂的高斯判別分析為止)都假設手上有一份固定的訓練集,問題是怎麼把模型配適上去。這一堂換一個問題:訓練集本身是抽樣來的,換一份樣本,學出來的模型會差多少?這個問題的答案就是偏差與變異。

這一堂由 Chris Ré 主講。先備是線性迴歸的正規方程式(normal equation)、期望值與變異數的基本運算、特徵值分解。讀完之後,你應該能自己推出偏差–變異分解,能從 ridge regression 的閉式解說明正規化為什麼會降低變異,也知道超參數該用哪一份資料挑。

YouTube:Stanford CS229 Machine Learning | Spring 2026 | Lecture 6: Dataset Split, ML Advice

這堂課要回答的問題

(錄影 00:00–03:10)

講者開場就把整堂課收成一句話:手上只有一份有限、帶雜訊的樣本,要怎麼挑出一個在新資料上也表現好的模型。我們在訓練集上訓練,在測試集上使用,想要的是一套只看訓練集就能盡量保證未來表現的程序。

課程順序是:先用圖看過度配適(overfitting)與配適不足(underfitting),再把圖變成數學,也就是偏差–變異分解;接著用正規化(regularization)處理變異;然後是兩段講者自己說「忍不住要加」的近年研究,雙降(double descent)與 ImageNet-V2;最後是模型選擇。

影片標題是「Dataset Split, ML Advice」,但資料集切分只占最後五分鐘左右,整堂課的主體是偏差與變異和 ridge regression。講者也明講哪一半會考:

"what's likely to be on your test is the first part of what's going on, not the second part"(00:10:14)

用圖看配適不足與過度配適

(錄影 03:10–19:50)

設定:真實函數看不到,只看得到樣本

假設世界上有一個真實函數 h∗h^*,課堂上的例子是一條二次曲線。我們永遠看不到 h∗h^*,只看得到它產生的資料:

y(i)=h∗(x(i))+ϵ(i),ϵ(i)∼N(0,σ2)y^{(i)} = h^*(x^{(i)}) + \epsilon^{(i)},\qquad \epsilon^{(i)}\sim\mathcal N(0,\sigma^2)

和前幾堂不同的地方在這裡:訓練集不再是固定的。講者要大家想像抽了三份訓練集 S(1),S(2),S(3)S^{(1)}, S^{(2)}, S^{(3)},底下是同一條曲線,但每份抽到的點不同、每個點上的雜訊也不同。然後對三份資料各自配適同一種模型,看模型怎麼跟著變。理想的學習程序不管拿到哪一份,都該吐回同一個真實模型;實際上做不到,而做不到的方式有兩種。

直線:怎麼抽都彎不過去

先配適直線。三份資料得到三條略有不同的直線,但每一條都有明顯誤差。重點是這個誤差跟抽樣無關:真實函數是彎的,直線表示不了彎曲,你再抽多少次都一樣。講者把這種情況叫做高偏差(high bias),模型配適不足,解法是增加自由度。

九次多項式:每換一份資料就換一條曲線

再配適高次多項式。講者說投影片上的圖是九次,並提到講義裡寫的是五次(講義圖 8.5 確實用五次)。只要多項式的係數個數不少於資料點數,就能穿過每一個點,所以訓練誤差是零。可是三份資料得到的三條曲線看起來完全不像同一個函數:在同一個 xx 上,一條預測極大,一條預測很小。講者的說法是模型在配適雜訊而不是訊號,這是高變異(high variance)、過度配適。把 S(1)S^{(1)} 學到的函數拿到 S(2)S^{(2)} 上測,誤差會非常大。

剛剛好的模型也不會零誤差

配適二次多項式時,三份資料得到的曲線彼此接近,也都貼近真實曲線。它還是會有誤差,但那是資料本身的誤差:拿到一份抽得很差的訓練集,不該怪模型類別。

所以測試時的誤差有三個來源:資料裡消不掉的雜訊、模型類別表示不了真相造成的偏差、以及模型隨訓練集跳動造成的變異。接下來的數學就是把這三項分開。講者在這裡說:

"Keep these pictures in your head. All the math is basically just these pictures."(00:11:15)

古典的 U 形曲線

把模型複雜度放橫軸(多項式次數、參數個數、假設類別的大小),偏差隨複雜度下降,變異在過了某一點之後上升,兩者相加的測試誤差呈 U 形。以多項式來說,令 d∗d^* 是真實函數的次數:次數 d≥d∗d \ge d^* 時偏差消失,因為把多出來的高次係數設成零就能表示真相;d<d∗d < d^* 時有偏差;dd 遠大於 d∗d^* 時變異變大。

實務上我們不知道 d∗d^*。這堂課後半的做法是:先用一個表達力很強的類別,再靠正規化把有效的複雜度壓下來。

講者順便定義了一個後面會用到的詞:

"Interpolation means the ability to fit the training set with zero loss."(00:14:20)

內插(interpolation)就是把訓練集配適到零損失。高次多項式內插之後會亂抖,可是很大的深度網路內插了訓練集卻還能泛化;講者說這出自一系列談「rethinking generalization」的論文,資深作者是他的朋友 Ben(字幕記成「Ben Rex」,應是 Ben Recht)。這是後面雙降那一段的伏筆。

兩個課堂提問

有學生問:訓練誤差是不是反映偏差、測試誤差反映變異?講者的回答是,這個直覺大致對,但測試誤差裡除了變異還有雜訊,偏差平方也會出現在測試誤差裡;訓練誤差高主要是偏差,實務上也可能是最佳化沒做好(錄影 16:24–17:24)。

分類問題也有同樣的現象。決策邊界如果出現很多細小的孤島,特徵稍微動一下就換類別,通常是過度配適的警訊。講者補充這只是警訊,真實的類別邊界確實可能長那樣,只是直覺上比較不可能(錄影 17:24–19:50)。

偏差–變異分解:把測試誤差拆成三項

(錄影 19:50–40:53)

思想實驗的四個步驟

  1. 固定一個測試點 xx。這個點是任意的,推論不能依賴它的特殊性質。
  2. 抽 nn 筆訓練資料,組成訓練集 SS。
  3. 在 SS 上訓練,得到假設 hSh_S。講者特別說不必是線性迴歸,任何假設類別都行。
  4. 在測試點上抽一個新的觀測 y=h∗(x)+ϵy = h^*(x) + \epsilon,計算平方誤差 (y−hS(x))2(y - h_S(x))^2。

我們要分析的量是這個平方誤差對所有隨機性取期望:

MSE(x)=ES,ϵ[(y−hS(x))2]\mathrm{MSE}(x) = \mathbb E_{S,\epsilon}\big[(y - h_S(x))^2\big]

這裡有兩個隨機來源:訓練集 SS 的抽樣,和測試點上的雜訊 ϵ\epsilon。兩者獨立,因為測試點的雜訊是訓練完之後才另外抽的。

講者花了不少時間強調 hSh_S 是一個很複雜的隨機變數:它是「抽一整份訓練集、再跑一次訓練演算法」的結果,對神經網路來說根本寫不出分布。但推導只需要它的一個性質:對 SS 取期望有定義。相對地,ϵ\epsilon 很簡單,平均是零、變異數是 σ2\sigma^2。

第一步:分出雜訊

把 y=h∗(x)+ϵy = h^*(x) + \epsilon 代進去,再把平方展開:

MSE(x)=E[(ϵ+(h∗(x)−hS(x)))2]=E[ϵ2]+2 E[ϵ (h∗(x)−hS(x))]+E[(h∗(x)−hS(x))2]\begin{aligned} \mathrm{MSE}(x) &= \mathbb E\big[(\epsilon + (h^*(x) - h_S(x)))^2\big] \\ &= \mathbb E[\epsilon^2] + 2\,\mathbb E\big[\epsilon\,(h^*(x) - h_S(x))\big] + \mathbb E\big[(h^*(x) - h_S(x))^2\big] \end{aligned}

三項分別處理:

  • E[ϵ2]=σ2\mathbb E[\epsilon^2] = \sigma^2。因為 ϵ\epsilon 平均為零,二階動差就是變異數。
  • 中間的交叉項是零。ϵ\epsilon 與 hSh_S 獨立,所以期望可以拆成乘積 E[ϵ]⋅E[h∗(x)−hS(x)]\mathbb E[\epsilon]\cdot\mathbb E[h^*(x) - h_S(x)],而 E[ϵ]=0\mathbb E[\epsilon]=0。這一步同時用到「獨立」和「零平均」兩個條件,缺一個都不成立。
  • 第三項留到下一步。

於是

MSE(x)=σ2+ES[(h∗(x)−hS(x))2]\mathrm{MSE}(x) = \sigma^2 + \mathbb E_S\big[(h^*(x) - h_S(x))^2\big]

σ2\sigma^2 是測試資料本身的量測誤差,模型再好也消不掉。有學生問為什麼測試點也要加雜訊,講者的回答是測試資料跟訓練資料用同一個過程產生,同樣不乾淨;想看沒有雜訊的情況,把 σ2\sigma^2 設成零就好,其餘推導不變(錄影 28:43–29:43)。

第二步:引入平均模型

定義「長期平均預測」:

hˉ(x)=ES[hS(x)]\bar h(x) = \mathbb E_S\big[h_S(x)\big]

意思是把所有可能抽到的、大小為 nn 的訓練集都拿來訓練一次,把它們在 xx 上的預測平均起來。這個量算不出來,只是分析用的工具。注意 hˉ(x)\bar h(x) 是對 SS 取完期望的結果,所以它是一個常數,不再跟 SS 有關。

在第二項裡加一個 hˉ(x)\bar h(x) 再減一個 hˉ(x)\bar h(x):

h∗(x)−hS(x)=(h∗(x)−hˉ(x))⏟常數+(hˉ(x)−hS(x))⏟隨 S 變動h^*(x) - h_S(x) = \underbrace{\big(h^*(x) - \bar h(x)\big)}_{\text{常數}} + \underbrace{\big(\bar h(x) - h_S(x)\big)}_{\text{隨 } S \text{ 變動}}

平方後取期望:

ES[(h∗−hS)2]=(h∗−hˉ)2+2 (h∗−hˉ) ES[hˉ−hS]+ES[(hˉ−hS)2]\mathbb E_S\big[(h^* - h_S)^2\big] = (h^* - \bar h)^2 + 2\,(h^* - \bar h)\,\mathbb E_S[\bar h - h_S] + \mathbb E_S\big[(\bar h - h_S)^2\big]

交叉項裡 (h∗−hˉ)(h^* - \bar h) 是常數,可以提出期望外;剩下的 ES[hˉ−hS]=hˉ−ES[hS]=0\mathbb E_S[\bar h - h_S] = \bar h - \mathbb E_S[h_S] = 0,這直接來自 hˉ\bar h 的定義。最後一項正是 hS(x)h_S(x) 的變異數。合起來:

MSE(x)=σ2⏟雜訊+(h∗(x)−hˉ(x))2⏟偏差2+ES[(hS(x)−hˉ(x))2]⏟變異\mathrm{MSE}(x) = \underbrace{\sigma^2}_{\text{雜訊}} + \underbrace{\big(h^*(x) - \bar h(x)\big)^2}_{\text{偏差}^2} + \underbrace{\mathbb E_S\big[(h_S(x) - \bar h(x))^2\big]}_{\text{變異}}

講義把這兩次「交叉項為零」收成一個引理(Claim 8.1.1):AA、BB 獨立且 E[A]=0\mathbb E[A]=0 時,E[(A+B)2]=E[A2]+E[B2]\mathbb E[(A+B)^2] = \mathbb E[A^2] + \mathbb E[B^2]。課堂上沒有寫成引理,直接展開兩次。

三項各自在說什麼

  • 偏差平方:平均模型離真相多遠。式子裡沒有任何單一訓練集,它是模型類別與訓練程序的性質。直線配不出拋物線,就是這一項。
  • 變異:單次訓練出來的模型離平均模型多遠。高次多項式換一份資料就亂跳,就是這一項。
  • 雜訊:誰也沒辦法的部分。

這個分解不需要假設 h∗h^* 落在我們的假設類別裡。有學生問了這件事,講者說類別選錯的代價會由偏差項付出,推導本身不受影響(錄影 23:34–25:37)。

還有三個容易誤會的地方,課堂上都有人問:

hˉ\bar h 不是「把所有資料合起來訓練一次」。 它是很多個「用 nn 筆資料訓練」的模型的平均。兩者有可能相等,但不保證;講者說相等的性質叫一致性(consistency)(錄影 37:52)。講義則說在很多情況下 hˉ\bar h 近似於用無限多資料訓練出來的模型。

用直線配二次資料時,hˉ\bar h 是什麼? 講者的回答是:如果真相是 ax2+bx+cax^2 + bx + c,平均下來的直線大致是 bx+cbx + c 再加上一個常數位移(錄影 38:52)。下一節的數值例子會看到這個常數。

這個推導只對平方損失的迴歸成立。 講者說分類等情況有類似的分解,但課堂上沒有證明(錄影 36:51)。講義的說法更保守:分類的偏差–變異分解有好幾種提案,目前沒有公認的形式。

算一次:三個訓練點、三種模型

以下是本文自擬的例子,不是課堂內容,用來把上面三項實際算出數字。為了能用手算,訓練點的 xx 固定不抽樣,只有雜訊是隨機的;課堂上的設定則是連 xx 也一起抽。

設定。 真實函數 h∗(x)=x2h^*(x) = x^2。訓練集固定取三個點 x=−1,0,1x = -1, 0, 1,觀測值 yi=xi2+ϵiy_i = x_i^2 + \epsilon_i,也就是 y1=1+ϵ1y_1 = 1 + \epsilon_1、y2=ϵ2y_2 = \epsilon_2、y3=1+ϵ3y_3 = 1 + \epsilon_3,三個雜訊獨立、變異數都是 σ2\sigma^2。測試點取 x=0.5x = 0.5,真值 h∗(0.5)=0.25h^*(0.5) = 0.25。

三種模型在 x=0.5x=0.5 的預測。 最小平方解都是 y1,y2,y3y_1, y_2, y_3 的線性組合,所以預測可以寫成 w1y1+w2y2+w3y3w_1 y_1 + w_2 y_2 + w_3 y_3。

  • 常數模型:最小平方解是平均,預測 13(y1+y2+y3)\tfrac13(y_1 + y_2 + y_3),權重 (13,13,13)(\tfrac13, \tfrac13, \tfrac13)。
  • 直線:三個 xx 對稱於零,截距是 13(y1+y2+y3)\tfrac13(y_1+y_2+y_3),斜率是 12(y3−y1)\tfrac12(y_3 - y_1)。在 x=0.5x=0.5 的預測是截距加 0.50.5 倍斜率,權重 (13−14, 13, 13+14)=(112,13,712)(\tfrac13 - \tfrac14,\ \tfrac13,\ \tfrac13 + \tfrac14) = (\tfrac1{12}, \tfrac13, \tfrac7{12})。
  • 二次多項式:三個係數配三個點,剛好內插。用 Lagrange 內插公式,在 x=0.5x=0.5 的權重是 (−18,34,38)(-\tfrac18, \tfrac34, \tfrac38)。

平均模型與偏差。 對雜訊取期望,E[y]=(1,0,1)\mathbb E[y] = (1, 0, 1),所以 hˉ(0.5)=w1+w3\bar h(0.5) = w_1 + w_3:

  • 常數:23\tfrac23,偏差平方 (0.25−0.6667)2=0.1736(0.25 - 0.6667)^2 = 0.1736。
  • 直線:112+712=23\tfrac1{12} + \tfrac7{12} = \tfrac23,偏差平方同樣是 0.17360.1736。平均下來的直線斜率是零、截距是 23\tfrac23,這就是講者說的「bx+cbx + c 加一個常數」:這裡 b=c=0b = c = 0,常數是 x2x^2 在三個訓練點上的平均。
  • 二次:−18+38=0.25-\tfrac18 + \tfrac38 = 0.25,偏差是零,因為真相就在類別裡。

變異。 預測的隨機部分是 w1ϵ1+w2ϵ2+w3ϵ3w_1\epsilon_1 + w_2\epsilon_2 + w_3\epsilon_3,變異數是 σ2(w12+w22+w32)\sigma^2(w_1^2 + w_2^2 + w_3^2):

  • 常數:σ2⋅13=0.3333 σ2\sigma^2 \cdot \tfrac13 = 0.3333\,\sigma^2
  • 直線:σ2⋅1+16+49144=0.4583 σ2\sigma^2 \cdot \tfrac{1 + 16 + 49}{144} = 0.4583\,\sigma^2
  • 二次:σ2⋅1+36+964=0.7188 σ2\sigma^2 \cdot \tfrac{1 + 36 + 9}{64} = 0.7188\,\sigma^2

合計。

模型偏差平方變異(σ² = 0.25)測試誤差(σ² = 0.25)變異(σ² = 1)測試誤差(σ² = 1)
常數0.17360.08330.50690.33331.5069
直線0.17360.11460.53820.45831.6319
二次00.17970.42970.71881.7188

測試誤差是雜訊 σ2\sigma^2、偏差平方與變異三項相加。我另外用四十萬次模擬驗算過,六個數字都在小數第二位以內吻合。

這個結果代表什麼。 雜訊小(σ2=0.25\sigma^2 = 0.25)時,二次模型最好:它沒有偏差,多出來的變異還付得起。雜訊大(σ2=1\sigma^2 = 1)時,排名整個反過來,最笨的常數模型贏了「正確」的二次模型,因為只有三個點,二次模型的變異 0.720.72 遠超過它省下的偏差 0.170.17。直線在兩種情況都輸給常數:在這個測試點上它沒有降低任何偏差,卻多了變異。

所以「該用多複雜的模型」沒有脫離資料量與雜訊的答案,連模型類別包含真相都不保證它最好。這也是講者接下來要引進正規化的理由:與其在幾個離散的模型類別裡選,不如讓複雜度可以連續調。

開發集與正規化的想法

(錄影 40:53–43:55)

分解給了兩個後續方向。

第一,偏差與變異的合計效果可以用實驗量出來。從資料裡另外留一份隨機樣本,不拿來訓練,只用來調參數、比較做法,叫做開發集(dev set)或保留集(holdout set)。它讓你不必動到測試集就能估計測試誤差。

第二,變異通常靠正規化降低,代價是多一點偏差。因為測試誤差是三項相加,只要偏差平方上升的量小於變異下降的量,就划算。講者把通則講成一句話:

"You trade a little bit of bias for a big variance reduction."(00:40:53)

正規化也有貝氏的讀法:它是把事前知識寫進去,例如「我知道這條線不會太陡」,等於說 θ\theta 的各分量平均而言不該太大。

Ridge regression:在特徵值上看偏差換變異

(錄影 43:55–57:00)

目標函數與兩個極端

Ridge regression 是在最小平方的目標上加一個懲罰項。字幕看不到投影片上的常數,以下採用讓推導最乾淨的寫法:

J(θ)=12∥Xθ−y∥2+ρ2∥θ∥2,ρ>0J(\theta) = \tfrac12\lVert X\theta - y\rVert^2 + \tfrac{\rho}{2}\lVert\theta\rVert^2,\qquad \rho > 0

懲罰項在資料求和的外面,只算一次。課堂用 ρ\rho 當正規化強度,因為 λ\lambda 要留給特徵值;講義第 9 章則用 λ\lambda 當正規化參數,對照時要留意。

直覺是:θ\theta 可以變大,但要值得,也就是它必須讓資料配適得好很多。ρ=0\rho = 0 時退回普通最小平方;ρ\rho 極大時,目標只在乎懲罰項,最好的做法是預測零。兩者之間有一個最合適的值,而它取決於資料,事前很難知道,所以 ρ\rho 要從資料裡挑。這種挑法叫超參數最佳化,最後一節會談。

有學生問為什麼懲罰係數的大小而不是別的。講者說懲罰的形式是建模選擇,可以要求稀疏、可以用別的範數,沒有對錯;選平方是因為數學最乾淨,而且實務常見:深度學習的 weight decay 和 dropout 都可以解讀成某種 L2L_2 正規化(錄影 43:55–45:57)。講義 9.1 節有 weight decay 的一行推導:對正規化後的損失做梯度下降,換成課堂的記號,更新式是 θ←(1−ρη)θ−η∇J(θ)\theta \leftarrow (1 - \rho\eta)\theta - \eta\nabla J(\theta)(這裡的 JJ 是沒加懲罰項的損失),每一步先把權重乘上一個小於 1 的係數,名字由此而來。

樣本比維度少:懲罰項挑出最小範數解

設 X∈Rn×dX \in \mathbb R^{n\times d} 且 n<dn < d,樣本數比維度少。這時 X⊤XX^\top X 不是滿秩,XX 有非零的零空間(null space)。取零空間裡任一個向量 vv,有 Xv=0Xv = 0,所以

X(θ+v)=Xθ+Xv=XθX(\theta + v) = X\theta + Xv = X\theta

θ\theta 和 θ+v\theta + v 在訓練資料上的預測完全一樣,損失也一樣。最佳解有無限多個,該挑哪一個?

把任何解拆成兩個互相垂直的部分:θ=θ0+v\theta = \theta_0 + v,其中 vv 在零空間,θ0\theta_0 在與零空間垂直的方向。兩個向量垂直時,範數平方可以直接相加(把內積展開,交叉項 2θ0⊤v=02\theta_0^\top v = 0):

∥θ0+v∥2=∥θ0∥2+∥v∥2\lVert\theta_0 + v\rVert^2 = \lVert\theta_0\rVert^2 + \lVert v\rVert^2

vv 對配適沒有任何貢獻,卻要付 ∥v∥2\lVert v\rVert^2 的懲罰,所以最佳解會把 vv 設成零。懲罰項不需要知道零空間在哪個方向,就自動把所有無用的分量壓掉:在預測完全相同的那一整族解裡,留下的是範數最小的那一個。講者的說法是懲罰項逼我們去選最小範數解(minimum norm solution),並提到 Moore–Penrose 虛反矩陣(pseudoinverse)挑的也是最小範數解,推導放在投影片附錄。

要補一個細節(本文補充):ρ>0\rho > 0 時懲罰項也會把 θ0\theta_0 往零拉一點,講者的原話是「shrink theta 0 a little bit」,所以 ridge 的解不會剛好等於零誤差解裡範數最小的那一個;ρ\rho 愈小兩者愈接近,ρ→0\rho \to 0 的極限才是它。下面的小例子看得到這件事。

一個本文自擬的小例子:只有一筆資料 x=(1,1)x = (1, 1)、y=2y = 2,兩個參數。所有滿足 θ1+θ2=2\theta_1 + \theta_2 = 2 的 θ\theta 都是零誤差,可以寫成 (1,1)+t (1,−1)(1,1) + t\,(1,-1),範數平方是 2+2t22 + 2t^2,在 t=0t = 0 時最小,最小範數解是 (1,1)(1, 1)。Ridge 的解是 22+ρ(1,1)\tfrac{2}{2+\rho}(1,1):ρ=1\rho = 1 時是 (0.667,0.667)(0.667, 0.667),ρ=0.1\rho = 0.1 時是 (0.952,0.952)(0.952, 0.952),ρ→0\rho \to 0 時趨近 (1,1)(1,1)。它永遠不會沾到 (1,−1)(1,-1) 方向。

閉式解與特徵值位移

對 J(θ)J(\theta) 求梯度並設為零:

∇J(θ)=X⊤(Xθ−y)+ρ θ=0⟹(X⊤X+ρI) θ=X⊤y\nabla J(\theta) = X^\top(X\theta - y) + \rho\,\theta = 0 \quad\Longrightarrow\quad (X^\top X + \rho I)\,\theta = X^\top y

懲罰項的梯度就是 ρθ\rho\theta,移項後剛好變成 ρI\rho I 加在 X⊤XX^\top X 上。所以

θ^=(X⊤X+ρI)−1X⊤y\hat\theta = (X^\top X + \rho I)^{-1} X^\top y

反矩陣一定存在嗎?設 X⊤XX^\top X 的特徵值是 λ1,…,λd\lambda_1, \dots, \lambda_d。加上 ρI\rho I 不改變特徵向量,只把每個特徵值平移成 λi+ρ\lambda_i + \rho。講者在這裡問全班用了什麼性質,答案是 X⊤XX^\top X 半正定,所以 λi≥0\lambda_i \ge 0;一個非負數加上嚴格正的 ρ\rho 一定嚴格為正,矩陣因此滿秩、可逆。

變異付在小特徵值上

課堂上這一段用講的,沒有完整寫出式子(講者說變異裡的特徵值項從 1/λi1/\lambda_i 變成 ridge 的版本)。下面的式子是我依課堂的設定補完的推導。

假設 y=Xθ∗+ϵy = X\theta^* + \epsilon,雜訊各分量獨立、變異數 σ2\sigma^2,並把 XX 當成固定。代入閉式解:

θ^=(X⊤X+ρI)−1X⊤X θ∗+(X⊤X+ρI)−1X⊤ϵ\hat\theta = (X^\top X + \rho I)^{-1}X^\top X\,\theta^* + (X^\top X + \rho I)^{-1}X^\top\epsilon

第一項是確定的,第二項是雜訊乘上一個固定矩陣 A=(X⊤X+ρI)−1X⊤A = (X^\top X + \rho I)^{-1}X^\top。固定矩陣乘上雜訊向量的共變異數矩陣是 σ2AA⊤\sigma^2 AA^\top,這就是講者說的「一個隨機變數乘上一個矩陣,算出共變異數」那個計算。

接著換到特徵向量座標。把 X⊤XX^\top X 寫成 QΛQ⊤Q\Lambda Q^\top,QQ 的各行是互相垂直的單位特徵向量,Λ\Lambda 是對角線為 λ1,…,λd\lambda_1,\dots,\lambda_d 的對角矩陣。因為 I=QQ⊤I = QQ^\top,有 X⊤X+ρI=Q(Λ+ρI)Q⊤X^\top X + \rho I = Q(\Lambda + \rho I)Q^\top,反矩陣是 Q(Λ+ρI)−1Q⊤Q(\Lambda + \rho I)^{-1}Q^\top。代回去:

(X⊤X+ρI)−1X⊤X=Q (Λ+ρI)−1Λ Q⊤,AA⊤=Q (Λ+ρI)−1Λ (Λ+ρI)−1 Q⊤(X^\top X + \rho I)^{-1}X^\top X = Q\,(\Lambda + \rho I)^{-1}\Lambda\,Q^\top,\qquad AA^\top = Q\,(\Lambda + \rho I)^{-1}\Lambda\,(\Lambda + \rho I)^{-1}\,Q^\top

中間夾的都是對角矩陣,第 ii 個對角元素分別是 λi/(λi+ρ)\lambda_i/(\lambda_i+\rho) 與 λi/(λi+ρ)2\lambda_i/(\lambda_i+\rho)^2。所以只要改用特徵向量座標,也就是看 Q⊤θ^Q^\top\hat\theta 與 Q⊤θ∗Q^\top\theta^* 的第 ii 個分量(以下直接記成 θ^i\hat\theta_i 與 θi∗\theta^*_i),各方向之間的共變異數是零,可以一個方向一個方向分開看:

E[θ^i]=λiλi+ρ θi∗,Var(θ^i)=σ2 λi(λi+ρ)2\mathbb E[\hat\theta_i] = \frac{\lambda_i}{\lambda_i + \rho}\,\theta^*_i,\qquad \mathrm{Var}(\hat\theta_i) = \sigma^2\,\frac{\lambda_i}{(\lambda_i + \rho)^2}

令 ρ=0\rho = 0 就是普通最小平方:期望值等於 θi∗\theta^*_i(無偏),變異數是 σ2/λi\sigma^2/\lambda_i。

問題出在小特徵值。λi\lambda_i 很小代表沿那個特徵向量方向大幅移動 θ\theta,損失幾乎不變,資料對那個方向沒有約束力;λi=0\lambda_i = 0 是最糟的情況,整個方向完全不影響損失。此時 σ2/λi\sigma^2/\lambda_i 很大。講者用的數字是:λi=10−10\lambda_i = 10^{-10} 時,求 θ\theta 要乘上 101010^{10},X⊤XX^\top X 的微小變動在輸出端被放大一百億倍;加上 ρ=0.1\rho = 0.1 之後,0.1+10−100.1 + 10^{-10} 實質上就是 0.10.1,放大倍率變成 10(錄影 55:16–56:19)。

即使 X⊤XX^\top X 滿秩,這個效果也在。講者問全班:特徵值全部相同和一大一小兩種情況,哪一種變異比較大?答案是差距大的那一種,也就是條件數差的情況(錄影 53:15)。

數值例子(本文自擬)。 兩個參數,X⊤XX^\top X 的特徵值是 λ1=4\lambda_1 = 4、λ2=0.01\lambda_2 = 0.01,σ2=1\sigma^2 = 1,真實參數在特徵向量座標下是 θ∗=(1,1)\theta^* = (1, 1)。

普通最小平方的變異數:方向一 1/4=0.251/4 = 0.25,方向二 1/0.01=1001/0.01 = 100。沒有偏差,所以 θ^\hat\theta 離 θ∗\theta^* 的期望平方距離是 100.25100.25,幾乎全部來自方向二。

取 ρ=0.1\rho = 0.1:

  • 方向一:收縮係數 4/4.1=0.9764/4.1 = 0.976,偏差平方 (0.024)2=0.0006(0.024)^2 = 0.0006;變異數 4/4.12=0.2384/4.1^2 = 0.238。
  • 方向二:收縮係數 0.01/0.11=0.0910.01/0.11 = 0.091,偏差平方 (0.909)2=0.826(0.909)^2 = 0.826;變異數 0.01/0.112=0.8260.01/0.11^2 = 0.826。

合計偏差平方 0.8270.827、變異 1.0641.064,期望平方距離 1.8911.891。

付出 0.830.83 的偏差,變異從 100.25100.25 降到 1.061.06,總誤差變成原來的五十分之一左右。兩個方向受到的影響差很多:資料約束得好的方向一幾乎沒動,約束不了的方向二被壓到原值的 9%。Ridge 做的事就是在資料說不清楚的方向上放棄估計、往零靠。代價也看得到:方向二的真值是 1,估出來平均只有 0.09。如果那個方向的真值很大,這筆交易就不划算,所以 ρ\rho 得靠資料挑。

其他正規化手法與怎麼挑 ρ

(錄影 57:00–1:02:23)

這一段是幾個提問串起來的實務討論。

常數怎麼來的。 有學生問 ρ\rho 是不是像某些 10−510^{-5} 之類的小常數。講者說很多這類數值是經驗上調出來的,並開玩笑提到「Karpathy constant」,隨即更正那其實是 Adam 的步長而不是正規化強度。他接著說這類小常數還有數值上的理由:線性系統條件數高時,輸入的小變動會被放大,而機器學習用的浮點精度愈來愈低,不穩定會累積,所以加一點常數既避開精度問題,也順便加了一點偏差。

統計與機器學習的態度差異。 講者說統計學家會很小心地設定正規化項,例如 Trevor Hastie 關於 Lasso path 的一系列論文把 L1L_1 正規化下模型的變化算得很清楚;機器學習這邊則是:

"Machine learning, we don't really care. If I'm honest, we're just like, yeah, that sounds good."(00:58:21)

其他正規化手法。 訓練時隨機把一些值設成零(dropout)、對資料做擾動(資料擴增)、數值太大就除掉(LayerNorm)。講者的統整是,凡是阻止模型過度相信單一資料點的做法,通常都能解讀成正規化,也都能放進同一套偏差–變異框架分析。他舉自己的資料擴增論文當例子:貓的照片轉一點角度、放大一點還是貓,做這些擴增能讓模型不去配適雜訊。

ρ 怎麼挑。 經驗法則大多不太有用,因為前提是各特徵尺度一致;資料標準化與白化(whitening)講者說留到他兩週後回來的課。實際上就是多試幾個值、看哪個泛化得好:

"The existence of the dev set is much more trusted by engineers than any amount of math in this space."(01:00:21)

範數小於 1 的懲罰? 傳統上用 1-範數,因為它是凸的;真正想要的是計算非零個數的 0-範數。講者說稀疏還原是十五年前的熱門題目,各種形式都被研究透了。

講者在這裡跳過了正規化的貝氏推導,說那部分在講義裡(講義 9.4 節)。

雙降:過了內插門檻,測試誤差又掉下來

(錄影 1:02:23–1:05:40)

古典的故事說,複雜度超過某一點之後測試誤差一定上升,一個內插 15 個點的高次多項式應該是災難。但近十年訓練的模型,參數常常比訓練資料多很多,把訓練集完全背下來,泛化卻比誰都好。講者的說法:

"this puzzle for practitioners was not, how do we avoid overfitting, like I told you, but why aren't we overfitting."(01:02:23)

講者介紹的是以 Misha Belkin 為第一作者的論文,結果是在 kernel 方法的設定下做出來的(講者說 kernel 之後會教,這裡不需要懂)。把模型容量放橫軸、測試誤差放縱軸,左半邊是古典的 U 形;但容量繼續增加,越過剛好能內插訓練集的門檻、進入大幅過度參數化的區域之後,測試誤差又開始下降。曲線下降兩次,所以叫雙降。講者說這個現象在神經網路上觀察得到,在某些設定下可以證明。

課堂給的解釋很短:過度參數化時零損失的解有很多個,最佳化器會從中挑出一個平滑的。講者把這叫做最佳化器的隱式偏好(implicit bias),它接手了原本由顯式正規化扮演的角色,並說在最小平方問題裡就看得到:用虛反矩陣解,或用 SGD 解,都會選到特定的解(這句是他講完 ImageNet-V2 之後回頭總結時說的,錄影 1:09:36)。

這可以接回前面的零空間。n<dn < d 時零誤差的解有無限多個,差別只在零空間裡的分量 vv;最小範數解就是 v=0v = 0 的那一個。講義 8.2 節把這件事說得更具體:線性模型在 n≪dn \ll d 時,從零初始化的梯度下降會收斂到最小範數解;測試誤差的高峰出現在 n≈dn \approx d 附近,而把正規化強度調到最佳可以大幅壓低那個高峰。課堂上沒有講到這個高峰的位置,也沒有講講義裡的 sample-wise 雙降。

講者強調這一段不在考試範圍。他想傳達的是機器學習離「已經解決」還很遠,2018 年的論文還在改寫大家對基本問題的理解。

適應性過度配適與 ImageNet-V2

(錄影 1:05:40–1:10:37)

另一種擔心來自統計學的訓練:一個公開基準被整個社群反覆測試,大家雖然沒有直接拿測試集訓練,卻可能透過一篇又一篇論文的選擇,不知不覺把測試集的資訊漏回方法裡。講者用藥物試驗類比:他說 Stanford 的 John Ioannidis 推動藥物試驗事先登記,就是為了防止把資料凹到想要的結論(p-hacking)。放到機器學習,問題變成:在 ImageNet 上排名好的模型,是真的好,還是只是適應了這份測試集?這叫適應性過度配適(adaptive overfitting)。

講者介紹的研究(他提到作者裡的 Ben 與 Ludwig Schmidt,Ben 就是前面那位)在十年後盡量照原本的做法,重新抓取、清理出一份新的 ImageNet 測試集,把歷年的模型拿來重測。結果是所有模型的準確率都掉了,講者說是 11 個百分點,而且掉的幅度幾乎相同;把原測試集準確率與新測試集準確率畫成散布圖,模型排成一條線,相對排名沒有變。

講者的解讀有兩層。整體下降不神祕,兩份測試集的建構方式不同就會造成。重要的是排名沒變:ImageNet 上的競爭激烈到他說連大公司都有人因為作弊被禁(原話是 getting banned for cheating),即使如此,模型之間誰比誰好的結論仍然成立,適應性過度配適在這個案例裡沒有想像中嚴重。他同時提醒,這不代表可以對資料為所欲為,適應性過度配適在別的地方確實會發生。

模型選擇:開發集、k 折交叉驗證與 successive halving

(錄影 1:10:37–1:15:50)

課程剩不到六分鐘,這一段講得很快。開場預告的 k 折交叉驗證分析沒有時間做。

為什麼不能用訓練誤差挑

基本流程:有一組候選模型(例如不同的 ρ\rho),每一個都在訓練集上訓練,在開發集上評分,選開發集分數最好的。講者說他只在乎一個問題:為什麼不直接選訓練誤差最低的?學生答對了:表達力最強的模型訓練誤差可以壓到零,用訓練誤差挑永遠會選到最複雜的那個。放在 ridge 上就是永遠選到 ρ=0\rho = 0。

資料怎麼分是一個取捨:測試集要夠大才能對最終數字有信心,開發集要夠大才能挑對超參數,但經驗上訓練集愈大模型愈好,所以大家會盡量把資料塞進訓練集。測試集則要當成不能偷看的東西,每看一次都可能漏資訊、高估表現。

k 折交叉驗證

交叉驗證是省資料的做法:不另外切一大塊開發集,而是把訓練資料分成幾份,例如五份,輪流用四份訓練、預測剩下那一份。因為每次評分的資料都沒參與那一次訓練,就不會一面倒地選到最複雜的模型。

課堂只講到這裡。講義 9.3 節有完整流程:kk 份輪流當驗證集,把 kk 次驗證誤差平均,選平均最低的模型,再用全部資料重新訓練一次;k=10k = 10 是常見選擇,資料極少時可以用 k=nk = n 的留一法(leave-one-out)。代價是每個候選模型要訓練 kk 次。

Successive halving:把運算花在有希望的候選上

交叉驗證省資料,successive halving 省運算。講者在開場說要講 Hyperband,實際描述的流程是 successive halving(Hyperband 建立在它之上):

  1. 把 ρ\rho 的候選值排成一組,例如按倍數間隔取。
  2. 所有候選都只跑少量步數,評分,淘汰最差的一半。
  3. 存活者從中斷處接著跑,步數加倍,再評分、再淘汰一半。
  4. 重複到剩一個。

課堂的動畫是八個設定 A 到 H。第一輪後 A、C、E、G 留下;第二輪跑兩倍長,A 累計拿到的運算量是第一輪就被淘汰的 B 的三倍;之後 A、C 留下,再繼續。每一輪的總運算量大致相同,但好的候選拿到的份額指數成長。

把課堂的例子算完(以下的算術是本文補的):令第一輪每個設定跑 1 個單位,三輪分別花 8×18\times1、4×24\times2、2×42\times4,共 24 個單位,最後的勝出者累計跑了 1+2+4=71+2+4 = 7 個單位。如果八個設定都跑滿 7 個單位,要 56 個單位,successive halving 只用了其中的 43%。勝出者那 7 個單位可以接著訓練下去,占總花費的 29%;其餘 17 個單位花在被淘汰的設定上。講者提到這個比例時說「you compute the exact fraction」,答案就是 7/24。

這個方法的前提是早期分數能預測後期表現。講者說它有理論支持:分數滿足某些性質時,這差不多是最佳策略。他對這個方法的評價是:

"that simple trick is one that I use all the time"(01:15:49)

自我檢查

1. 在偏差–變異分解的第一步,交叉項 2 E[ϵ (h∗(x)−hS(x))]2\,\mathbb E[\epsilon\,(h^*(x) - h_S(x))] 為什麼是零?如果測試點剛好是訓練集裡的某一筆(同一個雜訊值),這一步還成立嗎?

判準:要說出兩個條件,ϵ\epsilon 與 hSh_S 獨立(所以期望拆成乘積),以及 E[ϵ]=0\mathbb E[\epsilon] = 0。若測試觀測就是訓練過的那一筆,hSh_S 是用同一個 ϵ\epsilon 訓練出來的,兩者不獨立,交叉項不為零。這正是訓練誤差會低估測試誤差的原因。

2. 沿用三個訓練點的例子(h∗(x)=x2h^*(x) = x^2,訓練點 −1,0,1-1, 0, 1,σ2=0.25\sigma^2 = 0.25),把測試點改成 x=0x = 0。算常數模型與二次模型的偏差平方、變異與測試誤差。

答案:真值 h∗(0)=0h^*(0) = 0。常數模型的預測仍是三點平均,hˉ=23\bar h = \tfrac23,偏差平方 49=0.444\tfrac49 = 0.444,變異 0.25/3=0.0830.25/3 = 0.083,測試誤差 0.25+0.444+0.083=0.7780.25 + 0.444 + 0.083 = 0.778。二次模型內插三個點,而 x=0x=0 本身是訓練點,預測就是 y2=ϵ2y_2 = \epsilon_2,偏差為零、變異 0.250.25,測試誤差 0.50.5。同一個模型在不同測試點上的偏差不同:常數模型在 x=0.5x=0.5 的偏差平方只有 0.1740.174。

3. X⊤XX^\top X 有一個特徵值 λ=10−4\lambda = 10^{-4},σ2=1\sigma^2 = 1。比較 ρ=0\rho = 0 與 ρ=0.01\rho = 0.01 時該方向的變異數與收縮係數。什麼情況下加這個 ρ\rho 不划算?

答案:ρ=0\rho = 0 時變異數 1/10−4=1041/10^{-4} = 10^4,無偏。ρ=0.01\rho = 0.01 時收縮係數 10−4/0.0101=0.009910^{-4}/0.0101 = 0.0099,變異數 10−4/0.01012=0.9810^{-4}/0.0101^2 = 0.98;偏差平方是 (0.99 θ∗)2≈0.98 (θ∗)2(0.99\,\theta^*)^2 \approx 0.98\,(\theta^*)^2。只有當 (θ∗)2(\theta^*)^2 大到接近 10410^4(真值約 100 以上)時,偏差才會吃掉省下的變異。

4. 有人主張「用訓練誤差挑 ρ 就好,不必浪費資料切開發集」。用 ridge 的目標函數說明為什麼這樣一定選到 ρ=0\rho = 0。

判準:ρ=0\rho = 0 的解是所有 θ\theta 裡訓練平方誤差最小的;任何 ρ>0\rho > 0 的解都是為了降低範數而放棄一部分配適,訓練誤差不會更低,用訓練誤差挑就一定挑到 ρ=0\rho = 0。(更強的結論也成立:訓練誤差對 ρ\rho 單調不減,把兩個不同 ρ\rho 各自「是自己目標函數的最小值」的不等式相加就能證明。)訓練誤差量不出變異下降的好處,必須用沒參與訓練的資料評分。

5. 用 successive halving 篩 16 個設定,第一輪每個跑 1 個單位,每輪步數加倍。總共花多少單位?勝出者累計跑了多少?這個方法會錯殺哪一種設定?

答案:四輪分別是 16×116\times1、8×28\times2、4×44\times4、2×82\times8,共 64 個單位;勝出者累計 1+2+4+8=151+2+4+8 = 15 個單位。全部跑滿 15 個單位要 240 個單位,所以只花了 27%。會被錯殺的是起步慢、後期才追上來的設定,例如學習率較小的候選,它在第一輪分數差就被淘汰了。

對應閱讀

CS229 主講義(2026 年 8 月版):

  • 第 8 章 8.1 節(pp.117–123):偏差–變異取捨與 8.1.1 的數學分解,對應課堂前半。講義用 ξ\xi 表示雜訊、havgh_{\text{avg}} 表示平均模型,課堂用 ϵ\epsilon 與 hˉ\bar h;講義的過度配適例子是五次多項式,課堂投影片是九次;講義把兩次交叉項為零整理成 Claim 8.1.1。
  • 第 8 章 8.2 節(pp.123–127):雙降。講義比課堂多了 sample-wise 雙降、高峰出現在 n≈dn \approx d、最佳正規化可以大幅壓低高峰,以及用範數而非參數個數衡量複雜度時雙降會消失的討論。
  • 第 8 章 8.3 節(pp.128–136):樣本複雜度界限,包括有限假設類別的 union bound 與 Hoeffding 不等式、uniform convergence、VC 維度。這堂課完全沒有講這一節。
  • 第 9 章 9.1 節(pp.137–139):正規化的一般形式 Jλ(θ)=J(θ)+λR(θ)J_\lambda(\theta) = J(\theta) + \lambda R(\theta)、weight decay、L1L_1 與稀疏。課堂的 ridge 閉式解、零空間與特徵值分析不在講義這一節裡,是課堂多講的。
  • 第 9 章 9.2 節(pp.139–141):隱式正規化。課堂只在雙降的總結提了一句。
  • 第 9 章 9.3 節(pp.141–144):hold-out、k 折與留一法交叉驗證的完整流程。課堂只有概念;successive halving 則是講義沒有的內容。
  • 第 9 章 9.4 節(pp.144–145):貝氏統計與 MAP 估計。課堂明講跳過。

ImageNet-V2 與適應性過度配適不在講義這兩章裡。

系列導覽:上一堂 第 5 堂:高斯判別分析與 Naive Bayes|下一堂 第 7 堂:神經網路的架構|課程總覽

課程影片來源

原始影片:Stanford CS229 Machine Learning | Spring 2026 | Lecture 6: Dataset Split, ML Advice

查核日期:2026-10-12。

內容核對:已依字幕核對(2026-10-12):全文依這支錄影的英文字幕整份寫成,各節時間區段與引句都對過字幕;未看板書與投影片畫面,ridge 目標函數的常數與變異數的式子是依口述與講義還原或補完的,文中已標明。

參考資料