L1.4 15 分鐘閱讀 2026年9月

L1.4 該收資料、換模型,還是多訓幾輪:學習曲線

起點:三個提案,只有一筆預算

模型上線前的最後一次會議。目前的表現不夠好,三個人各有提案:

  • A:「資料太少,再標一萬筆。」——三個月,六位數的標註費。
  • B:「模型太小,換一個大十倍的。」——兩週實作,訓練成本上升五倍。
  • C:「訓練不夠久,多跑幾輪。」——便宜,但如果沒用就是白等。

三個提案都合理,都要花錢,而且如果診斷錯了,錢就是白花的:資料不足的問題不會因為換大模型而好轉(十個房仲各看一百間房:Bias 與 Variance 已經證明加資料只壓 variance),容量不足的問題也不會因為加資料而好轉。

你要在花錢之前就知道哪一個會有效。

方法在你手上的資料裡:把手上的資料只用一部分去訓練,畫出「誤差如何隨可用資料量變化」的曲線,看它往哪裡走。同樣的手法對容量與訓練步數也適用。三條曲線,三個處方。

這一篇是 L1 的收束:把前四篇的概念(訓練/泛化誤差、bias–variance、切分、交叉驗證)變成一張可以在會議上畫出來的圖。

模型不夠好:該去收更多資料、換更大的模型,還是多訓幾輪?
三件事都要花錢,
能不能在花之前就知道哪一個有效?

課堂提問Q1

把三個提案翻成三條曲線:橫軸各是什麼、要畫哪兩條線?「加資料會不會有用」這個問題,在圖上是看哪一個特徵?

先想一想,再展開看整理後的答案

三條曲線,每條都畫兩線(訓練誤差與驗證誤差,後者用留出集或 只有三十筆資料:交叉驗證 估):

曲線橫軸對應的提案
學習曲線訓練資料量 nn(用手上資料的子集)A:加資料
容量曲線模型大小 / 複雜度B:換模型
訓練曲線訓練步數C:訓久一點

「加資料會不會有用」看的是學習曲線上的兩個特徵:

  1. 兩條線之間的間距。 間距大 = variance 主導 = 加資料會把間距壓小 → 有用
  2. 兩條線收斂到的高度。 若它們已經幾乎重合,就看那個共同高度離「不可約誤差」多遠。差很多 = bias 主導 = 再多資料也停在那裡 → 沒用,該換模型

這正是不必先花三個月就能回答 A 的方法——用 n/8n/8n/4n/4n/2n/2nn 的子集各訓一次,看趨勢。

加資料值不值得,看的是那兩條線會合在多高的地方。

三種形狀,三張處方

學習曲線(誤差對資料量)的兩種典型形狀:

  • 高原很高、兩線早早重合 → 欠擬合 / bias 主導。加資料無效。處方:放大容量、加更有資訊的特徵、或檢查最佳化是否收斂。
  • 兩線間距大、驗證線仍在下降 → variance 主導。處方:加資料(曲線的斜率直接告訴你加多少大概能換到多少)、或縮小容量、加正則化。

容量曲線背考古題的學生:過擬合與欠擬合 的 U 形:左側欠擬合、右側過擬合、谷底是當前資料量下的最佳。它回答 B,而且要注意谷底會隨 nn 移動——所以 A 與 B 的答案彼此相關。

訓練曲線(誤差對步數)有三種讀法:兩線都還在降 → 訓久一點(C 有效);訓練線降而驗證線開始上升 → 該提早停止;訓練線卡住不降 → 這不是泛化問題而是最佳化問題,回去看學習率(霧中下山,一步該走多大:梯度下降的一頁)。

一個貫穿三張圖的參考線:不可約誤差。沒有它,你不知道「高原很高」的「高」是相對於什麼。共用 toy 裡它是 0.02250.0225;真實專案裡用重複量測的散佈或人類專家的一致性來估。

曲線的形狀從哪裡來

十個房仲各看一百間房:Bias 與 Variance 的分解看學習曲線。固定演算法,資料量 nn

E[R(f^n)]=σ2不可約+bias2(F)與 n 無關+var(n) σ2p/n.\mathbb E\big[R(\hat f_n)\big]=\underbrace{\sigma^2}_{\text{不可約}}+\underbrace{\mathrm{bias}^2(\mathcal F)}_{\text{與 }n\text{ 無關}}+\underbrace{\mathrm{var}(n)}_{\approx\ \sigma^2p/n}.

第二項不含 nn——這一行就是「加資料壓不動 bias」的全部理由。於是驗證誤差隨 nn 下降,但下降到 σ2+bias2\sigma^2+\mathrm{bias}^2 就停住。那個高原的高度只由假設空間決定。

訓練誤差的方向相反:nn 很小時模型幾乎能穿過每一點(訓練誤差接近 00),nn 變大就越來越難,訓練誤差上升。兩條線於是從兩側夾向同一個高原,間距就是 estimation error(variance)

驗證線  σ2+bias2  訓練線\text{驗證線}\ \searrow\ \sigma^2+\mathrm{bias}^2\ \nwarrow\ \text{訓練線}

這給了一個不用花錢的預測法:畫出 n/8,n/4,n/2,nn/8,n/4,n/2,n 四個點,看兩條線夾向的高度。若那個高度已經接近不可約誤差,加資料的天花板很低;若還很高,你就知道要換的是模型而不是資料量。(把驗證線外推得更遠、預測「再加十倍資料能到多少」,在很多任務上遵循冪律,這是 scaling law 研究的起點——參考文獻 2。但外推有風險,見下面的 Details。)

注意外推學習曲線的兩個陷阱

陷阱一:冪律只在中段成立。 實務上 log(誤差)\log(\text{誤差})logn\log n 常常近似直線,於是很容易用兩三個點外推十倍。但這條直線在兩端都會失效:nn 很小時模型還在「什麼都學不到」的區域,nn 很大時會撞上 σ2+bias2\sigma^2+\mathrm{bias}^2 的地板而彎平。外推超過一個數量級以上要非常小心,而且至少要有四到五個點才看得出是不是真的直線。

陷阱二:加的資料不是同一種資料。 曲線是用「現有資料的子集」畫的,所以它預測的是「更多同分佈的資料」的效果。真實的「再標一萬筆」往往來自不同時間、不同標註員、不同來源——那是另一個分佈,曲線不適用(台北的房仲去台中:風險與經驗風險 的第二段落差)。

一個折衷的做法:畫曲線時同時記錄「若把最新一批資料當驗證集」的表現。如果子集曲線很樂觀而最新批次的表現持平,那你面對的是偏移,不是資料量。

回到情境:把三個提案排出優先順序

便宜的先做。 C(多訓幾輪)與「檢查最佳化」幾乎不花什麼成本,先排除。做法:看訓練誤差是否還在降、以及是否已經低於不可約誤差水準。

接著做小資料過擬合測試。100100 筆資料訓到訓練誤差接近零。做不到 → 問題在容量或最佳化,A(加資料)一定沒用,直接排除三個月的提案。

再畫學習曲線。n/8n/8nn 的子集。兩線間距大且驗證線還在降 → A 有效,而且斜率告訴你大概能換到多少。兩線已重合在高高原 → B。

這一切依賴什麼。 一,驗證集夠大,否則曲線的抖動比訊號大(本節最後會量)。二,每個子集都重跑完整流程(含超參數選擇)——只用大資料調好的超參數去跑小子集,畫出來的曲線會低估小資料的表現,讓「加資料」看起來比實際更有效。三,子集是隨機抽的且與整體同分佈。

回到情境:三條曲線的實測

曲線一:誤差對資料量。 兩個模型——d=2d=2(容量不足)與 d=12d=12(容量充裕),每個 nn 重複 60 次取中位數:

    n |    d=2 訓練    d=2 風險 |   d=12 訓練   d=12 風險
   10 |    0.1393    0.2904 |       —          —
   20 |    0.1720    0.2493 |    0.0071     3.7113
   40 |    0.2007    0.2409 |    0.0138     0.0458
   80 |    0.2125    0.2275 |    0.0181     0.0282
  160 |    0.2129    0.2246 |    0.0205     0.0247
  320 |    0.2162    0.2227 |    0.0214     0.0235
  640 |    0.2182    0.2213 |    0.0219     0.0229

兩個模型的曲線形狀完全不同,處方也相反。

d=2d=2:訓練誤差上升0.1390.2180.139\to0.218)、風險下降(0.2900.2210.290\to0.221),兩條線在 n=160n=160 左右就幾乎貼在一起,高原是 0.220.22。而不可約誤差是 0.02250.0225——高原比地板高了十倍。n=160n=160640640 資料量翻了四倍,風險只從 0.22460.2246 改善到 0.22130.22131.5%1.5\%)。結論:對這個模型,A 提案是白花錢。 而且這個結論在 n=160n=160 時就看得出來,不需要真的去蒐集 640640 筆。

d=12d=12n=20n=20 時兩線間距是天文數字(0.00710.00713.713.71,模型比資料點還多的區域);到 n=640n=640 兩線收斂到 0.02190.02190.02290.0229高原幾乎就是不可約誤差 0.02250.0225結論:A 提案有效,而且已經接近兌現完畢——再加資料的天花板只剩 0.00040.0004

把兩欄並排讀還有一個推論:n=40n=40 的時候該選 d=12d=12 嗎? d=2d=20.24090.2409d=12d=120.04580.0458,選 d=12d=12。但在 n=20n=20d=12d=123.713.71,該選 d=2d=2最佳模型隨資料量改變——這是容量曲線的谷底會移動的另一種說法。

曲線二:誤差對訓練步數。 n=150n=1503030 訓練 / 120120 驗證)、d=29d=29 的模型,用固定學習率的全批次梯度下降:

     步數        訓練        驗證      真實風險
      100    0.0713    0.1167     0.1317
     1000    0.0516    0.0905     0.1015
    10000    0.0302    0.0476     0.0502
   100000    0.0196    0.0290     0.0290
  1000000    0.0147    0.0324     0.0318
  5000000    0.0130    0.0434     0.0458

驗證最低點:第 179270 步,驗證 0.0284,真實風險 0.0277

訓練誤差單調下降,驗證誤差先降後升。 最低點在約 1818 萬步;繼續訓到 500500 萬步,訓練誤差又降了 12%12\% 而真實風險惡化了 65%65\%0.02770.04580.0277\to0.0458)。

值得注意的是:這裡的模型沒有換、資料沒有變、正則化沒有調——只有「訓練多久」這一個旋鈕,就走完了從欠擬合到過擬合的全程。

「訓練時間」本身就是一個容量旋鈕。

這也就是提早停止(early stopping)的全部內容:在驗證曲線的最低點停下來。它是最便宜的正則化,代價只是要維護一份驗證集。

也請注意真實風險那一欄與驗證那一欄幾乎重合(0.0290/0.02900.0290/0.02900.0324/0.03180.0324/0.0318)——這正是「一份夠大、沒被拿去做其他決定的驗證集」該有的樣子(120120 筆,只用來讀曲線)。

刻意違反:把驗證集縮小。 固定一個模型(真實風險 0.02580.0258),用不同大小的驗證集去估它,各重複 2000 次:

驗證集  15 筆:估計值 0.0257 ± 0.0092   (95% 區間寬度 ≈ 0.0368,相對於真值 143%)
驗證集  60 筆:估計值 0.0260 ± 0.0046   (95% 區間寬度 ≈ 0.0185,相對於真值  72%)
驗證集 240 筆:估計值 0.0259 ± 0.0023   (95% 區間寬度 ≈ 0.0094,相對於真值  36%)

三個估計都無偏0.02570.02570.02600.02600.02590.0259 對真值 0.02580.0258)——沒有人在說謊。但 15 筆驗證集的 95%95\% 區間寬度是被估量的 143%143\%你畫出來的那條曲線,上下抖動的幅度比它要顯示的趨勢還大。 在這樣一條曲線上判斷「驗證誤差開始上升了」或「加資料還有沒有用」,讀到的是噪聲。

而且注意這只是單一點的抖動;一條曲線有十幾個點,每個點都在自己抖,人眼很容易在噪聲裡看出並不存在的轉折。實務規則:要用曲線做決定,先確認相鄰兩點的差距大於誤差棒。做不到就先擴大驗證集(或改用 只有三十筆資料:交叉驗證),不要先改模型。

三條曲線並排,附誤差棒

互動 demo:三條曲線問的是三個不同的問題,所以該做的下一件事也不一樣。

先消化一下

想一想

一條學習曲線:訓練誤差 0.190.19、驗證誤差 0.200.20,兩者從 n=200n=200 之後就幾乎不再變化;已知任務的不可約誤差約 0.020.02。下列哪個提案最不可能有效?

想一想

在訓練曲線的實測裡,第 50000005\,000\,000 步的訓練誤差(0.01300.0130)比第 100000100\,000 步(0.01960.0196)更低,但真實風險更差(0.04580.04580.02900.0290)。這說明:

想一想

n=20n=20d=12d=12 的風險是 3.713.71,在 n=640n=640 時是 0.02290.0229d=2d=2 則從 0.24930.24930.22130.2213。一位同事總結:「所以我們該用 d=12d=12。」最完整的回應是:

參考文獻

  1. Ng, A. Machine Learning Yearning 2018, Ch. 20–32.(把學習曲線當成專案決策工具的實務版本,含各種形狀對應的處方。)
  2. Hestness, J. et al. Deep Learning Scaling is Predictable, Empirically. arXiv 2017.(誤差對資料量的冪律在多個領域的實測,以及它在兩端如何失效。)
  3. Prechelt, L. Early Stopping — But When? Neural Networks: Tricks of the Trade, Springer 1998.(提早停止的判準比較:什麼時候該停、驗證曲線的噪聲怎麼處理。)