L3.0 火力與時間是食譜的一部分,還是煮的時候決定的?
食譜上的與鍋子前的
一份食譜會寫「牛肉 300 克、醬油兩大匙」。它不會寫「第 7 分 32 秒時把火轉到 62% 並把鍋鏟往左移三公分」。
前者是事先決定、寫在紙上、每次照做的;後者是站在鍋子前、看著現場調整出來的。
訓練一個模型也有這兩層。網路的每一個權重是站在鍋子前調出來的——最佳化器看著資料,一步一步把它們挪到位。而「用幾層」「學習率多少」「訓多久」則是事先寫下來的:最佳化器不會去動它們,因為它們定義了那個最佳化問題本身。
前幾篇出現了不少設定。就像試煮食譜,這鍋煮得順不順,與換一批食材後是否仍好吃,是不同問題。我們要選的是訓練損失最低的設定,還是對新資料最好用的設定? 同一個數字未必能回答兩者。
哪些東西是事先寫在紙上的,哪些是現場調出來的?
既然兩者都在「讓損失變小」,
為什麼只有後者可以看訓練集?
課堂提問Q1
把「參數」與「超參數」的分界寫清楚:判準是什麼?把前面三個 class 出現過的超參數分類——哪些控制假設空間的大小、哪些控制最佳化的行為?以及,為什麼「用訓練誤差選超參數」一定會選到某一端?
先想一想,再展開看整理後的答案
判準是「誰決定它」,不是「它重不重要」。
是那個 裡面的東西(最佳化器動它); 是寫在式子外面、定義了那個 長什麼樣的東西(你動它)。學習率不在式子裡,但它決定 實際上怎麼被求解,所以也在外面。
分成兩類,因為它們壞掉的方式不同。
| 控制假設空間(容量) | 控制最佳化 | |
|---|---|---|
| 例子 | 多項式次數、層數、寬度、 的 、dropout 率 | 學習率 、batch size、動量 、初始化的 gain、訓練步數 |
| 調錯的徵狀 | U 形的兩端:欠擬合或過擬合 | 發散、卡住、或走不完(霧中下山,一步該走多大:梯度下降的一頁 的三種) |
| 診斷工具 | 該收資料、換模型,還是多訓幾輪:學習曲線 的兩條曲線 | 損失曲線的形狀、 與條件數 |
為什麼它不能單獨選容量? 若 ,精確求得的最小訓練誤差滿足 。較大的集合至少可以沿用較小集合的答案。
因此最大容量總是某個訓練誤差最小的候選,卻不一定是唯一候選:資料已被內插時可能並列,實際求解還有數值與最佳化誤差。真正缺少的是新資料的代價,而不是「再多跑幾次」就能補上的資訊。
兩類超參數,兩種調法
分成兩類之後,調的順序就清楚了:先讓它能訓,再讓它訓得對。
最佳化那一類先調,因為它們壞掉時會掩蓋其他所有訊號。一個 越過穩定門檻的模型,你從它的驗證分數上讀不出任何關於容量的資訊——它根本沒開始學。判斷方式在 霧中下山,一步該走多大:梯度下降的一頁 與 同一張地圖從不同地方出發:損失曲面與初始化 都給過:看損失曲線有沒有在降、梯度的量級對不對、小資料能不能過擬合。
容量那一類後調,而且要用 該收資料、換模型,還是多訓幾輪:學習曲線 的兩條曲線判斷方向:間距大就往下調(或加資料),兩線重合在高原就往上調。
還有一類超參數同時屬於兩邊,而它們是最容易出事的:
- 訓練步數:既是最佳化預算,也可能限制學到的特徵方向;在線性二次模型中,和 ridge 的尺度關係約是 ,不是完全等價。
- 學習率:既決定能不能收斂,也透過上面那條式子決定隱含的正則化強度。
- batch size:既決定每步的成本,也決定噪聲地板(民調只問一千人:小批次與噪聲 的 )。
這三個不能用「它是最佳化超參數,所以看訓練誤差沒關係」來處理,本篇最後會回到這件事。
圖說: 容量超參數要看泛化曲線,最佳化超參數要看訓練動態;先確認最佳化正常,容量訊號才可信。
訓練誤差選出來的不是選擇
把 Q1 的論證量出來。每次抽 120 筆資料,切 60 訓練 / 30 驗證 / 30 測試,候選是 degree 到 ,用兩種方式各挑一個,再看它們真實的風險。重複 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 次實驗都選了 degree 15,符合大空間對訓練誤差較有利的現象。但延長到 degree 30 後,可能出現並列最小或數值問題,不能保證每次一定選到 30。
代價是真實風險的兩倍( 對 )。而且注意驗證集那一列的眾數是 5——正是 十個房仲各看一百間房:Bias 與 Variance 那張分解表裡 bias² 剛好降到 、variance 還很小的位置。驗證集真的在做選擇,訓練集只是在複讀「越大越好」。
用訓練誤差選容量,答案在看到資料之前就已經寫好了。
補充那為什麼權重可以用訓練誤差決定?
同一份資料,決定權重可以、決定容量不行——這個不對稱要分清楚。
差別在候選的數量與它們的自由度。給定容量之後,權重是在一個受限的空間裡被挑的,而那個限制正是讓「訓練誤差低」對「真實風險低」有意義的東西(房仲怎麼估價:從例子學規則 的 Details 講過:把 設成所有函數,ERM 就退化成內插)。容量這個超參數做的事,是選擇那個限制本身——它在比較「限制強一點」與「限制鬆一點」,而訓練誤差對後者永遠比較友善。
換句話說:訓練誤差可以在一個固定的假設空間裡挑一個好的 ,但它沒有能力比較兩個大小不同的假設空間,因為它完全沒有計入「大空間比較容易在這些點上好看」這件事。統計學上補這個洞的方法是加一個隨複雜度成長的懲罰(AIC、BIC、MDL 都是這個形狀),而實務上更直接的方法就是留一份資料。
那「最佳化超參數」呢?
上面的論證是針對容量的。一個很自然的反問是:學習率、訓練步數這些不影響假設空間,用訓練誤差選應該沒關係吧?
這個說法對其中一部分成立,對另一部分是陷阱。
成立的部分:純粹的最佳化選擇——例如「同樣的模型與步數,哪個 讓訓練損失降得最低」——確實可以用訓練損失判斷,因為那個問題問的就是「誰把這個 求得比較好」。一個 η 不夠用:動量與 Adam 各買到什麼 的那張表(GD 、動量 、Adam ,直接解 )就是這樣讀的:它比較的是求解的效率,而參照點是那個已知的直接解。
陷阱的部分:只要那個超參數同時是隱含的正則化,用訓練誤差選就會再次退化成「選某一端」。
訓練步數是最清楚的例子。 該收資料、換模型,還是多訓幾輪:學習曲線 量過同一個模型跑到五百萬步:
步數 訓練 驗證 真實風險
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
訓練誤差單調下降(),真實風險在十八萬步左右觸底之後回升到 。 用訓練誤差選「訓多久」,答案永遠是「訓到底」——又是一個在看到資料之前就寫好的答案,而且它讓真實風險差了 。
學習率也可能改變有限步下學到的解,但一般不具備容量那種巢狀集合的單調性:太大會不穩定,太小可能尚未學好。可以用訓練損失排除無法有效求解的設定;最後若要比較泛化,仍需留出資料。
一個超參數只要同時影響「求解的效率」與「求到哪一個解」,它就不能用訓練誤差選。
實用的判準是先寫清楚問題:我是在比較求解這個訓練目標的效率,還是在選新資料上較好的模型? 後者不能只靠訓練誤差;超參數是否單調,並不是唯一判準。
這一切依賴什麼。 一,驗證集本身要乾淨(老師用考古題教學又出題:為什麼要切資料 的三條規則),而且每一個候選的整條流程都要在切分之後重跑。二,上面的實驗是在一條巢狀的候選鏈上做的;比較兩個彼此不包含的架構時「單調」不成立,但「訓練誤差對大空間比較友善」的偏差仍然在。三, 的驗證集只有 30 筆,所以那個中位數 本身有不小的抖動(只有三十筆資料:交叉驗證 量過那個抖動有多大)。
一份可以照著走的順序
把 L2 與 L3 的東西合起來,一個實際的調參順序是:
- 先讓它能訓。 固定一組合理的容量,掃 找到會炸的值再退三到十倍;確認損失真的在降;做小資料過擬合測試。這一步用訓練損失判斷,因為問的就是求解效率。
- 再定容量。 用驗證集(或 只有三十筆資料:交叉驗證)掃容量與正則化強度。這一步一定用留出資料。
- 回頭微調最佳化。 容量換了之後, 與條件數都變了,第 1 步的結論要重驗一次。
- 只在最後看一次測試集,而且要先寫下你預期會看到多少。
第 3 步常常被跳過,但它是「兩類超參數互相耦合」的直接後果——這也是為什麼超參數搜尋不是「一個一個獨立地調」,而是下一篇要處理的在一個空間裡搜尋。
兩類超參數、兩種選法
互動 demo:用訓練誤差挑超參數,100% 挑到複雜度上限;換成驗證集,眾數落在真正的最佳附近。
檢查理解
參考文獻
- Bergstra, J., Bengio, Y. Random Search for Hyper-Parameter Optimization. JMLR 2012.(超參數的分類與搜尋;下一篇的主題,但它對「哪些超參數重要」的實證分析在這裡就用得上。)
- Hastie, T., Tibshirani, R., Friedman, J. The Elements of Statistical Learning, 2nd ed. Springer 2009, Ch. 7.2, 7.10.(訓練誤差為何對複雜度單調、以及用懲罰項或留出資料補洞的兩條路線。)
- Dodge, J. et al. Show Your Work: Improved Reporting of Experimental Results. EMNLP 2019.(把「調了多少」當成結果的一部分報告;本篇第 4 步與下兩篇的動機。)