參考文獻:Hyperband: Bandit-Based Configuration Evaluation for Hyperparameter Optimization
I. 傳統優化算法
機器學習中模型性能的好壞往往與超參數(如batch size,filter size等)有密切的關系。最開始為了找到一個好的超參數,通常都是靠人工試錯的方式找到"最優"超參數。但是這種方式效率太慢,所以相繼提出了網格搜索(Grid Search, GS) 和 隨機搜索(Random Search,RS)。
但是GS和RS這兩種方法總歸是盲目地搜索,所以貝葉斯優化(Bayesian Optimization,BO) 算法閃亮登場。BO算法能很好地吸取之前的超參數的經驗,更快更高效地最下一次超參數的組合進行選擇。但是BO算法也有它的缺點,如下:
- 對於那些具有未知平滑度和有噪聲的高維、非凸函數,BO算法往往很難對其進行擬合和優化,而且通常BO算法都有很強的假設條件,而這些條件一般又很難滿足。
- 為了解決上面的缺點,有的BO算法結合了啟發式算法(heuristics),但是這些方法很難做到並行化
II. Hyperband算法
1. Hyperband是什么
為了解決上述問題,Hyperband算法被提出。在介紹Hyperband之前我們需要理解怎樣的超參數優化算法才算是好的算法,如果說只是為了找到最優的超參數組合而不考慮其他的因素,那么我們那可以用窮舉法,把所有超參數組合都嘗試一遍,這樣肯定能找到最優的。但是我們都知道這樣肯定不行,因為我們還需要考慮時間,計算資源等因素。而這些因素我們可以稱為Budget,用\(B\)表示。
假設一開始候選的超參數組合數量是\(n\),那么分配到每個超參數組的預算就是\(\frac{B}{n}\)。所以Hyperband做的事情就是在\(n\)與\(\frac{B}{n}\)做權衡(tradeoff)。
上面這句話什么意思呢?也就是說如果我們希望候選的超參數越多越好,因為這樣能夠包含最優超參數的可能性也就越大,但是此時分配到每個超參數組的預算也就越少,那么找到最優超參數的可能性就降低了。反之亦然。所以Hyperband要做的事情就是預設盡可能多的超參數組合數量,並且每組超參數所分配的預算也盡可能的多,從而確保盡可能地找到最優超參數。
2. Hyperband算法
Hyperband算法對 Jamieson & Talwlkar(2015)提出的SuccessiveHalving算法做了擴展。所以首先介紹一下SuccessiveHalving算法是什么。
其實仔細分析SuccessiveHalving算法的名字你就能大致猜出它的方法了:假設有\(n\)組超參數組合,然后對這\(n\)組超參數均勻地分配預算並進行驗證評估,根據驗證結果淘汰一半表現差的超參數組,然后重復迭代上述過程直到找到最終的一個最優超參數組合。
基於這個算法思路,如下是Hyperband算法步驟:

- r: 單個超參數組合實際所能分配的預算;
- R: 單個超參數組合所能分配的最大預算;
- \(s_{max}\): 用來控制總預算的大小。上面算法中\(s_{max}=\lfloor log_\eta(R) \rfloor\),當然也可以定義為\(s_{max}=\lfloor log_\eta(n_{max}) \rfloor\)
- B: 總共的預算,\(B=(s_{max}+1)R\)
- \(\eta\): 用於控制每次迭代后淘汰參數設置的比例
- get_hyperparameter_configuration(n):采樣得到n組不同的超參數設置
- run_then_return_val_loss(t,ri):根據指定的參數設置和預算計算valid loss。\(L\)表示在預算為\(r_i\)的情況下各個超參數設置的驗證誤差
- top_k(\(T,L,\lfloor \frac{n_i}{\eta}\rfloor\)):第三個參數表示需要選擇top k(\(k=\frac{n_i}{\eta}\rfloor\))參數設置。
注意上述算法中對超參數設置采樣使用的是均勻隨機采樣,所以有算法在此基礎上結合貝葉斯進行采樣,提出了BOHB:Practical Hyperparameter Optimization for Deep Learning
3. Hyperband算法示例
文中給出了一個基於MNIST數據集的示例,並將迭代次數定義為預算(Budget),即一個epoch代表一個預算。超參數搜索空間包括學習率,batch size,kernel數量等。
令\(R=81,\eta=3\),所以\(s_{max}=4,B=5R=5×81\)。
下圖給出了需要訓練的超參數組和數量和每組超參數資源分配情況。
由算法可以知道有兩個loop,其中inner loop表示SuccessiveHalving算法。再結合下圖左邊的表格,每次的inner loop,用於評估的超參數組合數量越來越少,與此同時單個超參數組合能分配的預算也逐漸增加,所以這個過程能更快地找到合適的超參數。
右邊的圖給出了不同\(s\)對搜索結果的影響,可以看到\(s=0\)或者\(s=4\)並不是最好的,所以並不是說\(s\)越大越好。

