卷積(convolution)現(xiàn)在可能是深度學(xué)習(xí)中最重要的概念啦吧£希靠著卷積和卷積神經(jīng)網(wǎng)絡(luò)(CNN),深度學(xué)習(xí)超越了幾乎其它所有的機器學(xué)習(xí)手段拷橘。
這篇文章將簡要地概述一下不同類型的卷積以及它們的好處是什么蔫仙。為了簡單起見鲸伴,本文只關(guān)注于二維的卷積。
卷積
首先灾票,我們需要就定義一個卷積層的幾個參數(shù)達成一致峡谊。
卷積核大小(Kernel Size):卷積核的大小定義了卷積的視圖范圍刊苍。二維的常見選擇大小是3既们,即3x3像素。
卷積核的步長(Stride):Stride定義了內(nèi)核的步長正什。雖然它的默認值通常為1啥纸,但我們可以將步長設(shè)置為2,然后對類似于MaxPooling的圖像進行向下采樣婴氮。
邊緣填充(Padding):Padding用于填充輸入圖像的邊界斯棒。一個(半)填充的卷積將使空間輸出維度與輸入相等,而如果卷積核大于1主经,則未被填充的卷積將會使一些邊界消失名船。
輸入和輸出通道:一個卷積層接受一定數(shù)量的輸入通道(I),并計算一個特定數(shù)量的輸出通道(O)旨怠,這一層所需的參數(shù)可以由I*O*K計算,K等于卷積核中值的數(shù)量蜈块。
擴張的(Dilated)卷積
又名帶洞的(atrous)卷積,擴張的卷積引入了另一個被稱為擴張率(dilation rate)的卷積層百揭。這定義了卷積核中值之間的間隔爽哎。一個3x3卷積核的擴張率為2,它的視圖與5x5卷積核相同器一,而只使用9個參數(shù)课锌。想象一下,取一個5x5卷積核,每兩行或兩列刪除一行或一列渺贤。
這將以同樣的計算代價提供更廣闊的視角雏胃。擴張的卷積在實時分割領(lǐng)域特別受歡迎。如果需要廣泛的視圖志鞍,并且不能負擔多個卷積或更大的卷積核瞭亮,那么就使用它們。
轉(zhuǎn)置(Transposed)卷積
轉(zhuǎn)置卷積也就是反卷積(deconvolution)统翩。雖然有些人經(jīng)常直接叫它反卷積,但嚴格意義上講是不合適的此洲,因為它不符合一個反卷積的概念厂汗。反卷積確實存在,但它們在深度學(xué)習(xí)領(lǐng)域并不常見呜师。一個實際的反卷積會恢復(fù)卷積的過程娶桦。想象一下,將一個圖像放入一個卷積層中∠坏В現(xiàn)在把輸出傳遞到一個黑盒子里趟紊,然后你的原始圖像會再次出來。這個黑盒子就完成了一個反卷積碰酝。這是一個卷積層的數(shù)學(xué)逆過程霎匈。
一個轉(zhuǎn)置的卷積在某種程度上是相似的,因為它產(chǎn)生的相同的空間分辨率是一個假設(shè)的反卷積層送爸。然而铛嘱,在值上執(zhí)行的實際數(shù)學(xué)操作是不同的。一個轉(zhuǎn)置的卷積層執(zhí)行一個常規(guī)的卷積袭厂,但是它會恢復(fù)它的空間變換(spatial transformation)墨吓。
在這一點上,你應(yīng)該非常困惑纹磺,讓我們來看一個具體的例子:
5x5的圖像被饋送到一個卷積層帖烘。步長設(shè)置為2,無邊界填充橄杨,而卷積核是3x3秘症。結(jié)果得到了2x2的圖像。
如果我們想要逆轉(zhuǎn)這個過程式矫,我們需要反向的數(shù)學(xué)運算乡摹,以便從我們輸入的每個像素中生成9個值。然后采转,我們將步長設(shè)置為2來遍歷輸出圖像聪廉。這就是一個反卷積過程。
一個轉(zhuǎn)置的卷積并不會這樣做板熊。唯一的共同點是框全,它保證輸出將是一個5x5的圖像,同時仍然執(zhí)行正常的卷積運算邻邮。為了實現(xiàn)這一點竣况,我們需要在輸入上執(zhí)行一些奇特的填充。
正如你現(xiàn)在所能想象的筒严,這一步不會逆轉(zhuǎn)上面的過程丹泉。至少不考慮數(shù)值。
它僅僅是重新構(gòu)造了之前的空間分辨率并進行了卷積運算鸭蛙。這可能不是數(shù)學(xué)上的逆過程摹恨,但是對于編碼-解碼器(Encoder-Decoder)架構(gòu)來說,這仍然是非常有用的娶视。這樣我們就可以把圖像的尺度上推(upscaling)和卷積結(jié)合起來晒哄,而不是做兩個分離的過程。
可分離卷積
在可分離的卷積中寝凌,我們可以將卷積核操作分解成多個步驟。我們來表示一個卷積孝赫,y=conv(x较木,k)其中y是輸出圖像,x是輸入圖像青柄,k是卷積核伐债。接下來,讓我們假設(shè)k可以通過k=k1.dot(k2)來計算致开。這將使它成為可分離的卷積峰锁,因為我們不需要用k來做二維的卷積,而是通過k1和k2分別實現(xiàn)兩次一維卷積來取得相同效果双戳。
以Sobel算子卷積核為例虹蒋,它在圖像處理中經(jīng)常被使用。通過乘以向量[1, 0, -1]和[1,2,1].T飒货,你可以得到相同的卷積核千诬。在執(zhí)行相同的操作時,需要6個參數(shù)而不是9個參數(shù)膏斤。上面的例子展示了所謂的空間可分卷積。
注:實際上邪驮,你可以通過疊加1xN和Nx1卷積核層來創(chuàng)建類似于空間可分離的卷積的東西莫辨。這個東西最近在一個名為EffNet的架構(gòu)中被使用,它顯示了非常好的結(jié)果。
EffNet架構(gòu):http://www.atyun.com/16909_一文帶你認識深度學(xué)習(xí)中不同類型的卷積&=6.html
在神經(jīng)網(wǎng)絡(luò)中沮榜,我們通常使用一種叫做深度可分離卷積(depthwise separable convolution)的東西盘榨。這個東西將執(zhí)行一個空間卷積,同時保持通道獨立蟆融,然后進行深度卷積草巡。這里有一個例子來理解它:
假設(shè)我們在16個輸入通道和32個輸出通道上有一個3x3的卷積層。具體的情況是型酥,16個通道中的每一個都被32個3x3的卷積核遍歷山憨,從而產(chǎn)生512(16×32)個特征圖。接下來弥喉,我們通過添加每個輸入通道對應(yīng)的特征圖后合并得到1個特征圖郁竟。因為我們可以做32次,所以我們得到了32個輸出通道由境。
在同一個例子中棚亩,對于一個深度可分離的卷積,我們遍歷16個通道虏杰,每一個都有一個3x3內(nèi)核讥蟆,我們得到了16個特征圖。現(xiàn)在纺阔,在合并之前瘸彤,我們遍歷這16個特征圖,每個都有32個1x1卷積州弟,然后才開始將它們添加到一起钧栖。這將產(chǎn)生656(16x3x3+16x32x1x1)個參數(shù),少于上面的4608(16x32x3x3)參數(shù)婆翔。
這個例子是一個深度可分離的卷積的一個具體的實現(xiàn)拯杠,其中上面的深度乘數(shù)(depth multiplier)為1,這也是目前這類網(wǎng)絡(luò)層的最常見的設(shè)置啃奴。
我們這樣做是因為空間和深度信息可以被解耦潭陪。看看Xception模型的性能最蕾,這個理論似乎起了作用依溯。深度可分離的卷積也可用于移動設(shè)備,因為它們可以有效地利用參數(shù)瘟则。
想了解更多的卷積動畫黎炉,請查看:http://www.atyun.com/16909_一文帶你認識深度學(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_一文帶你認識深度學(xué)習(xí)中不同類型的卷積&=6.html