自動機(jī)器學(xué)習(xí)(AutoML)幾個重要方向匯總
掃描二維碼
隨時隨地手機(jī)看文章
?超參數(shù)優(yōu)化(HPO)
學(xué)習(xí)器模型中一般有兩類參數(shù),一類是可以從數(shù)據(jù)中學(xué)習(xí)估計得到,還有一類參數(shù)時無法從數(shù)據(jù)中估計,只能靠人的經(jīng)驗進(jìn)行設(shè)計指定,后者成為超參數(shù)。比如,支持向量機(jī)里面的C,Kernal,game;樸素貝葉斯里面的alpha等。
超參數(shù)優(yōu)化有很多方法,最常見的類型是黑盒優(yōu)化(black-box function optimization)。所謂黑盒優(yōu)化,就是將決策網(wǎng)絡(luò)當(dāng)作是一個黑盒來進(jìn)行優(yōu)化,僅關(guān)心輸入和輸出,而忽略其內(nèi)部機(jī)制。決策網(wǎng)絡(luò)通常是可以參數(shù)化的,這時候我們進(jìn)行優(yōu)化首先要考慮的是收斂性。以下的幾類方法都是屬于黑盒優(yōu)化:
網(wǎng)格搜索(grid search)
Grid search是一種通過遍歷給定的參數(shù)組合來優(yōu)化模型表現(xiàn)的方法。網(wǎng)格搜索的問題是很容易發(fā)生維度災(zāi)難,優(yōu)點是很容易并行。
隨機(jī)搜索(random search)
隨機(jī)搜索是利用隨機(jī)數(shù)求極小點而求得函數(shù)近似的最優(yōu)解的方法。
貝葉斯優(yōu)化
貝葉斯優(yōu)化是一種迭代的優(yōu)化算法,包含兩個主要的元素,輸入數(shù)據(jù)假設(shè)的模型和一個采集函數(shù)用來決定下一步要評估哪一個點。每一步迭代,都使用所有的觀測數(shù)據(jù)fit模型,然后利用激活函數(shù)預(yù)測模型的概率分布,決定如何利用參數(shù)點,權(quán)衡是Explaoration還是Exploitation。相對于其它的黑盒優(yōu)化算法,激活函數(shù)的計算量要少很多,這也是為什么貝葉斯優(yōu)化被認(rèn)為是更好的超參數(shù)調(diào)優(yōu)的算法的原因。
黑盒優(yōu)化的一些工具:
Hyperopt:是一個Python庫,可以用來尋找實數(shù),離散值,條件維度等搜索空間的最佳值。
Google Vizier:是Google的內(nèi)部的機(jī)器學(xué)習(xí)系統(tǒng),Google Vizier能夠利用遷移學(xué)習(xí)等技術(shù)自動優(yōu)化其他機(jī)器學(xué)習(xí)系統(tǒng)的超參數(shù)。
Advisor:Google Vizier的開源實現(xiàn)。
Katib:基于Kubernetes的超參數(shù)優(yōu)化工具。
由于優(yōu)化目標(biāo)具有不連續(xù)、不可導(dǎo)等數(shù)學(xué)性質(zhì),所以一些搜索和非梯度優(yōu)化算法被用來求解該問題,包括我們上面提到的這些黑盒算法。此類算法通過采樣和對采樣的評價進(jìn)行搜索,往往需要大量對采樣的評價才能獲得比較好的結(jié)果。然而,在自動機(jī)器學(xué)習(xí)任務(wù)中評價往往通過k折交叉驗證獲得,在大數(shù)據(jù)集的機(jī)器學(xué)習(xí)任務(wù)上,獲得一個評價的時間代價巨大。這也影響了優(yōu)化算法在自動機(jī)器學(xué)習(xí)問題上的效果,所以一些減少評價代價的方法被提出來,其中多保真度優(yōu)化(multi-fidelity methods)就是其中的一種。這里的技術(shù)包括:基于學(xué)習(xí)曲線來決定是否要提前終止訓(xùn)練等等。
?元學(xué)習(xí)(Meta Learning)
元學(xué)習(xí)也就是‘學(xué)習(xí)如何學(xué)習(xí)’,通過對現(xiàn)有的學(xué)習(xí)任務(wù)之間的性能差異進(jìn)行系統(tǒng)的觀測,學(xué)習(xí)已有的經(jīng)驗和元數(shù)據(jù),用于更好地執(zhí)行新的學(xué)習(xí)任務(wù)。這樣做可以極大地改進(jìn)機(jī)器學(xué)習(xí)流水線或者神經(jīng)網(wǎng)絡(luò)架構(gòu)的設(shè)計,也可以用數(shù)據(jù)驅(qū)動的方式取代手工作坊似的算法工程工作。
從某種意義上來說,元學(xué)習(xí)覆蓋了超參數(shù)優(yōu)化,因為元數(shù)據(jù)的學(xué)習(xí)包含了:超參數(shù)、流水線的構(gòu)成、神經(jīng)網(wǎng)絡(luò)架構(gòu)、模型構(gòu)成、元特征等等。機(jī)器學(xué)習(xí)的算法又稱為‘學(xué)習(xí)器’,學(xué)習(xí)器是假定一個模型,該模型擁有很多未知參數(shù),利用訓(xùn)練數(shù)據(jù)和優(yōu)化算法來找到最適合這些訓(xùn)練數(shù)據(jù)的參數(shù),生成一個新的算法或者參數(shù)已知的模型,并利用該模型/算法來預(yù)測新的未知數(shù)據(jù)。如果說世界上只有一個模型,那么問題就簡單了,但實際上是模型有很多,不同的模型擁有不同的超參數(shù),我們往往還會把模型和算法組裝在一起構(gòu)成復(fù)合模型和機(jī)器學(xué)習(xí)的流水線,這個時候就需要知道解決不同的問題要構(gòu)建哪些不同的模型。元學(xué)習(xí)可以把超參數(shù)、流水線、神經(jīng)網(wǎng)絡(luò)架構(gòu)這些都看成是一個新模型的未知參數(shù),把不同學(xué)習(xí)任務(wù)的性能指標(biāo)看成是輸入數(shù)據(jù),這樣我們就可以利用優(yōu)化算法來找到性能最好的那組參數(shù)。這個模式可以一直嵌套,也就是說,你可以有“元元元學(xué)習(xí)”。
元學(xué)習(xí)的方法包括:1)通過模型評估來學(xué)習(xí);2)通過任務(wù)的屬性/元特征來學(xué)習(xí)。元學(xué)習(xí)的一個很大的挑戰(zhàn)就是如果通過很少的訓(xùn)練數(shù)據(jù)來學(xué)習(xí)一個復(fù)雜的模型,這就是one-shot或者few-shot的問題。像人類的學(xué)習(xí)一樣,每次學(xué)習(xí)無論成功失敗,我們都收獲一定的經(jīng)驗,人類很少從頭學(xué)習(xí)。在構(gòu)建自動學(xué)習(xí)的時候,我們也應(yīng)該充分利用已有的每一次的學(xué)習(xí)經(jīng)驗,逐步地改進(jìn),使得新的學(xué)習(xí)更加有效。
?神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索(Neural Architecture Search,NAS)
提起AutoML,其實大多數(shù)人都是因為Google的AutoML系統(tǒng)才知道這個故事的。隨著深度學(xué)習(xí)的流行,神經(jīng)網(wǎng)絡(luò)的架構(gòu)變得越來越復(fù)雜,越來越多的手工工程也隨之而來。神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索就是為了解決這個問題。
NAS主要包含三個部分:
搜索空間(search space):搜索空間原則上定義了可以代表哪些體系結(jié)構(gòu)。結(jié)合適用于任務(wù)屬性的先驗知識可以減小搜索空間大小并簡化搜索。然而,這也引入了人為偏見,可能會阻止找到超越當(dāng)前人類知識的新穎架構(gòu)構(gòu)建塊(building blocks)。
搜索策略(search strategy):搜索策略說明了如何做空間搜索。它包含了經(jīng)典的探索-開發(fā)(exploration-exploitation)之間的權(quán)衡。一方面,需要快速找到性能良好的架構(gòu),另一方面,避免過早收斂到次優(yōu)架構(gòu)(suboptimal architecture)區(qū)域。
性能估計策略(performance estimation strategy):NAS的目標(biāo)通常是找到在未知數(shù)據(jù)實現(xiàn)高預(yù)測性能的架構(gòu)。性能評估是指評估此性能的過程:最簡單的選擇是對數(shù)據(jù)架構(gòu)執(zhí)行標(biāo)準(zhǔn)訓(xùn)練和驗證,但遺憾的是,這種方法計算成本很高,限制了可以探索的體系結(jié)構(gòu)量。因此,最近的研究大多集中在開發(fā)出方法去降低這些性能估計成本。