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