詳述Deep Learning中的各種卷積(四)
本文梳理舉例總結深度學習中所遇到的各種卷積,幫助大家更為深刻理解和構建卷積神經網絡。
本文將詳細介紹以下卷積概念:
2D卷積(2D Convolution) 3D卷積(3D Convolution) 卷積( Convolution) 反卷積(轉置卷積)(Transposed Convolution) 擴張卷積(Dilated Convolution / Atrous Convolution) 空間可分卷積(Spatially Separable Convolution) 深度可分卷積(Depthwise Separable Convolution) 平展卷積(Flattened Convolution) 分組卷積(Grouped Convolution) 混洗分組卷積(Shuffled Grouped Convolution) 逐點分組卷積(Pointwise Grouped Convolution)
9. 分組卷積
首次在大規(guī)模圖像數據集(ImageNet)實現(xiàn)了深層卷積神經網絡結構,引發(fā)深度學習熱潮的AlexNet 論文(https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)在 2012 年引入了分組卷積。實現(xiàn)分組卷積的主要原因是讓網絡訓練可在 2 個內存有限(每個 GPU 有 1.5 GB 內存)的 GPU 上進行。下面的 AlexNet 表明在大多數層中都有兩個分開的卷積路徑。這是在兩個 GPU 上執(zhí)行模型并行化(當然如果可以使用更多 GPU,還能執(zhí)行多 GPU 并行化)。
這里我們介紹一下分組卷積的工作方式。首先典型的2D卷積步驟如下圖所示。在該例子中通過應用128個大小為的濾波器將輸入層()變換到輸出層()。推廣而言,即通過個大小為的濾波器將輸入層()變換到輸出層()。
而在分組卷積中,濾波器被分成不同的組。每個組負責具有一定深度的2D卷積。下圖展示了具有兩個濾波器分組的分組卷積。在每個濾波器組中,每個濾波器只有原2D卷積的一半數目。它們的深度是個濾波器。第一個濾波器分組(紅色)與輸入層的前一半(按深度分半,即)進行卷積操作。因此,每個濾波器分組都會創(chuàng)建個通道。整體而言,兩個分組會創(chuàng)建個通道。然后我們將這些通道堆疊在一起得到有個通道的輸出層。
9.1. 分組卷積與深度可分卷積比較
從上面的例子已經可以發(fā)現(xiàn)分組卷積和深度可分卷積之間的聯(lián)系和差異。如果濾波器組的數量和輸入層通道數相同,則每個濾波器的深度都為1,這與深度可分卷積相同。另一方面,每個濾波器組都包含個濾波器。整體而言,輸出層的深度為。這不同于深度可分卷積的情況--深度卷積的第一個步驟并不會改變層的深度。深度可分卷積的深度通過卷積進行深度的擴展。
9.2. 分組卷積的優(yōu)點
高效訓練
由于卷積可分為多個路徑,因此每個路徑可以由不同的GPU進行處理。此過程允許以并行的方式對多個GPU進行模型訓練。這種基于多GPU的模型并行化允許網絡在每個步驟處理更多圖像。一般認為模型并行化比數據并行化效果更好,后者將數據集分成多個批次(Batch),然后分開訓練每一批次。但是當批次大小過小時,本質上執(zhí)行的是隨機梯度下降,而非批梯度下降,這會造成收斂速度緩慢收斂結果更差。
在訓練非常深的神經網絡時,分組卷積會非常重要,正如下圖ResNeXt中那樣,圖片來自論文(https://arxiv.org/abs/1611.05431)

高效模型
即模型參數隨著濾波器組的數量的增加而減少。在前面的示例中,濾波器在標準2D卷積中參數量為:。而具有2個濾波器組的分組卷積的參數量為:。參數量減少了一半。
模型性能更優(yōu)
這有一點讓人驚訝,分組卷積在某些情況下能提供比標準2D卷積更好的模型。這在文章(https://blog.yani.io/filter-group-tutorial/)有很好地解釋,這里僅做簡要的分析。
原因主要和稀疏濾波器(稀疏矩陣)有關。下圖是相鄰層濾波器的相關性,為稀疏關系。圖為在 CIFAR10 上訓練的一個 Network-in-Network 模型中相鄰層的過濾器的相關性矩陣。高度相關的過濾器對更明亮,而相關性更低的過濾器則更暗。圖片來自:https://blog.yani.io/filter-group-tutorial

但當我們用分組卷積后,神奇的事情發(fā)生了

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

上圖是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)而設計。
混洗分組卷積背后的思想與分組卷積背后的理念(用于 MobileNet和ResNeXt示例)和深度可分卷積(在Xception 中使用)??傮w而言,隨機分組卷積涉及分組卷積和通道混洗。
在有關分組卷積的部分中,我們知道濾波器被分成不同的組。每個組負責具有一定深度的傳統(tǒng) 2D 卷積??偟挠嬎懔匡@著減少。對于下圖中的示例,我們有 3 個濾波器組。第一個濾波器組與輸入層中的紅色部分進行卷積操作。同樣,第二個和第三個濾波器組與輸入中的綠色和藍色部分進行卷積操作。每個濾波器組中的卷積核深度僅占輸入層中總通道數的。在此示例中,在第一個分組卷積 GConv1 之后,輸入圖層映射再通過中間層(下文針對該部分進行講解)。然后,通過第二個分組卷積 GConv2 映射到輸出圖層。
分組卷積在計算上是有效的。但問題是,每個濾波器組只處理從輸入層中的固定部分傳遞的信息。對于上圖中的示例,第一個濾波器組(紅色)僅處理從輸入通道前 1/3 傳遞的信息。藍色濾波器組(藍色)僅處理從輸入通道的最后 1/3 傳遞的信息。因此,每個濾波器組都僅限于學習一些特定功能。這一特性阻止通道組之間的信息流,并在訓練期間削弱了模型表現(xiàn)力。為了克服此問題,ShuffleNet 中引入了通道混洗(Channel Shuffle), 用來進行不同分組的特征之間的信息流動, 以提高性能.。
通道混洗操作(Channel Shuffle Operation)的想法是,我們希望混合來自不同篩選器組的信息。在下圖中,我們使用 3 個濾波器組應用第一個分組卷積 GConv1 后獲取特征。在將結果輸入到第二個分組卷積之前,我們首先將每個組中的通道劃分為多個子組。我們混洗了這些子組。
在進行這樣的洗牌之后,我們繼續(xù)一樣執(zhí)行第二組卷積 GConv2。但現(xiàn)在,由于經過混洗后信息已經混合,因此,通過允許通道之間的信息交換,增強了模型的表現(xiàn)力。
9.4. 逐點分組卷積(Pointwise Grouped Convolution)
ShuffleNet 也引入了組點分組卷積.通常對于分組卷積(如 MobileNet或 ResNeXt,組操作在空間卷積上執(zhí)行,但在卷積上不執(zhí)行。
ShuffleNet論文認為,卷積在計算上也是昂貴的。并建議在卷積上也應用分組卷積。顧名思義,逐點分組卷積執(zhí)行卷積的組操作。該操作與分組卷積相同,只有一個修改在篩選器上執(zhí)行,而不是濾波器 ()。
在ShuffleNet的論文中,作者利用了三種類型的卷積:(1) 混洗分組卷積;(2) 逐點分組卷積;和 (3) 深度可分卷積。這種架構設計在保持精度的同時顯著降低了計算成本。例如,ShuffleNet 和 AlexNet 的分類錯誤在實際移動設備上是可比的。但是,計算成本已大幅降低,從 AlexNet 中的 720 MFLOP 減少到 ShuffleNet 中的 40~140 MFLOP。由于計算成本相對較低,模型性能好,ShuffleNet在移動設備卷積神經網領域越來越受歡迎。
參考資料
A Comprehensive Introduction to Different Types of Convolutions in Deep Learning | by Kunlun Bai | Towards Data Science
Convolutional neural network - Wikipedia
Convolution - Wikipedia
一文讀懂卷積神經網絡中的1x1卷積核 - 知乎 (zhihu.com)
[1312.4400] Network In Network (arxiv.org)
Inception網絡模型 - 啊順 - 博客園 (cnblogs.com)
ResNet解析_lanran2的博客-CSDN博客
一文帶你了解深度學習中的各種卷積(上) | 機器之心 (jiqizhixin.com)
Intuitively Understanding Convolutions for Deep Learning | by Irhum Shafkat | Towards Data Science
An Introduction to different Types of Convolutions in Deep Learning
Review: DilatedNet — Dilated Convolution (Semantic Segmentation)
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
Separable convolutions “A Basic Introduction to Separable Convolutions
Inception network “A Simple Guide to the Versions of the Inception Network”
A Tutorial on Filter Groups (Grouped Convolution)
Convolution arithmetic animation
Up-sampling with Transposed Convolution
Intuitively Understanding Convolutions for Deep Learning
