曠視張祥雨:神經網絡架構設計新思路

  • 2020 年 12 月 31 日
  • AI

作者 | 蔣寶尚
編輯 | 青暮
深度學習模型在很多任務上都取得了不錯的效果,但調參卻是一項非常痛苦的事情,大量的超參數和網絡結構參數會產生爆炸性的組合。因此最近幾年神經網絡的架構搜索和超參數優化成為一個研究熱點。此外,對於架構設計新方法、新機制的探索,也是當下深度學習研究與落地的重點課題之一。
神經網絡的架構設計目前進展到哪了?11月27日,曠視研究院主任研究員、智源青年科學家張祥雨在由智源社區舉辦的 NeurIPS 2020中國預講會上做了「神經網絡架構設計新思路」的主題演講,從NAS、隱式模型、重參數化模型三個方面介紹了神經網絡架構設計的最新進展。
張祥雨在演講中提到:
  • 神經網絡架構搜索中存在一個有趣的現象,即搜索空間中不同模型的收斂速度與最終性能之間常常存在正相關關係,據此我們可以不基於準確率、而是基於收斂速度去判斷子結構的優劣,從而實現高效搜索;

  • 隱式模型有低參數量、強表示能力、大感受野等優點,這對設計通用模型結構可以帶來很多啟發;

  • 重參數化則是一種應用技巧,可以讓模型的訓練和推理更加高效。

張祥雨是孫劍的首位深度學習博士生,目前是曠視研究院基礎模型組負責人。他已經在CVPR、ICCV、ECCV、NeurIPS、ICLR等AI頂會上發表30多篇論文,總引用量超過9萬。例如視覺領域廣泛使用的ResNet,其二作就是張祥雨。他還是ShuffleNet的一作,該框架以輕量級低功耗和高性能出名,特別適用於移動端設備,曠視憑藉此模型拿下了OPPO、小米等手機大廠的視覺訂單。如今,張祥雨將注意力轉向了AutoML、動態模型等新型神經網絡模型設計方法。
以下是講座全文,AI科技評論做了不改變原意的整理。
這次演講的題目是「神經網絡架構設計新思路」。神經網絡架構領域的研究方向演變非常快。例如在視覺方面,過去幾年就發生了翻天覆地的變化。
例如在2017年以前,以ResNet、DenseNet為代表的手工模型設計方法是當時的主流,而像MobileNet、ShuffleNet這樣的輕量化結構也展現了很強的實用價值。
但在2018年以後,NAS(神經網絡架構搜索)大行其道,在多個視覺數據集上達到了最優性能,大有全面超過手工模型設計的趨勢。進入2019年之後,動態網絡、尤其是動態卷積核網絡開始進入人們的視線,為神經網絡的高效落地提供了一種新的思路。到了2020年,隨着attention技術在CV領域日益成熟,使用attention替換傳統的卷積結構直接設計大型神經網絡,成為了新的研究熱點。例如,在今年的ICLR 2020上就出現了單純以transformer為基礎的神經網絡,其性能也比較出眾。
那麼我們不禁會問,除了以上熱門領域之外,神經網絡架構設計還有哪些思路?哪些技術有希望主導下一代神經網絡的設計思想?本次報告中我將和大家交流我們最近關於架構設計新方法的思考。整個分享分為三個部分:
1.基於收斂性指標的NAS新框架;
2.隱式模型;
3.重參數化模型。
這些思路聽起來都比較「小眾」,我也是希望能拋磚引玉,和大家一起討論模型設計的未來方向。

1

基於收斂速度指標的神經網絡架構搜索算法

簡單來說,神經網絡架構搜索(NAS)就是從一個給定的搜索空間中找到一個神經網絡架構,使得這個架構在訓練完畢之後,在測試集上能夠達到最高的性能。
基於此,我們可以設計一種非常簡單直接的NAS框架:首先利用agent預測一個結構,在目標數據集上進行訓練和測試,再利用測試結果反饋和更新agent。如此反覆,直到找到性能最高的網絡結構。
事實上最早的一批NAS算法就是這麼做的。這樣的算法雖然原理可行,但是搜索速度通常並不理想,因為每預測一個結構,我們都需要在整個數據集上進行訓練;當數據集規模很大時,算法的效率無疑是非常低的。
為了解決這個問題,學界又提出了基於權重共享的模型搜索(Weight-sharing NAS)這一大類算法,思路是構建一個超網絡(SuperNet)。超網絡包含了搜索空間的全部子網絡,不同的子網絡以共享參數的方式嵌入在超網絡中。
這樣,我們只需要用某種方式訓練超網絡,就相當於同時訓練了搜索空間中的全部子網絡,因此搜索效率大幅提升。目前比較流行的基於梯度的NAS算法(如DARTS)、One-Shot類算法(如SPOS)等都屬於這類方法。
然而,以上兩種思路都存在一些問題。對於早期基於反覆採樣和重新訓練的NAS框架而言,搜索空間的大小動輒10的十幾次方數量級,然而在搜索中我們能採樣到的網絡數量最多只有幾千或者幾萬個。在如此少的採樣比例下,我們還能不能有效地探索出最優的結構,其實是難以保證的。而對於權重共享的搜索算法,雖然從優化形式看,它允許對搜索空間的所有模型進行共同優化,但由於子網絡之間的權重互相耦合,也存在「優化其中的一個模型,同時拖累其他模型」的缺點。
所以,NAS是否能搜出搜索空間中的最好結構,目前還沒有統一的結論。從結果反推,我們知道NAS在前兩年取得了非常大的成功,在很多任務中都打敗了人類手工設計的神經網絡。因此從結果來看NAS確實有效果,但正因為有上述質疑,NAS是否真的work、以及為什麼有效果,目前還未徹底解決。比如,有人就會問會不會因為搜索空間構造太簡單,所有的空間構造都很同質化,導致NAS算法隨便搜一搜,就能得到不錯的結果?
去年年初有一個非常著名的工作:隨機搜索,它在目前主流的一些搜索空間中隨機挑了一些結構,然後發現其性能和目前最好的NAS方法在同一水平。這也從側面說明了NAS領域的一個比較尷尬的處境,就是由於搜索空間構造的太平凡,導致NAS算法本身其實並沒有貢獻太多的價值。
當然在後來,經過人們的進一步研究,搜索空間在擴展,搜索算法在更新,目前的NAS算法已經能夠穩定打敗隨機搜索的基準線。換句話說,在更複雜的搜索空間,隨機搜索已經無法解釋NAS算法是如何工作的了。NAS內部肯定還有別的機制,讓它達到非常高的性能。 
在ICLR 2020上,有一篇非常棒的論文分析了cell-based搜索空間的神經網絡架構搜索算法。通過理論和實驗分析,文章提出了一個觀點,即gradient-based NAS算法傾向於搜索出收斂速度較快而非性能最好的結構
此結論聽起來像是一個缺點,因為我們當然希望能夠真正在搜索空間中找到性能最好的結果。但其實在模型設計領域的經驗表明,快速收斂和高性能往往存在強相關性。例如從VGG進化到ResNet,ResNet通過添加shortcut的方式,不僅加快了收斂速度,也明顯提升了性能。換句話說,高速收斂通常也意味着高性能。
快速收斂和高性能強相關這一假設,對我們接下來的工作的啟示是:對NAS算法而言,除了直接找性能最好的架構之外,是不是還存在一種間接的途徑,即尋找擁有快速收斂的特性的網絡結構?當然在此之前,我們需要回答一個問題:如何衡量網絡的收斂速度?
我們在ECCV 2020上發表的AngleNAS搜索算法,顯式地將模型的收斂速度納入了NAS框架中。它的總體搜索框架基於我們去年提出的Single Path One-shot算法(單路徑超網絡搜索)。我們都知道,NAS所涉及的搜索空間常常是十分巨大的,如前所述,這會顯著降低算法的搜索效率。
因此,當前NAS一個非常主流的方法叫做 Progressive NAS,中文翻譯為「漸進式神經網絡架構搜索技術」,這種技術在搜索過程中,能夠不斷的拋棄掉性能比較差的結構。然而在「拋棄」的過程中又會涉及一個標準:應該拋棄哪些東西?
AngleNAS這篇文章中提出了一個標準,當超網絡訓練一段時間之後,其中的每個子結構的權重相對於初始的位置的角度更新量變化的越大,我們就認為該結構更容易收斂,根據前面的假設,得到性能更高的結構的概率也更大。因此,我們更有理由在訓練過程中裁剪掉那些角度更新量較小的結構,從而減小搜索空間。
那麼這裡為什麼會用角度更新量、而不是其他距離度量來衡量收斂速度呢?這是因為現在的神經網絡一般都包含BN,它賦予了模型各層的放縮不變性。換句話說,各層權重的模長已經不起決定性作用了;角度則更重要,也能夠衡量速度快慢。
我們也做了簡單的模擬實驗,觀察角度更新量和最後性能之間的關係,結果如上圖所示。角度更新量變化的越大,模型的最終性能更高的概率也越大。因此,角度更新量是衡量性能的一個重要指標。
從上圖我們還可以發現一個有趣的現象,在搜索指標和最終性能的排序相關度方面,角度更新量指標甚至超過了直接使用SuperNet Accuracy。這是為什麼?雖然SuperNet Accuracy是非常符合直覺的,但是因為我們使用權重共享架構,其不同子結構之間的權重相互干擾,直接使用它們的Accuracy可能並不能準確衡量每個子結構單獨訓練的質量。
另外,關於網絡性能的度量方面,最近有一篇名為 NAS without Training的文章非常有趣。主要想法是:對於一個已經初始化完畢的神經網絡,去計算其損失函數關於輸入數據的雅可比矩陣。當數據變化的時候,就把相應的雅可比矩陣看成一個長向量,比較這些向量之間的相關性。作者發現了一個非常有趣的現象:性能越好的結構,在不同數據之間,其雅可比矩陣越不相關。這樣我們就可以在不訓練的情況下,快速判斷一個網絡的好壞。
從以上工作中,我們可以得出一個結論:很多時候沒有必要基於accuracy設計衡量標準。我們只需評判神經網絡的收斂速度,就可以大概知道這個結構最終的性能,從而實現快速高效的神經網絡架構搜索。
在我們最新的文章「NAS with Random Label」中,我們設計了一個NAS框架,它在搜索過程中完全不使用ground-truth label,僅使用random label,就能得到和使用真實標籤相同的性能。它的出發點是「一個好的結構應該是通用的,不應該依賴特定的標籤分佈,以至於在隨機label下也應該能產生效果」。當然,我們需要解決如何基於隨機標籤進行搜索的問題,如果直接擬合,效果當然會非常差。
這裡基於前面介紹的幾個工作,我們提出了採用收斂速度指標進行搜索:我們沒必要直接比較準確度(因為標籤是隨機的,準確度並不可靠),只比較每個結構的收斂速度的快慢。接着,我們利用Single Path One-shot搜索框架,找到在random label上收斂速度最快的那個結構。至於收斂速度的衡量標準,我們直接使用了我們在AngleNAS中提出的角度更新量作為指標。
如上圖,從實驗來看,結果非常理想。在只使用random label的情況下,在多個數據集、多個搜索空間上都達到了非常好的結果。
總結一下,基於收斂度量的神經網絡架構搜索是一個非常新的領域。首先,相對傳統的基於精度的搜索方案,它是一個強而高效的基準線。其次,收斂度量還可以作為NAS算法中生成候選架構的有效策略,對理解神經網絡模型的訓練過程也帶來了新的啟發。

2

隱式模型

下面介紹另一種神經網絡架構設計思路:隱式模型。在通常的神經網絡里,每一層都可以寫成顯式函數的形式,即y=f(x;w)。而隱式模型則是使用隱函數,例如f(x,y;w)=0,來建模其中的各個層。這種做法粗看起來多此一舉,因為隱式模型在推理階段還需要求解方程(或優化問題),並不如普通的顯式模型用起來方便。但是隱式模型也有很多好處,例如同等參數量下更強的表示能力,非常大的感受野等等。
隱式模型的研究歷史比較長遠,例如已經有不少工作將CRF、維納濾波、Tree Filter等圖像處理常用的隱式模型引入到神經網絡里。但給我印象最深的是NeurIPS 2019的深度不動點模型(DEQ)。其主要想法是把各層的函數映射寫成不動點迭代的形式。例如,輸入是x,輸出是z,但是輸出z同時也出現在了輸入x里。因此,必須要把方程解出來,才能得到輸出z。這篇文章採用了牛頓迭代的方法,在前向傳播中求解z;而在反向傳播的時候,使用了隱函數求導的鏈式法則,如此可以非常高效地求出梯度。
在今年NeurIPS,這篇文章的作者進一步把這個思路推廣到了主流的CV任務里(如分類、語義分割),並提出多尺度深度不動點模型(MDEQ),在很多任務中都取得了相對比較高的性能。
我們最近也參考了這類工作,把深度不動點模型運用到了目標檢測領域。在目標檢測中,FPN(Feature Pyramid Network)是非常常用的多尺度融合的模型,通常可以寫成某種顯函數的形式。而在我們的工作中,如上圖所示,借用深度不動點模型的思想,將其寫成了一個隱函數。這樣做的好處是使得淺層和深層的信息實現徹底的融合,同時參數量也非常少,僅相當於一層fpn的參數量。
實驗結果可以看出,採用了這樣的一種隱函數FPN設計以後,在目前主流的檢測模型上都取得了非常明顯的提升。因此,我們認為隱式模型是模型設計的下一個發展方向之一,值得深入研究。
當然,目前隱函數模型也存在一些問題,例如解方程的速度非常慢,很大程度上影響了模型的實用性。這也需要學界共同努力解決。

3

重參數化模型

最後我們介紹重參數化模型,這是實用化模型的一種設計範式。所謂重參數化就是指在訓練的時候使用一種神經網絡結構,而在推理階段使用另一種結構,同時保證這兩個結構在數學上是等效或近似等效的。通過這樣的變換技巧,我們希望模型在訓練階段比較容易收斂,容易得到更高的性能;而在推理階段,模型結構能夠在執行上比較高效,減少模型的冗餘或碎片化。
下面介紹一些比較有代表性的工作,例如我的一個實習生做的ACNet V1/V2。在ACNet中,作者在實驗中觀察到了一個現象:對於卷積神經網絡的一個kernel來說,其不同空間位置的權重重要性是不同的。一般而言,靠近kernel中心的位置,重要性會更高。
於是ACNet這篇文章設計了重參數化kernel:把一個大的3×3卷積核拆解成一個3×3加上一個1×3再加一個3×1。在這種重參數化表示模式下,kernel總參數量、總自由度其實和單個3×3是相同的,但在訓練的時候,這會使得每個kernel的不同位置權重發生一些變化,它會學出一個中間權重賦值大,兩邊賦值比較小的結構。通過實驗驗證發現,這樣是可以比較明顯提升性能的。並且在推理階段,上述三個卷積可以合併成一個等效的卷積運算,不增加參數量和計算量,相當於「免費漲點」
而在ACNet V2中,我們進一步提出了一種性能更好的重參數化方法,把一個類似 Inception block的複雜結構來重參數化k×k卷積核。同樣可以取得訓練時的性能提升,同時推理也保持高效。
我們最新的工作RepVGG,同樣是利用重參數方法,使得我們可以從頭開始訓練經典的VGG網絡,達到媲美ResNet的高性能的同時還保持了高的推理速度。
這是如何實現的呢?原理非常簡單,我們把每一個3×3卷積核拆成一個3×3卷積、一個1×1卷積,再加上一個恆等映射,共三個分支。這樣,在模型訓練的時候,它的表現更接近於ResNet,即更容易訓練。而推理階段,我們將三條支路合併為一個3×3卷積,從而變回了VGG網絡。從應用角度來看,這種VGG網絡的所有層都是3×3卷積,非常方便硬件加速,同時也緩存友好,推理高效。
總結一下,模型重參數化是一種模型等價變換技巧,它讓模型在訓練的時候具有容易收斂的特性,而在推理的時候又有高效推理的能力,具有很強的實用價值。

點擊閱讀原文,直達AAAI小組!

由於微信公眾號試行亂序推送,您可能不再能準時收到AI科技評論的推送。為了第一時間收到AI科技評論的報道, 請將「AI科技評論」設為星標賬號,以及常點文末右下角的「在看」。