前言
在七月初七情人節(jié),牛郎織女相見的一天流昏,我終于學(xué)習(xí)了CNN(來自CS231n)扎即,感覺感觸良多,所以趕快記下來况凉,別忘了谚鄙,最后祝大家情人節(jié)快樂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ù)是不同的且沒有相關(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ò),處理的過程可以用下面這幅圖表示
特別要注意的是濾波器的深度一定要與上一層傳來的數(shù)據(jù)的深度相同舞虱,就像上圖的第二個(gè)卷積層在處理傳來的28*28*6的數(shù)據(jù)時(shí)要使用5*5*6的濾波器.
步長stride
濾波器在圖像上不斷移動(dòng)對(duì)圖像濾波欢际,自然存在步長的問題,在上面我們舉的例子都是步長為1的情況矾兜,如果步長為3的話损趋,32*32*3的圖像經(jīng)過5*5*3的濾波器卷積得到的大小是(32-5)/3+1=10,注:步長不能為2因?yàn)椋?2-5)/2+1=14.5是小數(shù)椅寺。
所以當(dāng)圖像大小是N浑槽,濾波器尺寸為F時(shí),步長S返帕,那么卷積后大小為(N-F)/S+1
關(guān)于控件尺寸的減小
我們從上面的圖中可以看到圖像的長和寬在逐漸的減小桐玻,在經(jīng)過超過5層之后極可能只剩下1*1的空間尺度,這樣是十分不好的荆萤,而且也不利于我們接下來的計(jì)算镊靴,所以我們想讓卷積層處理完之后圖像在空間尺度上大小不變,所以我們引入了pad the border的操作观腊。pad其實(shí)就是在圖像周圍補(bǔ)0邑闲,擴(kuò)大圖像的尺寸算行,使得卷積后圖像大小不變梧油。在CNN中,主要存在4個(gè)超參數(shù)州邢,濾波器個(gè)數(shù)K儡陨,濾波器大小F,pad大小P和步長S量淌,其中P是整數(shù)骗村,當(dāng)P=1時(shí),對(duì)原始數(shù)據(jù)的操作如圖所示:
那么在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)的步長
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ù)量舞终,防止了過擬合
局域連接為查找不同特征更豐富的表現(xiàn)圖像提供了可能轻庆。
卷積就像是對(duì)原圖像的另一種表達(dá)。
ReLU層
激活函數(shù)敛劝,對(duì)于每一個(gè)維度經(jīng)過ReLU函數(shù)輸出即可余爆。不改變數(shù)據(jù)的空間尺度。
池化層
通過pad操作夸盟,輸出圖像在控件上并沒有變化蛾方,但是深度發(fā)生了變化,越來越龐大的數(shù)據(jù)給計(jì)算帶來了困難上陕,也出現(xiàn)了冗余的特征桩砰,所以需要進(jìn)行池化操作,池化不改變深度释簿,只改變長寬亚隅,主要有最大值和均值兩種方法,一般的池化濾波器大小F為2步長為2庶溶,對(duì)于最大值池化可以用下面的圖像清晰的表示:
總結(jié)
卷積層輸入W1*H1*D1大小的數(shù)據(jù)煮纵,輸出W2*H2*D2的數(shù)據(jù),此時(shí)的卷積層共有2個(gè)超參數(shù):
S:濾波器每次移動(dò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ù)問題確定輸出層的規(guī)模,輸出層可以用softmax表示。也就是說贞让,全連接層就是一個(gè)常見的BP神經(jīng)網(wǎng)絡(luò)采幌。而這個(gè)網(wǎng)絡(luò)也是參數(shù)最多的部分,是接下來想要去掉的部分震桶。完整的神經(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蹲姐,步長為1磨取,池化層2*2,步長為2
AlexNet(2012)
2012年由于GPU技術(shù)所限柴墩,原始AlexNet為兩個(gè)GPU分開計(jì)算忙厌,這里介紹合起來的結(jié)構(gòu)。
輸入圖像為227*227*3
具體結(jié)構(gòu)為:
一些細(xì)節(jié):
1.首次使用ReLU
2.使用Norm layers江咳,現(xiàn)在已經(jīng)拋棄逢净,因?yàn)樾Ч淮?br>
3.數(shù)據(jù)經(jīng)過預(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步長S=4改為7*7步長為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,步長為1附鸽,pad=1脱拼,池化層為2*2的最大值池化,S=2坷备。
主要結(jié)構(gòu):
主要參數(shù)來自全連接層熄浓,這也是想要去掉FC的原因。
具有高度的統(tǒng)一性和線性的組合击你,易于理解玉组,十分方便有VGG-16谎柄,VGG-19等多種結(jié)構(gòu)丁侄。
錯(cuò)誤率7.3%
GoogleNet(2014)
完全移除FC層,參數(shù)只有500萬朝巫,使用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í)間較長但是快于VGG
相關(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)
具體的梯度過程學(xué)完ResNet再說吧。