論文筆記系列-Speeding Up Automatic Hyperparameter Optimization of Deep Neural Networks by Extrapolation of Learning Curves


I. 背景介紹

1. 學習曲線(Learning Curve)

我們都知道在手工調試模型的參數的時候,我們並不會每次都等到模型迭代完后再修改超參數,而是待模型訓練了一定的epoch次數后,通過觀察學習曲線(learning curve, lc) 來判斷是否有必要繼續訓練下去。那什么是學習曲線呢?主要分為兩類:

  • 1.模型性能是訓練時間或者迭代次數的函數:performance=f(time) 或 performance=f(epoch)。這個也就是我們常用到的方法,即橫軸記錄訓練時間(或迭代次數),縱軸記錄准確率。示意圖如下:

  • 2.模型性能是用於訓練模型的數據集大小的函數:performance=f(train_data_size),即橫軸記錄訓練集大小,縱軸記錄准確率。

本文使用的是第一種。

2. 飽和函數(Saturating Function)

飽和函數簡單理解就是當輸入達到一定值后,輸出不再有明顯變化,或變化很小,所以稱之為飽和。

常見的飽和函數有:

  • 指數函數
  • sigmoid函數

image.png

仔細觀察可以看到其實理想的學習曲線就是飽和函數。而我們手工判斷一個網絡是否還有必要繼續訓練下去的依據,就是看是否已經到了那個臨界點,或者我們稱之為飽和點

基於此,本文選取了如圖所示的11種飽和函數用來擬合學習曲線。

怎么個擬合法呢?這里做個簡單的介紹,下文會更加詳細介紹。

就是說假如我們通過訓練模型和評估模型得到了n個學習曲線值(或者說是准確率),即為\(y_{1:n}=\{y_1,...,y_n\}\)

然后我們通過使用上面的飽和函數對這些數據進行擬合計算出飽和函數的參數,這樣我們就可以預測后面的模型性能了。這樣也就可以做到斷舍離了。

3. 超參數優化(Hyperparameters Optimization)

假設經過上面的步驟得到了飽和函數的參數,但是我們還是需要對超參數進行采樣和優化的。

而常用的超參數優化算法有很多種,其中貝葉斯優化算法是使用最多且較為有效的方法。而基於貝葉斯的優化算法中使用廣泛的有如下三種:

  • Spearmint
  • SMAC
  • Tree Parzen Estimator(TPE)

有文章對上面三種方法做了比較,得出如下結論:

  • Spearmint在數值型超參數較少的情況下表現更加好
  • SMAC和TPE在高維超參數和部分離散超參數情況下表現更好

本文使用了后兩者優化算法。

4. 無信息先驗(Uninformative prior)

由名字就可以很好理解無信息先驗是什么意思了,就是說事先我們不知道任何其他信息,所以對於某一事件的先驗概率無從得知。這種情況下通常是假設先驗概率是均勻分布,因為這樣不會對任何事件或元素有偏心。

II. 本文方法

1. Learning Curve Model

假設有K個飽和函數可供選擇,記為\(\{f_1,...,f_K\}\),每個飽和函數\(f_i\)都由一組超參數\(θ_i\)決定。

部分觀察已知的學習曲線上的值記為\(y_{1:n}\),每個值

\[y_t=f_k(t|θ)+\epsilon \tag{1} \]

其中\(\epsilon\)表示高斯分布的噪聲,即\(\epsilon\sim \cal{N}(0,\sigma^2)\).

所以單個觀測值\(y_t\)的概率分布是:

\[p(y_t|θ_k,\sigma^2)=\cal{N}(y_t;f_k(t|θ_k),\sigma^2) \tag{2} \]

2. A weighted Probabilistic Learning Curve Model

上面的y值只由一個飽和函數決定,那為什么不能將這些飽和函數都利用起來呢?所以我們可以給每個飽和函數一個權重,因此可以得到如下合並(combined)飽和函數:

\[f_{comb}(t|\xi) =\sum_{k=1}^Kw_kf_k(t|θ_k) \tag{3} \]

\[\xi = (w_1,...,w_K,θ_1,...θ_K,\sigma^2) \tag{4} \]

所以此時有

\[y_t=f_{comb}(t|\xi)+\epsilon=\sum_{k=1}^Kw_kf_k(t|θ_k)+\epsilon \tag{5} \]

\[p(y_{1:n}|\xi)=\prod_{t=1}^n\cal{N}(y_t;f_{comb}(t|\xi),\sigma^2) \tag{6} \]

現在有了如公式(5)的模型了,所以一個很簡單的辦法就是根據\(y_{1:n}\)找到該模型的最大似然參數估計,然后將參數帶入模型中,這樣我們就可以借助這個具體的模型預測后面的模型性能了,從而可以自動決定是否還有必要繼續訓練下去。但是這樣有個缺點,按照原文的說法是:

However, this would not properly model the uncertainty in the model parameters. Since our predictive termination criterion aims at only terminating runs that are highly unlikely to improve on the best run observed so far we need to model uncertainty as truthfully as possible and will hence adopt a Bayesian perspective, predicting values ym using Markov Chain Monte Carlo (MCMC) inference

公式(4)中的參數的先驗概率都是無信息先驗,另外又因為要確保公式(3)最終還是一個飽和函數,所以規定每個權重都必須為正,參數\(\xi\)的概率分布定義如下:

\[p(\xi)∝(\prod_{k=1}^Kp(w_k)p(θ_k))p(\sigma^2)\cal{I}(f_{comb}(1|\xi)<f_{comb}(m|\xi)) \tag{7} \]

其中:

  • \(\cal(I)(f_{comb}(1|\xi)<f_{comb}(m|\xi))\)是一個indicator function,表示合並飽和函數必須是一個增函數。
  • 另外權重\(w_k\)的概率分布為:

\[p(w_k)∝ \begin{cases} 1 & if \,\,\, w_k >0 \\ 0 & otherwise \end{cases} \tag{8} \]

初始化時令\(w_k=\frac{1}{k},k=1,...,K\)

現在有了公式(6)(7)之后,我們就可以得到后驗概率:

\[p(\xi|y_{1:n})∝p(y_{1:n}|\xi)p(\xi) \tag{9} \]

借助這個后驗概率我們就可以對聯合超參數和權重搜索空間\(\xi\)進行MCMC(Markov Chain Monte Carlo) 采樣了。那具體怎么個采樣法呢?

  • 令所有的模型參數\(θ_k\)設置為其對應飽和函數的最大似然估計。
  • 模型權重均勻分布,即\(w_k=\frac{1}{k}\)
  • 噪聲參數初始化為它的最大似然估計,即\(\hat{\sigma}^2=\frac{1}{n}\sum_{t=1}^n(y_t-f_{comb}(t|\xi))^2\)

3. Extrapolate Learning Curve

上面已經將采樣的方式介紹清楚了,那么接下來介紹判斷是否繼續訓練模型的細節。

1) 預測模型性能

假設已觀察得到的數據為\(y_{1:n}\),那么對於m>n的預測值我們可以用到均值預測,從而減少誤差,公式如下:

\[E[y_m|y_{1:n}]≈\frac{1}{S}\sum_{s=1}^Sf_{comb}(m|\xi_s) \tag{10} \]

我們可以設定一個閾值\(\hat{y}\),這個閾值是什么意思呢?就是說假如我們現在有一個分類任務,我覺得分類准確度大於89%就已經很不錯了,那么閾值就可以設為89%。那么只要預測的\(y_m\)能夠大於或等於0.89,就說明這個還有繼續訓練下去的必要。

所以下面我們還可以求出\(y_m\)大於閾值的概率分布。

2) 模型性能大於閾值的概率分布

因為對於每一個固定的參數\(\xi\)而言,預測分布\(p(y_m>\hat{y}|y_{1:n})\)都是一個高斯分布,所以有:

\[\begin{align} p(y_m>\hat{y}|y_{1:n}) &= \int p(\xi|y_{1:n})p(y_m>\hat{y}|\xi)d\xi \notag \\ &≈\frac{1}{S}\sum_{s=1}^Sp(y_m>\hat{y}|\xi_s) \notag \\ &= \frac{1}{S}\sum_{s=1}^S(1-\Phi(\hat{y};f_{comb}(m|\xi_s),\sigma_s^2)) \tag{11} \end{align} \]

其中\(\Phi(·;μ,\sigma^2)\)是均值為μ,方差為\(\sigma^2\)的高斯累計分布函數。

3) 算法細節

  • 預設的最大迭代次數為\(e_{max}\)
  • 在每個epoch中會記錄K次模型在驗證集上的性能,即\(y_{1:K}\)
  • 每隔P個epoch,就將之前記錄的模型性能匯總起來得到n(\(n=K×P\))個性能數據,即\(y_{1:n}\)。然后根據這些數據預測最后step的性能,即預測第\(m=K×e_{max}\)步的性能\(y_m\)。這里需要用到公式(10)求出預測性能\(y_m\)大於預設性能\(\hat{y}\)的概率,如果概率大於閾值\(δ\),那么繼續下一P個epoch的訓練。反之則返回預測驗證集准確率\(E[y_m|y_{1:n}]\) (由公式(10)求得)。

文中將這一過程稱為: predictive termination criterion。



MARSGGBO原創





2019-1-5




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM