AutoML简要概述
前言
AutoML是指盡量不通過(guò)人來(lái)設(shè)定超參數(shù),而是使用某種學(xué)習(xí)機(jī)制,來(lái)調(diào)節(jié)這些超參數(shù)。這些學(xué)習(xí)機(jī)制包括傳統(tǒng)的貝葉斯優(yōu)化,多臂老虎機(jī)(multi-armed bandit),進(jìn)化算法,還有比較新的強(qiáng)化學(xué)習(xí)。
我將AutoML分為傳統(tǒng)AutoML ,自動(dòng)調(diào)節(jié)傳統(tǒng)的機(jī)器學(xué)習(xí)算法的參數(shù),比如隨機(jī)森林,我們來(lái)調(diào)節(jié)它的max_depth, num_trees, criterion等參數(shù)。 還有一類(lèi)AutoML,則專(zhuān)注深度學(xué)習(xí)。這類(lèi)AutoML,不妨稱(chēng)之為深度AutoML ,與傳統(tǒng)AutoML的差別是,現(xiàn)階段深度AutoML,會(huì)將神經(jīng)網(wǎng)絡(luò)的超參數(shù)分為兩類(lèi),一類(lèi)是與訓(xùn)練有關(guān)的超參數(shù),比如learning rate, regularization, momentum等;還有一類(lèi)超參數(shù),則可以總結(jié)為網(wǎng)絡(luò)結(jié)構(gòu)。對(duì)網(wǎng)絡(luò)結(jié)構(gòu)的超參數(shù)自動(dòng)調(diào)節(jié),也叫 Neural architecture search (nas) 。而針對(duì)訓(xùn)練的超參數(shù),也是傳統(tǒng)AutoML的自動(dòng)調(diào)節(jié),叫 Hyperparameter optimization (ho) 。
傳統(tǒng)AutoML
1. 貝葉斯優(yōu)化
貝葉斯優(yōu)化是一種近似逼近的方法,用各種代理函數(shù)來(lái)擬合超參數(shù)與模型評(píng)價(jià)之間的關(guān)系,然后選擇有希望的超參數(shù)組合進(jìn)行迭代,最后得出效果最好的超參數(shù)組合。
算法流程
初始化,隨機(jī)選擇若干組參數(shù)x,訓(xùn)練模型,得到相應(yīng)的模型評(píng)價(jià)指標(biāo)y
用代理函數(shù)來(lái)擬合x(chóng),y
用采集函數(shù)來(lái)選擇最佳的x*
將x*帶入模型,得到 新的y,然后進(jìn)入第2步
具體算法
| BO | 高斯過(guò)程 | Expected Improvement | 應(yīng)用廣泛,在低維空間表現(xiàn)出色 |
| SMAC | 回歸隨機(jī)森林 | Upper Confidence Bound | 對(duì)離散型變量表現(xiàn)出色 |
| TPE | 高斯混合模型 | Expected Improvement | 高維空間表現(xiàn)出色,有論文表明最實(shí)用 |
特點(diǎn)
-
需要消耗大量資源及時(shí)間。由于需要至少幾十次迭代,即需要訓(xùn)練幾十次的模型,因而會(huì)造成大量資源、時(shí)間消耗。基于這個(gè)特點(diǎn),可以說(shuō)貝葉斯優(yōu)化算法適合傳統(tǒng)AutoML ,而不適合深度AutoML
-
效果不穩(wěn)定。由于初始化存在隨機(jī)性,其效果不穩(wěn)定。也有論文表明,貝葉斯優(yōu)化算法并不顯著優(yōu)于隨機(jī)搜索(random search)
?
2. Multi-armed Bandit
multi-armed bandit是非常經(jīng)典的序列決策模型,要解決的問(wèn)題是平衡“探索”(exploration)和“利用”(exploitation)。
舉一個(gè)bandit例子,你有20個(gè)按鈕,每個(gè)按鈕按一次可能得到一塊錢(qián)或者拿不到錢(qián),同時(shí)每個(gè)按鈕的得到一塊錢(qián)的概率不同,而你在事前對(duì)這些概率一無(wú)所知。在你有1000次按按鈕的機(jī)會(huì)下,呼和得到最大收益。
這類(lèi)算法,通過(guò)將自動(dòng)調(diào)參問(wèn)題,轉(zhuǎn)化為bandit問(wèn)題,配置更多資源給表現(xiàn)更優(yōu)異的參數(shù)模型。
具體算法
Hyperband是一個(gè)頗具代表的算法。總體思路我們由一個(gè)自動(dòng)調(diào)節(jié)LeNet的例子來(lái)展示:
image
R=81代表總資源,? 代表每次篩選的比例,ni代表參數(shù)配置的組合數(shù),ri代表資源數(shù),這里代表一個(gè)epoch,第一行代表隨機(jī)得到ni個(gè)參數(shù)配置,然后經(jīng)過(guò)第ri次迭代之后,根據(jù)模型validation loss選擇出top k個(gè)表現(xiàn)好的模型,繼續(xù)下一行ri的訓(xùn)練。
特點(diǎn)
Bandit思想還是很重要的,是一類(lèi)針對(duì)資源配置的算法,可以有效避免資源浪費(fèi)在很差的參數(shù)配置上。
Bandit結(jié)合貝葉斯優(yōu)化,就構(gòu)成了傳統(tǒng)的AutoML的核心,比如伯克利的這篇paper,或者今年cmu的atm 。事實(shí)上,在華為,我也搞了這方面的專(zhuān)利,核心也是Bandit與貝葉斯優(yōu)化。
Bandit同樣適合于深度AutoML中nas任務(wù),但是對(duì)ho任務(wù)的應(yīng)用,我是存疑的,比如學(xué)習(xí)率lr 一大一小兩組實(shí)驗(yàn),在前期極有可能是大lr那組的loss下降快,如果用bandit判斷這個(gè)lr優(yōu)秀,而停止了另一組的實(shí)驗(yàn),很有可能造成錯(cuò)誤。因?yàn)榇蟮膶W(xué)習(xí)率,在前期可能確實(shí)會(huì)加快收斂,但是一段時(shí)間后,可能就會(huì)震蕩了,最后的收斂精度可能就很低。
深度AutoML
1. 進(jìn)化算法
一般的進(jìn)化算法其實(shí)大同小異,差別在如何選擇變異,有比較細(xì)的變異,比如在Large-Scale Evolution of Image Classifiers 這篇文章中,就定義了非常具體的變異,比如有改變通道數(shù)量,改變filter大小,改變stride等等;而在Simple And Efficient Architecture Search for Convolutional Neural Networks這篇論文中,它的變異,就借鑒了現(xiàn)有公認(rèn)的比較好的結(jié)構(gòu),加深網(wǎng)絡(luò)就用conv-bn-relu3件套,加寬網(wǎng)絡(luò)加大通道數(shù)量,增加skip connection。
這些進(jìn)化算法在做自動(dòng)模型選擇時(shí),每次迭代都不可避免的需要在整個(gè)數(shù)據(jù)集上跑若干個(gè)epoch,而每次迭代都有許多個(gè)變異,又需要很多次迭代,導(dǎo)致最后的訓(xùn)練時(shí)間太久。
fine-tune基礎(chǔ)上的進(jìn)化
Simple And Efficient Architecture Search for Convolutional Neural Networks 這篇論文提出,我們先用一個(gè)成熟的模型去訓(xùn)練(也可以fine-tune訓(xùn)練),然后在這個(gè)模型的基礎(chǔ)上去變異,變異之后用fine-tune訓(xùn)練幾個(gè)epoch即可。這帶來(lái)兩個(gè)好的結(jié)果:
fine tune減少了大量的訓(xùn)練時(shí)間
我們最后拿出來(lái)的模型,至少不比成熟模型差
個(gè)人認(rèn)為,這篇論文很有實(shí)際意義。
2. 強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)在nas和ho兩方面都有應(yīng)用。
強(qiáng)化學(xué)習(xí)-自動(dòng)網(wǎng)絡(luò)結(jié)構(gòu)搜索
Learning Transferable Architectures for Scalable Image Recognition
用RNN作為controller,產(chǎn)生網(wǎng)絡(luò)結(jié)構(gòu),然后根據(jù)收斂精度調(diào)節(jié)rnn。
將整個(gè)網(wǎng)絡(luò)分為兩種cell,Normal cell 和 Reduction cell,每個(gè)cell有B個(gè)block組成,而一個(gè)cell由rnn生成的過(guò)程如圖所示:
image
選擇一個(gè)hidden layer A
選擇一個(gè)hidden layer B
為A選擇一個(gè)op
為B選擇一個(gè)op
選擇一個(gè)結(jié)合op
重復(fù)1-5步驟B次,生成一個(gè)cell
該方法現(xiàn)在cifar10上尋找到兩種cell的結(jié)構(gòu),然后遷移到imagenet上。
值得注意的是,該方法雖然效果驚人,但是人為的提前設(shè)定非常多:
每個(gè)cell有B個(gè)block組成,B是人為設(shè)定的值,這里被設(shè)為了5;
cell的數(shù)量及cell的排序順序都是提前訂好的;
因此在這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的搜索中,模型的探索空間有限,同時(shí)它在cifar10上進(jìn)行訓(xùn)練,因此相對(duì)于最早的用強(qiáng)化學(xué)習(xí)來(lái)做automl的方法,已經(jīng)加速了許多。但是還是不夠快,針對(duì)速度問(wèn)題,有一篇paper:enas。
ENAS 在上述方法的基礎(chǔ)上,采用參數(shù)共享的方式,避免每次新產(chǎn)生的模型重頭訓(xùn)練的問(wèn)題,因此大大加速了訓(xùn)練時(shí)間,使得gpu耗時(shí)降低到了一天之內(nèi)(cifar10數(shù)據(jù)集),可謂效果驚人!
強(qiáng)化學(xué)習(xí)-優(yōu)化器
Neural Optimizer Search with Reinforcement Learning
用RNN作為optimizer的controller,產(chǎn)生optimizer,然后用小的cnn模型訓(xùn)練5個(gè)epoch,得到的val_acc作為reward,訓(xùn)練。
將每個(gè)optimizer抽象的表達(dá)為:
image
比如:
image
最后產(chǎn)生了兩類(lèi)optimizer:
image
強(qiáng)化學(xué)習(xí)總結(jié)
強(qiáng)化學(xué)習(xí)在深度學(xué)習(xí)中的應(yīng)用可謂方方面面,比如用強(qiáng)化學(xué)習(xí)做圖像的增強(qiáng)學(xué)習(xí) 、device配置等等,但是強(qiáng)化學(xué)習(xí)的問(wèn)題在于每一類(lèi)問(wèn)題,哪怕?lián)Q一份相近的數(shù)據(jù),也要從頭訓(xùn)練;而且訓(xùn)練消耗的時(shí)間非常長(zhǎng)。
3. 其它方法
1. 輔助網(wǎng)絡(luò)初始化參數(shù)
SMASH: One-Shot Model Architecture Search through HyperNetworks 在這篇論文中,介紹了一種利用輔助網(wǎng)絡(luò)給不同的網(wǎng)絡(luò)初始化參數(shù),從而無(wú)需重訓(xùn)練的方法。
其大致流程是在一堆待搜索的網(wǎng)絡(luò)結(jié)構(gòu)中,隨機(jī)挑選數(shù)據(jù)和網(wǎng)絡(luò)結(jié)構(gòu),用輔助網(wǎng)絡(luò)負(fù)責(zé)參數(shù)初始化,然后訓(xùn)練用梯度下降訓(xùn)練這個(gè)輔助網(wǎng)絡(luò)。在該輔助網(wǎng)絡(luò)訓(xùn)練的足夠好之后,就可以用它給各個(gè)不同的網(wǎng)絡(luò)初始化參數(shù),然后測(cè)試validation loss,最后挑出最優(yōu)的網(wǎng)絡(luò)結(jié)構(gòu),從頭開(kāi)始正常訓(xùn)練。
該方法通過(guò)訓(xùn)練一次輔助網(wǎng)絡(luò),避免每個(gè)網(wǎng)絡(luò)都需要訓(xùn)練的情況,使得訓(xùn)練時(shí)間大大減小。該方法非常具有參考意義。
2. DARTS
Differentiable architecture search (DARTS). 在這項(xiàng)研究中,將神經(jīng)網(wǎng)絡(luò)的探索空間從discrete變?yōu)閏ontinuous,從而可以使用梯度下降的方式,來(lái)優(yōu)化神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。
這個(gè)研究生非常有意思,非常有希望,期待這方面的繼續(xù)發(fā)展!
?
總結(jié)
以上是生活随笔為你收集整理的AutoML简要概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 孤立森林异常检测之入门
- 下一篇: 表数据比图数据更难处理