1. 程式人生 > >深度卷積神經網路的14種設計模式

深度卷積神經網路的14種設計模式

機器之心編譯

參與:吳攀、武競、李澤南、蔣思源、李亞洲

  這篇論文的作者是來自美國海軍研究實驗室的 Leslie N. Smith 和來自美國馬里蘭大學的 Nicholay Topin,他們在本論文中總結了深度卷積神經網路的 14 種設計模式;其中包括:1. 架構結構遵循應用;2. 擴增路徑;3. 努力實現簡潔;4. 增加對稱性;5. 金字塔形狀;6. 用訓練資料覆蓋問題空間;7. 過訓練;8. 增量特徵構造;9. 規範層輸入;10. 可用資源決定網路深度;11. 轉換輸入;12. 求和連線;13. 下采樣過渡;14. 用於競爭的 MaxOut。該論文已被提交到了 ICLR 2017。論文原文可點選文末「閱讀原文」下載。

摘要

深度學習領域近來的研究已經產出了大量的新架構。與此同時,也有越來越多的團隊在將深度學習應用到新的應用和問題上。這些團隊中的許多都可能是由沒有經驗的深度學習實踐者構成的,他們可能會對讓人眼花繚亂的架構選擇感到困惑,因此會選擇去使用一個更古老的架構,如 AlexNet。在這裡,我們嘗試挖掘近來深度學習研究中包含的集體知識(collective knowledge)以發現設計神經網路架構的基本原理,從而幫助彌合這一差距。此外,我們還描述了幾種架構創新,其中包括 Fractal of FractalNet、Stagewise Boosting Networks 和 Taylor Series Networks(我們的 Caffe 程式碼和 prototxt 檔案將會在被 ICLR 接受後公開)。我們希望這項初步的工作能夠激勵進一步的研究。

1.引言

最近,關於新型神經網路架構的文章已經出現了很多,特別是關於殘差網路(Residual Network)的,比如 He et al. (2015; 2016); Larsson et al. (2016); Zhang et al. (2016); Huang et al. (2016b)。這促使我們在一個更高的層面上來看待這些架構——將這些架構看作是普遍設計原理的潛在來源。這是相當重要的,因為現在有許多沒有經驗的實踐者在想辦法將深度學習應用到不同的新應用上。缺乏指導會導致深度學習實踐新手忽視最新的研究而選擇 AlexNet(或一些類似的標準架構),不管其是否合適他們的應用。

這種研究的極大豐富也是一個機會:可以確認能為特定背景的應用帶來好處的元素。我們提出了一些基本的問題:深度網路設計的普遍原理是否存在?這些原理可以從深度學習的集體知識(collective knowledge)中挖掘出來嗎?哪些架構選擇在哪些特定的背景(context)中效果最好?哪些架構或部分架構看起來很簡潔優美?

設計模式(design pattern)的概念最早由 Christopher Alexander (Alexander (1979)) 引入到建築物和城鎮的結構設計上。Alexander 寫道:一種永恆的架構可以一直存在,這種質量可以通過基於普遍原理進行設計而實現。這種設計模式的基礎是它們能在給定的背景中解決力量的衝突,並實現類似於自然生態平衡那樣的均衡。設計模式既是高度特定的(使得它們可以很清楚地遵循),也是靈活的(讓它們可被適配到不同的環境和情景中)。受 Alexander 的工作的啟發,「gang of four」(Gamma et al. (1995))將設計模式的概念應用到了面向物件的軟體的架構設計上。這本經典的電腦科學書籍描述了 23 種可以用來解決軟體設計中普遍存在的問題的模式,例如「需求總是在改變」。我們受到了之前這些在架構上的工作的啟發,決定闡釋神經網路架構的可能設計模式。

設計模式可以提供普遍性的指導原則,在這裡我們首先要定義用於神經網路架構的設計模式。整體而言,要為所有的神經網路和所有的應用定義設計原理是一項巨大的任務,所以我們將這篇論文的範圍限制在了卷積神經網路(CNN)及其基本的影象分類應用上。但是,我們認識到架構必須依賴於具備我們的第一設計模式的應用——設計模式 1:架構結構遵循應用;但相關的細節留待未來解決。此外,這些原理讓我們可以發現已有研究中的一些缺陷和闡釋全新的架構特徵,比如 freeze-drop-path(參見 4.1 節)。這裡闡述的經驗法則可能對有經驗的和新手的實踐者都有價值。另外,我們真心希望這項初步的研究能夠成為其它研究的墊腳石,能幫助其他人發現和分享其它深度學習設計模式。

2.相關工作

本節介紹和總結了其它一些神經網路架構上的相關研究工作,但由於篇幅限制,機器之心未對此節進行編譯,詳情請檢視原論文。

3.設計模式

就我們所知,提供合適架構選擇的指導與理解的文獻資料很少。《Neural Networks: Tricks of the Trade》(Orr & Muller, ¨ 2003) 這本書包含了網路模型推薦,但沒有參考過去幾年的大量研究。與這項工作最接近的可能是 Szegedy et al. (2015b),作者在其中描述了幾種基於他們自己的經驗的設計原理。

我們仔細審閱了文獻以提取出它們的共性並將它們的設計歸結成了基本的元素——這些元素也許可被認為是設計模式。在審閱文獻的過程中,我們似乎很清楚一些設計似乎是簡潔優雅的,而另一些則沒那麼簡潔優雅。在這裡,我們將首先描述一些高層面的設計模式,然後再提出一些更為詳細的設計模式。

3.1 高層面的架構設計

一些研究者已經指出 ImageNet 挑戰賽 (Russakovsky et al., 2015) 的獲勝者在不斷使用越來越深度的網路(參見:Krizhevsky et al. (2012), Szegedy et al. (2015a), Simonyan & Zisserman (2014), He et al. (2015))。另外在 ImageNet 挑戰賽上很明顯的一點是:將通過網路的路徑的數量倍增是最近的一個趨勢;如果看一看 AlexNet 到 Inception 到 ResNets 的演變,就能明顯看到這個趨勢。比如說,Veit et al. (2016) 表明 ResNets 可被看作是帶有不同長度的網路的指數集合(exponential ensemble)。這引出了設計模式 2:擴增路徑。開發者可以通過將多個分支包含在架構中來實現。最近的例子包括 FractalNet (Larsson et al. 2016)、Xception (Chollet 2016) 和決策森林卷積網路(Decision Forest Convolutional Networks (Ioannou et al. 2016))。我們甚至可以更進一步預測今年的 ImageNet 獲勝者也還會增加他們的架構中的分支數量,而不是繼續增加深度。

科學家們已經擁抱簡潔性/簡約性(simplicity/parsimony)幾個世紀了。簡潔性的例子可參考論文「Striving for Simplicity」(Springenberg et al. 2014),其使用更少型別的單元實現了當時最佳的結果。我們將其加為設計模式 3:努力實現簡潔——使用更少型別的層以保持網路儘可能簡單。我們還在 FractalNet (Larsson et al. 2016) 設計中注意到了一種特定程度的簡潔性,我們將其歸功於其結構的對稱性。架構的對稱性(architectural symmetry)通常被看作是美麗和質量的標誌,所以我們在這裡得到了設計模式 4:增加對稱性。除了對稱性以外,FractalNets 還遵循了「擴增路徑」設計模式,所以它是我們第 4 節的實驗的基礎。

為了理解相關的力量,考察權衡是設計模式的關鍵元素。一種基本的權衡是最大化表徵的力量 vs 冗餘的和非區分的資訊的壓縮。這普遍存在於所有卷積神經網路中,從資料到最後的卷積層,啟用(activation)被下采樣(downsample)並且通道數量增加。一個例子是深度金字塔殘差網路(Deep Pyramidal Residual Networks (Han et al. (2016)))。這讓我們得到了設計模式 5:金字塔形狀,其中在整個架構中應該有一次整體的平滑的下采樣,而且該下采樣應該與通道數量的增長結合起來。

深度學習中另一個重要的權衡是:訓練精度 vs 網路泛化到其從未見過的案例的能力。泛化的能力是深度神經網路的一個很重要的性質。一種提升泛化的方法是設計模式 6:用訓練資料覆蓋問題空間(Ratner et al. 2016, Hu et al. 2016, Wong et al. 2016, Johnson-Roberson et al. 2016)。這讓訓練精度可以直接提升測試精度。此外,正則化(regularization)常被用於提升泛化。正則化包括 dropout (Srivastava et al. 2014a) 和 drop-path (Huang et al. 2016b) 等方法。正如 Srivastava et al. 2014b 指出的那樣,dropout 可通過向架構中注入噪聲來提升泛化能力。我們將在訓練過程使用正則化技術和謹慎的噪聲注入可以提升泛化(Srivastava et al. 2014b, Gulcehre et al. 2016)的結論歸結為設計模式 7:過訓練(over-training)。過訓練包含網路在一個更艱難的問題上訓練的任何訓練方法——該問題的難度超過了必要,因此在更容易的推理情況中的表現可以得到提升。除了正則化方法,設計模式 7 還包括有噪聲的資料的使用(Rasmus et al. 2015, Krause et al. 2015, Pezeshki et al. 2015)。

3.2 細節上的架構設計

很多更成功的架構的一個共同點是使每個層更容易完成任務。使用極深層網路(very deep network)就是這樣的例子,因為任何單個層只需要遞增地修改輸入。這部分解釋了殘差網路(residual network)的成功,因為在極深層網路中,每層的輸出可能與輸入相似,因此將輸入代替層的輸出能使層更容易完成任務。這也是擴增路徑設計模式背後的一部分動機,但是使每個層簡化任務的想法超越了這一概念。設計模式 8 :增量特徵構造(Incremental Feature Construction)的一個例子是在 ResNets 中使用短距離跳躍(skip)。最近的一篇論文(Alain & Bengio (2016))證明在深度 128 的網路中使用長度為 64 跳越會導致網路的第一部分不訓練,並且導致不變化的權重,這是需要避免的。

設計模式 9:規範層輸入(Normalize layer inputs)是另一個簡化層任務的方法:使層輸入標準化。已經顯示,層輸入的標準化能改善訓練結果和提高準確性,但是潛在機理並不清楚(Ioffe & Szegedy 2015, Ba et al. 2016, Salimans & Kingma 2016)。Batch 標準化的論文(Ioffe & Szegedy 2015)將提高歸因於解決內部協變數偏移問題,而流標準化(streaming normalization)的作者(Liao et al. 2016)認為這也許是其它原因造成的。我們認為標準化使所有輸入樣本更加平等,就好像它們通過單位轉換進行縮放一樣,這使得反向傳播(back-propagation)訓練更有效。

一些研究,如 Wide ResNets(Zagoruyko & Komodakis 2016),顯示增加通道(channel)的數量提高了效能,但是多餘的通道會產生額外的代價。許多基準資料集的輸入資料有 3 個通道(即顏色 RGB)。幾乎是普遍現象,CNN 的第一層的輸出增加了通道的數量。設計模式 11:轉換輸入。增加通道的幾個例子 / ImageNet 的第一層輸出的數量分別為 AlexNet (96),Inception (32),VGG (224),以及 ResNets (64)。直觀上講,第一層中通道數量從 3 增加是合理的,因為它允許以多種方式檢查輸入資料,但是不清楚使用多少個過濾器。另一個是成本與精確度的權衡。成本包括網路中的引數的數量,這直接反映在訓練的計算量和儲存成本中。增加通道數量會增加成本,這導致設計模式 10:可用資源決定網路深度。除了在下采樣(down-sampling)時使輸出數量加倍(見設計模式 13),根據記憶體、計算資源和期望的精確度來選擇第一層的深度。深度學習的計算開銷很高,每個從業者必須平衡這些成本與其應用程式的效能。

3.2.1 分支連線:串聯、求和/平均與 Maxout

當存在多個分支時,有三種方法來合併輸出:串聯、求和(或平均)與 Maxout。目前看來研究人員對它們的看法各不相同,沒有哪一種方式更具優勢。在本節中,我們提出一些簡單的規則來決定如何合併分支。

求和是合併輸出的最常見方法之一:求和/平均將分支間的近似工作分割,最終形成設計模式 12:求和連線(Summation Joining)。求和是殘差網路的最佳連線機制。因為它允許網路計算校正項(即殘差)而無需整個訊號。sum 和 fractal-join(平均)之間的差異最好通過 drop-path 來理解(Huang et al.,2016)。在輸入跳躍連線總是存在的殘差網路中,求和能使卷積層學習殘差(與輸入的差)。另一方面,在具有若干分支的網路中,如 FactalNet(Larsson et al.,2016),使用均值是最佳方式,因為隨著分支被隨機丟棄,它可以保證輸出平順。

一些研究者似乎更喜歡串聯(concatenation,例如 Szegedy et al,2015)我們相信串聯對於增加池化時的輸出數量是最有用的,這讓我們得到了設計模式 13:下采樣過渡(Down-sampling Transition)。這就是說,當池化或使用步幅(stride)超過 1 的下采樣時,組合分支的最好方法是串聯輸出通道,它可以平滑地實現通常以下采樣方式實現的通道連線和通道數量增加。

Maxout 已經被用於競爭,如本地競爭網路(Srivastava 等人,2014)和多尺度競爭網路(Liao 與 Carneiro,2015)Maxout 只選擇一種啟用,形成設計模式 14:MaxOut for Competition。它與求和或平均「合作」的啟用方式相反,其中存在「競爭」關係,只有一個「贏家」。例如,當分支由不同大小的核(kernel)組成時,Maxout 可用於尺度的不變性,這類似於最大池化(max pooling)的平移不變性。

我們認為所有這些連線機制可以同時加入單獨網路,不同於典型情況。

  

圖 1:這是 FractalNet 模組(a)和 FoF 架構(b)。曾表示如下:卷積層粉紅色,連線層(如均值)是綠色,池層是黃色,預測層是藍色。(b)中的灰色模組表示(a)中的 FractalNet 例項。

4 實驗

4.1 架構創新

本論文的重點是闡明基本設計原則,這樣做的原因就是幫助我們發現一些架構上的創新,在本節中,這些創新將進一步被描繪出來。

首先,我們建議將求和/平均、串聯和 maxout 連線機制與單一架構中的不同角色結合起來。接下來,通過增加分支的設計模式 2 來讓我們能夠大規模修飾 FractalNet 架構的順序。最後按照我們稱之為 Fractal of FractalNet (FoF) 網路,也就是 1b 中展示的分形模式調整模組,而不是按照最大深度來調整。該架構可將深度替換成更大數量的路徑。

4.1.1 Freeze-Drop-Path 和 Stagewise Boosting Networks(SBN)

Drop-path 是被 Huang 等引進的(2016b). 它通過迭代訓練隨機移除分支路徑,就好像這條路徑在整個網路中是不存在的。出於對對稱性的考慮,我們使用了一個叫 freeze-path 的相反的方法。我們凍結權重來達到零的學習率(learning rate),而不是在訓練期間直接移除網路中的分支路徑。迴圈神經網路領域也已經有一種類似的想法被提了出來 (Krueger et al. 2016)。

我們稱結合了 drop-path 和 freeze-path 效用的模型為 freeze-drop-path,這個可以在非隨機情況下得到很好的解釋。圖 1 顯示了一個 FractalNet 分形結構。我們從最左側路徑開始訓練,並將 drop-path 應用到其他分支上面。這個分支的訓練速度會很快,因為相對於整個網路只需要訓練少量的引數。隨後凍結那條分支路徑的權重並激活在原來右邊的一條分支路徑。最左邊的分支也就可以提供一個很好的近似函式,並且下一條分支也能在矯正的基礎上運行了。因為下一個分支路徑相比前一個包含了更多的層,所以和原來的相比更容易逼近矯正項的近似值,因此這樣的分支允許網路獲得更大的準確性。這樣也就可以繼續從左至右來訓練整個網路。freeze-drop-path 將最後加入 FoF 架構(圖片 1b),這個稱之為梯度遞增網路(Stagewise Boosting Networks (SBN)),因為它就是類似於梯度遞增的(Friedman et al. 2001)。遞增神經網路 (boosting neural network;Schwenk & Bengio 2000) 並不是個新概念,但是這個構架就是新的。在 B 部分我們將討論測試的實施。

4.1.2 泰勒級數網路(Taylor Series Netwroks,TSN)

泰勒級數是一個經典的、眾所周知的函式逼近方法。泰勒級數的擴充套件是:

由於神經網路也是函式近似,將網路的分支(branch)看成一個泰勒級數展開的項,它可以作為 SBN 的延伸。這意味著,在求和連線單元(summation joining unit)之前使第二分支的結果平方,類似於泰勒展開中的二階項。類似地,使第三分支立方。我們將它稱作「泰勒級數網路」(TSN),並且存在多項式網路的優先順序(Livni et al. 2014)和網路中的乘式項(例如 Lin et al. 2015 年的論文)。TSN 與 SBN 類比的實現細節詳見附錄討論。

4.2 結果

該章節內的實驗主要是驗證上面提到的架構創新的驗證,但並非完全進行測試。未來會有更完整的評估。

  

表 1:在 CIFAR-10 和 CIFAR-100 上各種架構的測試準確率對比。

  

圖 2:對比原 FractalNet 與用 Concatenation 或 Maxout 替代了一些 fractal-joins 的 FractalNet。同樣展示的還有當用平均池化替代了最大池化時的測試準確度。

  

圖 3:對比原 FractalNet 與用 Concatenation 或 Maxout 替代了一些 fractal-joins 的 FractalNet。同樣展示的還有當用平均池化替代了最大池化時的測試準確度。

表一和圖 3 接下來對比 4.1 章節中描述的架構創新的最終測試準確率的結果。最終的結果顯示要比 FractalNet 基線差一點,但從 3a 和 3b 圖中可以明顯看到新架構訓練起來要比 FractalNet 更快。FoF 架構最終測試準確率類似於 FractalNet,但 SBN 和 TSN 架構(使用 freeze-drop-path)在學習率下降的時候準確率會落後。這在 CIFAR-100 上要比 CIFAR-10 更加明顯,表明這些架構可能更適合帶有大量分類的應用。但是,我們也遺留下了對更多合適應用的探索,以後再做。

5. 結論

在此論文中,我們描述了通過研究近期深度學習論文中的新架構而發現的卷積神經網路架構的設計模式。我們希望這些設計模式對希望推進前沿結果的有經驗的實踐者和尋求深度學習新應用的新手都有所幫助。接下來也有許多的潛在工作可以做,一些工作我們也在此論文中有所指明。我們的努力主要限定在進行分類的殘差神經網路,但希望這一初步工作能啟發其他人進行迴圈神經網路、深度強化學習架構等等其它網路的架構設計模式的研究。