L3.1 同樣試一百次:排成格子,還是隨便丟?
兩個超參數,一百次評估
假設模型有兩個超參數,每個都可以取 到 之間的任何值,而你的計算預算只允許一百次評估。
像試烤箱的溫度與時間,我們可以每個設定取十個值,兩兩組合試一百次;也可以隨機抽一百組。前者覆蓋的是選出的網格,不是整個連續區間。若成敗主要取決於溫度,時間其實差不多呢?
但如果其中一個超參數其實根本不影響驗證分數呢?那麼格子搜尋實際上只試過重要那個超參數的十個不同值(每個值重複了十次,只是另一個不重要的超參數在變);隨機搜尋則試過一百個不同值。
同樣的一百次,一個用在十個位置上,一個用在一百個位置上。
兩個超參數各試十格,還是隨機抽一百組?
如果我事先不知道哪個超參數重要,
哪一種比較不會浪費?
課堂提問Q1
把兩種搜尋翻成數學:固定預算 、維度 ,各自在每個維度上試過幾個不同的值?如果只有 個維度真的影響結果,兩者實際上是在幾維的空間裡搜尋?
先想一想,再展開看整理後的答案
格子搜尋。 每個維度取 格,總點數 ,所以
時, 可取 100 格、 可取 10 格;若要嚴格不超出預算, 最多取 4 格、 最多取 2 格。整數格數需要取 ,不能四捨五入後仍宣稱總數恰好是 。
隨機搜尋。 若各座標來自連續分布, 次抽樣在每個座標上幾乎必然給出 個不同值;類別型或離散超參數則可能重複。
現在假設只有 個維度真的影響結果。 把所有點投影到那 個維度上:
- 格子的 個點塌成 個不同的位置,其餘 次評估是重複的。
- 隨機的 個點仍然是 個不同的位置(機率 1)。
當 時,重複投影的比例是 。這裡把目標視為沒有評估噪聲;有噪聲時,重複測量也能提供估計變異數的資訊。
我們不必先知道哪些座標重要,就能讓隨機樣本在各座標上探索新值。不過 只表示網格沒有這種重複投影;勝負還取決於目標形狀、最佳點位置與抽樣分布,不能從點數推出兩者必定相同。
投影下去就看得出來
把兩種搜尋的點畫在二維平面上,再把它們投影到橫軸(假設只有橫軸重要):
- 格子的十行點投影下去完全重疊成十個位置。九十次評估對「找出橫軸的最佳值」沒有提供任何新資訊——它們只是在同一個橫座標上重複量了十次。
- 隨機的一百個點投影下去是一百個不同的位置,鋪滿整條軸。
這張圖是 Bergstra 與 Bengio(參考文獻 1)那篇論文的核心,也是它為什麼改變了實務:它不需要更聰明的演算法,只需要不要把預算花在你自己造出來的重複上。
一個常見的反駁是「那我把格子設得不對齊不就好了」——沒錯,而把格子隨機擾動到極致,就是隨機搜尋。
圖說: 目標只依賴一個維度時,網格的大量評估投影到相同座標;所有維度都重要時,這個重複投影的原因不再成立。
差距有多大,以及它什麼時候消失
把上面的算式驗證一次。目標刻意設成只依賴前 個維度:
最小值是 (越小越好)。下表保留原模擬:random search 抽 100 點,網格則將 四捨五入成整數 。因此網格的實際次數分別為 100、100、125、243、100、81,並非每列都使用相同預算;表格適合看解析度,不能直接當成嚴格的同成本排名。
維度 d 有效維度 k 格子 隨機 格子每維幾格
1 1 0.00001 0.00001 100
2 1 0.00111 0.00001 10
3 1 0.00250 0.00001 5
5 1 0.04000 0.00001 3
2 2 0.00222 0.00220 10
4 2 0.08000 0.00230 3
四件事,一件一件讀。
這次結果接近(顯示到第五位都是 )。一維沒有重複投影到不重要座標的浪費,但網格與隨機點的間距仍不同;這個對照不保證所有一維目標都打平。
只有一維重要時,差距隨 爆開:()()(),而隨機那一欄完全不動()。五維時是四千倍。原因就在最右欄:格子每維只剩 3 格,而重要那一維的最佳值 落在 之間,最近的一格差 ,平方是 ——表格裡那個 不是抖動,是格子解析度直接算出來的。
這次也很接近( 對 )。這表示重複投影的理由消失,不表示兩個搜尋方法有普遍相同的效率:
低有效維度能解釋 random search 的一個優勢,但不是所有勝負的唯一原因。
最後一列是最接近真實情況的(、): 對 ,三十五倍。真實的超參數空間大多長這樣——十幾個超參數,其中兩三個真的決定成敗。
補充log 尺度比線性尺度更常是對的
上面的模擬用的是線性的 ,但真實的超參數多半該用 log 尺度抽:學習率、weight decay、 這些跨好幾個數量級的量,「 到 」和「 到 」在實務上是同樣大的一步,而在線性尺度上後者大了一千倍。
判準很簡單:這個超參數的「差一倍」和「差一個固定的量」哪一個比較有意義? 前者就用 log(學習率、、batch size),後者用線性(dropout 率、動量的 ——不過 常常改抽 的 log,因為 一個 η 不夠用:動量與 Adam 各買到什麼 說它的記憶長度是 )。
抽錯尺度的後果和格子解析度不足是同一種:你的一百個點裡有九十九個擠在一個沒有用的區域。
比隨機更聰明的兩個方向
隨機搜尋把「不浪費」做到了,但它有一個明顯的缺點:它不從前面的結果學習。第一百次評估和第一次一樣盲目。
兩個方向各補一塊:
Bayesian optimization:用已經試過的點擬一個「目標函數長什麼樣」的機率模型(常用 Gaussian process 或樹模型),再用它挑下一個點——挑「預期會好」與「還沒探索過」之間權衡最佳的位置。它買到的是樣本效率,代價是多一層自己的超參數(核函數、取樣準則),以及在高維、有類別型超參數、或評估很吵的時候容易失靈。
Hyperband / successive halving:換一個方向——不減少試的點數,而是減少每個點的成本。先用很小的預算(少量 epoch 或少量資料)跑很多組超參數,把明顯爛的砍掉,再把預算加倍給活下來的。它買到的是在同樣的總計算量下試更多組,前提是「小預算下的排名和大預算下的排名相關」——這個前提在多數任務上大致成立,但對「要訓很久才分得出勝負」的超參數會失效。
實務上的順序是:先隨機、後聰明。隨機搜尋的三十到五十次評估會告訴你哪幾個超參數真的重要、大致的範圍在哪,而那正是 Bayesian optimization 需要的起點——直接讓它在一個十幾維、範圍全開的空間裡冷啟動,通常比隨機還慢。
一個可以照著做的流程
- 列出所有超參數,各自標好尺度(log 或線性)與一個寬鬆的範圍。寧可範圍設寬——範圍設錯會讓最佳值落在邊界外,而那是隨機搜尋救不了的。
- 隨機抽三十到五十組,全部跑完。
- 找影響的線索:畫各超參數與驗證分數的散點圖。沒有單一座標的趨勢,不代表不重要;兩個設定可能只有搭配起來才有影響,還要檢查交互作用。
- 在重要的那幾個超參數上收窄範圍,再抽一輪,或換 Bayesian optimization。
- 誠實記錄你總共試了幾組——那個數字是下一篇要用的 。
這一切依賴什麼。 一,每一組超參數的評估要用同一份驗證資料、同一個流程(否則比較的不是超參數)。二,評估本身有抖動(只有三十筆資料:交叉驗證 量過,小資料時抖動可能和被估的量同數量級),所以「最好的那一組」有一部分是運氣——這正是下一篇的主題。三,上面的模擬用的是無噪聲的目標;評估有噪聲時,隨機搜尋的優勢仍在,但「最好的那一組真的最好嗎」會變成一個獨立的問題。
把第 3 步跑出來
第 3 步要單獨示範,因為它是整個流程裡唯一會產生知識的一步——其他步驟都只是在找一個超參數。
做法:把隨機搜尋的每一組超參數畫成一個點,橫軸是某一個超參數的值、縱軸是它的驗證分數。重複 次,每個超參數一張圖。
- 重要的超參數:散點有明顯的趨勢或明顯的谷底。
- 不重要的超參數:散點是一片均勻的雲——縱軸的變化完全來自其他超參數。
在本篇的模擬設定(、)上,前兩張圖會看到清楚的 U 形,後兩張是均勻的雲。而一旦你看出 ,下一輪就可以把範圍收在那兩個超參數上—— 那個懲罰項消失了,因為你把 降成了 。
這也解釋了為什麼「格子搜尋」在只剩兩個超參數時又變回一個合理的選擇。
格子搜尋的問題從來不是格子,是維度。
同樣的預算,兩種撒點方式
互動 demo:把名目維度拉到 5,格子搜尋在每個軸上的不同值從 B 塌到 B^(1/5),隨機那一欄完全不動。
檢查理解
參考文獻
- Bergstra, J., Bengio, Y. Random Search for Hyper-Parameter Optimization. JMLR 2012.(本篇投影論證與「低有效維度」的原始來源,含真實任務上的實證。)
- Li, L. et al. Hyperband. JMLR 2018.(successive halving 的預算配置與理論保證,以及它的前提。)
- Snoek, J., Larochelle, H., Adams, R. Practical Bayesian Optimization of Machine Learning Algorithms. NeurIPS 2012.(GP-based BO 的標準做法與它自己的超參數。)