DARTS:年輕人的第一個NAS模型

極市導(dǎo)讀
?Darts 是用于構(gòu)建雙數(shù)組 Double-Array的簡單的 C++ Template Library。DARTS做到了大幅提升搜索算法的速度,本文作者結(jié)合論文詳細解釋了DARTS的相關(guān)基礎(chǔ)概念及解釋,并簡述一些自己的關(guān)于假設(shè)以及發(fā)展方向的思考。?>>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿
1. 薰風(fēng)說
DARTS是第一個提出基于松弛連續(xù)化的,使用梯度下降進行搜索的神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索(neural architecture search, NAS)算法,將最早礦佬們(說的就是你Google)花成千上萬個GPU-hour(即用一塊卡跑一小時)的搜索算法降低到了一塊卡四天就能跑完。這使得我們這種窮苦的實驗室也有了研究NAS這個酷炫方法的可能,不愧是年輕人的第一個NAS模型哈哈哈。
DARTS最大的貢獻在于使用了Softmax對本來離散的搜索空間進行了連續(xù)化,并用類似于元學(xué)習(xí)中MAMAL的梯度近似,使得只在一個超網(wǎng)絡(luò)上就可以完成整個模型的搜索,無需反復(fù)訓(xùn)練多個模型。(當(dāng)然,之后基于演化算法和強化學(xué)習(xí)的NAS方法也迅速地借鑒了超網(wǎng)絡(luò)這一特性)。
而實際上,DART還有個更大的貢獻就是開源了。不過源代碼是基于Pytorch 0.3寫的,和主流的1.x版本差別很大,所以需要一段時間進行重新復(fù)現(xiàn)。我現(xiàn)在寫了1.4版本的分布式并行搜索代碼,等后續(xù)可視化和保存模型都摸熟了會發(fā)實現(xiàn)的教程(在做了在做了)。
除此之外,DARTS雖然想法十分優(yōu)雅,但我個人覺得其在假設(shè)上有不少值得推敲的地方。在略讀了CVPR2020里有關(guān)NAS的20篇論文后,的確很多工作都是針對我覺得很“有趣”的假設(shè)做的233。之后,我也會持續(xù)更新CVPR2020中NAS有關(guān)的論文,尤其是基于梯度下降方法的。

2. 正文開始
2.1 概念介紹與符號聲明

?個節(jié)點的有向無環(huán)圖。在這個有向無環(huán)圖中,有節(jié)點?
?和邊?
?,其中節(jié)點?
是第?
?個特征圖邊
是從第?
?個特征圖到第?
?個特征圖之間的變換(如卷積、池化)

?中選取出來的。2.2 連續(xù)松弛化
?中尋找最好的操作,都是使用強化學(xué)習(xí)或者演化算法等啟發(fā)式算法取某個操作,也就是說這種選擇是非此即彼的離散操作。
?,其含義為:第?
?個特征圖到第?
?個特征圖之間的操作?
?的權(quán)重。這也是我們之后需要搜索的架構(gòu)參數(shù)。
?,那么就可以認為我們完全不需要這個操作。
?。
?為網(wǎng)絡(luò)架構(gòu)(的編碼)本身。2.3 兩級最優(yōu)化
?和?
?。網(wǎng)絡(luò)中操作的的權(quán)重為?
?,有 * 上標則說明其為最優(yōu)的。因此,我們其實希望找到的是一個能在訓(xùn)練集訓(xùn)練好之后(最優(yōu)權(quán)重?
?),在驗證集上損失最小的架構(gòu)(?
?)。
?。而最優(yōu)的權(quán)重本身必然是和架構(gòu)對應(yīng)的,架構(gòu)變化,對應(yīng)的權(quán)重也會跟著變化。
?為上級變量,權(quán)重?
?為下級變量的兩級最優(yōu)化問題:
2.4 近似梯度
?是權(quán)重的學(xué)習(xí)率)
?)時,?
?。
?(訓(xùn)練集上對權(quán)重執(zhí)行一次梯度下降)來近似最優(yōu)權(quán)重?
?。在驗證集損失上梯度下降更新架構(gòu)參數(shù) 在訓(xùn)練集損失上梯度下降更新操作權(quán)重
李斌:【論文筆記】DARTS公式推導(dǎo)
?記為?
?,其中:
?):

?(復(fù)合函數(shù)對第一項的偏微分)
?(復(fù)合函數(shù)對第二項的偏微分)

?變成了一個常數(shù),而不是之前一個變量為架構(gòu)參數(shù)?
?的復(fù)合函數(shù)!
?(經(jīng)驗中取?
?)。


?來替代?
?,則有

?替代?
?, 再把?
?換成?
?,還有把?
?換成?
?,最后把?
?換成?
?,就是有限差分近似的結(jié)果啦~
?降至?
?。這種操作等價于假設(shè)當(dāng)前的權(quán)重?
?就是最優(yōu)權(quán)重?
?,此時梯度將退化為一階近似。2.5 生成最優(yōu)模型
3. 思考
3.1 "有趣"的假設(shè)
CNN可以由相同的Cell堆疊得到,RNN可以由相同的Cell遞歸連接得到 每個Cell有兩個輸入節(jié)點和一個輸出節(jié)點組成,對于CNN來說輸入節(jié)點是前兩個Cell的輸出(the cell outputs of the in the previous two layers) 每個Cell的輸出實際上是對所有中間節(jié)點作reduction操作(比如concatenate)得到的 在驗證集上效果最好的模型,在測試集上效果也最好 作者并沒有證明這個梯度近似的收斂性,所以直接拿來用了hhh 作者將每個Cell的每個節(jié)點之間都取前2個最大權(quán)重的操作,(作者的理由是別人都是這么做的) 作者忽略了定義在搜索空間中的0操作(因為作者認為0操作在搜索過程中不會改變運算的結(jié)果) 在小模型搜到的Cell在大模型上也會很好用,因此無需重新搜索。 Reduction Cell 和 Normal Cell的搜索空間是一樣的,且全都是深度可分離卷積,都有池化層。

3.2 作者給出的下一步方向
連續(xù)體系結(jié)構(gòu)編碼和派生離散模型之間存在差異,所以最好讓引入類似有退火閾值的01編碼。
在搜索工程中學(xué)到的共享參數(shù)是否可以用于設(shè)計一個性能可感知(performance aware)的架構(gòu)派生機制。
推薦閱讀




