最近看了些NAS的論文,發(fā)現(xiàn)上面這篇綜述寫的很不錯(cuò),非常全面,詳細(xì)拜讀了一下。有很多細(xì)節(jié)不是很懂,也沒(méi)空去精讀原論文,但是能夠?qū)Υ笾碌拿}絡(luò)有個(gè)初步的了解。因此簡(jiǎn)單寫一下這篇綜述講了些啥,第一次接觸NAS,可能有理解有誤,望指正批評(píng)。
介紹
首先這篇綜述是講AutoML的,不單單是NAS,但是因?yàn)镹AS是AutoML中最最重要的一部分,所以主要篇章還是用來(lái)講NAS了。據(jù)作者所說(shuō),應(yīng)該是第一篇完整講述AutoML整個(gè)流程的綜述。
首先,本文將AutoML劃分成了如下幾個(gè)流程:
先是數(shù)據(jù)準(zhǔn)備,然后是特征工程,接著是模型生成,最后就是模型評(píng)估了。其中模型生成又可以分為搜索空間和優(yōu)化方法,搜索空間有傳統(tǒng)的ML模型或者DL模型,優(yōu)化方法又分為超參數(shù)優(yōu)化和結(jié)構(gòu)優(yōu)化。NAS的話主要就涉及到DL模型的搜索空間定義、結(jié)構(gòu)優(yōu)化和模型評(píng)估策略這三塊。
因?yàn)槲抑饕P(guān)注NAS這塊,所以其他部分就只簡(jiǎn)單介紹一下,不做過(guò)多解讀。
數(shù)據(jù)準(zhǔn)備
看上面這個(gè)圖應(yīng)該很清楚了,數(shù)據(jù)準(zhǔn)備主要分為數(shù)據(jù)收集、數(shù)據(jù)清洗和數(shù)據(jù)增強(qiáng)三個(gè)部分。
數(shù)據(jù)收集
有開(kāi)源的就去下開(kāi)源的,沒(méi)開(kāi)源的就去互聯(lián)網(wǎng)上爬,要是什么都沒(méi)有呢,那就通過(guò)GAN之類的技術(shù)來(lái)生成偽數(shù)據(jù),有總比沒(méi)有好嘛。
數(shù)據(jù)清洗
就是清洗數(shù)據(jù)中的噪聲、臟數(shù)據(jù),這一過(guò)程可能需要一些知識(shí)去判斷什么是噪聲。還有一個(gè)研究主題就是如何清洗每天更新的源源不斷的新數(shù)據(jù)。
數(shù)據(jù)增強(qiáng)
數(shù)據(jù)增強(qiáng)某種程度上也可以被視為數(shù)據(jù)收集的一種工具,因?yàn)樾Ч际且粯拥?,增加了新?shù)據(jù)。但是它的目的有所不同,主要是為了防止模型過(guò)擬合。上圖針對(duì)不同數(shù)據(jù)有很多增強(qiáng)方法,這里就不介紹了。
特征工程
有句話叫:數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上界,而模型和算法只是為了去近似這個(gè)上界。主要可以分成三塊,特征選擇、特征構(gòu)建和特征提取。這里也不多介紹了,因?yàn)樵贒L里特征工程用得很少,DL模型可以自己從數(shù)據(jù)中學(xué)出特征,很少需要自己手動(dòng)構(gòu)造特征了。
模型生成
從這塊開(kāi)始進(jìn)入到了NAS的領(lǐng)域。之前說(shuō)了,搜索空間分為ML和DL兩塊,本文只關(guān)注DL,而優(yōu)化方法又分為超參優(yōu)化和網(wǎng)絡(luò)架構(gòu)優(yōu)化,本文也主要只關(guān)注網(wǎng)絡(luò)架構(gòu)優(yōu)化,因?yàn)槌瑓?yōu)化是挑選出最優(yōu)網(wǎng)絡(luò)架構(gòu)之后的事情了,不過(guò)也有工作將NAS用在超參優(yōu)化上的,這個(gè)就不在討論范圍內(nèi)了。
上面兩張圖是NAS的一般流程:
首先針對(duì)不同的任務(wù)定義一個(gè)搜索空間,這個(gè)搜索空間就決定了你搜出來(lái)的網(wǎng)絡(luò)架構(gòu)可能長(zhǎng)什么樣子,也決定了你搜出來(lái)的架構(gòu)可能性有多少,當(dāng)然是越大越好,但是帶來(lái)的后果就是搜索速度太慢。
然后在這個(gè)搜索空間里進(jìn)行搜索,采樣出一個(gè)比較好的模型架構(gòu),這里方法就非常多了,最簡(jiǎn)單的就是隨機(jī)搜索,隨機(jī)采樣一個(gè)網(wǎng)絡(luò)架構(gòu)。
最后就是在訓(xùn)練集上評(píng)估你采樣出的架構(gòu)效果,反饋給架構(gòu)優(yōu)化,讓它優(yōu)化,然后繼續(xù)采樣,循環(huán)下去。評(píng)估方法也有很多,最簡(jiǎn)單的就是像正常訓(xùn)練模型那樣完整訓(xùn)練一遍,得到效果,但是這樣太慢了,因此需要其他方法來(lái)加速訓(xùn)練或者估計(jì)效果。
搜索空間
神經(jīng)網(wǎng)絡(luò)可以看作是一個(gè)DAG,而如何定義這個(gè)DAG,其實(shí)你可以用生成圖的方式做加法生成它,也可以做減法,從大圖中抽取出子圖等等,有很多方法。
定義搜索空間需要人類知識(shí),這一步目前還不夠Auto,定義的好,生成出來(lái)的架構(gòu)才可能好。而有些工作發(fā)現(xiàn)只要你搜索空間定義的足夠好,隨機(jī)搜索都能達(dá)到和各種架構(gòu)優(yōu)化方法相似的效果,那么NAS將變得毫無(wú)意義,所以這一塊還是挺玄學(xué)的。
整體結(jié)構(gòu)搜索
就是按照DAG的拓?fù)湫?,依次生成出模型架?gòu)出來(lái)。一般來(lái)說(shuō),用一個(gè)RNN來(lái)生成,每生成一個(gè)node,都要預(yù)測(cè)出它的輸入是哪些node(殘差)、作用在它上面的op有哪些。
但是這種方法太慢了,搜索的復(fù)雜度是指數(shù)級(jí)別的,因此在最初的幾篇RL論文里,都用了幾百個(gè)GPU訓(xùn)練了幾十天才搜出來(lái),窮苦人家可搜不起。
cell搜索
這種方式也是借鑒了人類設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的經(jīng)驗(yàn),像ResNet系列都是將一個(gè)個(gè)cell層層堆疊得到的,因此如果只搜一個(gè)cell,然后將相同的cell堆疊起來(lái)豈不是大大減小了搜索空間。后面的很多工作都是基于cell來(lái)搜索的,比如NASNet。
在NASNet中,cell被分成了兩種,一種是normal cell,它的輸入輸出維度保持相同,另一種是reduction cell,它的結(jié)構(gòu)和normal cell相似,但是輸出的寬度和高度減半,通道數(shù)加倍。
最后搜索出最優(yōu)cell之后,根據(jù)需要堆疊不同層數(shù)的cell就行了,這個(gè)層數(shù)也是人為定義的。但是這里就會(huì)存在一個(gè)訓(xùn)練和評(píng)估不一致的問(wèn)題,一般來(lái)說(shuō),在搜索的時(shí)候,為了減小顯存占用,會(huì)堆疊比較少的層數(shù)去評(píng)估。但是在得到最優(yōu)cell之后,用來(lái)retrain時(shí)會(huì)堆疊比較多的層數(shù),這里就不一定是最優(yōu)解了。也有工作做這方面的優(yōu)化,比如P-DARTS,在搜索階段逐漸增加堆疊的層數(shù)。
分層搜索
當(dāng)然搜索cell也是存在問(wèn)題的,忽視了整體結(jié)構(gòu)的優(yōu)化,而且每一層的cell相同也不一定最好啊。因此后來(lái)的工作又提出了分層搜索的方法。
比如Auto-deeplab在搜索cell的同時(shí),還搜索了不同層的分辨率,下一層的分辨率可以是一半、不變或兩倍,這一步限制一是為了減小搜索空間,二是為了增加穩(wěn)定性,防止分辨率變化太大。
再如HierNAS,按照層次結(jié)構(gòu)來(lái)搜索網(wǎng)絡(luò)架構(gòu),第一層是一些原子操作,第二層用這些原子操作生成一些比較小的網(wǎng)絡(luò),第三層用第二層的小網(wǎng)絡(luò)再搭建出一個(gè)更大的網(wǎng)絡(luò),依次下去。
再如progressive NAS,為了減小一個(gè)cell里面的搜索空間大小,從一個(gè)cell里面只有一個(gè)block開(kāi)始搜索,每次挑出top-k個(gè)cell,在基礎(chǔ)上衍生出兩個(gè)block,依次下去。評(píng)估性能用的是代理模型直接預(yù)測(cè),不需要真的訓(xùn)練一遍。
再如MnasNet,它將整個(gè)網(wǎng)絡(luò)分為了若干個(gè)cell,每個(gè)cell串行了若干個(gè)block,每個(gè)cell的block數(shù)量可能不同,而單個(gè)cell里面的block結(jié)構(gòu)是相同的,這樣就考慮到了整體的網(wǎng)絡(luò)搜索空間。和堆疊cell不同的是,每個(gè)block的結(jié)構(gòu)比較簡(jiǎn)單,不然的話整體上搜索復(fù)雜度還是太大了。當(dāng)然這篇主要還是為了做移動(dòng)端部署,因此做了多目標(biāo)NAS,將延時(shí)也考慮到了目標(biāo)函數(shù)中去。
之前的方法還存在一個(gè)問(wèn)題,就是基本都是在小數(shù)據(jù)集上做的搜索評(píng)估,最后將最優(yōu)結(jié)構(gòu)運(yùn)用到大數(shù)據(jù)集上,這就存在不一致性。因此例如ProxylessNAS就直接在大數(shù)據(jù)集上搜索評(píng)估,為了減小顯存消耗,采用BinaryConnect,每次只激活兩個(gè)結(jié)點(diǎn)之間的一條邊。
網(wǎng)絡(luò)態(tài)射
這類方法主要思想就是在已經(jīng)訓(xùn)練好的成熟網(wǎng)絡(luò)基礎(chǔ)上增加寬度、深度等等,繼承父網(wǎng)絡(luò)的參數(shù),加速子網(wǎng)絡(luò)的訓(xùn)練。
首先是Net2Net,擴(kuò)展分為兩個(gè)方向,一種是寬度上的,一種是深度上的,不能同時(shí)進(jìn)行。
因此后來(lái)就有了網(wǎng)絡(luò)態(tài)射,可以處理任意線性層和非線性層,并且深度和寬度上可以同時(shí)擴(kuò)展。
架構(gòu)優(yōu)化
定義好搜索空間后,就要采用架構(gòu)優(yōu)化算法來(lái)搜索出最優(yōu)的架構(gòu)了。
演化算法
演化算法就是模仿的生物進(jìn)化過(guò)程。首先要對(duì)網(wǎng)絡(luò)架構(gòu)進(jìn)行編碼,方便之后的操作??梢詫D結(jié)構(gòu)編碼為二進(jìn)制串,但是這樣固定長(zhǎng)度不靈活。于是就有了Cartesian genetic programming、Neuro evolution of augmenting topologies、Cellular encoding等各種編碼方法,詳細(xì)就不介紹了。
一般演化算法分為四步:選擇、交叉、變異、替換。
選擇。就是從候選的網(wǎng)絡(luò)架構(gòu)中挑選出適應(yīng)度最高的,一種可以直接挑絕對(duì)值最高的,另一種可以挑相對(duì)值最高的,第三種比較有名的是錦標(biāo)賽選擇算法,也就是放回抽樣,每次等概率隨機(jī)選k個(gè),挑出最好的那一個(gè),進(jìn)入下一代,其余放回,重復(fù)上述操作。
交叉。交叉方式和編碼方式有很大關(guān)系,
變異。上面兩步做完后,有很多方式可以對(duì)個(gè)體進(jìn)行變異,比如隨機(jī)翻轉(zhuǎn)某一位,隨機(jī)增加或者刪除兩層之間的連接等等。
替換。新的個(gè)體加入種群后,舊的個(gè)體要被刪除掉??梢詣h除最久之前的,也可以刪除效果最差的,也有工作一個(gè)都不刪除,只要你內(nèi)存和時(shí)間頂?shù)米 ?/p>
強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)主要思想就是用一個(gè)控制器(一般是RNN)來(lái)生成網(wǎng)絡(luò)架構(gòu),然后評(píng)估得到得分作為反饋更新控制器參數(shù)。有用策略梯度的,也有用Q-learning的,還有用PPO算法的等等。第一篇NAS論文就是用的RL,但是這一類方法普遍很費(fèi)卡,一般人玩不起。
梯度下降
前兩種都是在離散空間搜結(jié)構(gòu),梯度下降方法是將離散空間變?yōu)榱诉B續(xù)空間。第一個(gè)提出的是DARTS,在兩個(gè)結(jié)點(diǎn)之間定義了若干種操作,然后做softmax,最后在評(píng)估的時(shí)候取argmax。
這種方法也有不好,比如成倍增加了顯存,本來(lái)一條邊現(xiàn)在需要成倍的計(jì)算量,此外用了代理任務(wù),在小數(shù)據(jù)集上訓(xùn)的層數(shù)比較少,遷移到大數(shù)據(jù)集上層數(shù)又很多。也有解決方法,比如P-DARTS,隨著訓(xùn)練進(jìn)行逐漸加層數(shù),為了減小計(jì)算量,還逐漸減少了每條邊上的操作數(shù)。而GDAS每次只選概率最大的那個(gè)操作邊做前向,反向傳播用gumbel softmax。
兩套參數(shù)聯(lián)合優(yōu)化也是很困難的,DARTS用的是交替優(yōu)化,一次優(yōu)化結(jié)構(gòu)參數(shù),一次優(yōu)化模型權(quán)重。
最后還有個(gè)問(wèn)題,就是搜索后期會(huì)傾向于搜索殘差連接之類的操作,這不好。于是DARTS+發(fā)現(xiàn)一個(gè)cell里出現(xiàn)兩個(gè)或以上殘差連接后就直接停止。P-DARTS則是給殘差加了正則化,減小出現(xiàn)的次數(shù)。
代理模型
這一類方法(SMBO)使用一個(gè)代理模型來(lái)指導(dǎo)最優(yōu)模型的生成。傳統(tǒng)的方法有貝葉斯優(yōu)化(高斯過(guò)程、隨機(jī)森林、TPE等等),就不詳細(xì)介紹傳統(tǒng)方法了。
也有用神經(jīng)網(wǎng)絡(luò)當(dāng)作代理模型的,比如PNAS、EPNAS、NAO都用一個(gè)LSTM或者M(jìn)LP將離散的結(jié)構(gòu)編碼成連續(xù)的表示,然后預(yù)測(cè)性能,接著找出性能最高的最優(yōu)表示,用解碼器還原出離散的結(jié)構(gòu)。
網(wǎng)格和隨機(jī)搜索
這就是最原始最普通的優(yōu)化方法,比如直接在搜索空間隨機(jī)搜索結(jié)構(gòu),然后評(píng)估,最后取最優(yōu)的就行了。雖說(shuō)隨機(jī)搜索聽(tīng)起來(lái)不大行,但實(shí)際出來(lái)的效果,能和大多數(shù)NAS方法達(dá)到相似效果,還很簡(jiǎn)單。
混合優(yōu)化方法
上面這么多方法混合在一起,可能效果會(huì)更好。演化算法是全局優(yōu)化的,魯棒性很強(qiáng),但是隨機(jī)性有點(diǎn)大,不穩(wěn)定,計(jì)算消耗也大。強(qiáng)化學(xué)習(xí)也是的,訓(xùn)練很不穩(wěn)定。梯度下降方法訓(xùn)練快,但是需要提前定義好超網(wǎng)絡(luò)結(jié)構(gòu),限制了結(jié)構(gòu)的多樣性。
演化算法可以結(jié)合強(qiáng)化學(xué)習(xí)、梯度下降、SMBO,梯度下降也可以結(jié)合SMBO等等,這里就不詳細(xì)介紹了,典型的例子有Evo-NAS、NAO等等。
超參優(yōu)化
這一步其實(shí)是脫離了NAS的,就和一般的超參優(yōu)化一樣,網(wǎng)絡(luò)搜索、隨機(jī)搜索、貝葉斯優(yōu)化、梯度優(yōu)化等等方法,這里不做過(guò)多介紹了。
模型評(píng)估
在模型生成之后,需要對(duì)模型進(jìn)行評(píng)估,然后指導(dǎo)架構(gòu)優(yōu)化模塊生成更好的架構(gòu)。最一般的方法就是從頭開(kāi)始訓(xùn)練到收斂,但是這樣太慢了,一般都要生成個(gè)幾百萬(wàn)以上的架構(gòu)的,訓(xùn)練時(shí)間太久了。
低保真度
可以在評(píng)估時(shí)降低數(shù)據(jù)集的分辨率,降低cell堆疊的層數(shù),使用小數(shù)據(jù)集等等,這樣可以快速得到架構(gòu)的大致效果,但是最后得到的架構(gòu)可能在目標(biāo)數(shù)據(jù)集上不是全局最優(yōu)的。
權(quán)重共享
比如ENAS,可以在多次評(píng)估模型性能時(shí),繼承之前相同node的參數(shù),可以加快收斂速度。網(wǎng)絡(luò)態(tài)射也是用到了權(quán)重共享。
代理模型
直接學(xué)習(xí)一個(gè)預(yù)測(cè)器,輸入是網(wǎng)絡(luò)架構(gòu),輸出是它的性能,當(dāng)然這需要提前先訓(xùn)練一些模型,得到(架構(gòu),性能)的若干數(shù)據(jù),然后才能學(xué)習(xí)出這個(gè)預(yù)測(cè)器,PNAS就是這么干的。當(dāng)然預(yù)測(cè)器的學(xué)習(xí)數(shù)據(jù)肯定不會(huì)多,所以SemiNAS就用半監(jiān)督的方法,利用大量無(wú)標(biāo)注的結(jié)構(gòu)去預(yù)測(cè)出性能,加入到訓(xùn)練集中繼續(xù)優(yōu)化預(yù)測(cè)器。
early stop
可以只訓(xùn)練幾輪,然后根據(jù)前期的學(xué)習(xí)曲線預(yù)測(cè)出最終的性能。
一些討論
效果對(duì)比
可以看出,演化算法和強(qiáng)化學(xué)習(xí)搜索時(shí)間都非常長(zhǎng),除了個(gè)別幾個(gè)用了權(quán)重共享之類技巧的。梯度下降方法全部都挺快的,但是整體效果都不如其他幾類方法。
其他
從整體流程上來(lái)看,NAS方法還可以分為一階段和兩階段。兩階段是一般做法,第一個(gè)階段就是搜索評(píng)估階段,選出最好的架構(gòu),第二個(gè)階段就是retrain這個(gè)最優(yōu)架構(gòu),在驗(yàn)證集上評(píng)估。而一階段就是只需要訓(xùn)練一次超網(wǎng)絡(luò),聯(lián)合優(yōu)化架構(gòu)參數(shù)和模型權(quán)重,之后不需要再retrain了。比如比較有名的Once-for-all,采用了progressive shrinking算法來(lái)使得子網(wǎng)絡(luò)之間的性能相互不受到影響。
NAS還可以分為one-shot和non-one-shot,one-shot意思就是搜索空間重合的,可以重復(fù)利用之前的參數(shù),比如ENAS、網(wǎng)絡(luò)態(tài)射、ProxylessNAS等都是的。
大多數(shù)NAS都只是把最終的效果當(dāng)作目標(biāo),其實(shí)在移動(dòng)端部署上還要考慮延時(shí)、模型大小、計(jì)算量等目標(biāo),一般都是解帕累托最優(yōu),比如MnasNet考慮到了延時(shí)。
開(kāi)放性問(wèn)題
搜索空間的靈活性
現(xiàn)在的搜索空間基本都還是人為定義的,參考了很多人類設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的經(jīng)驗(yàn),比如原子操作定義成conv、pooling之類的,結(jié)構(gòu)上cell堆疊等等,但是真正的auto應(yīng)該是模型自動(dòng)設(shè)計(jì)網(wǎng)絡(luò)架構(gòu)和原子操作,比如AutoML-Zero就用最基本的原子操作(sin、cos、mean、std等)設(shè)計(jì)出了兩層的神經(jīng)網(wǎng)絡(luò)。這一塊應(yīng)該是今后的一大方向,例如目前工作主要在CV上,而對(duì)于NLP的Transformer模型,搜索空間如何定義的很好?目前工作還寥寥無(wú)幾,看了幾篇也都是堆疊conv,分支結(jié)構(gòu)之類的。
探索更多的領(lǐng)域
如上所說(shuō),目前大多數(shù)工作都是在CV上,搜的是conv結(jié)構(gòu),而像NLP、語(yǔ)音等領(lǐng)域探索甚少,像多目標(biāo)領(lǐng)域也只有很少的工作(韓松老師組工作很多),即使是在CV,任務(wù)也大多數(shù)局限在CIFAR-10和ImageNet上。
可解釋性
搜出來(lái)的網(wǎng)絡(luò)為什么好?現(xiàn)在人類設(shè)計(jì)的網(wǎng)絡(luò)大多數(shù)都能強(qiáng)行解釋一下好處,即使它仍然是個(gè)黑盒。但是NAS搜出來(lái)的基本看不出設(shè)計(jì)的邏輯。
可復(fù)現(xiàn)
之前也說(shuō)了,例如演化算法和強(qiáng)化學(xué)習(xí)這一類方法訓(xùn)練很不穩(wěn)定,很難復(fù)現(xiàn)出結(jié)果。很多論文也都只是公開(kāi)了最好的模型,都不放出源碼的(當(dāng)然我并沒(méi)有質(zhì)疑他們),超參數(shù)之類的也有些沒(méi)有公布,這導(dǎo)致我們平民玩家沒(méi)法復(fù)現(xiàn),沒(méi)法用啊。而且大家評(píng)測(cè)的環(huán)境都不相同,眾說(shuō)紛紜,沒(méi)法公平比較,因此也有一些工作提出了NAS統(tǒng)一的數(shù)據(jù)集來(lái)評(píng)測(cè)。
魯棒性
如果目標(biāo)領(lǐng)域數(shù)據(jù)添加了噪聲,可能會(huì)對(duì)搜出來(lái)的模型產(chǎn)生很大影響。所以如何搜出更加魯棒、能適應(yīng)不同領(lǐng)域或者有噪聲數(shù)據(jù)的結(jié)構(gòu)可能是未來(lái)的一個(gè)研究方向。
聯(lián)合超參優(yōu)化和架構(gòu)優(yōu)化
目前大多數(shù)NAS方法都是先搜出最優(yōu)架構(gòu),再調(diào)整超參在目標(biāo)領(lǐng)域上retrain,如何同時(shí)學(xué)好這兩塊也是一個(gè)方向。
完全的AutoML的pipeline
做到從數(shù)據(jù)收集開(kāi)始一直到最后的模型生成訓(xùn)練全部流程化,不需要人為參與,那樣才是真正的智能。目前的話有一些比較好的開(kāi)源工具了,AutoKeras、NNI等等。
終身學(xué)習(xí)
當(dāng)新的數(shù)據(jù)源源不斷進(jìn)來(lái)時(shí),當(dāng)只有少量有標(biāo)簽數(shù)據(jù)或者有大量無(wú)標(biāo)簽數(shù)據(jù)時(shí),如何做NAS,有幾個(gè)不錯(cuò)的工作,比如UnNAS是做無(wú)監(jiān)督NAS的,MetaNAS是結(jié)合meta-learning的。
經(jīng)典論文簡(jiǎn)析
(NAS)[ICLR 17] Neural Architecture Search with Reinforcement Learning
動(dòng)機(jī)
用強(qiáng)化學(xué)習(xí)來(lái)采樣網(wǎng)絡(luò),生成出最優(yōu)網(wǎng)絡(luò)結(jié)構(gòu),避免人工設(shè)計(jì)。
方法
用RNN來(lái)預(yù)測(cè)CNN或者RNN的結(jié)構(gòu),采樣結(jié)構(gòu),下游任務(wù)效果作為強(qiáng)化學(xué)習(xí)得分,策略梯度更新參數(shù)。
CNN預(yù)定義好層數(shù),LSTM每5層預(yù)測(cè)CNN一層的5個(gè)參數(shù)。
RNN預(yù)定義好cell的計(jì)算拓?fù)鋱D,LSTM預(yù)測(cè)每個(gè)node的計(jì)算邏輯。
實(shí)驗(yàn)
接近人類設(shè)計(jì)網(wǎng)絡(luò)的最好水平。速度超慢,800 K40,28天,只適用于小數(shù)據(jù)集例如CIFAR-10。
評(píng)價(jià)
強(qiáng)化學(xué)習(xí)應(yīng)用到NAS的第一篇論文。
(NASNet)[CVPR 18] Learning Transferable Architectures for Scalable Image Recognition
動(dòng)機(jī)
RL直接搜太慢了,只能用在小數(shù)據(jù)集,ImageNet之類的大數(shù)據(jù)集沒(méi)法用。
方法
提出了NASNet,用堆疊相同cell的方式減小搜索空間。在CIFAR-10上面學(xué)習(xí)cell結(jié)構(gòu),通過(guò)增加堆疊層數(shù)的方式遷移到ImageNet上去。用PPO替代策略梯度。
選擇之前的兩個(gè)node,分別預(yù)測(cè)對(duì)應(yīng)op,然后預(yù)測(cè)合并op。
實(shí)驗(yàn)
效果和參數(shù)量都好于前作,達(dá)到了SOTA水平。速度加快很多,500 P100,4天,相比于前作加速7倍。
評(píng)價(jià)
NASNet,通過(guò)cell堆疊加快了結(jié)構(gòu)搜索的速度,同時(shí)效果達(dá)到了SOTA,并且容易遷移到其他任務(wù)上去。
(ENAS)[ICML 18] Efficient Neural Architecture Search via Parameter Sharing
動(dòng)機(jī)
之前的方法采樣出一個(gè)結(jié)構(gòu),在dev上得到acc,然后就會(huì)拋棄權(quán)重,重新采樣訓(xùn)練,非常耗時(shí)。
方法
定義一個(gè)超圖,每次搜出的子圖共享權(quán)重。
對(duì)于RNN cell,LSTM的每?jī)蓚€(gè)step預(yù)測(cè)之前某個(gè)node作為輸入,再預(yù)測(cè)op,最后出度0的node拼接作為輸出。
對(duì)于CNN,一種策略是直接生成整個(gè)網(wǎng)絡(luò),每個(gè)node先預(yù)測(cè)之前哪些作為輸入,然后預(yù)測(cè)op。
另一種策略和NASNet類似,堆疊cell,搜索空間縮小到一個(gè)cell。
實(shí)驗(yàn)
優(yōu)于NAS和NASNet,1 1080Ti,16小時(shí),相比NAS加速1000倍。
評(píng)價(jià)
訓(xùn)練速度很快,AutoKeras背后就采用了ENAS。
(DARTS)[ICLR 19] DARTS: Differentiable Architecture Search
動(dòng)機(jī)
離散結(jié)構(gòu)搜索太慢了,采樣+驗(yàn)證+反饋的循環(huán)很耗時(shí)。
方法
連續(xù)域結(jié)構(gòu)搜索代替離散域結(jié)構(gòu)搜索,用微分來(lái)優(yōu)化結(jié)構(gòu)。
兩套參數(shù):模型參數(shù)(訓(xùn)練集優(yōu)化)、結(jié)構(gòu)參數(shù)(驗(yàn)證集優(yōu)化)。
交替優(yōu)化兩套參數(shù),softmax+relax學(xué)習(xí)最終結(jié)構(gòu)。
實(shí)驗(yàn)
效果達(dá)到或接近了SOTA,速度上比ENAS慢,比其他的方法快。
評(píng)價(jià)
第一個(gè)用可微分方法做NAS的,第一個(gè)連續(xù)空間搜索代替離散空間搜索。
[ICLR 19] Rethinking the Value of Network Pruning
動(dòng)機(jī)
現(xiàn)有的剪枝方法存在問(wèn)題,很多操作不合理,沒(méi)有必要。
方法
傳統(tǒng)剪枝方法基于兩個(gè)假設(shè):
過(guò)參數(shù)化很重要,訓(xùn)練大模型再剪枝優(yōu)于直接訓(xùn)練剪枝后的模型。
繼承大模型參數(shù),再finetune很重要,優(yōu)于隨機(jī)初始化剪枝后模型再重新訓(xùn)練。
本文認(rèn)為都不一定對(duì):
對(duì)于預(yù)定義好的模型,直接訓(xùn)練可以達(dá)到和訓(xùn)練-剪枝-finetune相同甚至更好的效果。
大模型剪枝后,隨機(jī)初始化重新訓(xùn)練,效果和繼承參數(shù)finetune差不多。
所以本文認(rèn)為剪枝后的結(jié)構(gòu)重要,而參數(shù)不是那么重要。
實(shí)驗(yàn)
一系列實(shí)驗(yàn)結(jié)果驗(yàn)證了猜想,此外本文還否定了彩票假設(shè),認(rèn)為剪枝后隨機(jī)初始化即可,沒(méi)必要和原始初始化相同。
評(píng)價(jià)
仍然有一些局限性,比如數(shù)據(jù)分布均衡、模型比較大,估計(jì)在其他設(shè)置下不一定work。而且不如finetune速度快。
參考鏈接
不錯(cuò)的綜述或討論
https://lilianweng.github.io/lil-log/2020/08/06/neural-architecture-search.html
https://jinzhuojun.blog.csdn.net/article/details/84698471
http://www.tensorinfinity.com/paper_136.html
https://zhuanlan.zhihu.com/p/73785074
https://www.zhihu.com/question/359162202
https://github.com/pzhren/Awesome-NAS
Neural Architecture Search: A Survey
A Comprehensive Survey of Neural Architecture Search: Challenges and Solutions
AutoML: A Survey of the State-of-the-Art
A Comprehensive Survey of Neural Architecture Search: Challenges and Solutions
一些經(jīng)典論文
Neural Architecture Search with Reinforcement Learning
Designing Neural Network Architectures using Reinforcement Learning
Efficient Neural Architecture Search via Parameter Sharing
Learning Transferable Architectures for Scalable Image Recognition
DARTS: Differentiable Architecture Search
Neural Architecture Optimization
FP-NAS: Fast Probabilistic Neural Architecture Search
SNAS: Stochastic Neural Architecture Search
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
Once for All: Train One Network and Specialize it for Efficient Deployment
Rethinking the Value of Network Pruning
TextNAS: A Neural Architecture Search Space Tailored for Text Representation
The Evolved Transformer
HAT: Hardware-Aware Transformers for Efficient Natural Language Processing
Searching Better Architectures for Neural Machine Translation
一些經(jīng)典源碼或工具
https://github.com/quark0/darts
https://github.com/melodyguan/enas
https://github.com/mit-han-lab/once-for-all
https://github.com/mit-han-lab/hardware-aware-transformers
https://github.com/microsoft/nni
https://github.com/IntelLabs/distiller
https://autokeras.com/
[1]
AutoML: A survey of the state-of-the-art: https://arxiv.org/abs/1908.00709
責(zé)任編輯:xj
原文標(biāo)題:一文看懂AutoML
文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7128瀏覽量
89364 -
算法
+關(guān)注
關(guān)注
23文章
4627瀏覽量
93168 -
NAS
+關(guān)注
關(guān)注
11文章
292瀏覽量
112552
原文標(biāo)題:一文看懂AutoML
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論