卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)

卷積神經(jīng)網(wǎng)絡(luò)在計(jì)算機(jī)視覺中已經(jīng)有很廣泛的應(yīng)用,比如無人車自動(dòng)駕駛要靠計(jì)算機(jī)視覺來檢測(cè)周圍的車、行人和路標(biāo),還有他們的距離,人臉識(shí)別準(zhǔn)確度也因?yàn)橛?jì)算機(jī)視覺的發(fā)展得到很大提升。大家手機(jī)上各種美圖軟件可能也都應(yīng)用了深度學(xué)習(xí)、卷積網(wǎng)絡(luò)的技術(shù)。

在計(jì)算機(jī)視覺的發(fā)展下,許多新型應(yīng)用以前想都不敢想,現(xiàn)在也依靠大家的創(chuàng)意應(yīng)運(yùn)而生。

相關(guān)算法不但使計(jì)算機(jī)視覺得到突飛猛進(jìn)的發(fā)展,與其他領(lǐng)域?qū)W科的交叉、想法的碰撞,會(huì)讓不同行業(yè)都得到許多靈感。每個(gè)人都可以結(jié)合這些算法的思想到自己的研究或者應(yīng)用方向上去,也許會(huì)有出乎意料的成果。

計(jì)算機(jī)視覺目前比較經(jīng)典的幾種用法有:

  1. 圖片分類問題,比如這張圖是不是一只貓,還是一只狗;
  2. 自動(dòng)駕駛,識(shí)別周圍物體和位置以便于避開;
  3. 風(fēng)格遷移, 用一張圖片的內(nèi)容和另一張圖片的藝術(shù)風(fēng)格合成一張新的圖片。

用傳統(tǒng)的全連接層的方法構(gòu)建一個(gè)計(jì)算機(jī)視覺的神經(jīng)網(wǎng)絡(luò),數(shù)據(jù)量特別大,需要大量計(jì)算資源是一個(gè)很大的問題。一張 64 px 的圖片,features 有 64643=12288 個(gè),而每張 1000px 的圖片有 100010003 =300百萬的 featrues,如果使用全連接網(wǎng)絡(luò)的深度神經(jīng)網(wǎng)絡(luò),參數(shù)多到難以想象(過億)!而且很難避免過擬合!

這時(shí)候,卷積神經(jīng)網(wǎng)絡(luò)就要大顯身手了!為了什么是卷積,我們先從邊緣檢測(cè)說起。

邊緣檢測(cè)

邊緣檢測(cè)就是識(shí)別圖像中物體的邊緣,有橫有豎,還有彎彎角角和各種不規(guī)則的邊緣。

卷積運(yùn)算

卷積運(yùn)算就是一個(gè)filter或者叫kernel,拓印在一張圖片上,對(duì)應(yīng)位置元素相乘的積求和,拓印整個(gè)圖片后得到一組數(shù)據(jù)。
【圖】


image.png

舉例子垂直邊緣檢測(cè)器:


image.png

正邊和負(fù)邊

image.png

水平邊緣 filter

image.png

Sobel/Scharr filter

這種濾波器增加了中間一行元素的權(quán)重,使得結(jié)果的魯棒性會(huì)更高


image.png

filter 和 卷積神經(jīng)網(wǎng)絡(luò)有什么關(guān)系?

fiter中每個(gè)數(shù)字作為參數(shù) w 在梯度下降中更新,讓神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)任何它所需要的3*3 (或者其他)的 fiter, 來捕捉數(shù)據(jù) 的 feature 。它可以檢測(cè)出45度或者70度,或者任何奇怪角度的邊緣。


image.png

Padding

Valid 卷積

用 3 × 3 的 fiter 卷積 6 × 6 的圖像,結(jié)果是 4 × 4 的矩陣。用數(shù)學(xué)符號(hào)表示,filter 為 f × f ,圖像為 n × n ,兩者卷積輸出結(jié)果為 ( n - f + 1 ) × ( n - f + 1 ) 。
【圖】

這樣的話就有兩個(gè)缺點(diǎn):一個(gè)是,每次卷積,你的圖片都會(huì)縮小,幾次之后,會(huì)不會(huì)變到只有 1 × 1? 第二個(gè),處于邊緣和角落的像素點(diǎn),在卷積運(yùn)算中用到的次數(shù)少,圖片這些地方的信息就被丟掉了。
【圖】

Same 卷積

為了解決這個(gè)問題,我們可以給圖片邊緣填充像素。用 p 表示填充的數(shù)量,那么卷積運(yùn)算的輸出就是: ( n + 2p - f + 1 ) × ( n + 2p - f + 1 ) 。

如何確定 p 值: 當(dāng)你在卷積運(yùn)算前,想要給的圖像填充邊緣讓輸入圖像大小等于輸出矩陣大小,你可以這樣計(jì)算:p = ( f - 1 ) / 2. 比如,假設(shè) 5 × 5 的 fiter,p 為 2 的時(shí)候就可以使得輸入和輸出一樣大。

這樣一來,最左上角的點(diǎn),在卷積運(yùn)算中被用到 4 次,丟失圖像邊緣的信息的這個(gè)缺點(diǎn)可以稍微削弱一下(此例中圖像中心的點(diǎn)被用到9次)。你也可以填充多一點(diǎn),讓 p 為 2 或者更大。

f 一般為奇數(shù): 可能的原因有:

  1. 如果 f 為偶數(shù),p 就不是整數(shù),實(shí)際操作中,會(huì)發(fā)生不對(duì)稱的 padding
  2. 計(jì)算視覺中,如果用奇數(shù),則會(huì)有個(gè)中心像素點(diǎn),能夠方便地指出 filter 的位置

也許這些理由還不是充分條件,也許用偶數(shù)的 f 也能得到不錯(cuò)的結(jié)果,但作為慣例還是推薦使用奇數(shù)的 f.

卷積步長(zhǎng)

如果每次進(jìn)行“拓印相乘”這一步之后,挪動(dòng)的位置不是之前例子中的 1 ,而是 其他數(shù)目,也是可以的,這個(gè)叫做步長(zhǎng),我們用 s 表示。這時(shí)候有:


image.png

如果公式中除法部分不是整數(shù),就在最后向下取整,那些不能放得下一個(gè) filter 的部分相當(dāng)于被舍棄了。你可以改變 s, f, p 使得最后結(jié)果是整數(shù),但有時(shí)候不必如此。

互相關(guān)(cross-correlation)

前面說的卷積運(yùn)算,在數(shù)學(xué)上不算真正的卷積,只能稱其為互相關(guān)(cross-correlation)。

數(shù)學(xué)上的卷積運(yùn)算之前,會(huì)對(duì) filter 進(jìn)行一個(gè)沿水平和垂直方向翻轉(zhuǎn),進(jìn)行這樣操作會(huì)發(fā)生這樣的效果:(AB)C = A(BC),被稱為結(jié)合律,常用于信號(hào)處理領(lǐng)域。

image.png

不過在機(jī)器學(xué)習(xí)中的慣例,我們進(jìn)行卷積不會(huì)進(jìn)行這一步,這不會(huì)對(duì)實(shí)現(xiàn)卷積網(wǎng)絡(luò)造成任何影響。

三維圖像上如何卷積

目前為止,我們的例子是灰度圖像,2D 數(shù)據(jù),彩色圖像如何卷積呢?彩色圖像的矩陣表示為 ( n_H , n_W , n_C )。n_C , channels(depths) 是圖像的顏色通道數(shù),RGB圖像的 channels是3,我們用來卷積的 filters ,對(duì)應(yīng)的,shape也會(huì)變?yōu)?( f , f , n_C ),這樣的 filters 一共有 f × f × n_C 個(gè)參數(shù) w.

filters的通道數(shù)輸入必須和圖像的(每一層的輸入)通道數(shù)相同,卷積后得到一個(gè) 2D 矩陣??梢赃x擇多個(gè) filters, 每個(gè) filters 相當(dāng)于普通神經(jīng)網(wǎng)絡(luò)里面的一個(gè)神經(jīng)元。多個(gè) filters 的卷積結(jié)果堆疊成 3D 數(shù)據(jù),成為下一層的輸入。下面細(xì)講。

單層卷積網(wǎng)絡(luò)

圖像和每一個(gè)filters進(jìn)行卷積運(yùn)算后得到 2D 矩陣這一過程,相當(dāng)于深度學(xué)習(xí)中的 WX,然后增加偏差 b , 相當(dāng)于得到 z = WX+b,也就是說,每一個(gè) filter 都對(duì)應(yīng)一個(gè)實(shí)數(shù) b,b 的數(shù)目和 filters 是一樣。

image.png

然后將這個(gè) z 輸入到非線性激活函里面,比如ReLU,輸出結(jié)果 a 和 z 擁有一樣的shape。

每個(gè) filters 都經(jīng)過這樣的步驟,然后把所有結(jié)果堆疊起來。因此某一層卷積神經(jīng)網(wǎng)絡(luò)的輸出,它的 channels 一定和這一層的 filters 個(gè)數(shù)相同。

參數(shù)有多少個(gè)?
某個(gè)卷積層一共有 10 個(gè) 3 × 3 × 3 的 filters ,那么參數(shù)個(gè)數(shù)就是 ( 27 + 1 ) × 10 = 280 個(gè)。

不管輸入的圖片有多大,在這一層,filters 確定好以后參數(shù)個(gè)數(shù)就不會(huì)變,這是卷積神經(jīng)網(wǎng)絡(luò)的一個(gè)特征——能很好地避免過擬合。

總結(jié)一下各種變量的表示:

image.png

簡(jiǎn)單卷積網(wǎng)絡(luò)

卷積到最后一層,會(huì)展開矩陣變成一個(gè)向量,然后輸入全連接層。最后的最后,根據(jù)你的目標(biāo)是什么,使用 logitic 或者 softmax 得到一個(gè)預(yù)測(cè)值的輸出,去計(jì)算代價(jià)函數(shù)。

image.png

卷積層:Convolution(CONV)
池化層:Pooling(POOL)
全連接層:Full connected(FC)

池化層

池化層也是一種縮減模型大小,提高計(jì)算速度,提高提取特征魯棒性的方式。具體做法就是用一個(gè) filter 以一個(gè)步幅拓印輸入,在區(qū)域內(nèi)選出最大值或者平均值。池化層的輸出的大小計(jì)算公式和卷積一樣: ( n + 2p - f )/s + 1,然后向下取整 。

Max pooling

如果 filters提取到某個(gè)特征,那么保留其最大值,如果沒有提取到這個(gè)特征,區(qū)域中不存在這個(gè)特征,因?yàn)樽畲笾颠€是很小。


image.png

池化層沒有參數(shù)需要學(xué)習(xí),梯度下降不需要改變?nèi)魏沃担灰_定了 f 和 s ,就是一個(gè)固定的運(yùn)算。它只是計(jì)算神經(jīng)網(wǎng)絡(luò)某一層的靜態(tài)屬性。

如果輸入不是2D,比如說有 n_c 個(gè) channels , 需要每個(gè) channels 都單獨(dú)執(zhí)行最大池化計(jì)算,得到的輸出,也有 n_c 個(gè) channels。

Average pooling

顧名思義,平均池化就是用 filter 取平均值,其他參數(shù)都是一樣的。

最大池化比平均池化更常用,例外是:深度很深的神經(jīng)網(wǎng)絡(luò)。

池化層的參數(shù)

(f)2 × (s)2 的池化層相當(dāng)于將寬度和高度縮減一半,其次是 3 × 2 。
最大池化很少用到 padding,也有例外。
參數(shù)經(jīng)過手動(dòng)設(shè)置,或者交叉驗(yàn)證。

卷積神經(jīng)網(wǎng)絡(luò)示例( LeNet - 5 )

image.png

人們?cè)诮y(tǒng)計(jì)一個(gè)卷積網(wǎng)絡(luò)有多少層時(shí),通常只統(tǒng)計(jì)具有權(quán)重和參數(shù)的層,所以池化層一般不會(huì)被記為一個(gè)單獨(dú)的層。

對(duì)于超級(jí)參數(shù),盡量不要自己設(shè)置超級(jí)參數(shù),而是查看文獻(xiàn)中別人采用了那些超級(jí)參數(shù),選一個(gè)別人任務(wù)中效果很好的架構(gòu),這些參數(shù)很有可能也適用于你自己的參數(shù)。

兩種經(jīng)典結(jié)構(gòu):
(conv + pool) -> (conv + pool ) -> FC -> FC -> softmax
conv -> pool -> conv -> pool -> FC -> FC -> softmax
或者一個(gè)或多個(gè)卷積層后面跟一個(gè)池化層

卷積神經(jīng)網(wǎng)絡(luò)的參數(shù),在卷積層并不多,更多的參數(shù)存在于全連接層。

列出所有層的激活值,你會(huì)發(fā)現(xiàn)卷積層的激活值是下降趨勢(shì),但是下降太快,也會(huì)影響性能。

image.png

卷積神經(jīng)網(wǎng)絡(luò)的基本模塊就是這幾個(gè)了,卷積層、池化層、全連接層。如何把這些基本模塊整合起來,構(gòu)建高效的神經(jīng)網(wǎng)絡(luò)呢?這需要深入的理解和感覺。最好的辦法就是大量閱讀別人的案例。你也可以將別人的框架應(yīng)用于自己的應(yīng)用程序。

為什么使用卷積?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容