DARTS:用概率模型使網絡架構搜索變得可導

數學就是知識,這是對DARTS最形象的概述。

不知道其他看官有沒有這種感覺,深度學習在經過冗長的一段試錯法發展(從AlexNet到DenseNet,其間催生了無數修改模型-有效-嘗試解釋-發文的臆測型模型修改水文)後,終於在AutoDL下成爲了一種優化可解的方法。最近讀到的很多方法,都使用了概率論相關的知識,不禁感慨:數學就是算法的根。

閒話少說,開始DARTS!

DARTS:可微分神經架構搜索

首先先放一個DARTS的代碼鏈接

對於DARTS做了什麼,其實可以用一句話高度概括:

將離散的架構搜索轉變爲連續的架構權值搜索。

圖(a)是我們想要搜索的架構,我們希望知道Node間使用了何種操作(卷積、池化、歸一化等)。

圖(b)是DARTS中使用的方法。既然用不同組合去訓練這個架構看效果需要指數級的計算資源,不如我們將架構中的每條連接用SoftMax加權表示出來。具體來說,個人認爲可以理解爲節點間使用了所有的操作(卷積、池化、歸一化等,通過Padding等保證操作前後特徵數不變),這些操作的結果最後通過加權相加獲得最終的結果。如此一來,我們無需考慮“換一種操作會不會更好”這樣的問題,因爲每一種操作的權值都會進入訓練的過程,而不好的操作會在訓練過程中自然的被賦予更小的權值。

圖(c)中,當我們的模型訓練的差不多了,就可以開始優勝劣汰了:根據最終的權值,在節點間保留最優的操作(當然,權值提升到1)並剔除其他操作,隨後繼續訓練網絡,從而獲得最後的模型,也即圖(d)。

簡單概括一下就是:小孩子才做選擇,我全都要!

好了,思想介紹的差不多了,但是光有思想可做不出東西。對於這樣一個網絡,我們不僅要優化網絡各操作自己的權值(卷積核等,權值w),還需要優化操作間的權值(權值α)。這種方法在數學上被稱爲雙層優化問題(bilevel optimization problem)。其形式如下:

直接對其求解是不現實的(prohibitive),因此DARTS中使用了兩步法:求一步w,接着求一步α,如此循環直至收斂。具體操作如下圖:

這種近似方法能保證基本的精度並極大地減少計算量。不過還有一個問題:對下面這個損失函數求導後會出來這麼個玩意兒:

一個大大的矩陣還要求二階導?這算起來可太麻煩了。怎麼辦?接着近似咯(finite difference approximation):

看着公式是不是覺得很熟悉:這不就是差分求導嗎?!

當然,還有一種方法,就是直接拋棄這個二街項:把二階項的係數直接置0!去除二階項雖然能提速,但也會導致精度的下降,具體請參考原文中的CIFAR-10實驗結果:

比起老大哥們,DARTS還是實現了足夠可觀的效果滴~

總的來說,DARTS提速的關鍵有二:

1.基於權值的架構搜索,省去每個模型從頭訓練的時間。

2.確定架構後直接進行遷移學習,同樣省去從頭訓練時間。

以上~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章