詳述Deep Learning中的各種卷積(四)

作者:Redflashing

本文梳理舉例總結深度學習中所遇到的各種卷積,幫助大家更爲深刻理解和構建卷積神經網絡。

本文將詳細介紹以下卷積概念:

  • 2D卷積(2D Convolution)
  • 3D卷積(3D Convolution)
  • 1 ∗ 1 1*1 11卷積( 1 ∗ 1 1*1 11 Convolution)
  • 反捲積(轉置卷積)(Transposed Convolution)
  • 擴張卷積(Dilated Convolution / Atrous Convolution)
  • 空間可分卷積(Spatially Separable Convolution)
  • 深度可分卷積(Depthwise Separable Convolution)
  • 平展卷積(Flattened Convolution)
  • 分組卷積(Grouped Convolution)
  • 混洗分組卷積(Shuffled Grouped Convolution)
  • 逐點分組卷積(Pointwise Grouped Convolution)

9. 分組卷積

​ 首次在大規模圖像數據集(ImageNet)實現了深層卷積神經網絡結構,引發深度學習熱潮的AlexNet 論文(https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)在 2012 年引入了分組卷積。實現分組卷積的主要原因是讓網絡訓練可在 2 個內存有限(每個 GPU 有 1.5 GB 內存)的 GPU 上進行。下面的 AlexNet 表明在大多數層中都有兩個分開的卷積路徑。這是在兩個 GPU 上執行模型並行化(當然如果可以使用更多 GPU,還能執行多 GPU 並行化)。

​ 這裏我們介紹一下分組卷積的工作方式。首先典型的2D卷積步驟如下圖所示。在該例子中通過應用128個大小爲 3 ∗ 3 ∗ 3 3*3*3 333的濾波器將輸入層( 7 ∗ 7 ∗ 3 7*7*3 773)變換到輸出層( 5 ∗ 5 ∗ 128 5*5*128 55128)。推廣而言,即通過 D o u t D_{out} Dout個大小爲 h ∗ w ∗ D i n h*w*D_{in} hwDin的濾波器將輸入層( H i n ∗ W i n ∗ D i n H_{in}*W_{in}*D_{in} HinWinDin)變換到輸出層( H o u t ∗ W o u t ∗ D o u t H_{out}*W_{out}*D_{out} HoutWoutDout)。

​ 而在分組卷積中,濾波器被分成不同的組。每個組負責具有一定深度的2D卷積。下圖展示了具有兩個濾波器分組的分組卷積。在每個濾波器組中,每個濾波器只有原2D卷積的一半數目。它們的深度是 D i n 2 \frac{D_{in}}{2} 2Din個濾波器。第一個濾波器分組(紅色)與輸入層的前一半(按深度分半,即 [ : , : , 0 : D o u t 2 ] [:,:,0:\frac{D_{out}}{2}] [:,:,0:2Dout])進行卷積操作。因此,每個濾波器分組都會創建 D o u t 2 \frac{D_{out}}{2} 2Dout個通道。整體而言,兩個分組會創建 2 ∗ D o u t 2 = D o u t 2*\frac{D_{out}}{2}=D_{out} 22Dout=Dout個通道。然後我們將這些通道堆疊在一起得到有 D o u t D_{out} Dout個通道的輸出層。

9.1. 分組卷積與深度可分卷積比較

​ 從上面的例子已經可以發現分組卷積和深度可分卷積之間的聯繫和差異。如果濾波器組的數量和輸入層通道數相同,則每個濾波器的深度都爲1,這與深度可分卷積相同。另一方面,每個濾波器組都包含 D o u t D i n \frac{D_{out}}{D_{in}} DinDout個濾波器。整體而言,輸出層的深度爲 D o u t D_{out} Dout。這不同於深度可分卷積的情況–深度卷積的第一個步驟並不會改變層的深度。深度可分卷積的深度通過 1 ∗ 1 1*1 11卷積進行深度的擴展。

9.2. 分組卷積的優點

  • 高效訓練

    ​ 由於卷積可分爲多個路徑,因此每個路徑可以由不同的GPU進行處理。此過程允許以並行的方式對多個GPU進行模型訓練。這種基於多GPU的模型並行化允許網絡在每個步驟處理更多圖像。一般認爲模型並行化比數據並行化效果更好,後者將數據集分成多個批次(Batch),然後分開訓練每一批次。但是當批次大小過小時,本質上執行的是隨機梯度下降,而非批梯度下降,這會造成收斂速度緩慢切收斂結果更差。

    在訓練非常深的神經網絡時,分組卷積會非常重要,正如下圖ResNeXt中那樣,圖片來自論文(https://arxiv.org/abs/1611.05431)

  • 高效模型

    ​ 即模型參數隨着濾波器組的數量的增加而減少。在前面的示例中,濾波器在標準2D卷積中參數量爲: h ∗ w ∗ D i n ∗ D o u t h*w*D_{in}*D_{out} hwDinDout。而具有2個濾波器組的分組卷積的參數量爲: ( h ∗ w ∗ D i n 2 ∗ D o u t 2 ) ∗ 2 (h*w*\frac{D_{in}}{2}*\frac{D_{out}}{2})*2 (hw2Din2Dout)2。參數量減少了一半。

  • 模型性能更優

    ​ 這有一點讓人驚訝,分組卷積在某些情況下能提供比標準2D卷積更好的模型。這在文章(https://blog.yani.io/filter-group-tutorial/)有很好地解釋,這裏僅做簡要的分析。

    ​ 原因主要和稀疏濾波器(稀疏矩陣)有關。下圖是相鄰層濾波器的相關性,爲稀疏關係。圖爲在 CIFAR10 上訓練的一個 Network-in-Network 模型中相鄰層的過濾器的相關性矩陣。高度相關的過濾器對更明亮,而相關性更低的過濾器則更暗。圖片來自:https://blog.yani.io/filter-group-tutorial

    但當我們用分組卷積後,神奇的事情發生了

    ​ 上圖是當用 1、2、4、8、16 個過濾器分組訓練模型時,相鄰層的濾波器之間的相關性。那篇文章提出了一個可能的解釋:濾波器分組的效果是在通道維度上學習塊對角結構的稀疏性……在網絡中,具有高相關性的過濾器是使用過濾器分組以一種更爲結構化的方式學習到。從效果上看,不必學習的過濾器關係就不再參數化。這樣顯著地減少網絡中的參數數量能使其不容易過擬合,因此,一種類似正則化的效果讓優化器可以學習得到更準確更高效的深度網絡

    ​ 上圖是AlexNet中Conv1濾波器分解:正如作者指出的那樣,過濾器分組似乎會將學習到的過濾器結構性地組織成兩個不同的分組。圖片來自 AlexNet 論文(https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)。

    ​ 此外,每個濾波器分組都會學習數據的一個獨特表徵。正如 AlexNet 的作者指出的那樣,濾波器分組似乎會將學習到的過濾器結構性地組織成兩個不同的分組——黑白過濾器和彩色過濾器。

9.3. 混洗分組卷積(Shuffled Grouped Convolution)

​ 混洗分組卷積由曠視(Face++)團隊在ShuffleNet(https://arxiv.org/abs/1707.01083)首次提出,ShuffleNet是一種計算效率非常高的卷積結構,專門爲計算能力非常有限的移動設備(10-150MFLOP)而設計。

​ 混洗分組卷積背後的思想與分組卷積背後的理念(用於 MobileNetResNeXt示例)和深度可分卷積(在Xception 中使用)。總體而言,隨機分組卷積涉及分組卷積和通道混洗。

​ 在有關分組卷積的部分中,我們知道濾波器被分成不同的組。每個組負責具有一定深度的傳統 2D 卷積。總的計算量顯著減少。對於下圖中的示例,我們有 3 個濾波器組。第一個濾波器組與輸入層中的紅色部分進行卷積操作。同樣,第二個和第三個濾波器組與輸入中的綠色和藍色部分進行卷積操作。每個濾波器組中的卷積核深度僅佔輸入層中總通道計數的 1 3 \frac{1}{3} 31。在此示例中,在第一個分組卷積 GConv1 之後,輸入圖層映射再通過中間層(下文針對該部分進行講解)。然後,通過第二個分組卷積 GConv2 映射到輸出圖層。

​ 分組卷積在計算上是有效的。但問題是,每個濾波器組只處理從輸入層中的固定部分傳遞的信息。對於上圖中的示例,第一個濾波器組(紅色)僅處理從輸入通道前 1/3 傳遞的信息。藍色濾波器組(藍色)僅處理從輸入通道的最後 1/3 傳遞的信息。因此,每個濾波器組都僅限於學習一些特定功能。這一特性阻止通道組之間的信息流,並在訓練期間削弱了模型表現力。爲了克服此問題,ShuffleNet 中引入了通道混洗(Channel Shuffle), 用來進行不同分組的特徵之間的信息流動, 以提高性能.。

​ 通道混洗操作(Channel Shuffle Operation)的想法是,我們希望混合來自不同篩選器組的信息。在下圖中,我們使用 3 個濾波器組應用第一個分組卷積 GConv1 後獲取特徵。在將結果輸入到第二個分組卷積之前,我們首先將每個組中的通道劃分爲多個子組。我們混洗了這些子組。

​ 在進行這樣的洗牌之後,我們繼續一樣執行第二組卷積 GConv2。但現在,由於經過混洗後信息已經混合,因此,通過允許通道之間的信息交換,增強了模型的表現力。

9.4. 逐點分組卷積(Pointwise Grouped Convolution)

​ ShuffleNet 也引入了組點分組卷積.通常對於分組卷積(如 MobileNet或 ResNeXt,組操作在 3 ∗ 3 3*3 33空間卷積上執行,但在 1 ∗ 1 1*1 11卷積上不執行。

​ ShuffleNet論文認爲, 1 ∗ 1 1*1 11卷積在計算上也是昂貴的。並建議在 1 ∗ 1 1*1 11卷積上也應用分組卷積。顧名思義,逐點分組卷積執行 1 ∗ 1 1*1 11卷積的組操作。該操作與分組卷積相同,只有一個修改 1 ∗ 1 1*1 11篩選器上執行,而不是 n ∗ n n*n nn濾波器 ( n > 1 n>1 n>1

​ 在ShuffleNet的論文中,作者利用了三種類型的卷積:(1) 混洗分組卷積;(2) 逐點分組卷積;和 (3) 深度可分卷積。這種架構設計在保持精度的同時顯著降低了計算成本。例如,ShuffleNet 和 AlexNet 的分類錯誤在實際移動設備上是可比的。但是,計算成本已大幅降低,從 AlexNet 中的 720 MFLOP 減少到 ShuffleNet 中的 40~140 MFLOP。由於計算成本相對較低,模型性能好,ShuffleNet在移動設備卷積神經網領域越來越受歡迎。

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章