
卷積(convolution)現(xiàn)在可能是深度學(xué)習(xí)中最重要的概念??恐矸e和卷積神經(jīng)網(wǎng)絡(luò)(CNN),深度學(xué)習(xí)超越了幾乎其它所有的機(jī)器學(xué)習(xí)手段。
這篇文章將簡要地概述一下不同類型的卷積以及它們的好處是什么。為了簡單起見,本文只關(guān)注于二維的卷積。
卷積
首先,我們需要就定義一個(gè)卷積層的幾個(gè)參數(shù)達(dá)成一致。
卷積核大?。↘ernel Size):卷積核的大小定義了卷積的視圖范圍。二維的常見選擇大小是3,即3x3像素。
卷積核的步長(Stride):Stride定義了內(nèi)核的步長。雖然它的默認(rèn)值通常為1,但我們可以將步長設(shè)置為2,然后對類似于MaxPooling的圖像進(jìn)行向下采樣。
邊緣填充(Padding):Padding用于填充輸入圖像的邊界。一個(gè)(半)填充的卷積將使空間輸出維度與輸入相等,而如果卷積核大于1,則未被填充的卷積將會使一些邊界消失。
輸入和輸出通道:一個(gè)卷積層接受一定數(shù)量的輸入通道(I),并計(jì)算一個(gè)特定數(shù)量的輸出通道(O),這一層所需的參數(shù)可以由I*O*K計(jì)算,K等于卷積核中值的數(shù)量。

擴(kuò)張的(Dilated)卷積
又名帶洞的(atrous)卷積,擴(kuò)張的卷積引入了另一個(gè)被稱為擴(kuò)張率(dilation rate)的卷積層。這定義了卷積核中值之間的間隔。一個(gè)3x3卷積核的擴(kuò)張率為2,它的視圖與5x5卷積核相同,而只使用9個(gè)參數(shù)。想象一下,取一個(gè)5x5卷積核,每兩行或兩列刪除一行或一列。
這將以同樣的計(jì)算代價(jià)提供更廣闊的視角。擴(kuò)張的卷積在實(shí)時(shí)分割領(lǐng)域特別受歡迎。如果需要廣泛的視圖,并且不能負(fù)擔(dān)多個(gè)卷積或更大的卷積核,那么就使用它們。

轉(zhuǎn)置(Transposed)卷積
轉(zhuǎn)置卷積也就是反卷積(deconvolution)。雖然有些人經(jīng)常直接叫它反卷積,但嚴(yán)格意義上講是不合適的,因?yàn)樗环弦粋€(gè)反卷積的概念。反卷積確實(shí)存在,但它們在深度學(xué)習(xí)領(lǐng)域并不常見。一個(gè)實(shí)際的反卷積會恢復(fù)卷積的過程。想象一下,將一個(gè)圖像放入一個(gè)卷積層中。現(xiàn)在把輸出傳遞到一個(gè)黑盒子里,然后你的原始圖像會再次出來。這個(gè)黑盒子就完成了一個(gè)反卷積。這是一個(gè)卷積層的數(shù)學(xué)逆過程。
一個(gè)轉(zhuǎn)置的卷積在某種程度上是相似的,因?yàn)樗a(chǎn)生的相同的空間分辨率是一個(gè)假設(shè)的反卷積層。然而,在值上執(zhí)行的實(shí)際數(shù)學(xué)操作是不同的。一個(gè)轉(zhuǎn)置的卷積層執(zhí)行一個(gè)常規(guī)的卷積,但是它會恢復(fù)它的空間變換(spatial transformation)。
在這一點(diǎn)上,你應(yīng)該非常困惑,讓我們來看一個(gè)具體的例子:
5x5的圖像被饋送到一個(gè)卷積層。步長設(shè)置為2,無邊界填充,而卷積核是3x3。結(jié)果得到了2x2的圖像。
如果我們想要逆轉(zhuǎn)這個(gè)過程,我們需要反向的數(shù)學(xué)運(yùn)算,以便從我們輸入的每個(gè)像素中生成9個(gè)值。然后,我們將步長設(shè)置為2來遍歷輸出圖像。這就是一個(gè)反卷積過程。

一個(gè)轉(zhuǎn)置的卷積并不會這樣做。唯一的共同點(diǎn)是,它保證輸出將是一個(gè)5x5的圖像,同時(shí)仍然執(zhí)行正常的卷積運(yùn)算。為了實(shí)現(xiàn)這一點(diǎn),我們需要在輸入上執(zhí)行一些奇特的填充。
正如你現(xiàn)在所能想象的,這一步不會逆轉(zhuǎn)上面的過程。至少不考慮數(shù)值。
它僅僅是重新構(gòu)造了之前的空間分辨率并進(jìn)行了卷積運(yùn)算。這可能不是數(shù)學(xué)上的逆過程,但是對于編碼-解碼器(Encoder-Decoder)架構(gòu)來說,這仍然是非常有用的。這樣我們就可以把圖像的尺度上推(upscaling)和卷積結(jié)合起來,而不是做兩個(gè)分離的過程。

可分離卷積
在可分離的卷積中,我們可以將卷積核操作分解成多個(gè)步驟。我們來表示一個(gè)卷積,y=conv(x,k)其中y是輸出圖像,x是輸入圖像,k是卷積核。接下來,讓我們假設(shè)k可以通過k=k1.dot(k2)來計(jì)算。這將使它成為可分離的卷積,因?yàn)槲覀儾恍枰胟來做二維的卷積,而是通過k1和k2分別實(shí)現(xiàn)兩次一維卷積來取得相同效果。

以Sobel算子卷積核為例,它在圖像處理中經(jīng)常被使用。通過乘以向量[1, 0, -1]和[1,2,1].T,你可以得到相同的卷積核。在執(zhí)行相同的操作時(shí),需要6個(gè)參數(shù)而不是9個(gè)參數(shù)。上面的例子展示了所謂的空間可分卷積。
注:實(shí)際上,你可以通過疊加1xN和Nx1卷積核層來創(chuàng)建類似于空間可分離的卷積的東西。這個(gè)東西最近在一個(gè)名為EffNet的架構(gòu)中被使用,它顯示了非常好的結(jié)果。
EffNet架構(gòu):http://www.atyun.com/16909_一文帶你認(rèn)識深度學(xué)習(xí)中不同類型的卷積&=6.html
在神經(jīng)網(wǎng)絡(luò)中,我們通常使用一種叫做深度可分離卷積(depthwise separable convolution)的東西。這個(gè)東西將執(zhí)行一個(gè)空間卷積,同時(shí)保持通道獨(dú)立,然后進(jìn)行深度卷積。這里有一個(gè)例子來理解它:
假設(shè)我們在16個(gè)輸入通道和32個(gè)輸出通道上有一個(gè)3x3的卷積層。具體的情況是,16個(gè)通道中的每一個(gè)都被32個(gè)3x3的卷積核遍歷,從而產(chǎn)生512(16×32)個(gè)特征圖。接下來,我們通過添加每個(gè)輸入通道對應(yīng)的特征圖后合并得到1個(gè)特征圖。因?yàn)槲覀兛梢宰?2次,所以我們得到了32個(gè)輸出通道。
在同一個(gè)例子中,對于一個(gè)深度可分離的卷積,我們遍歷16個(gè)通道,每一個(gè)都有一個(gè)3x3內(nèi)核,我們得到了16個(gè)特征圖?,F(xiàn)在,在合并之前,我們遍歷這16個(gè)特征圖,每個(gè)都有32個(gè)1x1卷積,然后才開始將它們添加到一起。這將產(chǎn)生656(16x3x3+16x32x1x1)個(gè)參數(shù),少于上面的4608(16x32x3x3)參數(shù)。
這個(gè)例子是一個(gè)深度可分離的卷積的一個(gè)具體的實(shí)現(xiàn),其中上面的深度乘數(shù)(depth multiplier)為1,這也是目前這類網(wǎng)絡(luò)層的最常見的設(shè)置。
我們這樣做是因?yàn)榭臻g和深度信息可以被解耦。看看Xception模型的性能,這個(gè)理論似乎起了作用。深度可分離的卷積也可用于移動設(shè)備,因?yàn)樗鼈兛梢杂行У乩脜?shù)。
想了解更多的卷積動畫,請查看:http://www.atyun.com/16909_一文帶你認(rèn)識深度學(xué)習(xí)中不同類型的卷積&=6.html
更多人工智能學(xué)習(xí)資源,請到網(wǎng)站http://www.atyun.com/,或加qq群:213252181
本文為編譯文章,轉(zhuǎn)載請注明出處。
來源:atyun_com
來源網(wǎng)址:http://www.atyun.com/16909_一文帶你認(rèn)識深度學(xué)習(xí)中不同類型的卷積&=6.html