近年來,隨著一些強(qiáng)大、通用的深度學(xué)習(xí)框架相繼出現(xiàn),把卷積層添加進(jìn)深度學(xué)習(xí)模型也成了可能。這個(gè)過程很簡(jiǎn)單,只需一行代碼就能實(shí)現(xiàn)。但是,你真的理解“卷積”是什么嗎?當(dāng)初學(xué)者第一次接觸這個(gè)詞時(shí),看到堆疊在一起的卷積、核、通道等術(shù)語,他們往往會(huì)感到困惑。作為一個(gè)概念,“卷積”這個(gè)詞本身就是復(fù)雜、多層次的。
在這篇文章中,我們將分解卷積操作的機(jī)制,逐步將其與標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)聯(lián)系起來,探索它們是如何建立起強(qiáng)大的視覺層次結(jié)構(gòu),并最終成為強(qiáng)大的圖像特征提取器的。
2D卷積:操作
2D卷積是一個(gè)相當(dāng)簡(jiǎn)單的操作:我們先從一個(gè)小小的權(quán)重矩陣,也就是卷積核(kernel)開始,讓它逐步在二維輸入數(shù)據(jù)上“掃描”。卷積核“滑動(dòng)”的同時(shí),計(jì)算權(quán)重矩陣和掃描所得的數(shù)據(jù)矩陣的乘積,然后把結(jié)果匯總成一個(gè)輸出像素。
標(biāo)準(zhǔn)卷積
卷積核會(huì)在其經(jīng)過的所有位置上都重復(fù)以上操作,直到把輸入特征矩陣轉(zhuǎn)換為另一個(gè)二維的特征矩陣。簡(jiǎn)而言之,輸出的特征基本上就是原輸入特征的加權(quán)和(權(quán)重是卷積核自帶的值),而從像素位置上看,它們所處的地方大致相同。
那么為什么輸出特征的會(huì)落入這個(gè)“大致區(qū)域”呢?這取決于卷積核的大小。卷積核的大小直接決定了在生成輸出特征時(shí),它合并了多少輸入特征,也就是說:卷積核越小,輸入輸出的位置越接近;卷積核越大,距離就越遠(yuǎn)。
這和全連接層很不一樣。在上圖的例子中,我們的輸入有5×5=25個(gè)特征,而我們的輸出則是3×3=9個(gè)特征。如果這是一個(gè)全連接層,輸入25個(gè)特征后,我們會(huì)輸出包含25×9=225個(gè)參數(shù)的權(quán)重矩陣,每個(gè)輸出特征都是每個(gè)輸入特征的加權(quán)和。
這意味著對(duì)于每個(gè)輸入特征,卷積執(zhí)行的操作是使用9個(gè)參數(shù)進(jìn)行轉(zhuǎn)換。它關(guān)注的不是每個(gè)特征究竟是什么,而是這個(gè)大致位置都有什么特征。這一點(diǎn)很重要,理解了它,我們才能進(jìn)行深入探討。
一些常用的技巧
在我們繼續(xù)討論前,我們先來看看卷積神經(jīng)網(wǎng)絡(luò)中經(jīng)常出現(xiàn)的兩種技巧:Padding和Strides。
Padding
如果你仔細(xì)看了上文中的gif,你會(huì)發(fā)現(xiàn)我們把5×5的特征矩陣轉(zhuǎn)換成了3×3的特征矩陣,輸入圖像的邊緣被“修剪”掉了,這是因?yàn)檫吘壣系南袼赜肋h(yuǎn)不會(huì)位于卷積核中心,而卷積核也沒法擴(kuò)展到邊緣區(qū)域以外。這是不理想的,通常我們都希望輸入和輸出的大小應(yīng)該保持一致。
padding
Padding就是針對(duì)這個(gè)問題提出的一個(gè)解決方案:它會(huì)用額外的“假”像素填充邊緣(值一般為0),這樣,當(dāng)卷積核掃描輸入數(shù)據(jù)時(shí),它能延伸到邊緣以外的偽像素,從而使輸出和輸入大小相同。
Stride
如果說Padding的作用是使輸出與輸入同高寬,那么在卷積層中,有時(shí)我們會(huì)需要一個(gè)尺寸小于輸入的輸出。那這該怎么辦呢?這其實(shí)是卷積神經(jīng)網(wǎng)絡(luò)中的一種常見應(yīng)用,當(dāng)通道數(shù)量增加時(shí),我們需要降低特征空間維度。實(shí)現(xiàn)這一目標(biāo)有兩種方法,一是使用池化層,二是使用Stride(步幅)。
步幅
滑動(dòng)卷積核時(shí),我們會(huì)先從輸入的左上角開始,每次往左滑動(dòng)一列或者往下滑動(dòng)一行逐一計(jì)算輸出,我們將每次滑動(dòng)的行數(shù)和列數(shù)稱為Stride,在上節(jié)的圖片中,Stride=1;在上圖中,Stride=2。Stride的作用是成倍縮小尺寸,而這個(gè)參數(shù)的值就是縮小的具體倍數(shù),比如步幅為2,輸出就是輸入的1/2;步幅為3,輸出就是輸入的1/3。以此類推。
在一些目前比較先進(jìn)的網(wǎng)絡(luò)架構(gòu)中,如ResNet,它們都選擇使用較少的池化層,在有縮小輸出需要時(shí)選擇步幅卷積。
多通道卷積
當(dāng)然,上述例子都只包含一個(gè)輸入通道。實(shí)際上,大多數(shù)輸入圖像都有3個(gè)RGB通道,而通道數(shù)的增加意味著網(wǎng)絡(luò)深度的增加。為了方便理解,我們可以把不同通道看成觀察全圖的不同“視角”,它或許會(huì)忽略某些特征,但一定也會(huì)強(qiáng)調(diào)某些特征。
彩色圖像一般都有紅、綠、藍(lán)三個(gè)通道
這里就要涉及到“卷積核”和“filter”這兩個(gè)術(shù)語的區(qū)別。在只有一個(gè)通道的情況下,“卷積核”就相當(dāng)于“filter”,這兩個(gè)概念是可以互換的;但在一般情況下,它們是兩個(gè)完全不同的概念。每個(gè)“filter”實(shí)際上恰好是“卷積核”的一個(gè)集合,在當(dāng)前層,每個(gè)通道都對(duì)應(yīng)一個(gè)卷積核,且這個(gè)卷積核是獨(dú)一無二的。
filter:卷積核的集合
卷積層中的每個(gè)filter有且只有一個(gè)輸出通道——當(dāng)filter中的各個(gè)卷積核在輸入數(shù)據(jù)上滑動(dòng)時(shí),它們會(huì)輸出不同的處理結(jié)果,其中一些卷積核的權(quán)重可能更高,而它相應(yīng)通道的數(shù)據(jù)也會(huì)被更加重視(例:如果紅色通道的卷積核權(quán)重更高,filter就會(huì)更關(guān)注這個(gè)通道的特征差異)。
卷積核處理完數(shù)據(jù)后,形成了三個(gè)版本的處理結(jié)果,這時(shí),filter再把它們加在一起形成一個(gè)總的通道。所以簡(jiǎn)而言之,卷積核處理的是不同通道的不同版本,而filter則是作為一個(gè)整體,產(chǎn)生一個(gè)整體的輸出。
最后,還有偏置項(xiàng)。我們都知道每個(gè)filter輸出后都要加上一個(gè)偏置項(xiàng),那么為什么要放在這個(gè)位置呢?如果聯(lián)系filter的作用,這一點(diǎn)不難理解,畢竟只有在這里,偏置項(xiàng)才能和filter一起作用,產(chǎn)生最終的輸出通道。
以上是單個(gè)filter的情況,但多個(gè)filter也是一樣的工作原理:每個(gè)filter通過自己的卷積核集處理數(shù)據(jù),形成一個(gè)單通道輸出,加上偏置項(xiàng)后,我們得到了一個(gè)最終的單通道輸出。如果存在多個(gè)filter,這時(shí)我們可以把這些最終的單通道輸出組合成一個(gè)總輸出,它的通道數(shù)就等于filter數(shù)。這個(gè)總輸出經(jīng)過非線性處理后,繼續(xù)被作為輸入饋送進(jìn)下一個(gè)卷積層,然后重復(fù)上述過程。
2D卷積:直覺
卷積仍是線性變換
盡管上文已經(jīng)講解了卷積層的機(jī)制,但對(duì)比標(biāo)準(zhǔn)的前饋網(wǎng)絡(luò),我們還是很難在它們之間建立起聯(lián)系。同樣的,我們也無法解釋為什么卷積可以進(jìn)行縮放,以及它在圖像數(shù)據(jù)上的處理效果為什么會(huì)那么好。
假設(shè)我們有一個(gè)4×4的輸入,目標(biāo)是把它轉(zhuǎn)換成2×2的輸出。這時(shí),如果我們用的是前饋網(wǎng)絡(luò),我們會(huì)把這個(gè)4×4的輸入重新轉(zhuǎn)換成一個(gè)長(zhǎng)度為16的向量,然后把這16個(gè)值輸入一個(gè)有4個(gè)輸出的密集連接層中。下面是這個(gè)層的權(quán)重矩陣W:
總而言之,有64個(gè)參數(shù)
雖然卷積的卷積核操作看起來很奇怪,但它仍然是一個(gè)帶有等效變換矩陣的線性變換。如果我們?cè)谥貥?gòu)的4×4輸入上使用一個(gè)大小為3的卷積核K,那么這個(gè)等效矩陣會(huì)變成:
這里真的只有9個(gè)參數(shù)
注:雖然上面的矩陣是一個(gè)等效變換矩陣,但實(shí)際操作可能會(huì)不太一樣。
可以發(fā)現(xiàn),整個(gè)卷積仍然是線性變換,但與此同時(shí),它也是一種截然不同的變換。相比前饋網(wǎng)絡(luò)的64個(gè)參數(shù),卷積得到的9個(gè)參數(shù)可以多次重復(fù)使用。由于權(quán)重矩陣中包含大量0權(quán)重,我們只會(huì)在每個(gè)輸出節(jié)點(diǎn)看到選定數(shù)量的輸入(卷積核的輸入)。
而更高效的是,卷積的預(yù)定義參數(shù)可以被視為權(quán)重矩陣的先驗(yàn)。卷積核的大小、filter的數(shù)量,這些都是可以預(yù)定義的網(wǎng)絡(luò)參數(shù)。當(dāng)我們使用預(yù)訓(xùn)練模型進(jìn)行圖像分類時(shí),我們可以把預(yù)先訓(xùn)練的網(wǎng)絡(luò)參數(shù)作為當(dāng)前的網(wǎng)絡(luò)參數(shù),并在此基礎(chǔ)上訓(xùn)練自己的特征提取器。這會(huì)大大節(jié)省時(shí)間。
從這個(gè)意義上講,雖然同為線性變換,卷積相比前饋網(wǎng)絡(luò)的優(yōu)勢(shì)就可以被解釋了。和隨機(jī)初始化不同,使用預(yù)訓(xùn)練的參數(shù)允許我們只需要優(yōu)化最終全連接層的參數(shù),這意味著更好的性能。而大大削減參數(shù)數(shù)量則意味著更高的效率。
上圖中我們只展示了把64個(gè)獨(dú)立參數(shù)減少到9個(gè)共享參數(shù),但在實(shí)際操作中,當(dāng)我們從MNIST選擇784幅224×224×3的圖像時(shí),它會(huì)有超過150,000個(gè)輸入,也就是超過100億個(gè)參數(shù)。相比之下,整個(gè)ResNet-50只有約2500萬個(gè)參數(shù)。
因此,將一些參數(shù)固定為0可以大大提高效率。那么對(duì)比遷移學(xué)習(xí),我們是怎么判斷這些先驗(yàn)會(huì)產(chǎn)生積極效果的呢?
答案在于先前引導(dǎo)參數(shù)學(xué)習(xí)的特征組合。
局部性
在文章開頭,我們就討論過這么幾點(diǎn):
卷積核僅組合局部區(qū)域的幾個(gè)像素,并形成一個(gè)輸出。也就是說,輸出特征只代表這一小塊局部區(qū)域的輸入特征。
卷積核會(huì)在“掃描”完整張圖像后再生成輸出矩陣。
因此,隨著反向傳播從分類節(jié)點(diǎn)開始往前推移,卷積核就可以不斷調(diào)整權(quán)重,努力從一組本地輸入中提取有效特征。另外,因?yàn)榫矸e核本身應(yīng)用于整個(gè)圖像,所以無論它學(xué)習(xí)的是哪個(gè)區(qū)域的特征,這些特征必須足夠通用。
如果這是任何其他類型的數(shù)據(jù),比如應(yīng)用程序的安裝序列號(hào),卷積的這種操作完全不起作用。因?yàn)樾蛄刑?hào)雖然是一系列有順序的數(shù)字,但他們彼此間沒有共享的信息,也沒有潛在聯(lián)系。但在圖像中,像素總是以一致的順序出現(xiàn),并且會(huì)始終對(duì)周圍像素產(chǎn)生影響:如果所有附近的像素都是紅色,那么我們的目標(biāo)像素就很可能也是紅色的。如果這個(gè)像素最終被證明存在偏差,不是紅色的,那這個(gè)有趣的點(diǎn)就可能會(huì)被轉(zhuǎn)換為特征。
通過對(duì)比像素和臨近像素的差異來學(xué)習(xí)特征——這實(shí)際上是許多早期計(jì)算機(jī)視覺特征提取方法的基礎(chǔ)。例如,對(duì)于邊緣檢測(cè),我們可以使用Sobel edge detection:
用于垂直邊緣檢測(cè)的Sobel算子
對(duì)于不包含邊緣的網(wǎng)格(如天空),因?yàn)榇蠖鄶?shù)像素都是相同的值,所以它的卷積核的總輸出為0。對(duì)于具有垂直邊緣的網(wǎng)格,邊緣左側(cè)和右側(cè)的像素存在差異,所以卷積核的輸出不為零,激活邊緣區(qū)域。雖然這個(gè)卷積核一次只能掃描3×3的區(qū)域,提取其中的特征,但當(dāng)它掃描完整幅圖像后,它就有能力在圖像中的任何位置檢測(cè)全局范圍內(nèi)的某個(gè)特征。
那么深度學(xué)習(xí)和這種傳統(tǒng)方法的區(qū)別是什么?對(duì)于圖像數(shù)據(jù)的早期處理,我們確實(shí)可以用低級(jí)的特征檢測(cè)器來檢測(cè)圖中的線條、邊緣,那么,Sobel邊緣算子的作用能否被卷積學(xué)習(xí)到?
深度學(xué)習(xí)研究的一個(gè)分支是研究神經(jīng)網(wǎng)絡(luò)模型可解釋性,其中最強(qiáng)大的是使用了優(yōu)化的特征可視化。它的思路很簡(jiǎn)單,就是通過優(yōu)化圖像來盡可能強(qiáng)烈地激活filter。這確實(shí)具有直觀意義:如果優(yōu)化后的圖像完全被邊緣填充,這其實(shí)就是filter本身正在尋找激活特征,并讓自己被激活的強(qiáng)有力證據(jù)。
GoogLeNet第一個(gè)卷積層的3個(gè)不同通道的特征可視化,請(qǐng)注意,雖然它們檢測(cè)到不同類型的邊緣,但它們?nèi)匀皇堑图?jí)邊緣檢測(cè)器
GoogLeNet第二個(gè)、第三個(gè)卷積層的12個(gè)通道的特征可視化
這里要注意一點(diǎn),卷積圖像也是圖像。卷積核是從圖像左上角開始滑動(dòng)的,相應(yīng)的,它的輸出仍將位于左上角。所以我們可以在這個(gè)卷積層上在做卷積,以提取更深層的特征可視化。
然而,無論我們的特征檢測(cè)器如何深入,在沒有任何進(jìn)一步改變的情況下,它們?nèi)詫⒃诜浅P〉膱D像塊上運(yùn)行。無論檢測(cè)器有多深,它的大小就只有3×3,它是不可能檢測(cè)到完整的臉部的。這是感受野(Receptive field)的問題。
感受野
無論是什么CNN架構(gòu),它們的基本設(shè)計(jì)就是不斷壓縮圖像的高和寬,同時(shí)增加通道數(shù)量,也就是深度。如前所述,這可以通過池化和Stride來實(shí)現(xiàn)。局部性影響的是臨近層的輸入輸出觀察區(qū)域,而感受野決定的則是整個(gè)網(wǎng)絡(luò)原始輸入的觀察區(qū)域。
步幅卷積背后的想法是我們只滑動(dòng)固定距離的間隔,并跳過中間的網(wǎng)格。
如上圖所示,把stride調(diào)整為2后,卷積得到的輸出大大縮小。這時(shí),如果我們?cè)谶@個(gè)輸出的基礎(chǔ)上做非線性激活,然后再上面再加一個(gè)卷積層,有趣的事就發(fā)生了。相比正常卷積得到的輸出,3×3卷積核在這個(gè)步幅卷積輸出上的感受野更大。
這是因?yàn)樗脑驾斎雲(yún)^(qū)域就比正常卷積的輸入?yún)^(qū)域大,這會(huì)對(duì)后續(xù)特征提取產(chǎn)生影響。
這種感受野的擴(kuò)大允許卷積層將低級(jí)特征(線條、邊緣)組合成更高級(jí)別的特征(曲線、紋理),正如我們?cè)趍ixed3a層中看到的那樣。而隨著我們添加更多Stride層,網(wǎng)絡(luò)會(huì)顯示出更多高級(jí)特征,如mixed4a、mixed5a。
通過檢測(cè)低級(jí)特征,并使用它們來檢測(cè)更高級(jí)別的特征,使其在視覺層次結(jié)構(gòu)中向前發(fā)展,最終能夠檢測(cè)到整個(gè)視覺概念,如面部,鳥類,樹木等。這就是卷積在圖像數(shù)據(jù)上如此強(qiáng)大、高效的一個(gè)原因。
結(jié)論
現(xiàn)如今,CNN已經(jīng)允許開發(fā)者們從構(gòu)建簡(jiǎn)單的CV應(yīng)用,到把它用于為復(fù)雜產(chǎn)品和服務(wù)提供技術(shù)動(dòng)力,它既是照片庫(kù)中用于檢測(cè)人臉的小工具,也是臨床醫(yī)學(xué)中幫助醫(yī)生篩查癌細(xì)胞的貼心助手。它們可能是未來計(jì)算機(jī)視覺的一個(gè)關(guān)鍵,當(dāng)然,一些新的突破也可能即將到來。
但無論如何,有一件事是確定的:CNN是當(dāng)今許多創(chuàng)新應(yīng)用的核心,而且它們的效果絕對(duì)令人驚嘆,這項(xiàng)技術(shù)本身也有掌握、了解的必要。
-
檢測(cè)器
+關(guān)注
關(guān)注
1文章
866瀏覽量
47722 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4774瀏覽量
100898 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5507瀏覽量
121291
原文標(biāo)題:什么是深度學(xué)習(xí)的卷積?
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論