Facebook 發(fā)布無梯度優(yōu)化開源工具 Nevergrad,可應(yīng)用于各類機(jī)器學(xué)習(xí)問題
大多數(shù)機(jī)器學(xué)習(xí)任務(wù)——從自然語言處理、圖像分類到翻譯以及大量其他任務(wù),都依賴于無梯度優(yōu)化來調(diào)整模型中的參數(shù)和/或超參數(shù)。為了使得參數(shù)/超參數(shù)的調(diào)整更快、更簡(jiǎn)單,F(xiàn)acebook 創(chuàng)建了一個(gè)名叫 Nevergrad(https://github.com/facebookresearch/nevergrad) 的 Python 3 庫,并將它開源發(fā)布。Nevergrad 提供了許多不依賴梯度計(jì)算的優(yōu)化算法,并將其呈現(xiàn)在標(biāo)準(zhǔn)的問答 Python 框架中。此外,Nevergrad 還包括了測(cè)試和評(píng)估工具。
Nevergrad 現(xiàn)已對(duì)外開放,人工智能研究者和其他無梯度優(yōu)化相關(guān)工作者馬上就可以利用它來協(xié)助自己的工作。這一平臺(tái)不僅能夠讓他們實(shí)現(xiàn)***進(jìn)的算法和方法,能夠比較它們?cè)诓煌O(shè)置中的表現(xiàn),還將幫助機(jī)器學(xué)習(xí)科學(xué)家為特定的使用實(shí)例找到***優(yōu)化器。在 Facebook 人工智能研究院(FAIR),研究者正將 Nevergrad 應(yīng)用于強(qiáng)化學(xué)習(xí)、圖像生成以及其他領(lǐng)域的各類項(xiàng)目中,例如,它可以代替參數(shù)掃描來幫助更好地調(diào)優(yōu)機(jī)器學(xué)習(xí)模型。
這個(gè)庫包含了各種不同的優(yōu)化器,例如:
差分進(jìn)化算法(Differential evolution)
序列二次規(guī)劃(Sequential quadratic programming)
FastGA
協(xié)方差矩陣自適應(yīng)(Covariance matrix adaptation)
噪聲管理的總體控制方法(Population control methods for noise management)
粒子群優(yōu)化算法(Particle swarm optimization)
在此之前,使用這些算法往往需要研究者自己編寫算法的實(shí)現(xiàn),這就讓他們很難在各種不同的***方法之間進(jìn)行比較,有時(shí)候甚至完全無法比較。現(xiàn)在,AI 開發(fā)者通過使用 Nevergrad,可以輕易地在特定的機(jī)器學(xué)習(xí)問題上對(duì)不同方法進(jìn)行測(cè)試,然后對(duì)結(jié)果進(jìn)行比較。或者,他們也可以使用眾所周知的基準(zhǔn)來評(píng)估——與當(dāng)前***進(jìn)的方法相比,新的無梯度優(yōu)化方法怎么樣。
Nevergrad 中所包含的無梯度優(yōu)化方法可用于各類機(jī)器學(xué)習(xí)問題,例如:
多模態(tài)問題,比如說擁有多個(gè)局部極小值的問題。(如用于語言建模的深度學(xué)習(xí)超參數(shù)化。)
病態(tài)問題,通常在優(yōu)化多個(gè)具有完全不同的動(dòng)態(tài)特性的變量的時(shí)候,該問題就會(huì)出現(xiàn)(如,未對(duì)特定問題進(jìn)行調(diào)整的丟棄和學(xué)習(xí)率)。
可分離或旋轉(zhuǎn)問題,其中包括部分旋轉(zhuǎn)問題。
部分可分離問題,可以考慮通過幾個(gè)變量塊來解決這類問題。示例包括深度學(xué)習(xí)或其他設(shè)計(jì)形式的架構(gòu)搜索,以及多任務(wù)網(wǎng)絡(luò)的參數(shù)化。
離散的、連續(xù)的或混合的問題。這些問題可以包括電力系統(tǒng)(因?yàn)橛行┌l(fā)電站具有可調(diào)連續(xù)輸出,而其他發(fā)電站則具有連續(xù)或半連續(xù)輸出)或者要求同時(shí)選擇每層的學(xué)習(xí)速率、權(quán)值衰減以及非線性類型的神經(jīng)網(wǎng)絡(luò)任務(wù)。
有噪聲的問題,即針對(duì)這一問題,函數(shù)被完全相同的參數(shù)調(diào)用時(shí)可以返回不同結(jié)果,例如強(qiáng)化學(xué)習(xí)中的不同關(guān)卡。
在機(jī)器學(xué)習(xí)中,Nevergrad 可用于調(diào)整參數(shù),例如學(xué)習(xí)率、動(dòng)量、權(quán)值衰減(或許每一層)、dropout(丟棄)算法、深度網(wǎng)絡(luò)每個(gè)部分的層參數(shù)及其他等。更為普遍地,非梯度方法同樣被用于電網(wǎng)管理(https://www.sciencedirect.com/science/article/pii/S0142061597000409)、航空(https://www.sciencedirect.com/science/article/pii/S0142061597000409)、鏡頭設(shè)計(jì)(https://www.researchgate.net/publication/222434804_Human-competitive_lens_system_design_with_evolution_strategies)以及許多其他的科學(xué)和工程應(yīng)用中。
為什么有無梯度優(yōu)化的需求
在某些場(chǎng)景中,例如在神經(jīng)網(wǎng)絡(luò)權(quán)重優(yōu)化中,以分析法去計(jì)算函數(shù)的梯度是簡(jiǎn)單的。然而,在其他場(chǎng)景中,例如當(dāng)計(jì)算函數(shù) f 的速度慢,或者域不連續(xù)的時(shí)候,函數(shù)的梯度就無法預(yù)估出來。在這些應(yīng)用實(shí)例中,無梯度方法提供了解決方案。
一個(gè)簡(jiǎn)單的無梯度解決方案是隨機(jī)搜索,它由隨機(jī)采樣大量的搜索點(diǎn)、對(duì)每個(gè)搜索點(diǎn)進(jìn)行評(píng)估、選擇***搜索點(diǎn)三個(gè)步驟組成。隨機(jī)搜索在許多簡(jiǎn)單場(chǎng)景中表現(xiàn)很好,但在高維場(chǎng)景中卻表現(xiàn)不佳。通常被用于機(jī)器學(xué)習(xí)參數(shù)調(diào)整的網(wǎng)格搜索,也面臨類似的限制。不過,也還有許多替代方法:其中一些來自應(yīng)用數(shù)學(xué),如序列二次規(guī)劃,它對(duì)模擬器的二次近似進(jìn)行更新;貝葉斯優(yōu)化也建立目標(biāo)函數(shù)模型,其中包括不確定性模型;進(jìn)化計(jì)算包含大量關(guān)于選擇、變異以及混合有前景的變體的工作。
這個(gè)示例展示了進(jìn)化算法如何運(yùn)行。在函數(shù)空間中采樣搜索點(diǎn),并選擇***點(diǎn)的群落,然后在已有點(diǎn)的周圍推薦出新的點(diǎn)來嘗試優(yōu)化當(dāng)前的點(diǎn)群落。
使用 Nevergrad 生成算法基準(zhǔn)
Facebook 研究團(tuán)隊(duì)使用了 Nevergrad 實(shí)現(xiàn)幾個(gè)基準(zhǔn)測(cè)試,來展示特定算法在特定情況下的表現(xiàn)***。這些眾所周知的示例對(duì)應(yīng)著各種不同設(shè)置(多峰或非多峰,噪聲或非噪聲,離散或非離散,病態(tài)或非病態(tài)),并展示了如何使用 Nevergrad 來確定***優(yōu)化算法。
在每個(gè)基準(zhǔn)測(cè)試中,F(xiàn)acebook 研究團(tuán)隊(duì)對(duì)不同的 X 值進(jìn)行了獨(dú)立實(shí)驗(yàn)。這確保了在幾個(gè) X 值上的各個(gè)方法之間的一致排序在統(tǒng)計(jì)上是顯著的。除了下面的兩個(gè)基準(zhǔn)示例,這里(https://github.com/facebookresearch/nevergrad/blob/master/docs/benchmarks.md)還有一份更全面的清單,并附上了如何使用簡(jiǎn)單的命令行重新運(yùn)行這些基準(zhǔn)的指南。
這個(gè)圖展示了一個(gè)噪聲優(yōu)化示例
這個(gè)示例展示了使用 pcCMSA-ES 噪聲管理原理(https://homepages.fhv.at/hgb/New-Papers/PPSN16_HB16.pdf)的 TBPSA 如何在表現(xiàn)上勝過幾種替代方案。Facebook 研究團(tuán)隊(duì)在這里只將 TBPSA 與算法的一個(gè)有限示例進(jìn)行了對(duì)比,不過,比起其他的方法,它的表現(xiàn)同樣更好。
Nevergrad 平臺(tái)還可以執(zhí)行在很多機(jī)器學(xué)習(xí)場(chǎng)景中都會(huì)出現(xiàn)的離散目標(biāo)函數(shù)。這些場(chǎng)景包括,舉例來說,在一組有限的選項(xiàng)中進(jìn)行選擇(例如神經(jīng)網(wǎng)絡(luò)中的激活函數(shù))和在層的各個(gè)類型中進(jìn)行選擇(例如,決定在網(wǎng)絡(luò)中的某些位置是否需要跳過連接)。
現(xiàn)有的替代平臺(tái)(Bbob 和 Cutest)并不包含任何離散的基準(zhǔn)。Nevergrad 可以執(zhí)行經(jīng)過 softmax 函數(shù)(將離散問題轉(zhuǎn)換成有噪聲的連續(xù)問題)或連續(xù)變量離散化進(jìn)行處理了的離散域。
Facebook 研究團(tuán)隊(duì)注意到在這個(gè)場(chǎng)景中,F(xiàn)astGA(https://arxiv.org/abs/1703.03334)的表現(xiàn)***。DoubleFastGA 對(duì)應(yīng)的是 1/dim 和 (dim-1)/dim 之間的突變率,而不對(duì)應(yīng) 1/dim 和 1/2。這是因?yàn)樵挤秶鷮?duì)應(yīng)于二進(jìn)制域,而在這里,他們考慮的是任意域。在幾種場(chǎng)景中,簡(jiǎn)單一致的突變率混合(https://arxiv.org/abs/1606.05551)表現(xiàn)良好。
為研究者和機(jī)器學(xué)習(xí)科學(xué)家擴(kuò)展工具箱
Faacebook 將會(huì)持續(xù)為 Nevergrad 增加功能,從而幫助研究者創(chuàng)建和評(píng)估新算法。最初的版本擁有基本的人工測(cè)試功能,不過 Facebook 計(jì)劃為其增加更多功能,其中包括表示物理模型的功能。在應(yīng)用方面,他們將繼續(xù)讓 Nevergrad 變得更易用,并嘗試用它來對(duì)無法很好地確定梯度的 PyTorch 增強(qiáng)學(xué)習(xí)模型中的參數(shù)進(jìn)行優(yōu)化。Nevergrad 還可以幫助 A/B 測(cè)試以及作業(yè)調(diào)度等其他任務(wù)進(jìn)行參數(shù)掃描。