為什麼基於貝葉斯優化的自動調參沒有大範圍使用?

最近在做deep learning相關項目,剛入門,求指導。模型建立好了之後到了調參階段,一些手動調整超參數的方法都了解了,也僅僅是toy嘗試一下。想大規模的自動調參,看了grid search/random search,最後覺得基於高斯過程(Gaussian Process)的貝葉斯優化(Bayesian optimization)對自動尋找超參數是個有效方法。(出自http://papers.nips.cc/paper/4522-practical-bayesian-optimization-of-machine-learning-algorithms.pdf)

但是搜了很多資料,這方面並沒有很多應用【也可能搞深度學習的大牛大公司都悶聲自動尋參去了】,但是相關的學術研究也不多,這是為什麼?對於深度學習網路而言,堆疊的層數越多,需要設置的超參數越多,自動調參是關鍵,為什麼沒有多少相關研究呢?


其實問題不只是為什麼這種特定的調參方法沒有被大規模採用,而是為什麼任何一種調參方法都沒有被大規模採用。

原因有二:

  1. 有一定規模的模型,訓練一遍都需要幾天甚至幾個月的時間,根本不可能試驗幾十幾百組參數比較性能。
  2. 就算試了幾十幾百組參數,最好的那組參數的性能可能並不比最初拍腦袋選的參數的性能好太多。


谷歌內部是在用的

Google Vizier: A Service for Black-Box Optimization

In this paper we describe Google Vizier, a Google-internal service for performing black-box optimization that has become the de facto parameter tuning engine at Google. Google Vizier is used to optimize many of our machine learning models and other systems, and also provides core capabilities to Google』s Cloud Machine Learning HyperTune subsystem.

文章在此:

https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/46180.pdf

four optimization algorithms currently implemented in the Vizier framework: a multiarmed bandit technique using a Gaussian process regressor [29], the SMAC algorithm [19], the Covariance Matrix Adaption Evolution Strategy (CMA-ES) [16]

SMAC其實就是貝葉斯優化,只不過不用高斯過程模型做surrogate model,而是用 random forest,至於它參考文獻[29]中的演算法,不知道是不是貝葉斯優化。


原答案有點文不對題,題主應該問的是Bayesian optimization,我的答案是關於general Bayesian inference。Anyway既然很多人點了贊原答案還是保留下來吧。

=================================================================

貝葉斯的好處我就不說了。要使用貝葉斯方法解決實際問題,有幾大難點要克服。

要用貝葉斯,首先要對問題建立生成式模型,這本身就比拍腦袋建個優化目標要難。其次,建立了模型解起來也難。貝葉斯推斷需要解積分問題,絕大數情況得不到解析解,只能使用近似方法。貝葉斯近似推斷有兩套主流方法,MCMC和VB。MCMC太慢不適合大數據,而VB需要case by case的推導解法,難度較高,很難快速實現。另外現有基於mean field的方法假設過強,對很多模型得不到很好的近似。總結起來就是,建模層面門檻高,迭代周期長。演算法層面,要麼慢要麼效果差。個人認為貝葉斯框架成為主流的先決條件還在於快速通用的近似演算法。可惜現在還沒到這個階段。


事實上,基於Gaussian process (GP) 的Bayesian optimization 做自優化的問題在於它本身就還要面對GP中Kernel的裡面的hyperparameter的優化問題。除非這裡面用的是MCMC,不然仍然有初值敏感性。


個人覺得其中一個小原因是現存的hyper parameter tuning演算法,基本都是純基於統計辦法,並沒有一個是完全針對於深度學習調參而專門設計的。也許真正的王道調參演算法應該是針對於深度學習training時間長,層數多,結構相對複雜等特點而專門設計的,並不是像現在的大部分演算法只是把神經網路當做一個單純的函數,放一組參數等一個輸出來優化。另外,文中提到的spearmint演算法的作者寫了好幾篇關於hyperparameter tuning的paper,似乎也沒有調出個超級breakthrough的結果。不過這幫人搞的一個startup叫whetlab,就是專業調參數的,最近被Twitter收購了。所以調參狗做得好還是有希望的 哈哈~


深度學習自個有實時自適應調參演算法, AdaGrad, AdaDelta等, 貝葉斯優化還得訓練完一整回才能調一次參數, 響應來說很差. 另有提到貝葉斯優化網路拓樸等, 諸如pooling的寬度, 這點貌似可以關注. 但若以後出現自適應增減網路拓樸的演算法, 貝葉斯優化就雞肋了. 投注這塊不合算


我覺得效率是一個問題,所有基於Gaussian Process的演算法一個很bug的地方就是需要計算協方差矩陣的逆,也就是說,它的時間複雜度是O(n3),n代表觀察數量。

不過貌似有文章已經把cubic scaling的問題轉化成和model數線性相關的了,在此???

http://arxiv.org/abs/1502.05700

等我讀了再update哈~


1. 這個東西kaggle上有人在用,我也是在kaggle比賽的時候見到的。

2. 在超大型問題上,太慢了,而且GP對高維情況並不是特別好,也需要很多數據點才能有改進,也是邊際效用遞減

3. 這個東西在大規模機器學習的文章上用的少不代表業界用的少,你可以關注下 peter frazier, cornell IOE 教授,他的學生做了MOE (Yelp), 他自己在做 Uber Pool的優化,他的學生做MOE那個還開了YC backed startup SigOpt 專門做調參,賣API介面, oxford也有個教授在做這個,不過是他副業 Nando de Freitas, 此人還同時在deepmind

4. 我知道online advertisement 現在有人在做很類似的調參的東西,用到ab testing里,只是相當於離散的模型不是gp


最近好多paper都在用啊,可能需要點時間吧。我猜暫時沒大量普及可能有兩個原因吧,一是大家都懶得寫一個hyper program,二是有效的GP估計可能需要很多樣本點,也許empirical並不比heuristic調參需要的次數少。。。


如果沒有先驗假設,就無法比較調參方法的優劣之分。換句話說,在一般意義上無法證明哪個調參方法更優。再換言之,根本就無法在一般意義上定義調參方法的優劣性,只能在某種限定(比如指標)下定義~


對於學術界來說,靠調參刷出的結果不好發paper啊,還是要研究下新穎的模型結構

對於工業界來說,數據量是第一位的,其次直接套成熟的大模型了,後面才是研究調參,這種事肯定還是有公司在做的,只不過公司也不會用來宣傳吧。。


推薦閱讀:

為什麼梯度下降能找到最小值?
如果要學習並使用深度學習,應該學哪些預備知識?
MPI 在大規模機器學習領域的前景如何?
知道美國哪些機器學習和計算機視覺的實驗室有PHD位置么?
深度學習或者機器學習中有哪些演算法涉及貪心演算法或者動態規劃演算法的思想?

TAG:機器學習 | 神經網路 | 貝葉斯理論 | 正態分布 | 深度學習DeepLearning |