如果你聽說過深度學(xué)習(xí)中不同種類的卷積(比如 2D / 3D / 1x1 /轉(zhuǎn)置/擴(kuò)張(Atrous)/空間可分/深度可分/平展/分組/混洗分組卷積),并且搞不清楚它們究竟是什么意思,那么這篇文章就是為你寫的,能幫你理解它們實(shí)際的工作方式。
一、卷積與互相關(guān)
在信號(hào)處理、圖像處理和其它工程/科學(xué)領(lǐng)域,卷積都是一種使用廣泛的技術(shù)。在深度學(xué)習(xí)領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)(CNN)這種模型架構(gòu)就得名于這種技術(shù)。但是,深度學(xué)習(xí)領(lǐng)域的卷積本質(zhì)上是信號(hào)/圖像處理領(lǐng)域內(nèi)的互相關(guān)(cross-correlation)。這兩種操作之間存在細(xì)微的差別。
無需太過深入細(xì)節(jié),我們就能看到這個(gè)差別。
其定義是兩個(gè)函數(shù)中一個(gè)函數(shù)經(jīng)過反轉(zhuǎn)和位移后再相乘得到的積的積分。下面的可視化展示了這一思想:
信號(hào)處理中的卷積。過濾器 g 經(jīng)過反轉(zhuǎn),然后再沿水平軸滑動(dòng)。在每一個(gè)位置,我們都計(jì)算 f 和反轉(zhuǎn)后的 g 之間相交區(qū)域的面積。這個(gè)相交區(qū)域的面積就是特定位置出的卷積值。
這里,函數(shù) g 是過濾器。它被反轉(zhuǎn)后再沿水平軸滑動(dòng)。在每一個(gè)位置,我們都計(jì)算 f 和反轉(zhuǎn)后的 g 之間相交區(qū)域的面積。這個(gè)相交區(qū)域的面積就是特定位置出的卷積值。
另一方面,互相關(guān)是兩個(gè)函數(shù)之間的滑動(dòng)點(diǎn)積或滑動(dòng)內(nèi)積?;ハ嚓P(guān)中的過濾器不經(jīng)過反轉(zhuǎn),而是直接滑過函數(shù) f。f 與 g 之間的交叉區(qū)域即是互相關(guān)。下圖展示了卷積與互相關(guān)之間的差異。
信號(hào)處理中卷積與互相關(guān)之間的差異
在深度學(xué)習(xí)中,卷積中的過濾器不經(jīng)過反轉(zhuǎn)。嚴(yán)格來說,這是互相關(guān)。我們本質(zhì)上是執(zhí)行逐元素乘法和加法。但在深度學(xué)習(xí)中,直接將其稱之為卷積更加方便。這沒什么問題,因?yàn)檫^濾器的權(quán)重是在訓(xùn)練階段學(xué)習(xí)到的。如果上面例子中的反轉(zhuǎn)函數(shù) g 是正確的函數(shù),那么經(jīng)過訓(xùn)練后,學(xué)習(xí)得到的過濾器看起來就會(huì)像是反轉(zhuǎn)后的函數(shù) g。因此,在訓(xùn)練之前,沒必要像在真正的卷積中那樣首先反轉(zhuǎn)過濾器。
二、3D 卷積
在上一節(jié)的解釋中,我們看到我們實(shí)際上是對(duì)一個(gè) 3D 體積執(zhí)行卷積。但通常而言,我們?nèi)栽谏疃葘W(xué)習(xí)中稱之為 2D 卷積。這是在 3D 體積數(shù)據(jù)上的 2D 卷積。過濾器深度與輸入層深度一樣。這個(gè) 3D 過濾器僅沿兩個(gè)方向移動(dòng)(圖像的高和寬)。這種操作的輸出是一張 2D 圖像(僅有一個(gè)通道)。
很自然,3D 卷積確實(shí)存在。這是 2D 卷積的泛化。下面就是 3D 卷積,其過濾器深度小于輸入層深度(核大小<通道大?。R虼?,3D 過濾器可以在所有三個(gè)方向(圖像的高度、寬度、通道)上移動(dòng)。在每個(gè)位置,逐元素的乘法和加法都會(huì)提供一個(gè)數(shù)值。因?yàn)檫^濾器是滑過一個(gè) 3D 空間,所以輸出數(shù)值也按 3D 空間排布。也就是說輸出是一個(gè) 3D 數(shù)據(jù)。
在 3D 卷積中,3D 過濾器可以在所有三個(gè)方向(圖像的高度、寬度、通道)上移動(dòng)。在每個(gè)位置,逐元素的乘法和加法都會(huì)提供一個(gè)數(shù)值。因?yàn)檫^濾器是滑過一個(gè) 3D 空間,所以輸出數(shù)值也按 3D 空間排布。也就是說輸出是一個(gè) 3D 數(shù)據(jù)。
與 2D 卷積(編碼了 2D 域中目標(biāo)的空間關(guān)系)類似,3D 卷積可以描述 3D 空間中目標(biāo)的空間關(guān)系。對(duì)某些應(yīng)用(比如生物醫(yī)學(xué)影像中的 3D 分割/重構(gòu))而言,這樣的 3D 關(guān)系很重要,比如在 CT 和 MRI 中,血管之類的目標(biāo)會(huì)在 3D 空間中蜿蜒曲折。
三、轉(zhuǎn)置卷積(去卷積)
對(duì)于很多網(wǎng)絡(luò)架構(gòu)的很多應(yīng)用而言,我們往往需要進(jìn)行與普通卷積方向相反的轉(zhuǎn)換,即我們希望執(zhí)行上采樣。例子包括生成高分辨率圖像以及將低維特征圖映射到高維空間,比如在自動(dòng)編碼器或形義分割中。(在后者的例子中,形義分割首先會(huì)提取編碼器中的特征圖,然后在解碼器中恢復(fù)原來的圖像大小,使其可以分類原始圖像中的每個(gè)像素。)
實(shí)現(xiàn)上采樣的傳統(tǒng)方法是應(yīng)用插值方案或人工創(chuàng)建規(guī)則。而神經(jīng)網(wǎng)絡(luò)等現(xiàn)代架構(gòu)則傾向于讓網(wǎng)絡(luò)自己自動(dòng)學(xué)習(xí)合適的變換,無需人類干預(yù)。為了做到這一點(diǎn),我們可以使用轉(zhuǎn)置卷積。
轉(zhuǎn)置卷積在文獻(xiàn)中也被稱為去卷積或 fractionally strided convolution。但是,需要指出「去卷積(deconvolution)」這個(gè)名稱并不是很合適,因?yàn)檗D(zhuǎn)置卷積并非信號(hào)/圖像處理領(lǐng)域定義的那種真正的去卷積。從技術(shù)上講,信號(hào)處理中的去卷積是卷積運(yùn)算的逆運(yùn)算。但這里卻不是這種運(yùn)算。因此,某些作者強(qiáng)烈反對(duì)將轉(zhuǎn)置卷積稱為去卷積。人們稱之為去卷積主要是因?yàn)檫@樣說很簡(jiǎn)單。后面我們會(huì)介紹為什么將這種運(yùn)算稱為轉(zhuǎn)置卷積更自然且更合適。
我們一直都可以使用直接的卷積實(shí)現(xiàn)轉(zhuǎn)置卷積。對(duì)于下圖的例子,我們?cè)谝粋€(gè) 2×2 的輸入(周圍加了 2×2 的單位步長(zhǎng)的零填充)上應(yīng)用一個(gè) 3×3 核的轉(zhuǎn)置卷積。上采樣輸出的大小是 4×4。
將 2×2 的輸入上采樣成 4×4 的輸出
有趣的是,通過應(yīng)用各種填充和步長(zhǎng),我們可以將同樣的 2×2 輸入圖像映射到不同的圖像尺寸。下面,轉(zhuǎn)置卷積被用在了同一張 2×2 輸入上(輸入之間插入了一個(gè)零,并且周圍加了 2×2 的單位步長(zhǎng)的零填充),所得輸出的大小是 5×5。
將 2×2 的輸入上采樣成 5×5 的輸出
觀察上述例子中的轉(zhuǎn)置卷積能幫助我們構(gòu)建起一些直觀認(rèn)識(shí)。但為了泛化其應(yīng)用,了解其可以如何通過計(jì)算機(jī)的矩陣乘法實(shí)現(xiàn)是有益的。從這一點(diǎn)上我們也可以看到為何「轉(zhuǎn)置卷積」才是合適的名稱。
在卷積中,我們定義 C 為卷積核,Large 為輸入圖像,Small 為輸出圖像。經(jīng)過卷積(矩陣乘法)后,我們將大圖像下采樣為小圖像。這種矩陣乘法的卷積的實(shí)現(xiàn)遵照:C x Large = Small。
下面的例子展示了這種運(yùn)算的工作方式。它將輸入平展為 16×1 的矩陣,并將卷積核轉(zhuǎn)換為一個(gè)稀疏矩陣(4×16)。然后,在稀疏矩陣和平展的輸入之間使用矩陣乘法。之后,再將所得到的矩陣(4×1)轉(zhuǎn)換為 2×2 的輸出。
卷積的矩陣乘法:將 Large 輸入圖像(4×4)轉(zhuǎn)換為 Small 輸出圖像(2×2)
現(xiàn)在,如果我們?cè)诘仁降膬蛇叾汲松暇仃嚨霓D(zhuǎn)置 CT,并借助「一個(gè)矩陣與其轉(zhuǎn)置矩陣的乘法得到一個(gè)單位矩陣」這一性質(zhì),那么我們就能得到公式 CT x Small = Large,如下圖所示。
卷積的矩陣乘法:將 Small 輸入圖像(2×2)轉(zhuǎn)換為 Large 輸出圖像(4×4)
這里可以看到,我們執(zhí)行了從小圖像到大圖像的上采樣。這正是我們想要實(shí)現(xiàn)的目標(biāo)?,F(xiàn)在。你就知道「轉(zhuǎn)置卷積」這個(gè)名字的由來了。
轉(zhuǎn)置矩陣的算術(shù)解釋可參閱:https://arxiv.org/abs/1603.07285
四、擴(kuò)張卷積(Atrous 卷積)
擴(kuò)張卷積由這兩篇引入:
https://arxiv.org/abs/1412.7062;
https://arxiv.org/abs/1511.07122
這是一個(gè)標(biāo)準(zhǔn)的離散卷積:
擴(kuò)張卷積如下:
當(dāng) l=1 時(shí),擴(kuò)張卷積會(huì)變得和標(biāo)準(zhǔn)卷積一樣。
擴(kuò)張卷積
直觀而言,擴(kuò)張卷積就是通過在核元素之間插入空格來使核「膨脹」。新增的參數(shù) l(擴(kuò)張率)表示我們希望將核加寬的程度。具體實(shí)現(xiàn)可能各不相同,但通常是在核元素之間插入 l-1 個(gè)空格。下面展示了 l = 1, 2, 4 時(shí)的核大小。
擴(kuò)張卷積的感受野。我們基本上無需添加額外的成本就能有較大的感受野。
在這張圖像中,3×3 的紅點(diǎn)表示經(jīng)過卷積后,輸出圖像是 3×3 像素。盡管所有這三個(gè)擴(kuò)張卷積的輸出都是同一尺寸,但模型觀察到的感受野有很大的不同。l=1 時(shí)感受野為 3×3,l=2 時(shí)為 7×7。l=3 時(shí),感受野的大小就增加到了 15×15。有趣的是,與這些操作相關(guān)的參數(shù)的數(shù)量是相等的。我們「觀察」更大的感受野不會(huì)有額外的成本。因此,擴(kuò)張卷積可用于廉價(jià)地增大輸出單元的感受野,而不會(huì)增大其核大小,這在多個(gè)擴(kuò)張卷積彼此堆疊時(shí)尤其有效。
論文《Multi-scale context aggregation by dilated convolutions》的作者用多個(gè)擴(kuò)張卷積層構(gòu)建了一個(gè)網(wǎng)絡(luò),其中擴(kuò)張率 l 每層都按指數(shù)增大。由此,有效的感受野大小隨層而指數(shù)增長(zhǎng),而參數(shù)的數(shù)量?jī)H線性增長(zhǎng)。
這篇論文中擴(kuò)張卷積的作用是系統(tǒng)性地聚合多個(gè)比例的形境信息,而不丟失分辨率。這篇論文表明其提出的模塊能夠提升那時(shí)候(2016 年)的當(dāng)前最佳形義分割系統(tǒng)的準(zhǔn)確度。請(qǐng)參閱那篇論文了解更多信息。
五、可分卷積
某些神經(jīng)網(wǎng)絡(luò)架構(gòu)使用了可分卷積,比如MobileNets??煞志矸e有空間可分卷積和深度可分卷積。
1、空間可分卷積
空間可分卷積操作的是圖像的 2D 空間維度,即高和寬。從概念上看,空間可分卷積是將一個(gè)卷積分解為兩個(gè)單獨(dú)的運(yùn)算。對(duì)于下面的示例,3×3 的 Sobel 核被分成了一個(gè) 3×1 核和一個(gè) 1×3 核。
Sobel 核可分為一個(gè) 3x1 和一個(gè) 1x3 核
在卷積中,3×3 核直接與圖像卷積。在空間可分卷積中,3×1 核首先與圖像卷積,然后再應(yīng)用 1×3 核。這樣,執(zhí)行同樣的操作時(shí)僅需 6 個(gè)參數(shù),而不是 9 個(gè)。
此外,使用空間可分卷積時(shí)所需的矩陣乘法也更少。給一個(gè)具體的例子,5×5 圖像與 3×3 核的卷積(步幅=1,填充=0)要求在 3 個(gè)位置水平地掃描核(還有 3 個(gè)垂直的位置)??偣簿褪?9 個(gè)位置,表示為下圖中的點(diǎn)。在每個(gè)位置,會(huì)應(yīng)用 9 次逐元素乘法??偣簿褪?9×9=81 次乘法。
具有 1 個(gè)通道的標(biāo)準(zhǔn)卷積
另一方面,對(duì)于空間可分卷積,我們首先在 5×5 的圖像上應(yīng)用一個(gè) 3×1 的過濾器。我們可以在水平 5 個(gè)位置和垂直 3 個(gè)位置掃描這樣的核??偣簿褪?5×3=15 個(gè)位置,表示為下圖中的點(diǎn)。在每個(gè)位置,會(huì)應(yīng)用 3 次逐元素乘法。總共就是 15×3=45 次乘法。現(xiàn)在我們得到了一個(gè) 3×5 的矩陣。這個(gè)矩陣再與一個(gè) 1×3 核卷積,即在水平 3 個(gè)位置和垂直 3 個(gè)位置掃描這個(gè)矩陣。對(duì)于這 9 個(gè)位置中的每一個(gè),應(yīng)用 3 次逐元素乘法。這一步需要 9×3=27 次乘法。因此,總體而言,空間可分卷積需要 45+27=72 次乘法,少于普通卷積。
具有 1 個(gè)通道的空間可分卷積
我們稍微推廣一下上面的例子。假設(shè)我們現(xiàn)在將卷積應(yīng)用于一張 N×N 的圖像上,卷積核為 m×m,步幅為 1,填充為 0。傳統(tǒng)卷積需要 (N-2) x (N-2) x m x m 次乘法,空間可分卷積需要 N x (N-2) x m + (N-2) x (N-2) x m = (2N-2) x (N-2) x m 次乘法??臻g可分卷積與標(biāo)準(zhǔn)卷積的計(jì)算成本比為:
因?yàn)閳D像尺寸 N 遠(yuǎn)大于過濾器大?。∟>>m),所以這個(gè)比就變成了 2/m。也就是說,在這種漸進(jìn)情況(N>>m)下,當(dāng)過濾器大小為 3×3 時(shí),空間可分卷積的計(jì)算成本是標(biāo)準(zhǔn)卷積的 2/3。過濾器大小為 5×5 時(shí)這一數(shù)值是 2/5;過濾器大小為 7×7 時(shí)則為 2/7。
盡管空間可分卷積能節(jié)省成本,但深度學(xué)習(xí)卻很少使用它。一大主要原因是并非所有的核都能分成兩個(gè)更小的核。如果我們用空間可分卷積替代所有的傳統(tǒng)卷積,那么我們就限制了自己在訓(xùn)練過程中搜索所有可能的核。這樣得到的訓(xùn)練結(jié)果可能是次優(yōu)的。
2、深度可分卷積
現(xiàn)在來看深度可分卷積,這在深度學(xué)習(xí)領(lǐng)域要常用得多(比如 MobileNet 和 Xception)。深度可分卷積包含兩個(gè)步驟:深度卷積核 1×1 卷積。
在描述這些步驟之前,有必要回顧一下我們之前介紹的 2D 卷積核 1×1 卷積。首先快速回顧標(biāo)準(zhǔn)的 2D 卷積。舉一個(gè)具體例子,假設(shè)輸入層的大小是 7×7×3(高×寬×通道),而過濾器的大小是 3×3×3。經(jīng)過與一個(gè)過濾器的 2D 卷積之后,輸出層的大小是 5×5×1(僅有一個(gè)通道)。
用于創(chuàng)建僅有 1 層的輸出的標(biāo)準(zhǔn) 2D 卷積,使用 1 個(gè)過濾器
一般來說,兩個(gè)神經(jīng)網(wǎng)絡(luò)層之間會(huì)應(yīng)用多個(gè)過濾器。假設(shè)我們這里有 128 個(gè)過濾器。在應(yīng)用了這 128 個(gè) 2D 卷積之后,我們有 128 個(gè) 5×5×1 的輸出映射圖(map)。然后我們將這些映射圖堆疊成大小為 5×5×128 的單層。通過這種操作,我們可將輸入層(7×7×3)轉(zhuǎn)換成輸出層(5×5×128)??臻g維度(即高度和寬度)會(huì)變小,而深度會(huì)增大。
用于創(chuàng)建有 128 層的輸出的標(biāo)準(zhǔn) 2D 卷積,要使用 128 個(gè)過濾器
現(xiàn)在使用深度可分卷積,看看我們?nèi)绾螌?shí)現(xiàn)同樣的變換。
首先,我們將深度卷積應(yīng)用于輸入層。但我們不使用 2D 卷積中大小為 3×3×3 的單個(gè)過濾器,而是分開使用 3 個(gè)核。每個(gè)過濾器的大小為 3×3×1。每個(gè)核與輸入層的一個(gè)通道卷積(僅一個(gè)通道,而非所有通道!)。每個(gè)這樣的卷積都能提供大小為 5×5×1 的映射圖。然后我們將這些映射圖堆疊在一起,創(chuàng)建一個(gè) 5×5×3 的圖像。經(jīng)過這個(gè)操作之后,我們得到大小為 5×5×3 的輸出?,F(xiàn)在我們可以降低空間維度了,但深度還是和之前一樣。
深度可分卷積——第一步:我們不使用 2D 卷積中大小為 3×3×3 的單個(gè)過濾器,而是分開使用 3 個(gè)核。每個(gè)過濾器的大小為 3×3×1。每個(gè)核與輸入層的一個(gè)通道卷積(僅一個(gè)通道,而非所有通道?。?。每個(gè)這樣的卷積都能提供大小為 5×5×1 的映射圖。然后我們將這些映射圖堆疊在一起,創(chuàng)建一個(gè) 5×5×3 的圖像。經(jīng)過這個(gè)操作之后,我們得到大小為 5×5×3 的輸出。
在深度可分卷積的第二步,為了擴(kuò)展深度,我們應(yīng)用一個(gè)核大小為 1×1×3 的 1×1 卷積。將 5×5×3 的輸入圖像與每個(gè) 1×1×3 的核卷積,可得到大小為 5×5×1 的映射圖。
因此,在應(yīng)用了 128 個(gè) 1×1 卷積之后,我們得到大小為 5×5×128 的層。
深度可分卷積——第二步:應(yīng)用多個(gè) 1×1 卷積來修改深度。
通過這兩個(gè)步驟,深度可分卷積也會(huì)將輸入層(7×7×3)變換到輸出層(5×5×128)。
下圖展示了深度可分卷積的整個(gè)過程。
深度可分卷積的整個(gè)過程
所以,深度可分卷積有何優(yōu)勢(shì)呢?效率!相比于 2D 卷積,深度可分卷積所需的操作要少得多。
回憶一下我們的 2D 卷積例子的計(jì)算成本。有 128 個(gè) 3×3×3 個(gè)核移動(dòng)了 5×5 次,也就是 128 x 3 x 3 x 3 x 5 x 5 = 86400 次乘法。
可分卷積又如何呢?在第一個(gè)深度卷積步驟,有 3 個(gè) 3×3×1 核移動(dòng) 5×5 次,也就是 3x3x3x1x5x5 = 675 次乘法。在 1×1 卷積的第二步,有 128 個(gè) 1×1×3 核移動(dòng) 5×5 次,即 128 x 1 x 1 x 3 x 5 x 5 = 9600 次乘法。因此,深度可分卷積共有 675 + 9600 = 10275 次乘法。這樣的成本大概僅有 2D 卷積的 12%!
所以,對(duì)于任意尺寸的圖像,如果我們應(yīng)用深度可分卷積,我們可以節(jié)省多少時(shí)間?讓我們泛化以上例子?,F(xiàn)在,對(duì)于大小為 H×W×D 的輸入圖像,如果使用 Nc 個(gè)大小為 h×h×D 的核執(zhí)行 2D 卷積(步幅為 1,填充為 0,其中 h 是偶數(shù))。為了將輸入層(H×W×D)變換到輸出層((H-h+1)x (W-h+1) x Nc),所需的總乘法次數(shù)為:
Nc x h x h x D x (H-h+1) x (W-h+1)
另一方面,對(duì)于同樣的變換,深度可分卷積所需的乘法次數(shù)為:
D x h x h x 1 x (H-h+1) x (W-h+1) + Nc x 1 x 1 x D x (H-h+1) x (W-h+1) = (h x h + Nc) x D x (H-h+1) x (W-h+1)
則深度可分卷積與 2D 卷積所需的乘法次數(shù)比為:
現(xiàn)代大多數(shù)架構(gòu)的輸出層通常都有很多通道,可達(dá)數(shù)百甚至上千。對(duì)于這樣的層(Nc >> h),則上式可約簡(jiǎn)為 1 / h2?;诖?,如果使用 3×3 過濾器,則 2D 卷積所需的乘法次數(shù)是深度可分卷積的 9 倍。如果使用 5×5 過濾器,則 2D 卷積所需的乘法次數(shù)是深度可分卷積的 25 倍。
使用深度可分卷積有什么壞處嗎?當(dāng)然是有的。深度可分卷積會(huì)降低卷積中參數(shù)的數(shù)量。因此,對(duì)于較小的模型而言,如果用深度可分卷積替代 2D 卷積,模型的能力可能會(huì)顯著下降。因此,得到的模型可能是次優(yōu)的。但是,如果使用得當(dāng),深度可分卷積能在不降低你的模型性能的前提下幫助你實(shí)現(xiàn)效率提升。
六、分組卷積
AlexNet 論文(https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)在 2012 年引入了分組卷積。實(shí)現(xiàn)分組卷積的主要原因是讓網(wǎng)絡(luò)訓(xùn)練可在 2 個(gè)內(nèi)存有限(每個(gè) GPU 有 1.5 GB 內(nèi)存)的 GPU 上進(jìn)行。下面的 AlexNet 表明在大多數(shù)層中都有兩個(gè)分開的卷積路徑。這是在兩個(gè) GPU 上執(zhí)行模型并行化(當(dāng)然如果可以使用更多 GPU,還能執(zhí)行多 GPU 并行化)。
圖片來自 AlexNet 論文
這里我們介紹一下分組卷積的工作方式。首先,典型的 2D 卷積的步驟如下圖所示。在這個(gè)例子中,通過應(yīng)用 128 個(gè)大小為 3×3×3 的過濾器將輸入層(7×7×3)變換到輸出層(5×5×128)。推廣而言,即通過應(yīng)用 Dout 個(gè)大小為 h x w x Din 的核將輸入層(Hin x Win x Din)變換到輸出層(Hout x Wout x Dout)。
標(biāo)準(zhǔn)的 2D 卷積
在分組卷積中,過濾器會(huì)被分為不同的組。每一組都負(fù)責(zé)特定深度的典型 2D 卷積。下面的例子能讓你更清楚地理解。
具有兩個(gè)過濾器分組的分組卷積
上圖展示了具有兩個(gè)過濾器分組的分組卷積。在每個(gè)過濾器分組中,每個(gè)過濾器的深度僅有名義上的 2D 卷積的一半。它們的深度是 Din/2。每個(gè)過濾器分組包含 Dout/2 個(gè)過濾器。第一個(gè)過濾器分組(紅色)與輸入層的前一半([:, :, 0:Din/2])卷積,而第二個(gè)過濾器分組(橙色)與輸入層的后一半([:, :, Din/2:Din])卷積。因此,每個(gè)過濾器分組都會(huì)創(chuàng)建 Dout/2 個(gè)通道。整體而言,兩個(gè)分組會(huì)創(chuàng)建 2×Dout/2 = Dout 個(gè)通道。然后我們將這些通道堆疊在一起,得到有 Dout 個(gè)通道的輸出層。
1、分組卷積與深度卷積
你可能會(huì)注意到分組卷積與深度可分卷積中使用的深度卷積之間存在一些聯(lián)系和差異。如果過濾器分組的數(shù)量與輸入層通道的數(shù)量相同,則每個(gè)過濾器的深度都為 Din/Din=1。這樣的過濾器深度就與深度卷積中的一樣了。
另一方面,現(xiàn)在每個(gè)過濾器分組都包含 Dout/Din 個(gè)過濾器。整體而言,輸出層的深度為 Dout。這不同于深度卷積的情況——深度卷積并不會(huì)改變層的深度。在深度可分卷積中,層的深度之后通過 1×1 卷積進(jìn)行擴(kuò)展。
分組卷積有幾個(gè)優(yōu)點(diǎn)。
第一個(gè)優(yōu)點(diǎn)是高效訓(xùn)練。因?yàn)榫矸e被分成了多個(gè)路徑,每個(gè)路徑都可由不同的 GPU 分開處理,所以模型可以并行方式在多個(gè) GPU 上進(jìn)行訓(xùn)練。相比于在單個(gè) GPU 上完成所有任務(wù),這樣的在多個(gè) GPU 上的模型并行化能讓網(wǎng)絡(luò)在每個(gè)步驟處理更多圖像。人們一般認(rèn)為模型并行化比數(shù)據(jù)并行化更好。后者是將數(shù)據(jù)集分成多個(gè)批次,然后分開訓(xùn)練每一批。但是,當(dāng)批量大小變得過小時(shí),我們本質(zhì)上是執(zhí)行隨機(jī)梯度下降,而非批梯度下降。這會(huì)造成更慢,有時(shí)候更差的收斂結(jié)果。
在訓(xùn)練非常深的神經(jīng)網(wǎng)絡(luò)時(shí),分組卷積會(huì)非常重要,正如在 ResNeXt 中那樣。
圖片來自 ResNeXt 論文,https://arxiv.org/abs/1611.05431
第二個(gè)優(yōu)點(diǎn)是模型會(huì)更高效,即模型參數(shù)會(huì)隨過濾器分組數(shù)的增大而減少。在之前的例子中,完整的標(biāo)準(zhǔn) 2D 卷積有 h x w x Din x Dout 個(gè)參數(shù)。具有 2 個(gè)過濾器分組的分組卷積有 (h x w x Din/2 x Dout/2) x 2 個(gè)參數(shù)。參數(shù)數(shù)量減少了一半。
第三個(gè)優(yōu)點(diǎn)有些讓人驚訝。分組卷積也許能提供比標(biāo)準(zhǔn)完整 2D 卷積更好的模型。另一篇出色的博客已經(jīng)解釋了這一點(diǎn):https://blog.yani.io/filter-group-tutorial。這里簡(jiǎn)要總結(jié)一下。
原因和稀疏過濾器的關(guān)系有關(guān)。下圖是相鄰層過濾器的相關(guān)性。其中的關(guān)系是稀疏的。
在 CIFAR10 上訓(xùn)練的一個(gè) Network-in-Network 模型中相鄰層的過濾器的相關(guān)性矩陣。高度相關(guān)的過濾器對(duì)更明亮,而相關(guān)性更低的過濾器則更暗。圖片來自:https://blog.yani.io/filter-group-tutorial
分組矩陣的相關(guān)性映射圖又如何?
在 CIFAR10 上訓(xùn)練的一個(gè) Network-in-Network 模型中相鄰層的過濾器的相關(guān)性,動(dòng)圖分別展示了有 1、2、4、8、16 個(gè)過濾器分組的情況。圖片來自 https://blog.yani.io/filter-group-tutorial
上圖是當(dāng)用 1、2、4、8、16 個(gè)過濾器分組訓(xùn)練模型時(shí),相鄰層的過濾器之間的相關(guān)性。那篇文章提出了一個(gè)推理:「過濾器分組的效果是在通道維度上學(xué)習(xí)塊對(duì)角結(jié)構(gòu)的稀疏性……在網(wǎng)絡(luò)中,具有高相關(guān)性的過濾器是使用過濾器分組以一種更為結(jié)構(gòu)化的方式學(xué)習(xí)到。從效果上看,不必學(xué)習(xí)的過濾器關(guān)系就不再參數(shù)化。這樣顯著地減少網(wǎng)絡(luò)中的參數(shù)數(shù)量能使其不容易過擬合,因此,一種類似正則化的效果讓優(yōu)化器可以學(xué)習(xí)得到更準(zhǔn)確更高效的深度網(wǎng)絡(luò)?!?/p>
AlexNet conv1 過濾器分解:正如作者指出的那樣,過濾器分組似乎會(huì)將學(xué)習(xí)到的過濾器結(jié)構(gòu)性地組織成兩個(gè)不同的分組。本圖來自 AlexNet 論文。
此外,每個(gè)過濾器分組都會(huì)學(xué)習(xí)數(shù)據(jù)的一個(gè)獨(dú)特表征。正如 AlexNet 的作者指出的那樣,過濾器分組似乎會(huì)將學(xué)習(xí)到的過濾器結(jié)構(gòu)性地組織成兩個(gè)不同的分組——黑白過濾器和彩色過濾器。
你認(rèn)為深度學(xué)習(xí)領(lǐng)域的卷積還有那些值得注意的地方?
-
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5500瀏覽量
121111 -
cnn
+關(guān)注
關(guān)注
3文章
352瀏覽量
22203
原文標(biāo)題:卷積有多少種?一文讀懂深度學(xué)習(xí)中的各種卷積
文章出處:【微信號(hào):IV_Technology,微信公眾號(hào):智車科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論