本文將介紹今年於美國長灘舉辦的CVPR2019會議上展示的神經網路架構搜尋(NAS)領域的研究成果。原標題:Neural Architecture Search at CVPR 2019

作者 | Vladimir Nekrasov

編譯 | 林肯二百一十三(西安交通大學)

我相信,每個深度學習研究者和從業者都多多少少地考慮過在他們處理的具體問題上應該使用什麼樣的神經網路架構。很多人都殫精竭慮地嘗試提出像AlexNet、VGG以及ResNet那樣的有效架構。因此,“博士生下降”也成了一個紅極一時的梗。(注:“博士生下降”英文為Grad Student Descent,簡單而言就是“找一個博士生,讓他不斷調參,直到演算法工作”。這種說法歪曲自深度學習的Gradient Descent演算法,僅作調侃)

現在呢,我很想驕傲地宣佈——“天天調參的鬼日子結束了!”——但是還為時過早。手動調參尋找神經網路架構依然是個有趣的工作,尤其是對於那些帶了很多學生的導師而言(開玩笑啦~)。

神經網路架構搜尋(NAS)——前言

那麼問題來了,神經網路架構搜尋(NAS)究竟是什麼?為什麼我們要了解NAS呢?(這一部分是為了去年完全沒有跟進領域內進展的人準備的)

NAS的核心思想是使用搜索演算法來發現用於解決我們的問題所需要的神經網路結構。回到“博士生下降”的話題:假設你是個希望解決問題A的導師,你會讓你的學生來想一種該問題的最優架構——那麼,你的學生就是你的搜尋演算法(聽起來似乎更像奴隸?)。

如果你並不是那種泯滅人性的導師(當然也可能你就是那個學生),你可能會首先定義一種搜尋空間,這種搜尋空間包含定義神經網路架構的基本構建模組(block)。通常地,每一種配置字串(configuration string)描述一種架構——比如說,給定三個層(分別用0、1、2表示)和兩種block(分別為A:1x1卷積和B:3x3卷積),那麼字串“0A1A2B”表示“x->1x1卷積->1x1卷積->3x3卷積”的網路結構。你可以天馬行空地憑想象定義這個搜尋空間,但別忘了,搜尋空間越大,你的搜尋演算法需要執行的迭代次數就越多,用到的GPU算力也就越多。

搜尋演算法有哪些可供我們選擇呢?早期的一種演算法是進化搜尋——網路架構的種群(population,比如可以是隨機初始化的一些架構)基於適應度(或“收益”,通常即給定架構在特定問題上的驗證指標)不斷地被訓練和突變(mutate,比如對架構的某些部分進行混合)以達到好的驗證指標。另一種方案是基於強化學習,讓智慧體(有時候稱作“控制器”)去發現網路架構的最優配置。這種智慧體通常是用迴圈神經網路實現的,它的目標是尋找能夠獲得更高收益的神經架構。其他的搜尋演算法還包括基於梯度的最佳化(所有可能的架構組成一個巨大的圖,每條邊有一個可學習的實值,代表每個block被使用的機率)、貝葉斯最佳化(搜尋空間由某種啟發函式貫穿,這種啟發函式可以是用於預測取樣模型準度的代理損失函式)等等。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:NAS的高層表示。圖片來源:Elsken et。 al

如果你對上述演算法感興趣,我推薦閱讀Elsken等人的這篇綜述。他們還建立維護了一個網站,你可以在這裡找到最近的相關文章。

CVPR 2019上的NAS

下面本文將目光轉向在CVPR 2019會議上登場的NAS相關工作。如果你只想看大體的總結,下表包含了這些工作的論文和程式碼地址(前提是它開源)、它們使用的搜尋演算法、領域和需要的資源。如果這裡沒有涉及您的文章,可能是我的疏忽導致它被忽略了——請您及時指正。CVPR 2019的所有論文都可以在這裡找到。

宏觀總結

CVPR 2019 神經網路架構搜尋進展綜述

Auto-DeepLab:語義分割的分層神經架構搜尋

熟悉語義分割領域的研究者應該對DeepLab團隊都不陌生吧?他們不斷提出新的思路、新的模型,不斷推進語義分割模型的效能提升。這次,作者使用NAS來尋找語義分割問題的最佳模型。Auto-DeepLab:語義分割的分層神經架構搜尋

本質上講,這篇工作是對DARTS的一種適應性改進。如果你不瞭解DARTS,下面是對它的一點簡單說明:DARTS(可微架構搜尋,Differentiable Architecture Search)是一種基於梯度的隨機最佳化方法,它將所有可能的架構一次性初始化,並且在最佳化網路權重引數的同時還最佳化混合機率(即模型選擇每一條邊的機率)。Auto-DeepLab的作者則更進一步:為了搜尋適合語義分割的模型,作者還讓NAS演算法去最佳化stride運算——也就是在網路架構圖中的各處是要下采樣特徵圖,或是保持尺度不變,還是進行上取樣。使用一塊P100 GPU,作者執行神經架構搜尋3天后得到了與DeepLab-v3+效能大致相當的網路結構。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:AutoDeepLab發現的一種架構。圖片來源:Liu et。 al

有意思的是,作者並沒有將搜尋到的網路在ImageNet上進行預訓練,而是直接從零開始在CityScapes和ADE20K資料集上進行訓練的,只有對PASCAL VOC資料集使用了MS COCO進行訓練。作者在原文中提到:“我們認為PASCAL VOC 2012資料集太小了,用來從零開始訓練模型實在不夠。這種情況下,還是用ImageNet進行預訓練會更有效”。說實在的,要是能看到ImageNet預訓練對作者用的所有資料集上的效果就好了,比如說進行預訓練會不會讓模型在CityScapes資料集上也獲得更好的效果呢?

用單GPU四小時搜尋出健壯的神經網路架構

這篇論文中,作者結合了ENAS和DARTS二者的最佳實踐,從而提出了GDAS(Gradient-based search using Differentiable Architecture Sampler)方法。DARTS的定義上文已經提到;ENAS是Pham et。 al提出的一種基於強化學習的神經架構搜尋方法,它在一開始同樣初始化了一個巨大的圖——但與DARTS在每個邊上新增權重的方式不同,ENAS使用基於強化學習的控制器來決定選擇哪一條路徑。

這裡,作者顯式地採取了一些路徑並進行最佳化。因為這個取樣是離散的,作者藉助了Gunbel取樣技巧來實現反向傳播。作者原文寫道:“我們在前向傳播時使用argmax函式……而在反向傳播時使用了softmax函式……”。總體上,該方法在用於影象分類的CIFAR-10資料集和上用於語言建模的Penn Tree Bank (PTB)資料集上實現了快速搜尋。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:GDAS發現的網路單元。圖片來源:Dong and Yang

GDAS的另一個加速訓練、節省記憶體的技巧是在前向傳播中直接使用argmax函式——使用了in-place後,只有被argmax選擇的一個索引處生成的梯度需要回傳。作者聲稱,使用batch訓練的其它層還是會得到梯度,因為每個batch中的樣本經過的路徑是不同的。

MnasNet:平臺感知的移動端神經網路架構搜尋

這篇論文中,作者考慮的是NAS的一種重要應用——搜尋適合移動裝置快速推斷場景的網路架構。為此,作者提出一種多目標的最佳化方法——基於強化學習的控制器被訓練搜尋一種不僅能得到高分、而且能夠在Google Pixel 1的CPU上短時間內響應的模型架構。作者遵循帕累託最佳化準則,即“如果模型能在不花費額外時間的條件下達到高準確率,或者在不降低準確率的條件下花費更少的時間,則該模型是帕累托最優的”。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:MnasNet神經架構搜尋方法概觀。圖片來源:Tan et。 al

另外,為了保證模型在搜尋空間中高效且可用,作者定義了一種多個層的“block”。每個“block”中,同一個層被重複N次——層的型別和重複次數是由強化學習控制器預測的。總體而言,MnasNet架構設計是受MobileNet-v2啟發的,因此也可以認為:MnasNet是使用強化學習對MobileNet-v2的微調。(不過這個“微調”有點太耗費計算資源啦!MnasNet花費了整整6912個“TPU×小時”!)

RENAS:強化進化神經網路架構搜尋

RENAS的主要思路在於:使用可微的強化學習控制器來增強錦標賽選擇法的變異機制。

錦標賽選擇法首先會初始化一個由神經架構(即進化演算法中的個體,individual)組成的種群(population)。每個神經架構個體被訓練之後,透過在驗證集上進行評估來確定它們的適應度(fitness)。之後,種群中適應度最強的個體被變異(mutate)——比如改變它的一些層或者運算——從而產生子代(child)。在RENAS論文中,作者新增的強化學習控制器定義了給定網路如何進行變異。為了加速訓練過程,子代模型直接繼承了父代的模型引數。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:使用強化學習變異的進化演算法搜尋。圖片來源:Chen et。 al

NAS-FPN:搜尋用於目標檢測的特徵金字塔架構

這一篇論文則關注了NAS的另一種應用——自動化地改進目標檢測網路。在過去的幾年裡,特徵金字塔網路(FPN)幾乎成了所有高效能目標檢測網路的標配。本質上講,FPN起到了對網路主幹(編碼器)提取的特徵的逐步解碼的作用。NAS-FPN這篇論文的動機就是尋找一些方法來從原始的網路主幹結構的各層上更好地結合多種尺度的資訊。

為此,作者定義了”合併單元“(merging cell)的搜尋空間——以多種尺度的特徵作為輸入,將這些特徵進行精化後作為輸出。在合併單元中,基於強化學習的控制器對兩個輸入層(可能尺度並不相同)、輸出尺度和融合方式(可以是求和,或是基於注意力的全域性池化等)進行選擇。合併單元的輸出被新增到下采樣的池化層中,作為下一步選擇的選項之一。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:合併單元的結構。圖片來源:Ghiasi et。 al

作者表示,合併單元的設計使得“anytime detection”成為可能,因為多個模組化的單元可以被堆疊在一起,前向傳播可能在其中任何一個之後停止。這樣,即便我們提前結束前向傳播(early exit)並用此時網路的輸出層進行目標邊框迴歸,該特徵圖依然能足夠使邊框迴歸能夠有效地檢測出物體邊框。為了加速網路搜尋,作者使用了輸入尺度為512x512的、較輕量級的ResNet-10作為網路主幹。

IRLAS:基於反向強化學習的神經架構搜尋

IRLAS的作者觀察發現:人們自行設計的網路拓撲結構往往比自動化生成的那些結構更優雅,而這些結構同時定義著網路的響應時間和記憶體消耗。因此,作者沒有顯式地設定資源消耗的約束,而是試圖促使生成的網路拓撲儘可能地模仿某種經典網路模型(如ResNet)。“模仿”這一部分是透過一個獎勵函式中的一個附加項來實現的。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:IRLAS概觀。圖片來源:Guo et。 al

我本人非常喜歡這種“提取已有網路架構設計的精華從而更好地訓練NAS模型”的思想。如果作者能進一步得出一種方案使得NAS模型能夠借鑑多種經典模型(而不止一個),或許會更有意思呢。

使用輔助單元快速搜尋小型語義分割模型

王婆警告:我(原博文作者)也是這篇論文的合著作者之一,所以以下觀點可能有所偏頗哦~

傳統上,基於強化學習的NAS演算法需要大量的運算(通常以“GPUx小時”計,或者“TPU-小時”)。儘管這些NAS演算法在分類任務上對較小的“代理”資料集(比如CIFAR-10)還是有不錯的效能,但是在輸出較為“密集”的任務(如語義分割)上,暫時還沒有這種“代理”資料集可用。況且,訓練一個分割模型可比訓練分類模型耗費的時間和資源多多了。

正因如此,我們這篇文章專注於加速基於強化學習的語義分割神經架構搜尋的內層迴圈——也就是對於取樣的網路結構的訓練與評估。我們以一個預訓練的影象分類器為基礎(這裡使用的是MobileNet-v2),只對它的解碼器部分進行搜尋。為此,我們設計了一些加速收斂的技巧:1)兩階段訓練與早停(early stopping)。第一階段中,我們提前計算出編碼器的輸出,並只訓練解碼器。如果這一階段後的獎勵值比平均的獎勵低的話,就乾脆終止這次訓練;否則進入第二階段,以端到端的方式訓練整個網路。2)我們藉助知識蒸餾和Polyak權重平均來加速解碼器部分的收斂。3)另外,我們還運用中繼監督最佳化——但不是簡單地使用單個網路層來進行分割,而是使用強化學習控制器產生的模型結構對中繼分割器進行過引數化。我們推測,這種過引數化對於小型語義分割模型有以下幫助:a)它可以使網路主幹的梯度更平滑,b)它使得對較淺的中間層的任務要求不那麼嚴苛。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:作者發現的一種用於語義分割的模型。圖片來源:Nekrasov et。 al

FBNet:使用可微NAS的高效硬體感知卷積網路設計

像上邊提到的一些工作一樣,FBNet的作者也是把搜尋空間初始化為一個由不同的層組成的巨大的圖,並採用可微的隨機最佳化方法,輔以Gumbel取樣技巧進行搜尋。除此之外,作者用了一個查詢表來估計生成的網路通路上每一個塊運算花費的時間。與那些只搜尋一兩種塊(單元)的NAS文章不同,作者在這裡定義了整個網路的宏觀架構(宏觀結構空間)和每一層的候選塊(微觀結構空間),並對它們分別進行搜尋。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:FBNet搜尋到的一些網路架構。K代表卷積核大小,E代表放大倍率,G代表卷積分組的引數圖片來源:Wu et。 al

FBNet的作者以Samsung Galaxy S8為目標裝置,使用int8資料型別進行推斷。作者認為,以多種不同的裝置為目標是不現實的,畢竟我們要搜尋的是更好的針對特定裝置的網路(上文提到的查詢表也是針對特定裝置的)。

可自定義的語義分割網路架構搜尋

這篇文章的作者將DARTS面向語義分割進行了適應,並將搜尋空間設計為三種單元——圖片分類裡常見的普通單元、縮小單元,以及受ASPP啟發而設計的多尺度單元。除了特定任務的損失函式外,演算法的最佳化目標還加入了一個新的目標函式——“選擇特定操作的代價”。為了定義給定操作的這個“代價”值,作者提出了對“僅使用給定操作建立的單元”和“僅使用單一操作建立的單元”之間響應時間、引數數量或FLOP數的差距進行比較、衡量的方法。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:基於資源的語義分割神經架構搜尋。圖片來源:Zhang et。 al

作者在搜尋多尺度單元之前,首先搜尋了包含普通單元和縮小單元的語義分割網路主幹,再使用ImageNet對他們進行微調。意外的是,作者使用這樣簡單粗暴的估計方式依然能有效地找到小而準確的網路架構。

彩蛋

下邊還有兩篇文章,雖然這兩篇並非與NAS緊密相關,但或許對某些人來講還是有點意思的。

MFAS:多模態融合網路架構搜尋

這篇文章的作者試圖解決的是多模態融合問題——也就是說,給定多個固定模態的網路,去尋找連線他們的隱藏層的最佳方式,從而對於特定的任務達到最佳的效能。舉例而言,一種常見的策略是晚融合(late-fusion)——只有每個網路最後一層的輸出被融合在一起(比如求和,連線等等)。作者將多模態融合問題也定義為神經架構搜尋,它不是從零開始對整個網路結構進行的搜尋,而是僅僅尋找已經訓練好的網路的連線方式。

為此,作者使用了基於序列模型的最佳化方法(SMBO)。在SMBO中,往往會用一個單獨的、稱作“surrogate”的函式來估計取樣到的架構的準確率。不一樣的是,搜尋空間是從一個比較小的架構集合開始的,“surrogate”函式被預訓練後,網路架構的尺寸才被逐漸變大。傳統NAS框架中這種方法的一個經典案例是漸進式NAS。

透過上述方法,作者找到了一些在MM-IMDB資料集上用於預測電影流派和電影簡介的多模態融合架構,以及在NTU RGB-D資料集上用於根據姿態和RGB資訊進行行為識別的架構。

神經網路架構搜尋的一種神經生物學評估指標

在神經生物學中有這樣一種理論:對於相似的物體,人腦會產生相似的神經響應。基於這種理論,作者推測:具有與人腦相似的啟用機制的神經網路,也應該有更強的泛化能力。因此,作者提出了一種“與人腦模型的相似度”(HMS)的評價指標,並用這種指標來對人體的功能性磁共振成像(fMRI)和神經網路的啟用行為進行比對。在這裡,作者考慮的網路稱作PredNet,可用於非監督影片預測,即給定當前幀、預測之後可能發生的內容。

為了定義HMS,作者建立了一種“表示性不相似程度矩陣”(RDM,representational dissimilarity matrix)來量化兩個系統(這裡是網路與人腦)對一對刺激的響應。給定兩個RDM,HMS被定義為二者的斯皮爾曼等級相關係數。

CVPR 2019 神經網路架構搜尋進展綜述

圖注:HMS指標的計算流。圖片來源:Blanchard et。 al

值得關注的一點是,作者發現HMS與驗證集精確度有很強的相關性——也就是說,HMS也許能夠作為用於尋找具有較強泛化效能的網路並提早停止的指標。另外,要計算HMS,該方法只需要92次刺激。如果能看到這一研究方向能讓生物學理論與人工神經網路碰撞產生怎樣的火花,那就有意思啦!

該論文的實現程式碼已開源:

https://

github。com/CVRL/human-m

odel-similarity

結論

儘管說“CVPR 2019是NAS重大突破的一場盛會”有點言過其實,但能見識到這麼多工作在克服了對大量GPU/TPU算力的依賴的同時又能達到與之相當的效能,實在是激(yi)動(ke)人(sai)心(ting)呀!我很期待看到NAS的研究將會取得怎樣的進展,以及NAS的眾多研究者能夠想到怎樣的技巧呢。

總結了這麼多,我還想提及一點:從零開始搜尋用於影象以外的分類任務的網路架構依然是個巨大的挑戰。今年我們見識到了一些神經架構搜尋方法有基於強化學習改進的(如NAS-FPN、FastDenseNAS)、基於可微最佳化改進的(如AutoDeepLab、CAS)和從一開始就預定義巨大的網路結構的(類似於DARTS的那些),而這些都或多或少地做出了一些讓步——比如將搜尋空間限定在有限數量的一些層(基於強化學習的那些),或在搜尋開始時預定義巨大的結構(基於DARTS的)。我不禁想到了我們在2015年左右見到的語義分割的進展——那時候的那些工作,大多數都是基於影象分類器的改進的(見Long et。 al的開創性工作——FCN)。而從那之後,針對各種具體任務的各種模型逐漸變得越來越成熟、多樣化(如ASPP、PSP、RefineNet等等),進而推動了這個領域的蓬勃發展。我相信,不久之後,我們也會見識到更多為具體任務量身定做的NAS模型,而不只是影象分類和語言建模這些基本任務。

非常感謝Chen Hao閱讀本文初版草稿並提出建設性的意見和建議。

本文撰寫於2019年7月5日。

本文編輯:Pita

英語原文:

https://

drsleep。github。io/NAS-a

t-CVPR-2019/

想要繼續檢視該篇文章相關連結和參考文獻?

點選【CVPR 2019 神經網路架構搜尋進展綜述】即可訪問!

福利大放送——滿滿的乾貨課程免費送!

「好玩的Python:從資料探勘到深度學習」該課程涵蓋了從Python入門到CV、NLP實踐等內容,是非常不錯的深度學習入門課程,共計9節32課時,總長度約為13個小時。。

課程頁面:

https://ai。yanxishe。com/page/domesticCourse/37

「計算機視覺基礎入門課程」本課程主要介紹深度學習在計算機視覺方向的演算法與應用,涵蓋了計算機視覺的歷史與整個課程規劃、CNN的模型原理與訓練技巧、計算機視覺的應用案例等,適合對計算機視覺感興趣的新人。

課程頁面:

https://ai。yanxishe。com/page/domesticCourse/46

現AI研習社將兩門課程免費開放給社群認證使用者,只要您在認證時在備註框裡填寫「Python」,待認證通過後,即可獲得該課程全部解鎖許可權。心動不如行動噢~

認證方式:

https://ai。yanxishe。com/page/blogDetail/13999