Perferred Networks提出自動化超引數優化框架Optuna
公眾號/將門創投
近日,日本的深度學習公司PerferredNetworks 釋出了其超引數優化框架的beta版本。這篇文章中將詳細介紹這一框架的特性及其後面的原理。
關於超引數
超引數是控制機器學習演算法行為的引數,在深度學習中主要包括了學習率、批量大小和訓練週期、層數、每層神經元的數量和通道等。他們不僅僅是一個簡單的數值,同時控制著模型訓練的行為並在很大程度上影響著模型的效能。除了上述提到的數值外還包括了使用的優化方法(SDG或Adam等)。調參是深度學習的一項重要技術,由於需要眾多的實踐經驗和對演算法的理解,調參的過程常常被人們戲稱作煉丹。這也是初學者所面臨的最大困難。
對於機器學習演算法來說,如果沒有超引數演算法的設計和模型的訓練幾乎不可能進行。對於深度學習來說,超引數的數量很可能十分龐大,工程師們需要花費巨量的時間來調整超引數來獲取表現較好的模型。如何快速調整模型,甚至自動化搜尋超引數,已經成為一個廣泛的研究熱點。
下面讓我們來看看PFN提出的這一框架有什麼特點。
Optuna
Optuna是一套能夠自動優化超引數的的軟體框架,它可以通過不斷試錯的方法找到最好表現的最優超引數值。值得注意的是,官方提供了Python介面,能夠方便的整合到程式碼中使用。它主要基於執行的歷史資料來確定接下來需要測試的超引數值。基於這些資料,它可以估計出超引數比較可能出現的區域並在這個區域中進行超引數搜尋嘗試。隨著不斷獲取新的結果,它也將更新這一區域並繼續搜尋。在不斷重複搜尋、評價更新的過程中來獲取表現更好的超引數。具體來講,這一軟體框架的優化方法屬於貝葉斯優化演算法中的樹形帕曾(Parzen)優化器。
適用範圍
Optuna作為超引數優化框架可以和PFN自己的深度學習框架Chainer充分結合使用。只需要在Chainer中寫接受來自Optuna的超引數的程式碼即可。通過這一介面Optuna可以不斷呼叫了使用者編寫的模型程式碼,神經網路也可以在你不同的超引數下得以訓練並搜尋較好的結果。
目前在PFN的多個專案中都使用了Chainer深度學習架構和Optuna優化框架的組合。但我們使用者來說這兩個框架是相互獨立的,同樣可以將Optuna與其他機器學習軟體結合起來使用。目前官方提供了使用scikit-learn、XGBoost和LightGBM等演算法整合Optuna的例項程式碼供使用者學習。事實上,除了機器學習問題外Optuna還廣泛適用於各種需要優化的任務,比如計算加速就是一個典型的例子。只要可以編寫接收超引數的介面並返回演算法的計算結果即可使用這一框架來自動化冗長的調參過程。
新框架的優勢
如果熟悉PFN的小夥伴可能會問,為什麼在擁有諸如Hyperopt、Spearmint、SMAC等超引數自動化框架後還需要建立新的框架Optuna呢?這是因為目前的框架在某些環境下無法工作或者不能保持穩定的優化,同時這些框架已經落後於目前最先進的超引數優化機制。研究人員希望開發出一種可以在python中具體指定需要調優的超引數,而不是為優化器編寫單獨的程式碼。
新特點
和Chainer一樣,Optuna提供了動態圖模型(define-by-run)風格的介面,這使得使用者可以在程式碼很複雜的情況下比其他框架更好地保持模組化特性。同時Optuna還可以在復空間中優化超引數,這是先前的框架所不能完成的。
在深度學習中定義計算圖主要有兩種主要的風格:動態圖和靜態圖。在早期的深度學習框架中,Caffe和Tensorflow等靜態圖框架佔據了主流;但隨著技術的發展,Chainer首次提出了動態圖框架,隨後PyTorch和Tensorflow2.0更新的eager也引入了動態圖模型,逐漸成為深度學習的主流方法。在超引數調優領域,同樣存在著Define-and-Run和Define-by-Run兩種風格。Optuna和市面上絕大多數的框架不同,它是基於Define-by-Run的概念,API風格非常獨特。
這使得用於程式保持高度模組化成為可能,同時也使得複雜超引數空間中的引數搜尋成為可能。當使用如深度學習或梯度推舉演算法等迭代演算法時,對於訓練粗略的預測可以通過學習曲線來得到。利用這樣的方法,Optuna能根據這一預測終止可能性較小的超引數區域,把更多的算力用於可能性更高的區域以提高搜尋效率。而上面提到已有的超參數學習框就缺乏這一功能。此外最近的研究表明在學習曲線上使用剪枝技術十分有效,下圖顯示了在一個簡單深度學習任務上表現出的有效性,當Optuna和Hyperopt優化引擎使用相同TPE時,Optuna使用剪枝技術獲取了更高的效率。
深度學習是計算密集型技術,訓練也是耗時的過程。對於一個自動超引數優化框架來說,高效和穩定應當是其主要特徵。Optuna支援非同步分散式優化,使得演算法可以同時在多個節點上進行多次嘗試。平行計算的效果如下圖所示,研究人員通過修改計算機的數量來探索了分散式優化的加速情況。
使用者可通過簡單的程式碼配置,就可以並行地分散式地執行包含分散式過程的目標函式。
視覺化
面板視覺化,基於http 優化過程或匯出pandas資料。
視覺化方便我們形象的理解並優化程式的執行。Optuna提供了可通過瀏覽器訪問的面板來觀察優化過程。使用者可以通過這一方法從實驗過程和結果中獲取有效的資訊來幫助分析。同時還提供了優化過程詳細資訊的匯出,以便進行詳細的分析。
在Optuna的支援下FPN參加了OpenImageChallange2018,並取得了第二名的好成績。
PFN開源眾多演算法的目的在於加速深度學習的研發活動,Optuna作為在自動化超引數調優上的研究成果是十分重要的進步,讓機器學習的自動化加速過程又進了一步。除此之外研究人員還在繼續研究神經架構自動搜尋和自動特徵抽取等功能,十分期待PFN能夠開發更多優秀的演算法。
更多介紹請參見>>https://preferredresearch.jp/2018/12/03/optuna-release/