目前在研究Automated Machine Learning,其中有一個子領域是實現網絡超參數自動化搜索,而常見的搜索方法有Grid Search、Random Search以及貝葉斯優化搜索。前兩者很好理解,這里不會詳細介紹。本文將主要解釋什么是體統(沉迷延禧攻略2333),不對應該解釋到底什么是貝葉斯優化。
I Grid Search & Random Search
我們都知道神經網絡訓練是由許多超參數決定的,例如網絡深度,學習率,卷積核大小等等。所以為了找到一個最好的超參數組合,最直觀的的想法就是Grid Search,其實也就是窮舉搜索,示意圖如下。

但是我們都知道機器學習訓練模型是一個非常耗時的過程,而且現如今隨着網絡越來越復雜,超參數也越來越多,以如今計算力而言要想將每種可能的超參數組合都實驗一遍(即Grid Search)明顯不現實,所以一般就是事先限定若干種可能,但是這樣搜索仍然不高效。
所以為了提高搜索效率,人們提出隨機搜索,示意圖如下。雖然隨機搜索得到的結果互相之間差異較大,但是實驗證明隨機搜索的確比網格搜索效果要好。

II Bayesian Optimization
假設一組超參數組合是\(X={x_1,x_2,...,x_n}\)(\(x_n\)表示某一個超參數的值),不同超參數會得到不同效果,貝葉斯優化假設超參數與最后我們需要優化的損失函數存在一個函數關系。
而目前機器學習其實是一個黑盒子(black box),即我們只知道input和output,所以很難確直接定存在什么樣的函數關系,所以我們需要將注意力轉移到一個我們可以解決的函數上去,下面開始正式介紹貝葉斯優化。
貝葉斯優化的大體思路如下:
假設我們有一個函數\(f:x→\Bbb{R}\),我們需要在\(x\subseteq X\)內找到
\(x^*=\underset{x\in X}{\operatorname{argmin}}f(x) \tag{1}\)
注意上面的\(x\)表示的是超參數,而不是輸入數據。以圖像分類任務為例,\(x\)可以是學習率,batch size等超參數的設置。而為了避免全文符號太多,所以將輸入數據隱去了,換句話說\(f(x)\)等價於\(f(x|img)\)
當\(f\)是凸函數且定義域\(X\)也是凸的時候,我們可以通過已被廣泛研究的凸優化來處理,但是\(f\)並不一定是凸的,而且在機器學習中\(f\)通常是expensive black-box function,即計算一次需要花費大量資源。那么貝葉斯優化是如何處理這一問題的呢?
1. 詳細算法
Sequential model-based optimization (SMBO) 是貝葉斯優化的最簡形式,其算法思路如下:

下面詳細介紹一下上圖中的算法:
1. Input:
- \(f\): 就是那個所謂的黑盒子,即輸入一組超參數,得到一個輸出值。
- \(X\):是超參數搜索空間等。
- \(D\):表示一個由若干對數據組成的數據集,每一對數組表示為\((x,y)\),\(x\)是一組超參數,\(y\)表示該組超參數對應的結果。
- \(S\):是Acquisition Function(采集函數),這個函數的作用是用來選擇公式(1)中的\(x\),后面會詳細介紹這個函數。
- \(\cal{M}\):是對數據集\(D\)進行擬合得到的模型,可以用來假設的模型有很多種,例如隨機森林,Tree Parzen Estimators(想要了解這兩種的可以閱讀參考文獻[1])等,但是本文主要介紹高斯模型。
2. InitSamples(f,x)→D
這一步驟就是初始化獲取數據集\(\cal{D}={(x_1,y_1),...,(x_n,y_n)}\),其中\(y_i=f(x_i)\),這些都是已知的。
3. 循環選參數\(T\)次
因為每次選出參數\(x\)后都需要計算\(f(x)\),而正如前面介紹的每計算一次函數\(f\),都會消耗大量資源,所以一般需要固定選參次數(或者是函數評估次數)。
- \(p(y|x,D)←FITMODEL(M,D)\)
首先我們預先假設了模型\(M\)服從高斯分布,且已知了數據集\(D\),所以可以通過計算得出具體的模型具體函數表示。假設下圖中的綠色實現就是基於數據集\(D\)經過計算后的服從高斯分布模型。可以看到Each additional band of green is another half standard deviation on the output distribution.

那么高斯分布是如何計算的呢?
因為我們已經假設\(f\)~\(GP(μ,K)\)。 (GP:高斯過程,μ:均值 K:協方差kernel,)。所以預測也是服從正態分布的,即有\(p(y|x,D)=\cal{N}(y|\hat{μ},\hat{σ}^2)\)
- \(x_i←\underset{x\in X}{\operatorname{argmax}}S(X,p(y|X,D))\)
現在已經將假設的模型計算出來了,那么下一步我們需要基於假設模型的基礎上選擇滿足公式(1)的參數了,也就是選擇\(X\),那么如何選擇呢?這就涉及到了Acquisition Function,為了讓文章篇幅更易閱讀,想了解Acquisition Function移步到文末。
- \(y_i←f(x_i)\)
既然參數選出來了,那么當然就是要計算咯。例如我們通過上述步驟已經選出了一組超參數\(x_i\),那么我們下一步就是將超參數帶入網絡中去進行訓練,最后得到輸出\(y_i\)。這一步驟雖然expensive,但是沒辦法還是得走啊。
- \(D←D \bigcup{(x_i,y_i)}\)
更新數據集。
2. Acquisition Function
Acquisition Function的選擇可以有很多種,下面將分別介紹不同的AC function。
1) Probability of improvement
假設\(f'=min \, f\),這個\(f'\)表示目前已知的\(f\)的最小值。
然后定義utility function如下:
其實也可以把上面的\(u(x)\)理解成一個reward函數,如果f(x)不大於f'就有獎勵,反之沒有。
probability of improvement acquisition function定義為the expected utility as a function of x:
之后只需要求出\(a(x)\)的最大值即可求出基於高斯分布的滿足要求的\(x\)。
2) Expected improvement
上面的AC function有個缺點就是找到的\(x\)可能是局部最優點,所以有了Expected improvement。\(f'\)的定義和上面一樣,即\(f'=min \, f\)。utility function定義如下:
因為我們最初的目的是找到使得f(x)最小的x,所以這個utility function的含義很好理解,即接下來找到的\(f(x)\)比已知最小的\(f'\)越小越好,然后選出小的程度最大的那個\(f(x)\)和\(f'\)之間的差距的絕對值作為獎勵,如果沒有更小的那么獎勵則為0.
AC function定義如下:
通過計算使得\(a_{EI}\)值最大的點即為最優點。
上式中有兩個組成部分。要使得上式值最大則需要同時優化左右兩個部分:
- 左邊需要盡可能的減少\(μ(x)\)
- 右邊需要盡可能的增大方差(或協方差)\(K(x,x)\)
但是二者並不同能是滿足,所以這是一個exploitation-exploration tradeoff。
3) Entropy search

4) Upper confidence bound

Reference
- [1] Sigopt.com. Bayesian Optimization Primer (2018). [online] Available at: https://sigopt.com/static/pdf/SigOpt_Bayesian_Optimization_Primer.pdf [Accessed 26 Oct. 2018].
- [2] Cse.wustl.edu. Bayesian Optimization (2018). [online] Available at: https://www.cse.wustl.edu/~garnett/cse515t/spring_2015/files/lecture_notes/12.pdf [Accessed 26 Oct. 2018].
- [3] Anon,How does Bayesian optimization work? (2018). [online] Available at: https://www.quora.com/How-does-Bayesian-optimization-work [Accessed 26 Oct. 2018].