以下是在大規模分布式訓練領域,商湯科技發表的一篇重磅大會口頭報告(Oral)論文,提出基于分布式訓練的深度增強學習BlockQNN算法,自動設計神經網絡結構。本文由商湯科技實習研究員鐘釗在商湯科技研究院副院長閆俊杰和研究經理武偉指導下完成。
神經網絡結構設計一直是深度學習里的核心問題。在基于深度學習的分類、檢測、分割、跟蹤等任務中,基礎神經網絡的結構對整體算法的性能優劣有著決定性的影響。傳統的神經網絡結構設計需要大量專家的知識和試錯成本,甚至還需要一些靈感和“神來之筆”,每年僅有幾個有較大影響的新網絡結構被設計出來,因此,人工設計網絡結構是一件極其困難的事情。網絡結構的自動設計/搜索的方法最近受到了廣泛的重視,其試圖朝著自動化深度學習這個目標,把人從復雜繁瑣的網絡設計調參中解放出來(如圖一所示)。
圖一:(由左至右)
從人工設計的網絡結構到
算法自動設計的網絡結構
近期的網絡結構自動設計/搜索算法通常需要耗費巨大的計算資源(例如,Google的NAS算法需要使用數百塊GPU以及近一個月的訓練時間),而且生成的模型可遷移性不強,難以做到真正的實用化。本文提出的BlockQNN算法能夠解決現有網絡結構自動設計/搜索方法效率和泛化性的問題。
基于“Block”的網絡結構表示
目前主流的深度神經網絡結構極其復雜,其深度往往達到數百層,直接搜索整個網絡結構的搜索空間非常龐大,這也是之前自動網絡結構設計/搜索算法比較低效的原因之一。同時,直接設計整個網絡的策略會導致網絡結構不具備泛化性。例如,基于CIFAR數據集搜索出來的網絡結構,因為其數據輸入的大小限制,只適合處理輸入為32x32分辨率的數據,從而使得搜索出的網絡結構泛化性能較弱。
針對這些問題,本文借鑒了現代主流深度神經網絡的設計思想,比如ResNet、Inception等網絡。這些網絡是由同樣結構的子網絡重復組合在一起形成,本文把這種能重復組合的子結構稱為block。通過設計block結構,可以讓網絡結構的搜索空間大大減小,并且block結構本身具有強大的泛化性,針對不同的數據集或者任務,只需要疊加不同個數的block即可完成(如圖二所示)。
圖二:
基于Block設計的網絡整體框架
左邊為針對CIFAR的框架,右邊針對ImageNet
表一:
網絡結構編碼表
為了表示網絡block結構,本文設計了一套網絡結構編碼,把神經網絡看做一個有向無環圖,每個節點表示網絡中的每一層,而邊就表示數據流動的方向。整個編碼包括神經網絡的層數序號,類型,核的大小,以及兩個前序節點的序號。使用這種編碼方式就可以表示任意的神經網絡結構,例如ResNet和Inception的block結構就能使用圖三中的編碼進行表示。
圖三:
Inception和Resnet中block結構編碼表示
基于強化學習的網絡結構自動設計
接下來的核心問題即是如何獲得最優的網絡結構。盡管網絡結構的搜索空間已經通過設計block大大減小,但是直接暴力搜索所有可能結構,依然十分耗費計算資源。本文因此提出一種基于強化學習的網絡設計方法,自動學習得到網絡結構。
在網絡設計強化學習中,本文把當前神經網絡層定義為增強學習中的目前狀態(current state),而下一層結構的決策定義為增強學習中的動作(action)。這里使用之前定義的神經網絡結構編碼來表示每一層網絡。這樣,通過一系列的動作決策,就能獲得一條表示block結構的編碼(如圖四所示),而提出的強化學習算法通過優化尋獲最優的動作決策序列。本文使用Q-learning算法來進行學習,具體的公式不再展開。
圖四:
基于強化學習的網絡結構自動設計流程
值得注意的一點是,與一般的強化學習問題不同,該任務只在結束整個序列的決策后(即生成完整網絡結構后)才會得到一個reward,而之前的每個決策是對應reward。由于獲得最終reward的成本非常高(需要在數據上重新訓練新獲得的網絡結構),為了加快它的收斂,作者使用了reward shaping的技巧(如圖五所示),因而訓練初始階段終止層的Q值不會過高,讓算法不會在訓練初始階段傾向于生成層數過淺的網絡結構。
圖五:
Reward shaping對收斂效率的影響
提前停止策略
雖然能夠使用多種技巧來使自動化網絡結構設計變的更加高效。但是自動網絡設計中耗費時間的關鍵還是在于每次獲得reward的時間成本非常高,需要將生成的網絡結構在對應的數據集上訓練至收斂,然后獲得相應的準確度來表示結構的好壞并且用作reward。本文作者發現,通過調整學習率,只需要正常訓練30分之一的過程(例如,CIFAR-100數據集上訓練12個epoch),就可以得到網絡的大致最終精度,這樣可以大大降低時間成本。但是,這樣的網絡結構精度及其關聯的reward會有誤差,導致無法精細區分網絡結構的優劣,本文提出一個憑經驗的解決公式:
即真實的reward和提前停止的準確度成正比,但是和網絡結構的計算復雜度和結構連接復雜度(block中邊數除以點數)成反比。通過這樣的公式矯正,得到的reward對網絡結構的好壞更加具備可鑒別性(如圖六所示)。
圖六:
提前停止的準確度與網絡真實準確度、
計算復雜度、連接復雜度的關系
實驗結果
本文使用了32個GPU,經過3天的搜索,可以在CIFAR數據集上找到性能達到目前先進水平的網絡結構(如圖七所示)。
圖七:
搜索過程以及學習得到的最優網絡結構
相比之前的自動網絡搜索方法(如Google NAS算法的數百塊GPU以及一個月時間),BlockQNN算法可謂十分高效(如表二、表三所示)。
表二:
不同自動網絡結構設計算法的
計算資源對比
表三:
在CIFAR數據集上不同網絡結構的錯誤率
另一方面,學習獲得的網絡結構也可以更容易的遷移到ImageNet任務上,取得了不錯的精度(如表四所示)。
表四:
在Imagenet數據集上不同網絡結構的錯誤率
為了驗證BlockQNN算法是否真的學習到了設計網絡的方式,在同一搜索空間下和暴力搜索進行對比,可以發現本文提出的BlockQNN算法能獲得比暴力搜索更好的模型(如圖八所示)。
圖八:
強化學習與暴力搜索獲得網絡結構
在CIFAR數據集的準確率
對整個搜索過程和結果網絡結構進行分析(如圖九所示),本文作者發現學習得到的優異結構擁有一些共性。比如multi-branch結構、short-cut連接方式等這些現在常用的設計思想。同時,作者也發現了一些不太常見的結構共性,比如卷積層之間的addition操作出現的十分頻繁,這些學習得到的網絡結構還有待進一步的分析和研究。
圖九:
BlockQNN算法設計的網絡結構示例
結論
本文提出了一種高效的基于強化學習的網路結構自動設計算法——BlockQNN,其通過“Block”的設計思想,讓網絡結構搜索空間大大降低,并且使得學習得到的網絡具備非常強的可遷移性。同時,本文使用“提前停止”和分布式架構來加速整個學習過程,達到了百倍于之前Google NAS算法的速度(僅需要32塊GPU以及3天的訓練)。實驗表明,其學習得到的網路結構在CIFAR數據集上達到人類設計網絡結構的精度,并且其結構可以遷移到大規模的ImageNet數據集上,也能取得不錯的性能。作者希望朝著自動化深度學習這個目標繼續發展算法,最終把人從復雜繁瑣的網絡設計和調參中解放出來,實現深度學習更進一步的“智能化”。
-
網絡結構
+關注
關注
0文章
48瀏覽量
11090 -
Block
+關注
關注
0文章
26瀏覽量
14700
發布評論請先 登錄
相關推薦
評論