L3.0 火力與時間是食譜的一部分,還是煮的時候決定的?
起點:食譜上的與鍋子前的
一份食譜會寫「牛肉 300 克、醬油兩大匙」。它不會寫「第 7 分 32 秒時把火轉到 62% 並把鍋鏟往左移三公分」。
前者是事先決定、寫在紙上、每次照做的;後者是站在鍋子前、看著現場調整出來的。
訓練一個模型也有這兩層。網路的每一個權重是站在鍋子前調出來的——最佳化器看著資料,一步一步把它們挪到位。而「用幾層」「學習率多少」「訓多久」則是事先寫下來的:最佳化器不會去動它們,因為它們定義了那個最佳化問題本身。
這條界線看起來只是一個命名慣例,但它有一個立刻的後果。老師用考古題教學又出題:為什麼要切資料 已經說過:每一次用某份資料做決定,那份資料對未來的決定就少一分誠實度。 訓練集已經被用來決定權重了。如果再用它決定「用幾層」,就是同一份資料被用了兩次。
哪些東西是事先寫在紙上的,哪些是現場調出來的?
既然兩者都在「讓損失變小」,
為什麼只有後者可以看訓練集?
課堂提問Q1
把「參數」與「超參數」的分界寫清楚:判準是什麼?把前面三個 class 出現過的旋鈕分類——哪些控制假設空間的大小、哪些控制最佳化的行為?以及,為什麼「用訓練誤差選超參數」一定會選到某一端?
先想一想,再展開看整理後的答案
判準是「誰決定它」,不是「它重不重要」。
是那個 裡面的東西(最佳化器動它); 是寫在式子外面、定義了那個 長什麼樣的東西(你動它)。學習率不在式子裡,但它決定 實際上怎麼被求解,所以也在外面。
分成兩類,因為它們壞掉的方式不同。
| 控制假設空間(容量) | 控制最佳化 | |
|---|---|---|
| 例子 | 多項式次數、層數、寬度、 的 、dropout 率 | 學習率 、batch size、動量 、初始化的 gain、訓練步數 |
| 調錯的徵狀 | U 形的兩端:欠擬合或過擬合 | 發散、卡住、或走不完(霧中下山,一步該走多大:梯度下降的一頁 的三種) |
| 診斷工具 | 該收資料、換模型,還是多訓幾輪:學習曲線 的兩條曲線 | 損失曲線的形狀、 與條件數 |
為什麼用訓練誤差選一定選到某一端。 背考古題的學生:過擬合與欠擬合 證過一件事:沿著一條巢狀的假設空間鏈,訓練誤差對容量單調不增——在更大的集合裡取 不可能更大。所以「挑訓練誤差最小的那個容量」的答案永遠是鏈的最上端,與資料無關、與任務無關。
那不是一個「有偏的選擇」,而是一個根本沒有在選的選擇:它把一個要用資料回答的問題,變成了一個答案早就寫好的問題。下一節把這件事量出來——200 次重複裡,它選到上限的比例是 。
兩類超參數,兩種調法
分成兩類之後,調的順序就清楚了:先讓它能訓,再讓它訓得對。
最佳化那一類先調,因為它們壞掉時會掩蓋其他所有訊號。一個 越過穩定門檻的模型,你從它的驗證分數上讀不出任何關於容量的資訊——它根本沒開始學。判斷方式在 霧中下山,一步該走多大:梯度下降的一頁 與 同一張地圖從不同地方出發:損失曲面與初始化 都給過:看損失曲線有沒有在降、梯度的量級對不對、小資料能不能過擬合。
容量那一類後調,而且要用 該收資料、換模型,還是多訓幾輪:學習曲線 的兩條曲線判斷方向:間距大就往下調(或加資料),兩線重合在高原就往上調。
還有一類旋鈕同時屬於兩邊,而它們是最容易出事的:
- 訓練步數:既是最佳化的預算,也是隱含的正則化強度(限制筆記頁數,或考前一天停止補習:正則化與提早停止 量過:)。
- 學習率:既決定能不能收斂,也透過上面那條式子決定隱含的正則化強度。
- 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 次裡有 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 步與下兩篇的動機。)