耿 飛, 王春楠, 王宏志
(哈爾濱工業(yè)大學 計算機科學與技術(shù)學院, 哈爾濱150001)
深度學習的成功,很大程度上歸功于端到端的學習方式和其特征工程的自動化。 然而隨著數(shù)據(jù)量的日益增加和數(shù)據(jù)的復雜化,需要人們手工設(shè)計的深度學習模型結(jié)構(gòu)愈發(fā)復雜,然而神經(jīng)網(wǎng)絡(luò)架構(gòu)的設(shè)計本身就是一個很困難的問題,并且設(shè)計工作并沒有強有力的理論支撐和直覺的指導依據(jù),所以自動生成網(wǎng)絡(luò)結(jié)構(gòu)模型能夠在很大程度上解放人力,并有可能給人類手工設(shè)計模型提供思路和指導意見。 本課題旨在用機器設(shè)計取代人工設(shè)計獲得新模型,最終得到效果優(yōu)于人類手工設(shè)計的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。
隨著2016 年Google DeepMind 團隊的圍棋AI——AlphaGo 的大獲成功,強化學習(RL)被越來越多的研究者所重視,Google 團隊也于該年年底將強化學習應用到了另一個研究問題——神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索NAS(Neural Architecture Search)上來,其自動搜索到的網(wǎng)絡(luò)模型超越了同時期同類手工設(shè)計網(wǎng)絡(luò)。 作為自動化機器學習(AutoML)目前最為重要的研究分枝,有越來越多的機構(gòu)學者致力于研究此問題。
如圖1 所示,神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索的基本流程:搜索策略從預定義的搜索空間A 中選擇具體結(jié)構(gòu)A,該結(jié)構(gòu)被性能評估模塊評估,并將對A 的性能估計返回到搜索策略,指導下一次的結(jié)構(gòu)選取。 最終算法產(chǎn)生一個滿足預設(shè)性能要求的模型A?,作為問題的輸出。

圖1 神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索Fig. 1 Neural architecture search
在時間維度上,MIT 和谷歌大腦幾乎在2016 年底同一時間提出了基于強化學習(RL)的神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索算法,超過人類手工設(shè)計模型,但搜索耗時巨大,上千的GPU 天訓練時間讓獨立研究者和小型機構(gòu)望而卻步。 2017 年初,Google 的論文Large-Scale Evolution of Image Classifiers 采用進化算法來解決神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索問題[1]。
為了解決資源消耗過大的問題,很多研究機構(gòu)從不同角度提出了優(yōu)化方法。 在Google 的ENAS 文章中,One-shot 方法被提出,所有子模型共享權(quán)重,搜索性能大大提升,效率提升千倍[2]。 CMU 和Google DeepMind 合作提出的DARTS 方法,通過將網(wǎng)絡(luò)結(jié)構(gòu)與softmax 進行結(jié)合,將搜索空間變?yōu)檫B續(xù),進而可以用梯度方式優(yōu)化目標問題,可微的搜索方法首次被提出[3]。
根據(jù)問題的定義,各國研究者主要從以下3 個方面對神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索問題進行了探究:
(1)搜索空間(Search Sapce )。 搜索空間定義了原則上可以表示哪些模型結(jié)構(gòu)。 針對不同的學習任務(wù),搜索空間的先驗知識也不同。 然而,這容易引入人為偏見,可能會導致計算機生成的結(jié)構(gòu)與人類設(shè)計結(jié)構(gòu)類似,導致并不能發(fā)現(xiàn)新穎的結(jié)構(gòu)。
(2)搜索策略(Search Strategy)。 搜索策略詳細說明了如何探索搜索空間。 如何從搜索空間中確定這次要挑選的結(jié)構(gòu)A 和通過已有的結(jié)構(gòu)和對應的評估結(jié)果,如何進行下一次的結(jié)構(gòu)挑選。
(3) 性 能 評 估 策 略(Performance Estimation Strategy)。 給定結(jié)構(gòu)如何對結(jié)構(gòu)進行性能評估,最為簡單直接的辦法就是用該結(jié)構(gòu)所代表的網(wǎng)絡(luò)模型從頭至尾完成完整的訓練過程,獲得結(jié)果(例如圖像分類的準確率)。 性能評估更看重的網(wǎng)絡(luò)模型之間的相對排序,而不是評估結(jié)果的絕對值。
搜索空間決定了神經(jīng)網(wǎng)絡(luò)搜索框架可以發(fā)現(xiàn)的神經(jīng)網(wǎng)絡(luò)模式和范圍。 一個相對簡單的搜索空間是鏈結(jié)構(gòu)神經(jīng)網(wǎng)絡(luò)的空間。鏈結(jié)構(gòu)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)A 可以寫成n 層序列,其中第i 層Li從層i - 1 接收其輸入,并且其輸出用作層i + 1 的輸入,即A =Ln·…L1·L0。 然后通過以下方式對搜索空間進行參數(shù)化:(1)(最大) 層數(shù)n(可能無界)。 (2) 每層可以執(zhí)行的操作類型,例如:池化、卷積及一些高級卷積,如深度可分離卷積或擴張卷積;(3) 與操作相關(guān)的超參數(shù)。 例如:濾波器的數(shù)量,內(nèi)核大小和卷積層的步幅,或簡單地用于全連接網(wǎng)絡(luò)的模塊數(shù)量。
近期關(guān)于NAS 的工作結(jié)合了現(xiàn)有的設(shè)計元素,這些元素來自手工的結(jié)構(gòu),例如:skip-connection,可以構(gòu)建復雜的多分支網(wǎng)絡(luò)。 在這種情況下, 層i 的輸入可以形式地描述為組合先前層輸出的函數(shù)gi()。 采用這種設(shè)計可以顯著提高網(wǎng)絡(luò)復雜度。 這些多分支架構(gòu)的特殊情況是: (1) 鏈結(jié)構(gòu)網(wǎng)絡(luò)(通過設(shè)置gi();(2) 殘余網(wǎng)絡(luò),其中前一層輸出求和(gi(+,j <i);(3)DenseNets,其中前一層輸出被連接) =concat())。
目前主流的方式是搜索由人工設(shè)計的模塊(Cell 或Block),然后將模塊進行堆疊,而不是去搜索整個架構(gòu)[4-5]。 Zoph 等人優(yōu)化兩種不同類型的模塊:保持輸入維度的正常模塊(Normal Cell),減少特征圖尺寸的降維模塊(Reduction Cell)。 通過以預定義的方式堆疊這些模塊來構(gòu)建最終的神經(jīng)網(wǎng)絡(luò)。與上面討論的相比,這個搜索空間有兩個主要優(yōu)點:
(1)由于模塊相對整個神經(jīng)網(wǎng)絡(luò)較小,因此搜索空間的大小顯著減小。
(2)通過調(diào)整模型中使用的模塊數(shù)量,可以更容易地將模塊轉(zhuǎn)移到其他數(shù)據(jù)集。 例如:在小數(shù)據(jù)集使用8 個模塊堆疊,大數(shù)據(jù)將該模塊堆疊20 次。
因此,后來這種基于模塊的搜索空間成功地應用于許多工作。 然而,當使用基于模塊的搜索空間時,會出現(xiàn)新的問題,即如何設(shè)計模塊結(jié)構(gòu):應該使用多少個模塊以及如何連接它們來構(gòu)建實際模型?例如:Zoph 等人從模塊構(gòu)建一個連續(xù)模型,其中每個模塊接收前兩個模塊的輸出作為輸入,而Cai 等人采用眾所周知的手工設(shè)計架構(gòu)的高級結(jié)構(gòu),如DenseNet,并在這些模型中使用它們的模塊。 原則上,可以通過簡單地用模塊替換層來任意組合模塊,多分支空間便可簡單實現(xiàn)這個功能。 理想情況下,模塊應作為NAS 的一部分自動優(yōu)化。 除此之外,復雜的模塊設(shè)計可以增加模型生成的復雜度,從而對模型搜索算法的要求有所降低。
搜索空間的選擇在很大程度上決定了優(yōu)化問題的難度:即使對于基于具有固定模塊的單個模塊的搜索空間的情況,優(yōu)化問題仍然是(1)不連續(xù)。 (2)相對較高的維度(因為更復雜的模型往往表現(xiàn)更好,導致設(shè)計更復雜的模塊)。
許多不同的搜索策略可用于探索神經(jīng)架構(gòu)的空間,包括隨機搜索、貝葉斯優(yōu)化、進化方法、強化學習(Reinforcement learning,RL)和基于梯度的方法。
為了將NAS 問題轉(zhuǎn)化為強化學習(RL)問題,可以將神經(jīng)架構(gòu)的生成視為代理動作,其中動作空間與搜索空間相同。 代理的獎勵基于對未見數(shù)據(jù)的訓練架構(gòu)的性能估計。 不同的RL 方法在如何表示代理的策略以及如何優(yōu)化它們方面存在差異:Zoph和Le 使用遞歸神經(jīng)網(wǎng)絡(luò)(RNN)來順序地對字符串進行采樣,而字符串又對應于神經(jīng)結(jié)構(gòu)的編碼;貝克等人使用Q-learning 來訓練一個順序選擇算子類型和相應超參數(shù)的策略。 這些方法的另一種觀點是作為順序決策過程,其中策略采樣動作按照順序生成網(wǎng)絡(luò)結(jié)構(gòu),環(huán)境的“狀態(tài)”包含到目前為止采樣的動作的評估,并且獎勵僅在最終完成動作之后獲得。由于在此順序過程中,沒有發(fā)生與環(huán)境的交互(沒有觀察到外部狀態(tài),也沒有中間獎勵),將架構(gòu)抽樣過程解釋為單個動作的順序生成更直觀,這將RL問題簡化為多臂老虎機問題。
使用RL 的替代方案是使用進化算法來優(yōu)化神經(jīng)結(jié)構(gòu)的選取方法。 第一種設(shè)計神經(jīng)網(wǎng)絡(luò)的方法可以追溯到近三十年:Miller 等使用遺傳算法生成新結(jié)構(gòu)并使用反向傳播來優(yōu)化其權(quán)重。 許多研究者使用遺傳算法,來優(yōu)化神經(jīng)結(jié)構(gòu)及其權(quán)重。 然而,當擴展到具有數(shù)百萬權(quán)重的深度神經(jīng)結(jié)構(gòu)時,基于SGD的權(quán)重優(yōu)化方法優(yōu)于進化的方法。 因此最近的神經(jīng)進化方法,使用基于梯度的方法來優(yōu)化權(quán)重,使用進化算法來優(yōu)化神經(jīng)結(jié)構(gòu)本身[25-26]。 進化算法維護一組模型,即一組(可能是訓練過的)網(wǎng)絡(luò)架構(gòu)。 在每個進化步驟中,對來自群體的至少一個模型進行采樣,并通過對已有種群進行交叉變異生成新的子代。 在NAS 中,進化操作包括添加或移除層,改變層的超參數(shù),添加跳過連接,以及改變訓練超參數(shù)。在對后代進行訓練之后,評估它們的適應性(例如,在驗證集上的準確率)并將它們添加到種群中。
進化方法主要區(qū)別在如何選擇初始種群,更新種群和產(chǎn)生后代方面存在差異。 例如, Real 等人以及劉等人使用錦標賽選擇[29]來抽樣父母;Elsken 等人采用來自多目標帕累托前沿的樣本父母;Real 等人從人口中刪除最差的個體,發(fā)現(xiàn)去除最老的個體是有益的;劉等人不刪除個體。 為了生成后代,大多數(shù)方法隨機初始化子網(wǎng)絡(luò),而Elsken 等人采用繼承的方式,即知識(以學習權(quán)重的形式)通過使用網(wǎng)絡(luò)態(tài)射,從父網(wǎng)絡(luò)傳遞給其子網(wǎng)絡(luò);Real 等人也讓后代繼承其父母不受突變影響的所有參數(shù);雖然這種繼承不嚴格繼承性能,但與隨機初始化相比,它也可以加速學習過程。 此外,它們還允許改變學習速率,這可以被視為在NAS 期間優(yōu)化學習速率調(diào)度的方式。
Real 等人進行了RL 進化和隨機搜索(RS)的對比研究,得出的結(jié)論是RL 和進化在最終測試準確性方面表現(xiàn)同樣出色。 隨著時間的推移,進化具有更好的性能并且找到更小的模型。 兩種方法在實驗中始終表現(xiàn)優(yōu)于RS,但其差別并不十分明顯:RS在CIFAR-10 上實現(xiàn)了約4%的測試誤差,而RL 和進化達到約3.5%。 劉等人的差異甚至更小,其報告CIFAR 10 測試誤差為3.9%,ImageNet RS 測試誤差為21.0%,而基于進化的方法分別為3.75%和20.3%。
與上述無梯度優(yōu)化方法相比,劉等人提出轉(zhuǎn)變搜索空間到連續(xù)范圍內(nèi),以實現(xiàn)基于梯度的優(yōu)化:不要在特定層選定單個操作oi(例如,卷積或池化),而是從一組{o1,…,om} 中計算凸組合。 更具體地,給定輸入x,輸出y 被計算為:

其中:λi≥0;λi=1;系數(shù)λi用于參數(shù)化網(wǎng)絡(luò)架構(gòu)。 劉等人通過對權(quán)重的訓練數(shù)據(jù)和諸如λ 的結(jié)構(gòu)參數(shù)的驗證數(shù)據(jù)交替梯度下降步驟來優(yōu)化網(wǎng)絡(luò)權(quán)重和網(wǎng)絡(luò)架構(gòu)。 最終,通過為每個層選擇i =argmaxiλi的操作i 來獲得離散架構(gòu)。 Ahmed 和Torresani 也采用基于梯度的神經(jīng)架構(gòu)優(yōu)化,但他們只考慮分別優(yōu)化層的超參數(shù)和連接方式。
搜索策略旨在尋找最大化某些性能測量的神經(jīng)結(jié)構(gòu)A,例如測試圖像分類的準確性。 為了指導搜索過程,這些策略需要估計他們選出的結(jié)構(gòu)A 的性能。 最簡單的方法是在訓練數(shù)據(jù)集上訓練A 并評估其在驗證數(shù)據(jù)上的表現(xiàn)。 然而,訓練每個結(jié)構(gòu)都要從頭開始評估,這樣的方式經(jīng)常會帶來數(shù)千GPU天的計算消耗(1 GPU 天定義為一個GPU 運行一天的計算消耗)
為了減少這種計算負擔,可以基于完全訓練之后的實際性能的較低保真度來估計性能(也表示為代理度量)。 這種較低的保真度包括較短的訓練時間,對數(shù)據(jù)子集的訓練,較低分辨率圖像,或每層較少的濾波。 雖然這些低保真近似降低了計算成本,但它們也會在估計中引入偏差,因為性能通常會被低估。 只要搜索策略僅依賴于對不同體系結(jié)構(gòu)進行排名,并且相對排名保持穩(wěn)定,性能低估問題便不會對架構(gòu)搜索產(chǎn)生明顯影響。 然而,最近的結(jié)果表明,當近似評估與完全評估之間的差異太大時,這種相對排名可能會發(fā)生顯著變化[8]。
另一種估計架構(gòu)性能的可能方法建立在學習曲線外推的基礎(chǔ)上。 Domhan 等人建議推斷初始學習曲線,并終止預測表現(xiàn)不佳的曲線,以加快結(jié)構(gòu)搜索過程;貝克等人也考慮通過結(jié)構(gòu)超參數(shù)來預測那些部分學習曲線是最有成長空間的;Liu 等人還提出了訓練用于預測新架構(gòu)性能的替代模型,不采用學習曲線推斷,而是支持基于結(jié)構(gòu)/模塊特性預測性能,并推斷出比訓練期間看到的規(guī)模更大的結(jié)構(gòu)/模塊。 預測神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)性能的主要挑戰(zhàn)在于如何合理利用有限的計算資源,僅僅通過較少的評估網(wǎng)絡(luò)來獲得其相對準確的性能排序。
加速性能估計的另一種方法是基于之前已經(jīng)訓練過的其他架構(gòu)的權(quán)重來初始化新架構(gòu)的權(quán)重。 實現(xiàn)這一目標的方法,被稱為網(wǎng)絡(luò)態(tài)射[9]。 該方法允許修改結(jié)構(gòu),同時保持網(wǎng)絡(luò)所代表的功能不變。 這允許連續(xù)增加網(wǎng)絡(luò)容量并保持高性能而無需從頭開始訓練,這些方法的一個優(yōu)點是它們允許搜索空間沒有結(jié)構(gòu)大小的固有上限; 另一方面,嚴格的網(wǎng)絡(luò)態(tài)射只能使架構(gòu)更大,從而可能導致過于復雜的架構(gòu)。 這可以通過采用允許縮小架構(gòu)的近似網(wǎng)絡(luò)態(tài)射來減小模型的大小達到模型壓縮的目的[10]。
One-Shot 結(jié)構(gòu)搜索是另一種加速性能評估的十分有前景的方法,它將所有架構(gòu)視為超圖(HyperNet 或SuperNet)的不同子圖,并在具有該超圖的邊的架構(gòu)之間共享權(quán)重[2,11]。 只需要訓練整個超網(wǎng)絡(luò)的權(quán)重,子圖結(jié)構(gòu)可以通過繼承超網(wǎng)絡(luò)的權(quán)重。 在沒有任何單獨訓練的情況下,評估結(jié)構(gòu)的性能。 因為不需要從頭訓練(僅評估驗證數(shù)據(jù)的性能),One-shot 模型大大加快了架構(gòu)的性能評估。這種方法通常會產(chǎn)生很大的偏差,因為它嚴重低估了網(wǎng)絡(luò)的實際性能。 盡管如此,因為估計的性能與實際性能密切相關(guān),它可以可靠地對排名架構(gòu)進行排序。 不同的one-shot 方法在訓練方式上有所不同:ENAS 學習了一個RNN 控制器,它從搜索空間中對架構(gòu)進行采樣,并根據(jù)強化學習獲得的近似梯度訓練one-shot 模型。 DARTS 通過在one-shot 模型的超網(wǎng)的每條邊上放置候選操作(卷積算子等)的混合,來獲得連續(xù)的搜索空間,一次性優(yōu)化oneshot 模型的所有權(quán)重;Bender 等人只訓練one-shot模型一次,采樣一個結(jié)構(gòu)時,相當于對超網(wǎng)絡(luò)其它部分進行dropout 操作,這樣獲得的模型表現(xiàn)排序已經(jīng)足夠。 雖然ENAS 和DARTS 在訓練期間優(yōu)化了神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的分布,但Bender 等人的方法可以看作使用固定分布。
以上表明,權(quán)重優(yōu)化和結(jié)構(gòu)挑選的組合可能是one-shot 模型的需要。
One-shot 模型一般限制是預先定義的超圖,超圖基本就限定了子圖的生成模式。 此外,在架構(gòu)搜索期間要求整個超圖緩存在GPU 中,這相應地限制相較小的超圖和搜索空間,因此通常與基于小區(qū)的搜索空間結(jié)合使用。 基于權(quán)重共享的方法根本上減少了NAS 所需的計算資源(從幾千GPU 天到若干GPU 天)。 如果架構(gòu)的采樣分布與one-shot 模型一起優(yōu)化,目前還不能很好地解釋它們引入搜索的偏差。 從根本上來說,就是one-shot 模型和子圖模型的性能一致性問題,就是在超圖上的子圖模型的排序和子圖模型單獨從頭訓練的模型性能排序是否真實一致,目前還沒有得到根本上的解決。
近來,神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索越來越被國內(nèi)外研究者重視。 谷歌、MIT、Facebook、Uber、亞馬遜早早加入戰(zhàn)場;國內(nèi)的商湯、曠視、小米、阿里、華為等各大公司也都緊隨其后,在結(jié)構(gòu)搜索方面有若干成果。國內(nèi)中科院、上海交通大學等也都有一些研究結(jié)果問世。
中科大和微軟發(fā)表的論文《Neural Architecture Optimization》提出另一種基于梯度的方法。 先將網(wǎng)絡(luò)結(jié)構(gòu)嵌入(embedding)到一個連續(xù)的空間,這個空間中的每一個點對應一個網(wǎng)絡(luò)結(jié)構(gòu)。 在這個空間上可以定義準確率的預測函數(shù),以它為目標函數(shù)進行基于梯度的優(yōu)化,找到更優(yōu)網(wǎng)絡(luò)結(jié)構(gòu)的嵌入表征。優(yōu)化完成后,再將這個嵌入表征映射回網(wǎng)絡(luò)結(jié)構(gòu)。這類方法的優(yōu)點之一就是搜索效率高,對于CIFAR-10和PTB,結(jié)合一些權(quán)重共享這樣的加速手段,消耗可以少于1 GPU/天。
在神經(jīng)架構(gòu)搜索過程中,最為耗時的其實就是對于候選模型的訓練。 而初版的神經(jīng)架構(gòu)自動搜索方法因為對每個候選模型都是從頭訓練的,因此會相當耗時。 一個直觀的想法是有沒有辦法讓訓練好的網(wǎng)絡(luò)盡可能重用。 上海交大和倫敦大學的論文《Reinforcement Learning for Architecture Search by Network Transformation》中,將網(wǎng)絡(luò)態(tài)射與神經(jīng)網(wǎng)絡(luò)搜索結(jié)合。 所謂網(wǎng)絡(luò)態(tài)射就是將網(wǎng)絡(luò)進行變形,同時保持其功能不變。 這樣帶來的好處是變形后可以重用之前訓練好的權(quán)重,而不用重頭開始訓練。
最近,中科院的論文《You Only Search Once:Single Shot Neural Architecture Search via Direct Sparse Optimization》提出了DSO-NAS 方法,其特點是只搜一次。 它始于一個完全連接的塊,在操作間引入縮放因子,同時添加稀疏正則化來去除無用的連接,也就是去除不重要的操作,得到最優(yōu)結(jié)構(gòu)。 文中提出可以在一個優(yōu)化問題中同時學習網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)。
曠視科技最近提出了一種使用均勻分布采樣的單路徑One-Shot 模型,它的中心思想是使用一種簡化的超網(wǎng)絡(luò),通過均勻路徑采樣的方法進行訓練[12]。 一旦訓練好超網(wǎng)絡(luò),就使用進化算法來有效的搜索一個表現(xiàn)較好的結(jié)構(gòu),而無需進一步調(diào)整。目前該方法達到了很好的水平。
小米AutoML 團隊近期發(fā)表的FairNas 在Oneshot 模型中為了能在超網(wǎng)絡(luò)上更公平的比較結(jié)構(gòu),對每個操作算子進行嚴格公平訓練,也較為明顯的提升了超網(wǎng)絡(luò)的訓練擬合效果。
搜索空間是模型生成的基石,搜索空間確定了模型生成的范圍,模型選取的復雜程度。 搜索空間的確定依然需要依靠人類先驗知識,盡管這可能會阻礙機器去發(fā)現(xiàn)更有創(chuàng)新性的結(jié)構(gòu)。
搜索空間的設(shè)計是一個十分具有難度的問題,在模型自動生成問題中,一個好的搜索空間,基本就奠定了最終搜索到的模型的性能結(jié)果的均值。 例如:在一個很優(yōu)秀的搜索空間中,即使只是采用隨機采樣的方式選取結(jié)構(gòu),仍然可能會比在一個較差的搜索空間中使用十分優(yōu)秀的搜索算法所得到的模型要好得多。
目前絕大多數(shù)搜索空間都是基于cell 方式堆疊,基于cell 的搜索空間具備兩大優(yōu)勢:(1)有效縮減搜索空間大小。 (2)更容易進行模型遷移。
首先,基于cell 的搜索空間可以指數(shù)級縮減搜索空間大小,例如:對于一個8 層網(wǎng)絡(luò),一個cell 包含兩層,每層4 種選擇,搜索空間會從48縮減到42;其次,基于cell 的搜索空間所生成的模型能夠很簡單的進行模型的擴展遷移,例如:在一個小型數(shù)據(jù)集上訓練搜索到了一個8 個cell 堆疊的模型,為了遷移到更大的數(shù)據(jù)集,或者獲得更好的訓練效果,可以將8 個cell 擴展到20 個cell,這樣網(wǎng)絡(luò)的深度變深,網(wǎng)絡(luò)的表征能力也就會變強。
搜索空間設(shè)計的兩個基本原則:
(1)能夠包含若干現(xiàn)有的手工設(shè)計模型,在搜索結(jié)果的反饋中能夠更方便的比較手工設(shè)計模型和自動生成模型的優(yōu)劣。
(2)網(wǎng)絡(luò)中有較為明顯的優(yōu)劣之別,就是整個搜索空間中的結(jié)構(gòu)應該是比較容易比較的。
除了具有代表性的幾個搜索空間,絕大多數(shù)的研究者,大都是基于已有的搜索空間進行實驗探索,要么采用一樣的搜索空間,要么基于其它的搜索空間進行微調(diào)(加入或刪除幾個卷積算子、限制邊的連接方式、搜索激活函數(shù)等等)。
作為初期的研究者,可以嘗試將實驗,實現(xiàn)在一個較為簡單的搜索空間上,如果獲得了比較滿意的結(jié)果后,在把算法等遷移到更為復雜的搜索空間上,這是一種節(jié)約時間和計算資源的方式之一。
目前主流的搜索方法大概可以分為4 類:
(1)基于強化學習。 最初由谷歌公司在2017年于《Neural Architecture Search With Reinforcement Learning》一文中提出,此種方法通常通過一個控制器(一般是一個RNN 神經(jīng)網(wǎng)絡(luò))負責生成模型的結(jié)構(gòu)和相應超參數(shù),利用這個結(jié)構(gòu)在數(shù)據(jù)集上進行訓練,得到準確率,然后進行反饋。 如此反復直到得到最佳的結(jié)果。 該方法獲得好的模型的前提是進行大量的模型訓練,時間代價很大,普通研究者是無法承受的。
(2)基于進化算法。 初始產(chǎn)生若干結(jié)構(gòu),下一次選取的結(jié)構(gòu)由已有結(jié)構(gòu)進行交叉變異得到,這種方式的好處是符合自然發(fā)展規(guī)律,并且有著一個大家都共識的觀點:結(jié)構(gòu)相似的模型,在最終的表現(xiàn)結(jié)果上也是相似的。 進化算法通常和其他方法聯(lián)合使用,作為一個工具。
(3)基于可微方法。 可微方法首次在DARTS論文中提出,論文中將結(jié)構(gòu)和參數(shù)共同優(yōu)化,并且將結(jié)構(gòu)通過softmax 映射到連續(xù)空間,使得可以通過求解梯度來進行下一個結(jié)構(gòu)的選取,有得到全局最優(yōu)的可能。 但該方法由于通過梯度選取模型,所以無法控制生成模型的大小和Flops 數(shù)量等。
(4)基于one-shot 方法。 該方法首次由Google在ENAS 中提出,該方法將所有神經(jīng)網(wǎng)絡(luò)模型視作有向無環(huán)圖(DAG)。 首先固定節(jié)點,所有模型都放在一個超網(wǎng)絡(luò)(Hypernet 或Supernet)中,超網(wǎng)絡(luò)中的一個子圖表示一個神經(jīng)網(wǎng)絡(luò)模型。 對整個超網(wǎng)絡(luò)進行訓練,通過采樣子圖,來獲得一個結(jié)構(gòu),通過評估選出最好的模型。 更多的時候one-shot 模型都是和其它方法結(jié)合使用的(例如RL、進化算法等)。但目前來說,one-shot 模型仍然沒能從根本上解決超網(wǎng)絡(luò)上模型的表現(xiàn)和最終模型效果的一致性問題。
評價一個網(wǎng)絡(luò)模型的好壞是算法能夠選出真正優(yōu)秀模型的途徑,最直觀也最準確的評估方式就是將模型從頭開始訓練,訓練完全之后查看模型對測試數(shù)據(jù)集的準確性,但是這種方式往往是最為費時費力的。 在搜索算法中,往往要比較成千上萬的模型,才能夠得出一個較好的局部最優(yōu)解,然而將成千上萬個模型都從頭至尾訓練完全是不經(jīng)濟也不現(xiàn)實的,只有Google 這樣的公司才具備這樣的條件。 一般會尋求評估結(jié)果的準確性和所需算力的折衷。
低保真是其中的一種方式,比如測試時只取測試集合的一個小的子集合進行測試,亦或使用低分辨率的圖像等等。
很多時候,可以根據(jù)已有的效果評估來對搜索過程進行剪枝,如果搜索到的若干較差的結(jié)構(gòu)有某些共同的特點,那之后就避免不去搜索帶有這些特點的結(jié)構(gòu);亦或若干較優(yōu)的結(jié)構(gòu)具有某些共同的特點,之后就專注于搜索具有這些特點的結(jié)構(gòu)。
基于One-shot 的方式,由于訓練了一個超網(wǎng)絡(luò),整個搜索空間上的所有結(jié)構(gòu)都共用這個超網(wǎng)絡(luò)的模型參數(shù),所以在進行模型評估的時候十分便捷,只需直接使用超網(wǎng)絡(luò)的參數(shù)即可,不需要進行額外的模型訓練,所以基于One-shot 的方法在最近也越來越多的被大家使用。 基于One-shot 模型還可以做到基于可微模型做不到的提前預判,對于帶評估的結(jié)構(gòu),如果其模型參數(shù)或者Flops 數(shù)不符合要求,那么可以直接不去進行計算,直接換另外一個采樣結(jié)構(gòu)即可。
本文針對神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索這個研究方向,首先給出了目前最普遍接受的問題定義,根據(jù)國內(nèi)外不同的研究現(xiàn)狀進行了綜述,在最后針對最主要的三個研究內(nèi)容:搜索空間、搜索策略、評估策略給出了簡析。 通過本文可以幫助初入本研究方向的研究人員對神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索了解一個大致的全貌,幫助研究人員更快的進行深入研究。