1. 程式人生 > >機器學習超引數優化演算法-Hyperband

機器學習超引數優化演算法-Hyperband

參考文獻: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\)越大越好。



MARSGGBO原創





2018-12-22