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

前言

在七月初七情人節(jié),牛郎織女相見的一天,我終于學(xué)習(xí)了CNN(來(lái)自CS231n),感覺感觸良多,所以趕快記下來(lái),別忘了,最后祝大家情人節(jié)快樂(lè)5555555.正題開始!

CNN的基本結(jié)構(gòu)

CNN分為幾層

CNN一共有卷積層(CONV)、ReLU層(ReLU)、池化層(Pooling)、全連接層(FC(Full Connection))下面是各個(gè)層的詳細(xì)解釋。

卷積層(CONV)

卷積,尤其是圖像的卷積,需要一個(gè)濾波器,用濾波器對(duì)整個(gè)圖像進(jìn)行遍歷,我們假設(shè)有一個(gè)32*32*3的原始圖像A,濾波器的尺寸為5*5*3,用w表示,濾波器中的數(shù)據(jù)就是CNN的參數(shù)的一部分,那么在使用濾波器w對(duì)A進(jìn)行濾波的話,可以用下面的式子表示:



其中x為原始圖像的5*5*3的一部分,b是偏置項(xiàng)置為1。在對(duì)A進(jìn)行濾波之后,產(chǎn)生的是一個(gè)28*28*1的數(shù)據(jù)。那么假設(shè)我們存在6個(gè)濾波器,這六個(gè)濾波器之間彼此是獨(dú)立的,也就是他們內(nèi)部的數(shù)據(jù)是不同的且沒(méi)有相關(guān)性的??梢岳斫鉃橐粋€(gè)濾波器查找整幅圖像的垂直邊緣,一個(gè)查找水平邊緣,一個(gè)查找紅色,一個(gè)查找黑色這樣。那么我就可以產(chǎn)生6個(gè)28*28*1的數(shù)據(jù),將它們組合到一起就可以產(chǎn)生28*28*6的數(shù)據(jù),這就是卷積層主要做的工作。

CNN可以看作一系列的卷積層和ReLU層對(duì)原始數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理的神經(jīng)網(wǎng)絡(luò),處理的過(guò)程可以用下面這幅圖表示


特別要注意的是濾波器的深度一定要與上一層傳來(lái)的數(shù)據(jù)的深度相同,就像上圖的第二個(gè)卷積層在處理傳來(lái)的28*28*6的數(shù)據(jù)時(shí)要使用5*5*6的濾波器.

步長(zhǎng)stride

濾波器在圖像上不斷移動(dòng)對(duì)圖像濾波,自然存在步長(zhǎng)的問(wèn)題,在上面我們舉的例子都是步長(zhǎng)為1的情況,如果步長(zhǎng)為3的話,32*32*3的圖像經(jīng)過(guò)5*5*3的濾波器卷積得到的大小是(32-5)/3+1=10,注:步長(zhǎng)不能為2因?yàn)椋?2-5)/2+1=14.5是小數(shù)。

所以當(dāng)圖像大小是N,濾波器尺寸為F時(shí),步長(zhǎng)S,那么卷積后大小為(N-F)/S+1

關(guān)于控件尺寸的減小

我們從上面的圖中可以看到圖像的長(zhǎng)和寬在逐漸的減小,在經(jīng)過(guò)超過(guò)5層之后極可能只剩下1*1的空間尺度,這樣是十分不好的,而且也不利于我們接下來(lái)的計(jì)算,所以我們想讓卷積層處理完之后圖像在空間尺度上大小不變,所以我們引入了pad the border的操作。pad其實(shí)就是在圖像周圍補(bǔ)0,擴(kuò)大圖像的尺寸,使得卷積后圖像大小不變。在CNN中,主要存在4個(gè)超參數(shù),濾波器個(gè)數(shù)K,濾波器大小F,pad大小P和步長(zhǎng)S,其中P是整數(shù),當(dāng)P=1時(shí),對(duì)原始數(shù)據(jù)的操作如圖所示:


P=1的操作

那么在pad操作后卷積后的圖像大小為:(N-F+2*P)/S+1
而要想讓卷積層處理后圖像空間尺度不變,P的值可以設(shè)為P=(F-1)/2

總結(jié)

卷積層輸入W1*H1*D1大小的數(shù)據(jù),輸出W2*H2*D2的數(shù)據(jù),此時(shí)的卷積層共有4個(gè)超參數(shù):
K:濾波器個(gè)數(shù)
P:pad屬性值
S:濾波器每次移動(dòng)的步長(zhǎng)
F:濾波器尺寸
此時(shí)輸出的大小可以用輸入和超參計(jì)算得到:
W2=(W1-F+2P)/S+1
H2=(H1-F+2P)/S+1
D2=D1

一些補(bǔ)充

1*1的濾波器也是有意義的,它在深度方向做卷積,例如1*1*64的濾波器對(duì)56*56*64的數(shù)據(jù)卷積得到56*56的數(shù)據(jù)

F通常是奇數(shù),這樣可以綜合考慮上下左右四個(gè)方向的數(shù)據(jù)。

用神經(jīng)元的角度看待卷積層

卷積層從神經(jīng)元的角度看待可以有兩個(gè)性質(zhì):參數(shù)共享和局域連接。對(duì)待一個(gè)濾波器,例如5*5*3的一個(gè)濾波器,對(duì)32*32*3的數(shù)據(jù)卷積得到28*28的數(shù)據(jù),可以看作存在28*28個(gè)神經(jīng)元,每個(gè)對(duì)原圖像5*5*3的區(qū)域進(jìn)行計(jì)算,這28*28個(gè)神經(jīng)元由于使用同一個(gè)濾波器,所以參數(shù)相同,我們稱這一特性為參數(shù)共享。

針對(duì)不同的濾波器,我們可以看到他們會(huì)看到同一區(qū)域的圖像,相當(dāng)于在深度方向存在多個(gè)神經(jīng)元,他們看著相同區(qū)域叫做局域連接

參數(shù)共享減少了參數(shù)的數(shù)量,防止了過(guò)擬合
局域連接為查找不同特征更豐富的表現(xiàn)圖像提供了可能。
卷積就像是對(duì)原圖像的另一種表達(dá)。

ReLU層

激活函數(shù),對(duì)于每一個(gè)維度經(jīng)過(guò)ReLU函數(shù)輸出即可。不改變數(shù)據(jù)的空間尺度。

池化層

通過(guò)pad操作,輸出圖像在控件上并沒(méi)有變化,但是深度發(fā)生了變化,越來(lái)越龐大的數(shù)據(jù)給計(jì)算帶來(lái)了困難,也出現(xiàn)了冗余的特征,所以需要進(jìn)行池化操作,池化不改變深度,只改變長(zhǎng)寬,主要有最大值和均值兩種方法,一般的池化濾波器大小F為2步長(zhǎng)為2,對(duì)于最大值池化可以用下面的圖像清晰的表示:


最大池化

總結(jié)

卷積層輸入W1*H1*D1大小的數(shù)據(jù),輸出W2*H2*D2的數(shù)據(jù),此時(shí)的卷積層共有2個(gè)超參數(shù):
S:濾波器每次移動(dòng)的步長(zhǎng)
F:濾波器尺寸
此時(shí)輸出的大小可以用輸入和超參計(jì)算得到:
W2=(W1-F)/S+1
H2=(H1-F)/S+1
D2=D1

全連接層

將最后一層(CONV、ReLU或Pool)處理后的數(shù)據(jù)輸入全連接層,對(duì)于W2*H2*D2數(shù)據(jù),我們將其展成1*1*W2*H2*D2大小的數(shù)據(jù),輸入層共有W2*H2*D2個(gè)神經(jīng)元,最后根據(jù)問(wèn)題確定輸出層的規(guī)模,輸出層可以用softmax表示。也就是說(shuō),全連接層就是一個(gè)常見的BP神經(jīng)網(wǎng)絡(luò)。而這個(gè)網(wǎng)絡(luò)也是參數(shù)最多的部分,是接下來(lái)想要去掉的部分。完整的神經(jīng)網(wǎng)絡(luò)可以用下面的圖表示:

CNN結(jié)構(gòu):

[(CONV-ReLU)*N-POOL?]*M-(FC-RELU)*K,SoftMax

CNN趨勢(shì)

1.更小的濾波器與更深的網(wǎng)絡(luò)
2.只有CONV層而去掉池化與全鏈接

集中CNN網(wǎng)絡(luò)(時(shí)間序)

LeNet-5(1998)

最早的CNN,用于識(shí)別郵編,結(jié)構(gòu)為:
CONV-POOL-CONV-POOL-CONV-FC
濾波器大小5*5,步長(zhǎng)為1,池化層2*2,步長(zhǎng)為2

AlexNet(2012)

2012年由于GPU技術(shù)所限,原始AlexNet為兩個(gè)GPU分開計(jì)算,這里介紹合起來(lái)的結(jié)構(gòu)。

輸入圖像為227*227*3

具體結(jié)構(gòu)為:
AlexNet
一些細(xì)節(jié):

1.首次使用ReLU
2.使用Norm layers,現(xiàn)在已經(jīng)拋棄,因?yàn)樾Ч淮?br> 3.數(shù)據(jù)經(jīng)過(guò)預(yù)處理(例如大小變化,顏色變化等)
4.失活比率0.5
5.batch size 128
6.SGD Momentum 參數(shù)0.9(SGD和Momentum見我的其他文章)
7.學(xué)習(xí)速率 0.01,準(zhǔn)確率不在提升時(shí)減少10倍,1-2次后達(dá)到收斂
8.L2權(quán)重減少0.0005
9.錯(cuò)誤率15.4%

ZFNet(2013)

改進(jìn)自AlexNet,主要改變:
1.CONV1的濾波器從11*11步長(zhǎng)S=4改為7*7步長(zhǎng)為2.
2.CONV3,4,5濾波器數(shù)量有384,384,256改為512,1024,512(濾波器數(shù)量為2的n次冪有利于計(jì)算機(jī)計(jì)算可以提高效率)
錯(cuò)誤率:14.8%后繼續(xù)改進(jìn)至11.2%

VGGNet(2014)

當(dāng)前最好的最易用的CNN網(wǎng)絡(luò),所有卷積層濾波器的大小均為3*3,步長(zhǎng)為1,pad=1,池化層為2*2的最大值池化,S=2。

主要結(jié)構(gòu):
主要結(jié)構(gòu)

主要參數(shù)來(lái)自全連接層,這也是想要去掉FC的原因。

具有高度的統(tǒng)一性和線性的組合,易于理解,十分方便有VGG-16,VGG-19等多種結(jié)構(gòu)。
錯(cuò)誤率7.3%

GoogleNet(2014)

完全移除FC層,參數(shù)只有500萬(wàn),使用Inception模塊(不太理解,有時(shí)間繼續(xù)看)
準(zhǔn)確率6.67%

ResNet殘差神經(jīng)網(wǎng)絡(luò)

準(zhǔn)確率3.6%
擁有極深的網(wǎng)絡(luò)結(jié)構(gòu),且越深準(zhǔn)確率越高。是傳統(tǒng)CNN不具備的特點(diǎn),傳統(tǒng)CNN并非越深越準(zhǔn)確。需要訓(xùn)練時(shí)間較長(zhǎng)但是快于VGG


兩者對(duì)比
相關(guān)細(xì)節(jié)

1.每個(gè)卷積層使用Batch Normalization
2.Xavier/2初始化
3.SGD+Momentum(0.9)
4.Learning rate:0.1,準(zhǔn)確率不變減小10倍(因?yàn)锽atch Normalization所以比AlexNet大)
5.mini-batch size 256
6.Weight decay of 0.00001
7.不適用失活(因?yàn)锽atch Normalization)

具體的梯度過(guò)程學(xué)完ResNet再說(shuō)吧。

最后編輯于
?著作權(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)容