神經(jīng)架構(gòu)搜索(NAS)取代了人類「第二階」的調(diào)參工作,使我們能以兩層黑箱的方式尋找最優(yōu)神經(jīng)網(wǎng)絡(luò)。這一模式如果能物美價(jià)廉地應(yīng)用,自然是很
神經(jīng)架構(gòu)搜索(NAS)取代了人類「第二階」的調(diào)參工作,使我們能以兩層黑箱的方式尋找最優(yōu)神經(jīng)網(wǎng)絡(luò)。這一模式如果能物美價(jià)廉地應(yīng)用,自然是很誘人,要知道「800 個(gè) GPU 訓(xùn)練 28 天」基本不是個(gè)人承受得起的。在本文中,作者為我們介紹了 NAS 的進(jìn)化史,即如何利用多種改進(jìn)手段,將訓(xùn)練成本壓縮到「凡人皆可染指」的程度。 神經(jīng)架構(gòu)搜索 (NAS) 改變了構(gòu)建新神經(jīng)網(wǎng)絡(luò)架構(gòu)的過程。這種技術(shù)可以自動地為特定問題找到最優(yōu)的神經(jīng)網(wǎng)絡(luò)架構(gòu)?!缸顑?yōu)」的定義可以看成是對多個(gè)特征之間的權(quán)衡過程進(jìn)行建模,例如網(wǎng)絡(luò)的大小和準(zhǔn)確率 [1]。更令人印象深刻的是,現(xiàn)在 NAS 在單個(gè) GPU 上僅需執(zhí)行 4 個(gè)小時(shí),過去在 800 個(gè) GPU 上需要執(zhí)行 28 天。而實(shí)現(xiàn)這一飛躍只花了兩年時(shí)間,現(xiàn)在我們不需要成為 Google 員工就可以使用 NAS。
但是,研究人員如何實(shí)現(xiàn)這一性能飛躍呢?本文將介紹 NAS 的發(fā)展之路。
催化劑
NAS 的歷史可以追溯到 1988 年的自組織網(wǎng)絡(luò)思想 [2],但直到 2017 年 NAS 才取得了首個(gè)重大突破。當(dāng)時(shí)訓(xùn)練循環(huán)神經(jīng)網(wǎng)絡(luò) (RNN) 來生成神經(jīng)網(wǎng)絡(luò)架構(gòu)的想法出現(xiàn)了。
簡單地說,這個(gè)過程類似于人類手工尋找最佳架構(gòu)的過程?;谧顑?yōu)操作和超參數(shù)的預(yù)定義搜索空間,控制器將測試不同的神經(jīng)網(wǎng)絡(luò)配置。在這種情況下,測試配置意味著組裝、訓(xùn)練和評估神經(jīng)網(wǎng)絡(luò),以觀察其性能。
經(jīng)過多次迭代后,控制器將了解哪些配置能夠構(gòu)成搜索空間內(nèi)的最佳神經(jīng)網(wǎng)絡(luò)。不幸的是,在搜索空間中找出最優(yōu)架構(gòu)所需的迭代次數(shù)非常大,因此該過程十分緩慢。
其部分原因是搜索空間遭受了組合爆炸的影響,即搜索空間中可能的網(wǎng)絡(luò)數(shù)量隨著添加到搜索空間的組件數(shù)量而大大增加。然而,這種方法確實(shí)能夠找到當(dāng)前最佳 (SOTA) 網(wǎng)絡(luò),該網(wǎng)絡(luò)現(xiàn)在被稱為 NASnet [3],但它需要在 800 個(gè) GPU 上訓(xùn)練 28 天。如此高的計(jì)算成本使得搜索算法對大多數(shù)人來說都是不切實(shí)際的。
那么,如何改進(jìn)這一想法使其更容易使用呢?在 NAS 訓(xùn)練過程中,大部分耗時(shí)來自于訓(xùn)練和評估控制器建議的網(wǎng)絡(luò)。使用多個(gè) GPU 可以并行訓(xùn)練模型,但它們的單獨(dú)訓(xùn)練過程所耗時(shí)間仍然相當(dāng)長。減少訓(xùn)練和評估神經(jīng)網(wǎng)絡(luò)的計(jì)算成本將對 NAS 的總搜索時(shí)間產(chǎn)生很大的影響。
這就引出了一個(gè)問題:如何在不對 NAS 算法產(chǎn)生負(fù)面影響的情況下,降低訓(xùn)練和評估神經(jīng)網(wǎng)絡(luò)的計(jì)算成本?
降低保真度估計(jì)
眾所周知,較小的神經(jīng)網(wǎng)絡(luò)比較大的神經(jīng)網(wǎng)絡(luò)訓(xùn)練速度更快。原因很簡單,較小網(wǎng)絡(luò)的計(jì)算成本較低。然而,就準(zhǔn)確率而言,較小的神經(jīng)網(wǎng)絡(luò)通常比較大的神經(jīng)網(wǎng)絡(luò)性能更差。NAS 的目標(biāo)是找到 SOTA 網(wǎng)絡(luò)架構(gòu),那么是否有方法可以在不犧牲最終性能的情況下,在搜索算法中使用較小的模型呢?
答案可以在最著名的計(jì)算機(jī)視覺架構(gòu) ResNet [4] 中找到。在 ResNet 架構(gòu)中,我們可以觀察到同一組操作被一遍又一遍地重復(fù)。這些操作構(gòu)成殘差塊,是 ResNet 的構(gòu)建塊。這種設(shè)計(jì)模式使得研究者可以通過改變堆疊殘差塊的數(shù)量,來創(chuàng)建同一模型的更深或更淺的變體。
此架構(gòu)設(shè)計(jì)中隱含的假設(shè)是,可以通過迭代地堆疊結(jié)構(gòu)良好的構(gòu)建塊,來創(chuàng)建高性能的更大型網(wǎng)絡(luò),這種做法完全適合 NAS。在 NAS 的語境下,這意味著先訓(xùn)練和評估小模型,然后擴(kuò)展該神經(jīng)網(wǎng)絡(luò)。例如,先在 ResNet18 上執(zhí)行 NAS,然后通過重復(fù)得到的構(gòu)建塊來構(gòu)建 ResNet50。
用搜索構(gòu)建塊替代搜索整個(gè)架構(gòu),以及訓(xùn)練和評估較小的模型,可以極大地提高速度,研究者實(shí)現(xiàn)了在 450 塊 GPU 上僅耗費(fèi) 3-4 天的搜索時(shí)間 [5]。此外,即使只搜索構(gòu)建塊,該技術(shù)也能夠找到 SOTA 架構(gòu)。
然而,盡管這是一項(xiàng)巨大改進(jìn),但整個(gè)過程仍然相當(dāng)緩慢,并且要想投入實(shí)際應(yīng)用,訓(xùn)練所需的 GPU 數(shù)量必須減少。無論模型大小如何,從零開始訓(xùn)練神經(jīng)網(wǎng)絡(luò)始終是一個(gè)耗時(shí)的過程。有沒有一種方法可以重用以前訓(xùn)練好的網(wǎng)絡(luò)中的權(quán)重呢?
權(quán)重繼承
如何避免從頭開始訓(xùn)練神經(jīng)網(wǎng)絡(luò)?答案是使用權(quán)重繼承,即從另一個(gè)已經(jīng)訓(xùn)練過的網(wǎng)絡(luò)中借用權(quán)重。在 NAS 中,搜索是在特定的目標(biāo)數(shù)據(jù)集上進(jìn)行的,并且有多個(gè)架構(gòu)同時(shí)訓(xùn)練。為什么不重用權(quán)重,只更改架構(gòu)呢?畢竟,搜索過程的目的是尋找架構(gòu)而不是權(quán)重。為了實(shí)現(xiàn)重用權(quán)重,我們需要用更嚴(yán)格的結(jié)構(gòu)定義來限制搜索空間。
通過定義允許在搜索構(gòu)建塊中存在的隱藏狀態(tài)的數(shù)量,搜索空間變得非常有限。換句話說,構(gòu)建塊內(nèi)操作的可能組合數(shù)量較大,但并非無限。如果將隱藏狀態(tài)排序,并將它們的拓?fù)漕A(yù)定義為有向無環(huán)圖 (DAG),則搜索空間如圖 3 所示。
使用這個(gè)搜索空間,我們可以把控制器建議的架構(gòu)看作是來自更大網(wǎng)絡(luò)的子網(wǎng)絡(luò),其中較大的網(wǎng)絡(luò)和子網(wǎng)絡(luò)共享相同的隱藏狀態(tài)(節(jié)點(diǎn))。
當(dāng)控制器建議使用某個(gè)網(wǎng)絡(luò)架構(gòu)時(shí),這意味著選擇一組連接(邊)的子集,并為隱藏狀態(tài)(節(jié)點(diǎn))分配新的操作。這種形式意味著很容易以編碼方式保存節(jié)點(diǎn)上操作的權(quán)重,從而實(shí)現(xiàn)權(quán)重繼承。在 NAS 設(shè)置中,這意味著以前架構(gòu)的權(quán)重可以用作下一個(gè)采樣網(wǎng)絡(luò)的初始化 [6]。眾所周知,初始化可以很好地獨(dú)立于任務(wù)或操作 [7] 運(yùn)行,且由于沒有從頭開始訓(xùn)練模型,因此可以進(jìn)行更快的訓(xùn)練。
既然現(xiàn)在已經(jīng)不再需要從零開始訓(xùn)練每個(gè)模型了,那么網(wǎng)絡(luò)的訓(xùn)練和評估就會快得多。在單個(gè) GPU 上 NAS 只需要 0.45 天的訓(xùn)練時(shí)間,相比之前實(shí)現(xiàn)了約 1000 倍的提速 [6]。優(yōu)化技術(shù)的結(jié)合大大提高了基于強(qiáng)化學(xué)習(xí)的 NAS 的速度。
這些改進(jìn)都集中在更快地評估單個(gè)架構(gòu)上。然而,強(qiáng)化學(xué)習(xí)方法并不是最快的學(xué)習(xí)方法。是否存在一個(gè)替代性搜索過程,可以更高效地遍歷搜索空間?
在基于強(qiáng)化學(xué)習(xí)的 NAS 過程中,需要訓(xùn)練多個(gè)模型以便從中找到最佳模型。那么有沒有辦法避免訓(xùn)練所有的模型,而只訓(xùn)練一個(gè)模型呢?
可微性
在搜索空間的 DAG 形式中,訓(xùn)練的網(wǎng)絡(luò)是較大網(wǎng)絡(luò)的子網(wǎng)絡(luò)。那么是否可以直接訓(xùn)練這個(gè)更大的網(wǎng)絡(luò),并以某種方式了解哪些操作貢獻(xiàn)最大呢?答案是肯定的。
如果移除控制器,并將邊更改為表示所有可能的操作,則搜索空間可微分。在這個(gè)密集的架構(gòu)中,所有可能的操作都在每個(gè)節(jié)點(diǎn)上以加權(quán)和的形式組合起來。加權(quán)和是可學(xué)習(xí)參數(shù),使得網(wǎng)絡(luò)能夠縮放不同的操作。這意味著可以縮小不利于性能的操作,擴(kuò)大「良好」的操作。訓(xùn)練較大的網(wǎng)絡(luò)后,剩下要做的就是觀察權(quán)重并選擇對應(yīng)較大權(quán)重的操作。
通過對搜索空間求微分和訓(xùn)練更大的網(wǎng)絡(luò)(通常稱為「超級網(wǎng)絡(luò)」),我們不再需要訓(xùn)練多個(gè)架構(gòu),并且可以使用標(biāo)準(zhǔn)梯度下降優(yōu)化器。NAS 的可微性為未來發(fā)展開辟了許多可能性。其中一個(gè)例子是 NAS 中的可微分采樣 [9],由于每個(gè)前向傳播和反向傳播在搜索中需要使用的操作減少,因此該方法將搜索時(shí)間縮短到只要 4 個(gè)小時(shí)。
結(jié)語
NAS 訓(xùn)練時(shí)間如何從多天縮短到幾個(gè)小時(shí)的故事先到此為止吧。在這篇文章中,我試圖概述驅(qū)動 NAS 發(fā)展的最重要想法?,F(xiàn)在,NAS 技術(shù)已經(jīng)足夠高效,任何有 GPU 的人都可以使用它,你還在等什么?
關(guān)鍵詞: NAS