趙加坤 劉云輝 孫 俊
(西安交通大學軟件學院 西安 710049)
近些年來,卷積神經網絡在圖像識別領域已經取得非常好的結果,但是設計一個高效的卷積神經網絡依賴于專家經驗和知識,并且需要花費大量的時間和精力,因此如何自動找到一個合適的卷積神經網絡這一課題受到了越來越多研究者的關注。在深度學習中,這一課題被稱為神經網絡架構搜索(NAS)。即通過設計經濟高效的搜索方法,自動獲取泛化能力強的神經網絡,大量解放研究者的創(chuàng)造力。
神經網絡架構搜索算法主要分為三類:1)基于強化學習的搜索算法,代表性算法包括谷歌的、NASNet[1]、ENAS[2]、DNAS[3]等,這種算法采用RNN網絡作為控制器來采樣生成描述網絡結構的字符串,該結構會用于訓練并得到評估的準確率,然后使用強化學習算法學習控制器的參數(shù),使之能產生更高準確率的網絡結構。2)基于進化算法的搜索算法,代表性算法包括AmoebaNet-A[4]、MFAS[5],這類算法首先對網絡結構進行編碼,稱為DNA。演進過程中會維擴護網絡模型的集合,這些網絡模型的調整通過它們在驗證集上的準確率給出。這兩類方法都是在離散空間中搜索網絡結構,效率低下,需要巨大的算力,使得大多數(shù)研究者望而卻步。3)基于梯度的搜索算法,代表性的算法包括PDARTS[6]、NAO[7]、SETN[8]等,和前兩種算法不同,此類算法通過某種變換(例如softmax)將離散空間變成連續(xù)空間,目標函數(shù)變成可微函數(shù),即可通過梯度下降的方式尋找對應的最優(yōu)結構,并且使得搜索速度大幅度提高。
本文基于PCDARTS[9]提出一種高效的神經網絡架構搜索算法,所做改進如下:
1)引入特征變換效果更好的通道重排操作和global-context操作擴展原算法的搜索空間。
2)設計一個修正網絡的reduction cell,算法去搜索normal cell,在cifar-10和cifar-100上搜索時,可以在不損失精度的前提下節(jié)約31%的搜索時間。
近些年來,研究者們在神經網絡架構搜索領域已經取得非常好的進展并且發(fā)現(xiàn)了許多在cifar數(shù)據(jù)集以及ImageNet數(shù)據(jù)集上表現(xiàn)良好的網絡架構。谷歌大腦提出的NAS算法,使用RNN作為控制器去采樣子網架構,子網在驗證集上獲得驗證精度R,然后驗證精度R反饋給控制器并更新下一個子網架構。同樣是谷歌大腦的杰作NASNet算法中,它繼承了NAS中RNN控制器的核心內容,但不同的是,它不是從頭到尾采樣一個子網絡,而是結合Inception v1[10]網絡的觀點,將子網看成是由一個個的cell塊組成的網絡,文中搜索兩種不同類型cell,即reduction cell和normal cell,然后按一定順序疊加構成完整的網絡架構。NASNet相比NAS直接搜索完整的網絡結構要節(jié)約7倍的搜索時間,本文將同樣采用這種cell搜索的方式。
在眾多基于強化學習和進化算法的搜索算法中,有一個明顯的缺點,那就是消耗算力巨大,谷歌提出的NAS曾花費3150gpu days在cifar-10數(shù)據(jù)集上搜索出一個表現(xiàn)良好的卷積神經網絡。為了解決這一問題,研究者開始探索新的搜索策略。近些年來,基于梯度的搜索算法受到了廣泛關注,谷歌和CMU的學者提出了DARTS,一種可微的架構搜索算法,該算法將搜索空間表示成有向無環(huán)圖,通過松弛化操作將原本離散的搜索變成連續(xù)可微的搜索,然后通過梯度下降的方式尋找最優(yōu)的reduction cell和normal cell,最后堆疊兩類cell成卷積神經網絡。商湯研究院提出了SNAS[11],該方法將搜索過程建模成馬爾可夫模型,保持了概率建模的優(yōu)勢,并提出同時優(yōu)化網絡損失函數(shù)的期望和網絡正向時延的期望,擴大了有效的搜索空間,可以自動生成硬件友好的稀疏網絡。華為諾亞方舟實驗室提出了基于DARTS改進的PCDARTS算法,該算法通過部分連接和邊的正則化解決了DARTS占用內存大的問題,并減少了搜索時間。Xuanyi Dong等提出了GDAS[12]算法,同樣是基于DARTS改進,該算法使用Gumbel-max trick[13],在前向傳播時用argmax函數(shù)選取節(jié)點間的連接方式,在后向傳播時用softmax函數(shù)將one-hot向量可微化,并設計了一個修正后的reduction cell,只搜索normal cell,節(jié)省了搜索時間。
3.1.1 節(jié)點間的拓撲結構
我們?yōu)樽罱K的網絡結構架構搜索兩類不同的cell,按照一定的順序堆疊成網絡。每個cell都是包含了7個節(jié)點的有向無環(huán)圖,每個節(jié)點表示卷積網絡中的特征圖x(i),每條邊e(i,j)代表將特征圖x(i)變換到特征圖x(j)操作O(i,j),如式(1)所示:
七個節(jié)點中有兩個輸入節(jié)點(來自之前的cell輸出),一個輸出節(jié)點,和四個中間節(jié)點,輸出節(jié)點由四個中間節(jié)點進行通道連接而成,如圖1所示。
圖1 節(jié)點間的拓撲結構
3.1.2 節(jié)點之間的操作列表
如圖1所示,節(jié)點間左側的細線代表了節(jié)點間的轉換操作,在PCDARTS中,所使用到的操作列表如下:
1)None,節(jié)點間沒有連接;
2)Identity,跳躍連接;
3)Max_pool_3×3,最大池化;
4)Avg_pool_3×3,平均池化;
5)Sep_conv_3×3,3×3分離卷積;
6)Dil_conv_3×3,3×3空洞卷積;
7)Sep_conv_5×5,5×5分離卷積;
8)Dil_conv_5×5,5×5空洞卷積。
本文考慮到較大的卷積核可以通過堆疊小的卷積核代替,這一點和Inception v3[14]提出的用兩個3×3卷積核堆疊代替7×7卷積核的方法不謀而合,而且連續(xù)的3×3卷積更具有非線性表現(xiàn)力,更能降低模型的參數(shù),所以本文將舍去5×5卷積核,并加入兩個新的操作channel shuffle卷積和global context。
Channel shuffle操作:Xiangyu Zhang等[15]提出的shffuleNet,原文提出在疊加組卷積層之前進行一次通道重排操作(稱之為channel shuffle操作,如圖2所示),然后被打亂的通道會被分給不同的組,使用該操作的好處就是輸出的特征向量包含更豐富的通道信息并且更具有表現(xiàn)力。
圖2 通道重排操作
Global context:Yue Cao等[16]提出的global context(如圖3所示,其中scale1表示矩陣相乘,scale2表示矩陣對位相加)是基于自注意力機制的block,它遵循通用的三步驟框架,即全局上下文建模,通道信息的轉化,通道融合。而且由于gc block中存在全局信息的相互交互,使得它比普通卷積的特征提取效果更好。
圖3 全局上下文操作
在PCDARTS中,首先將所有離散操作通過SoftMax函數(shù)轉換成連續(xù)空間,然后,架構搜索問題就轉化為學習一組連續(xù)變量。當我們使用驗證集評估網絡架構的性能時,我們可以通過梯度下降來優(yōu)化模型架構,類似于更新網絡參數(shù),而這里更新的是架構參數(shù)。
PCDARTS將每條邊設置為有N+1個并行路徑的混合操作,表示為Mix O,N為操作的總數(shù),如圖4所示,給定輸入x,假定O={oi}表示操作列表,混合操作MixO的輸出是基于它的N路輸出的加權和和未采樣路徑輸出的疊加,如式(2)所示,1/K每個節(jié)點特征圖的用于操作混合的取樣比例:
圖4 邊的混合
如果一個基本運算對邊緣有貢獻,其權重應該大于其他的操作,我們選擇前兩個權重最大的操作作為下個節(jié)點的輸入。
Cell的堆疊方法也可以由一些類似于單元結構的搜索算法來完成,但本文的研究重點并不在這方面,所以本文將按照圖5的堆疊方式來構建網絡。我們在深度上疊加兩種不同數(shù)量的cell,將第k個cell的輸入設置為第k-1和第k-2個cell的輸出,為了減少整個網絡的大小,將網絡的第1/3和2/3的位置設置為reduction cell,其余位置是含有N個normal cell的block,網絡搜索階段,N=2,此時網絡由8個cell構成,在網絡評估階段,N=6,此時網絡由20個cell構成,而在搜索階段使用較少cell的原因是在這個階段只需要找出相對表現(xiàn)較好的網絡,使用較少的cell可以大幅度提高搜索速度。
圖5 網絡的堆疊方式
縱觀一些人工設計的卷積神經網絡,AlexNet[17]和VggNet[18]使用最大池化減少空間維度,Densenet[19]使用1×1卷積后跟一個平均池化層去降維,Resnet[20]使用步長為2的卷積層代替池化層,這些網絡使用的reduction cell大多都簡單而高效,而自動搜索的reduction cell往往都很相似且簡單,除此之外,聯(lián)合搜索兩種cell也將帶來優(yōu)化難度的增加,所以為了獲得最終的更高效的卷積神經網絡,本文設計了修正網絡的reduction cell(FRC),如圖6所示。
圖6 修正的reduction cell
CIFAR數(shù)據(jù)集是圖像分類領域的常用數(shù)據(jù)集,其中CIFAR-10數(shù)據(jù)集由10個類的60000個32×32×3圖像組成,每個類有6000個圖像,總共有50000個訓練圖像和10000個測試圖像。CIFAR-100數(shù)據(jù)集由100個類的60000個32×32×3圖像組成,每個類有600個圖像,共有50000個訓練圖像和10000個測試圖像。
Tiny-ImageNet數(shù)據(jù)集來自ImageNet數(shù)據(jù)集,和CIFAR數(shù)據(jù)集分屬于不同的應用場景,該數(shù)據(jù)集包含200個不同的圖像類別,每個圖像的大小為64×64,訓練集有10萬個圖像,驗證集有1萬個圖像(每個類別50張圖片)。
本次實驗所選用的操作列表如下:1)None,2)Identity,3)max_pool_3×3,4)avg_pool_3×3,5)sep_conv_3×3,6)Dil_conv_3×3,7)channel_shuffle_3×3,8)contextblock。
在搜索階段,和PCDARTS一樣,我們設置網絡由8個cell堆疊而成,而驗證階段是20個cell(因為在搜索階段只需找出相對表現(xiàn)較好的網絡,使用較少的cell可以提高搜索速度),每個cell使用4個中間節(jié)點,設置初始通道數(shù)為16并搜索50個epoch,其中前15個epoch為網絡參數(shù)預熱階段,預熱可以減少初始化時某些操作固有權重較高的影響,比如None操作。我們設置K=4,意味著每條邊僅有1/4的特征圖被采樣,可以節(jié)省顯卡內存占用,網絡權重w采用沖量算法優(yōu)化,初始化學習率為0.1并使用余弦退火算法自動修正,沖量參數(shù)0.9,權重衰減率為0.0006(部分參數(shù)使用自己調整的參數(shù)而非PCDARTS論文給出的參數(shù))。網絡架構參數(shù)采用Adam算法優(yōu)化,學習率為0.0005,沖量變化范圍為(0.5,0.999),權重衰減為0.003。聯(lián)合搜索兩類cell時在單卡NVIDIA GTX 1080 TI GPU上花費的時間是3小時30分鐘(去掉網絡預熱時間),在修正reduction cell只搜索normal cell的情況下節(jié)省了25%的內存消耗且單卡搜索時間為2小時25分鐘(去掉網絡預熱時間,節(jié)省了大約31%的時間消耗),表1給出了算法的搜索結果并和主流算法作對比(字體加粗的兩行本文做了實驗),我們將在cifar-10上搜索然后將搜索的架構遷移到cifar-100和Tiny-imageNet上使用,搜索的架構如圖7所示其中(a)和(b)聯(lián)合搜索下的兩類cell,(c)表示加入修正后的reduction cell后搜索得到的normal cell。
表1 和主流算法的對比(cifar-10)
圖7 搜索結果
在評估階段,網絡由20個cell(18個normal cell和2個reduction cell)構成,初始化通道數(shù)為36,我們采用SGD算法優(yōu)化權重參數(shù),設置初始學習率為0.025采用余弦退火算法自動修正,沖量參數(shù)0.9,權重衰減0.0003,梯度裁剪參數(shù)為5,在cifar-10和cifar-100數(shù)據(jù)集上使用batch_size=64訓練600個epoch,訓練4次,取最好結果(消除網絡初始化的隨機性),為了防止不同環(huán)境帶來的影響,我們將原PC-DARTS得到的網絡在我們的環(huán)境下進行了測試并和我們最終的結果進行對比。
表2和表3給出了三個模型在cifar10和cifar100數(shù)據(jù)集上的表現(xiàn),可以看出我們的模型使用的參數(shù)量略微減少,Ours(with FRC)模型獲得了最好的精度,在cifar10數(shù)據(jù)集上的精度提高了0.5%,在cifar100數(shù)據(jù)集上的top-1精度提高了1%,我們根據(jù)日志記錄的結果將表現(xiàn)最好的模型Ours(FRC)的損失精度圖畫出如圖8和圖9所示,兩個模型均在較短的epoch內完成收斂。
表2 模型表現(xiàn)(cifar-10)
表3 模型表現(xiàn)(cifar-100)
圖8 cifar10損失精度變化圖(FRC)
圖9 cifar100損失精度變化圖(FRC)
由于Tiny-ImageNet和cifar數(shù)據(jù)集存在差異,若將cifar10上搜索的網絡拿過來使用并不合理,因此本文會在Tiny-ImageNet數(shù)據(jù)集上重新搜索出一個可用網絡并和從cifar數(shù)據(jù)集上遷移的網絡作對比,我們使用3個模型在NVIDIA GTX1080TI顯卡上各訓練200個epoch,結果如表4所示,其中Ours(cifar/tiny)模型表示在cifar或tiny-imagenet數(shù)據(jù)集上搜索得到的架構,當我們直接將架構由cifar-10遷移至tiny-imagenet數(shù)據(jù)集上時,模型表現(xiàn)會變差,因此,當需要將算法遷移到新的數(shù)據(jù)集上時最好用新數(shù)據(jù)集重新搜索網絡。
表4 模型表現(xiàn)(tiny-imagenet)
本文基于PCDARTS提出一種高效的神經網絡架構搜索算法,我們更改了原算法的搜索空間加入了提取圖片特征更高效的channel shuffle操作和global context操作,變換了原論文搜索兩種cell的思路,設計了一個更高效的reduction cell,僅僅去搜索normal cell,不僅減少了約31%的搜索時間,還提高了分類的精度,使得我們搜索的算法更加高效可用。研究神經網絡架構搜索對自動化機器學習有著深遠的意義,谷歌的AutoML引入了自研的ENAS算法,極大降低了神經網絡設計的復雜度,提高了效率,希望未來的神經網絡架構搜索算法會應用到更多的場景里去。在接下來的工作中,我們將考慮在深度上實現(xiàn)堆疊cell的自動化,所以漸進式堆疊cell將是下一階段的主要研究內容。