L3.0 15 分鐘閱讀 2026年9月

L3.0 火力與時間是食譜的一部分,還是煮的時候決定的?

起點:食譜上的與鍋子前的

一份食譜會寫「牛肉 300 克、醬油兩大匙」。它不會寫「第 7 分 32 秒時把火轉到 62% 並把鍋鏟往左移三公分」。

前者是事先決定、寫在紙上、每次照做的;後者是站在鍋子前、看著現場調整出來的。

訓練一個模型也有這兩層。網路的每一個權重是站在鍋子前調出來的——最佳化器看著資料,一步一步把它們挪到位。而「用幾層」「學習率多少」「訓多久」則是事先寫下來的:最佳化器不會去動它們,因為它們定義了那個最佳化問題本身。

這條界線看起來只是一個命名慣例,但它有一個立刻的後果。老師用考古題教學又出題:為什麼要切資料 已經說過:每一次用某份資料做決定,那份資料對未來的決定就少一分誠實度。 訓練集已經被用來決定權重了。如果再用它決定「用幾層」,就是同一份資料被用了兩次。

哪些東西是事先寫在紙上的,哪些是現場調出來的?
既然兩者都在「讓損失變小」,
為什麼只有後者可以看訓練集?

課堂提問Q1

把「參數」與「超參數」的分界寫清楚:判準是什麼?把前面三個 class 出現過的旋鈕分類——哪些控制假設空間的大小、哪些控制最佳化的行為?以及,為什麼「用訓練誤差選超參數」一定會選到某一端?

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

判準是「誰決定它」,不是「它重不重要」。

θ^(λ)=argminθ R^n(fθ;λ).\hat\theta(\lambda)=\arg\min_{\theta}\ \widehat R_n\big(f_\theta;\lambda\big).

θ\theta 是那個 argmin\arg\min 裡面的東西(最佳化器動它);λ\lambda 是寫在式子外面、定義了那個 argmin\arg\min 長什麼樣的東西(你動它)。學習率不在式子裡,但它決定 argmin\arg\min 實際上怎麼被求解,所以也在外面。

分成兩類,因為它們壞掉的方式不同。

控制假設空間(容量)控制最佳化
例子多項式次數、層數、寬度、L2L_2λ\lambda、dropout 率學習率 η\eta、batch size、動量 β\beta、初始化的 gain、訓練步數
調錯的徵狀U 形的兩端:欠擬合或過擬合發散、卡住、或走不完(霧中下山,一步該走多大:梯度下降的一頁 的三種)
診斷工具該收資料、換模型,還是多訓幾輪:學習曲線 的兩條曲線損失曲線的形狀、λmax\lambda_{\max} 與條件數

為什麼用訓練誤差選一定選到某一端。 背考古題的學生:過擬合與欠擬合 證過一件事:沿著一條巢狀的假設空間鏈,訓練誤差對容量單調不增——在更大的集合裡取 min\min 不可能更大。所以「挑訓練誤差最小的那個容量」的答案永遠是鏈的最上端,與資料無關、與任務無關。

那不是一個「有偏的選擇」,而是一個根本沒有在選的選擇:它把一個要用資料回答的問題,變成了一個答案早就寫好的問題。下一節把這件事量出來——200 次重複裡,它選到上限的比例是 100%100\%

兩類超參數,兩種調法

分成兩類之後,調的順序就清楚了:先讓它能訓,再讓它訓得對。

最佳化那一類先調,因為它們壞掉時會掩蓋其他所有訊號。一個 η\eta 越過穩定門檻的模型,你從它的驗證分數上讀不出任何關於容量的資訊——它根本沒開始學。判斷方式在 霧中下山,一步該走多大:梯度下降的一頁同一張地圖從不同地方出發:損失曲面與初始化 都給過:看損失曲線有沒有在降、梯度的量級對不對、小資料能不能過擬合。

容量那一類後調,而且要用 該收資料、換模型,還是多訓幾輪:學習曲線 的兩條曲線判斷方向:間距大就往下調(或加資料),兩線重合在高原就往上調。

還有一類旋鈕同時屬於兩邊,而它們是最容易出事的:

這三個不能用「它是最佳化超參數,所以看訓練誤差沒關係」來處理,本篇最後會回到這件事。

訓練誤差選出來的不是選擇

把 Q1 的論證量出來。每次抽 120 筆資料,切 60 訓練 / 30 驗證 / 30 測試,候選是 degree 111515,用兩種方式各挑一個,再看它們真實的風險。重複 200 次:

fits = [Polynomial.fit(x[tr], y[tr], d) for d in DEG]
te = [((f(x[tr]) - y[tr])**2).mean() for f in fits]   # 用訓練集挑
ve = [((f(x[va]) - y[va])**2).mean() for f in fits]   # 用驗證集挑
  用訓練集選:選中的 degree 眾數 15(200 次裡 200 次)  選到上限的比例 100%  真實風險中位數 0.0530
  用驗證集選:選中的 degree 眾數  5(200 次裡  58 次)  選到上限的比例   3%  真實風險中位數 0.0262

用訓練集挑,200 次裡有 200 次挑到 degree 15。 不是「常常挑到太大的」,是每一次都挑到候選清單的最後一個。如果把清單延長到 degree 30,它就會每一次都挑 30。

代價是真實風險的兩倍0.05300.05300.02620.0262)。而且注意驗證集那一列的眾數是 5——正是 十個房仲各看一百間房:Bias 與 Variance 那張分解表裡 bias² 剛好降到 0.00000.0000、variance 還很小的位置。驗證集真的在做選擇,訓練集只是在複讀「越大越好」。

用訓練誤差選容量,答案在看到資料之前就已經寫好了。

補充那為什麼權重可以用訓練誤差決定?

同一份資料,決定權重可以、決定容量不行——這個不對稱值得說清楚。

差別在候選的數量與它們的自由度。給定容量之後,權重是在一個受限的空間裡被挑的,而那個限制正是讓「訓練誤差低」對「真實風險低」有意義的東西(房仲怎麼估價:從例子學規則 的 Details 講過:把 F\mathcal F 設成所有函數,ERM 就退化成內插)。容量這個旋鈕做的事,是選擇那個限制本身——它在比較「限制強一點」與「限制鬆一點」,而訓練誤差對後者永遠比較友善。

換句話說:訓練誤差可以在一個固定的假設空間裡挑一個好的 ff,但它沒有能力比較兩個大小不同的假設空間,因為它完全沒有計入「大空間比較容易在這些點上好看」這件事。統計學上補這個洞的方法是加一個隨複雜度成長的懲罰(AIC、BIC、MDL 都是這個形狀),而實務上更直接的方法就是留一份資料。

回到情境:那「最佳化超參數」呢?

上面的論證是針對容量的。一個很自然的反問是:學習率、訓練步數這些不影響假設空間,用訓練誤差選應該沒關係吧?

這個說法對其中一部分成立,對另一部分是陷阱。

成立的部分:純粹的最佳化選擇——例如「同樣的模型與步數,哪個 η\eta 讓訓練損失降得最低」——確實可以用訓練損失判斷,因為那個問題問的就是「誰把這個 argmin\arg\min 求得比較好」。一個 η 不夠用:動量與 Adam 各買到什麼 的那張表(GD 0.026660.02666、動量 0.015960.01596、Adam 0.016380.01638,直接解 0.014660.01466)就是這樣讀的:它比較的是求解的效率,而參照點是那個已知的直接解。

陷阱的部分:只要那個旋鈕同時是隱含的正則化,用訓練誤差選就會再次退化成「選某一端」。

訓練步數是最清楚的例子。 該收資料、換模型,還是多訓幾輪:學習曲線 量過同一個模型跑到五百萬步:

     步數        訓練        驗證      真實風險
      100    0.0713    0.1167     0.1317
    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

訓練誤差單調下降(0.07130.01300.0713\to0.0130),真實風險在十八萬步左右觸底之後回升到 0.04580.0458 用訓練誤差選「訓多久」,答案永遠是「訓到底」——又是一個在看到資料之前就寫好的答案,而且它讓真實風險差了 65%65\%

同樣的邏輯套在 η\eta 上:限制筆記頁數,或考前一天停止補習:正則化與提早停止λ1/(2ηt)\lambda\approx1/(2\eta t)η\eta 也在決定隱含的正則化強度,所以「用固定步數下的訓練損失選 η\eta」同樣偏向「隱含正則化最弱」的那一端。

一個旋鈕只要同時影響「求解的效率」與「求到哪一個解」,它就不能用訓練誤差選。

實用的判準只有一個問題:把這個旋鈕往一個方向推到極端,訓練誤差會不會單調變好? 會,就不能用訓練誤差選它。

這一切依賴什麼。 一,驗證集本身要乾淨(老師用考古題教學又出題:為什麼要切資料 的三條規則),而且每一個候選的整條流程都要在切分之後重跑。二,上面的實驗是在一條巢狀的候選鏈上做的;比較兩個彼此不包含的架構時「單調」不成立,但「訓練誤差對大空間比較友善」的偏差仍然在。三,n=120n=120 的驗證集只有 30 筆,所以那個中位數 0.02620.0262 本身有不小的抖動(只有三十筆資料:交叉驗證 量過那個抖動有多大)。

回到情境:一份可以照著走的順序

把 L2 與 L3 的東西合起來,一個實際的調參順序是:

  1. 先讓它能訓。 固定一組合理的容量,掃 η\eta 找到會炸的值再退三到十倍;確認損失真的在降;做小資料過擬合測試。這一步用訓練損失判斷,因為問的就是求解效率。
  2. 再定容量。 用驗證集(或 只有三十筆資料:交叉驗證)掃容量與正則化強度。這一步一定用留出資料。
  3. 回頭微調最佳化。 容量換了之後,λmax\lambda_{\max} 與條件數都變了,第 1 步的結論要重驗一次。
  4. 只在最後看一次測試集,而且要先寫下你預期會看到多少。

第 3 步常常被跳過,但它是「兩類超參數互相耦合」的直接後果——這也是為什麼超參數搜尋不是「一個一個獨立地調」,而是下一篇要處理的在一個空間裡搜尋

兩類旋鈕、兩種選法

互動 demo:用訓練誤差挑旋鈕,100% 挑到複雜度上限;換成驗證集,眾數落在真正的最佳附近。

先消化一下

想一想

一個團隊用訓練損失比較了三種 batch size(32/128/512),發現 32 的訓練損失最低,於是決定用 32。這個判斷:

想一想

實測裡「用訓練集選 degree,200 次有 200 次選到上限 15」。若把候選清單延長到 degree 30,最可能的結果是:

想一想

下列哪一個旋鈕最不適合用訓練損失來選?

想一想

下列哪一句不對

參考文獻

  1. Bergstra, J., Bengio, Y. Random Search for Hyper-Parameter Optimization. JMLR 2012.(超參數的分類與搜尋;下一篇的主題,但它對「哪些旋鈕重要」的實證分析在這裡就用得上。)
  2. Hastie, T., Tibshirani, R., Friedman, J. The Elements of Statistical Learning, 2nd ed. Springer 2009, Ch. 7.2, 7.10.(訓練誤差為何對複雜度單調、以及用懲罰項或留出資料補洞的兩條路線。)
  3. Dodge, J. et al. Show Your Work: Improved Reporting of Experimental Results. EMNLP 2019.(把「調了多少」當成結果的一部分報告;本篇第 4 步與下兩篇的動機。)