一文精簡(jiǎn)介紹CNN神經(jīng)網(wǎng)絡(luò)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
“簡(jiǎn) 介: 這是love1005lin在CSDN上2021-11-19發(fā)布的一篇深度學(xué)習(xí)的卷積神經(jīng)網(wǎng),內(nèi)容整理的精簡(jiǎn),移動(dòng),現(xiàn)在將其進(jìn)行轉(zhuǎn)載,供大家參考。
01 基本原理
??卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)大致包括:卷積層、激活函數(shù)、池化層、全連接層、輸出層等。一、卷積層
1、二維卷積
??給定二維的圖像作為輸入,二維卷積核,卷積運(yùn)算可以表示為:$$S\left( {i,j} \right) = \left( {I * K} \right)\left( {i,j} \right) = \sum\limits_m{} {\sum\limits_n{} {I\left( {i - m,j - n} \right) \cdot K\left( {m,n} \right)} }$$??卷積運(yùn)算中的卷積核需要進(jìn)行上下翻轉(zhuǎn)和左右翻轉(zhuǎn):??如果忽略卷積核的左右翻轉(zhuǎn),對(duì)于實(shí)數(shù)卷積實(shí)際上與互相換運(yùn)算是一致的:2、卷積步長(zhǎng)
??卷積步長(zhǎng),也就是每次卷積核移動(dòng)的步長(zhǎng)。??下圖顯示了卷積步長(zhǎng)分別為1,2兩種情況下的輸出結(jié)果。從中可以看到,當(dāng)步長(zhǎng)大于1之后,相當(dāng)于從原來(lái)的的步長(zhǎng)為1的情況下結(jié)果進(jìn)行降采樣。3、卷積模式
??根據(jù)結(jié)果是否要求卷積核與原始圖像完全重合,部分重合以及結(jié)果尺寸的要求,卷積模式包括有三種:- Full:允許卷積核部分與原始圖像重合;所獲得結(jié)果的尺寸等于原始圖像尺寸加上卷積核的尺寸減1;
- Same:允許卷積核部分與原始圖像重合;但最終截取Full卷積結(jié)果中中心部分與原始圖像尺寸相同的結(jié)果;
- Validate:所有卷積核與原始圖像完全重合下的卷積結(jié)果;結(jié)果的尺寸等于原始圖像的尺寸減去卷積核尺寸加1;
4、數(shù)據(jù)填充
(1)邊緣填充
??數(shù)據(jù)填充,也稱為Padding。如果有一個(gè)尺寸為的圖像,使用尺寸為卷積核進(jìn)行卷積操作,在進(jìn)行卷積之前對(duì)于原圖像周圍填充層數(shù)據(jù),可以影響卷積輸出結(jié)果尺寸。??下面就是對(duì)于原始的圖像周圍進(jìn)行1層的填充,可以將Validate模式卷積結(jié)果尺寸增加1。(2)膨脹填充
??對(duì)于數(shù)據(jù)的填充也可以使用數(shù)據(jù)上采樣填充的方式。這種方式主要應(yīng)用在轉(zhuǎn)置卷積(反卷積中)。5、感受野
??感受野:卷積神經(jīng)網(wǎng)絡(luò)每一層輸出的特征圖(featuremap)上的像素點(diǎn)在輸 入圖片上映射的區(qū)域大小,即特征圖上的一個(gè)點(diǎn)對(duì)應(yīng)輸入圖上的區(qū) 域。??下圖反映了經(jīng)過(guò)幾層卷積之后,卷積結(jié)果所對(duì)應(yīng)前幾層的圖像數(shù)據(jù)范圍。- 第層的感受野大小和第層的卷積核大小、卷積步長(zhǎng)有關(guān)系,同時(shí)也與層的感受野大小有關(guān)系;
- 假設(shè)最后一層(卷積層或者池化層)輸出的特征圖感受也都大學(xué)(相對(duì)于其直接輸入而言)等于卷積核的大?。?/li>
???
Si
:第i層步長(zhǎng),Stride???
Ki
:第i層卷積核大小,Kernel Size??感受野的大小除了與卷積核的尺寸、卷積層數(shù),還取決與卷積是否采用空洞卷積(Dilated Convolve)有關(guān)系:
6、卷積深度
??卷積層的深度(卷積核個(gè)數(shù)):一個(gè)卷積層通常包含多個(gè)尺寸一致的卷積核。如果在CNN網(wǎng)絡(luò)結(jié)構(gòu)中,一層的卷積核的個(gè)數(shù)決定了后面結(jié)果的層數(shù),也是結(jié)果的厚度。7、卷積核尺寸
??卷積核的大小一般為奇數(shù)奇數(shù) 1×1,3×3,5×5,7×7都是最常見的。這是為什么呢?為什么沒(méi)有偶數(shù)偶數(shù)?(1)更容易padding
??在卷積時(shí),我們有時(shí)候需要卷積前后的尺寸不變。這時(shí)候我們就需要用到padding。(2)更容易找到卷積錨點(diǎn)
??在CNN中,進(jìn)行卷積操作時(shí)一般會(huì)以卷積核模塊的一個(gè)位置為基準(zhǔn)進(jìn)行滑動(dòng),這個(gè)基準(zhǔn)通常就是卷積核模塊的中心。若卷積核為奇數(shù),卷積錨點(diǎn)很好找,自然就是卷積模塊中心,但如果卷積核是偶數(shù),這時(shí)候就沒(méi)有辦法確定了,讓誰(shuí)是錨點(diǎn)似乎都不怎么好。二、激活函數(shù)
??激活函數(shù)是用來(lái)加入非線性因素,提高網(wǎng)絡(luò)表達(dá)能力,卷積神經(jīng)網(wǎng)絡(luò)中最常用的是ReLU,Sigmoid使用較少。1、ReLU函數(shù)
- 計(jì)算速度快,ReLU函數(shù)只有線性關(guān)系,比Sigmoid和Tanh要快很多
- 輸入為正數(shù)的時(shí)候,不存在梯度消失問(wèn)題
- 強(qiáng)制性把負(fù)值置為0,可能丟掉一些特征
- 當(dāng)輸入為負(fù)數(shù)時(shí),權(quán)重?zé)o法更新,導(dǎo)致“神經(jīng)元死亡”(學(xué)習(xí)率不 要太大)
2、Parametric ReLU
- 當(dāng)的時(shí)候,稱為 Leaky ReLU;
- 當(dāng)從高斯分布隨機(jī)產(chǎn)生的時(shí)候,稱為 Randomized ReLU(RReLU)
- 比sigmoid/tanh收斂快;
- 解決了ReLU的“神經(jīng)元死亡”問(wèn)題;
- 需要再學(xué)習(xí)一個(gè)參數(shù),工作量變大
3、ELU函數(shù)
- 處理含有噪聲的數(shù)據(jù)有優(yōu)勢(shì)
- 更容易收斂
- 計(jì)算量較大,收斂速度較慢
4、特征圖
- 淺層卷積層:提取的是圖像基本特征,如邊緣、方向和紋理等特征
- 深層卷積層:提取的是圖像高階特征,出現(xiàn)了高層語(yǔ)義模式,如“車輪”、“人臉”等特征
三、池化層
??池化操作使用某位置相鄰輸出的總體統(tǒng)計(jì)特征作為該位置 的輸出,常用最大池化 (max-pooling)和均值池化(average- pooling) 。??池化層不包含需要訓(xùn)練學(xué)習(xí)的參數(shù),僅需指定池化操作的核大小、操作步幅以及池化類型。- 減少網(wǎng)絡(luò)中的參數(shù)計(jì)算量,從而遏制過(guò)擬合;
- 增強(qiáng)網(wǎng)絡(luò)對(duì)輸入圖像中的小變形、扭曲、平移的魯棒性(輸入里的微 小扭曲不會(huì)改變池化輸出——因?yàn)槲覀冊(cè)诰植苦徲蛞呀?jīng)取了最大值/ 平均值)
- 幫助我們獲得不因尺寸而改變的等效圖片表征。這非常有用,因?yàn)?這樣我們就可以探測(cè)到圖片里的物體,不管它在哪個(gè)位置
四、全連接與輸出層
- 對(duì)卷積層和池化層輸出的特征圖(二維)進(jìn)行降維
- 將學(xué)到的特征表示映射到樣本標(biāo)記空間的作用
- 對(duì)于分類問(wèn)題采用Softmax函數(shù):
- 對(duì)于回歸問(wèn)題,使用線性函數(shù):
五、CNN的訓(xùn)練
1、網(wǎng)絡(luò)訓(xùn)練基本步驟
??CNN的訓(xùn)練,也稱神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)算法與經(jīng)典BP網(wǎng)絡(luò)是一樣的,都屬于隨機(jī)梯度下降(SGD:Stochastic Gradient Descent),也稱增量梯度下降,實(shí)驗(yàn)中用于優(yōu)化可微分目標(biāo)函數(shù)的迭代算法。- Step 1:用隨機(jī)數(shù)初始化所有的卷積核和參數(shù)/權(quán)重
- Step 2:將訓(xùn)練圖片作為輸入,執(zhí)行前向步驟(卷積, ReLU,池化以及全連接層的前向傳播)并計(jì)算每個(gè)類別的對(duì)應(yīng)輸出概率。
- Step 3:計(jì)算輸出層的總誤差
- Step 4:反向傳播算法計(jì)算誤差相對(duì)于所有權(quán)重的梯度,并用梯度下降法更新所有的卷積核和參數(shù)/權(quán)重的值,以使輸出誤差最小化
2、網(wǎng)絡(luò)等效為BP網(wǎng)絡(luò)
??和多層神經(jīng)網(wǎng)絡(luò)一樣,卷積神經(jīng)網(wǎng)絡(luò)中的參數(shù)訓(xùn)練也是使用誤差反向傳播算法,關(guān)于池化層的訓(xùn)練,需要再提一下,是將池化層改為多層神經(jīng)網(wǎng)絡(luò)的形式:3、每層特征圖尺寸
- 輸入圖片的尺寸:一般用n×n表示輸入的image大小。
- 卷積核的大?。阂话阌?f*f 表示卷積核的大小。
- 填充(Padding):一般用 p 來(lái)表示填充大小。
- 步長(zhǎng)(Stride):一般用 s 來(lái)表示步長(zhǎng)大小。
- 輸出圖片的尺寸:一般用 o來(lái)表示。
- 如果已知n 、 f 、 p、 s 可以求得 o ,計(jì)算公式如下:
???
[]
:是向下取整符號(hào),用于結(jié)果不是整數(shù)時(shí)向下取整02 經(jīng)典CNN
一、LeNet-5
1、簡(jiǎn)介
??LeNet-5由LeCun等人提出于1998年提出,主要進(jìn)行手寫數(shù)字識(shí)別和英文字母識(shí)別。經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò),LeNet雖小,各模塊齊全,是學(xué)習(xí) CNN的基礎(chǔ)。??參考:http://yann.lecun.com/exdb/lenet/??Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, November 1998.2、網(wǎng)絡(luò)結(jié)構(gòu)
- 輸入層:32 × 32 ?的圖片,也就是相當(dāng)于1024個(gè)神經(jīng)元;
- C1層(卷積層):選擇6個(gè) 5 × 5 的卷積核,得到6個(gè)大小為32-5 1=28的特征圖,也就是神經(jīng)元的個(gè)數(shù)為 6 × 28 × 28 = 4704;
- S2層(下采樣層):每個(gè)下抽樣節(jié)點(diǎn)的4個(gè)輸入節(jié)點(diǎn)求和后取平均(平均池化),均值 乘上一個(gè)權(quán)重參數(shù)加上一個(gè)偏置參數(shù)作為激活函數(shù)的輸入,激活函數(shù)的輸出即是下一層節(jié)點(diǎn)的值。池化核大小選擇 2 ? 2 得到6個(gè) 14 ×14大小特征圖
- C3層(卷積層):用 5 × 5 的卷積核對(duì)S2層輸出的特征圖進(jìn)行卷積后,得到6張10 × 10新 圖片,然后將這6張圖片相加在一起,然后加一個(gè)偏置項(xiàng)b,然后用 激活函數(shù)進(jìn)行映射,就可以得到1張 10 × 10 的特征圖。我們希望得到 16 張 10 × 10 的 特 征 圖 , 因 此 我 們 就 需 要 參 數(shù) 個(gè) 數(shù) 為 16 × ( 6 × ( 5 × 5 ) ) 個(gè)參數(shù)
- S4層(下采樣層):對(duì)C3的16張 10 × 10 特征圖進(jìn)行最大池化,池化核大小為2 × 2,得到16張大小為 5 × 5的特征圖。神經(jīng)元個(gè)數(shù)已經(jīng)減少為:16 × 5 × 5 =400
- C5層(卷積層):用 5 × 5 的卷積核進(jìn)行卷積,然后我們希望得到120個(gè)特征圖,特征圖 大小為5-5 1=1。神經(jīng)元個(gè)數(shù)為120(這里實(shí)際上是全連接,但是原文還是稱之為了卷積層)
- F6層(全連接層):有84個(gè)節(jié)點(diǎn),該層的訓(xùn)練參數(shù)和連接數(shù)都( 120 1 ) × 84 = 10164
- Output層:共有10個(gè)節(jié)點(diǎn),分別代表數(shù)字0到9,如果節(jié)點(diǎn)i的輸出值為0,則網(wǎng)絡(luò)識(shí)別的結(jié)果是數(shù)字i。采用的是徑向基函數(shù)(RBF)的網(wǎng)絡(luò)連接方式:
- 總結(jié):卷積核大小、卷積核個(gè)數(shù)(特征圖需要多少個(gè))、池化核大小(采樣率多少)這些參數(shù)都是變化的,這就是所謂的CNN調(diào)參,需要學(xué)會(huì)根據(jù)需要進(jìn)行不同的選擇。
二、AlexNet
1、簡(jiǎn)介
??AlexNet由Hinton的學(xué)生Alex Krizhevsky于2012年提出,獲得ImageNet LSVRC-2012(物體識(shí)別挑戰(zhàn)賽)的冠軍,1000個(gè)類別120萬(wàn)幅高清圖像(Error: 26.2%(2011) →15.3%(2012)),通過(guò)AlexNet確定了CNN在計(jì)算機(jī)視覺領(lǐng)域的王者地位。??參考:A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. In NIPS, 2012.- 首次成功應(yīng)用ReLU作為CNN的激活函數(shù)
- 使用Dropout丟棄部分神元,避免了過(guò)擬合
- 使用重疊MaxPooling(讓池化層的步長(zhǎng)小于池化核的大小), 一定程度上提升了特征的豐富性
- 使用CUDA加速訓(xùn)練過(guò)程
- 進(jìn)行數(shù)據(jù)增強(qiáng),原始圖像大小為256×256的原始圖像中重 復(fù)截取224×224大小的區(qū)域,大幅增加了數(shù)據(jù)量,大大減 輕了過(guò)擬合,提升了模型的泛化能力
2、網(wǎng)絡(luò)結(jié)構(gòu)
??AlexNet可分為8層(池化層未單獨(dú)算作一層),包括5個(gè)卷 積層以及3個(gè)全連接層:- 輸入層:AlexNet首先使用大小為224×224×3圖像作為輸入(后改為227×227×3) (227-11 2*0)/4 1=55
- 第一層(卷積層):包含96個(gè)大小為11×11的卷積核,卷積步長(zhǎng)為4,因此第一層輸出大小為55×55×96;然后構(gòu)建一個(gè)核大小為3×3、步長(zhǎng)為2的最大池化層進(jìn)行數(shù)據(jù)降采樣,進(jìn)而輸出大小為27×27×96
- 第二層(卷積層):包含256個(gè)大小為5×5卷積核,卷積步長(zhǎng)為1,同時(shí)利用padding保證 輸出尺寸不變,因此該層輸出大小為27×27×256;然后再次通過(guò) 核大小為3×3、步長(zhǎng)為2的最大池化層進(jìn)行數(shù)據(jù)降采樣,進(jìn)而輸出大小為13×13×256
- 第三層與第四層(卷積層):均為卷積核大小為3×3、步長(zhǎng)為1的same卷積,共包含384個(gè)卷積核,因此兩層的輸出大小為13×13×384
- 第五層(卷積層):同樣為卷積核大小為3×3、步長(zhǎng)為1的same卷積,但包含256個(gè)卷積 核,進(jìn)而輸出大小為13×13×256;在數(shù)據(jù)進(jìn)入全連接層之前再次 通過(guò)一個(gè)核大小為3×3、步長(zhǎng)為2的最大池化層進(jìn)行數(shù)據(jù)降采樣, 數(shù)據(jù)大小降為6×6×256,并將數(shù)據(jù)扁平化處理展開為9216個(gè)單元
- 第六層、第七層和第八層(全連接層):全連接加上Softmax分類器輸出1000類的分類結(jié)果,有將近6千萬(wàn)個(gè)參數(shù)
三、VGGNet
1、簡(jiǎn)介
??VGGNet由牛津大學(xué)和DeepMind公司提出:- Visual Geometry Group:https://www.robots.ox.ac.uk/~vgg/
- DeepMind:https://deepmind.com/
2、網(wǎng)絡(luò)結(jié)構(gòu)
- 兩個(gè)卷積核大小為 3 ? 3 .55?5, 相當(dāng)于單個(gè)卷積核大小為 5 ? 5 ?的卷積層
- 兩者參數(shù)數(shù)量比值為( 2 ? 3 ? 3 ) / ( 5 ? 5 ) = 72 ?,前者參數(shù)量更少
- 此外,兩個(gè)的卷積層串聯(lián)可使用兩次ReLU激活函數(shù),而一個(gè)卷積層只使用一次
四、Inception Net
1、簡(jiǎn)介
??Inception Net 是Google公司2014年提出,獲得ImageNet LSVRC-2014冠軍。文章提出獲得高質(zhì)量模型最保險(xiǎn)的做法就是增加模型的深度(層數(shù))或者是其寬度(層核或者神經(jīng)元數(shù)),采用了22層網(wǎng)絡(luò)。??Inception四個(gè)版本所對(duì)應(yīng)的論文及ILSVRC中的Top-5錯(cuò)誤率:- Going Deeper with Convolutions: 6.67%
- Batch Normalization: Accelerating Deep Network Training by
- Reducing Internal Covariate Shift: 4.8%
- RethinkingtheInceptionArchitectureforComputerVision:3.5%
- Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning: 3.08%
2、網(wǎng)絡(luò)結(jié)構(gòu)
??Inception Module- 深度:層數(shù)更深,采用了22層,在不同深度處增加了兩個(gè) loss來(lái)避免上述提到的梯度消失問(wèn)題
- 寬度:Inception Module包含4個(gè)分支,在卷積核3x3、5x5 之前、max pooling之后分別加上了1x1的卷積核,起到了降低特征圖厚度的作用
- 1×1的卷積的作用:可以跨通道組織信息,來(lái)提高網(wǎng)絡(luò)的表達(dá)能力;可以對(duì)輸出通道進(jìn)行升維和降維。
五、ResNet
1、簡(jiǎn)介
??ResNet(Residual Neural Network),又叫做殘差神經(jīng)網(wǎng) 絡(luò),是由微軟研究院的何凱明等人2015年提出,獲得ImageNet ILSVRC 2015比賽冠軍,獲得CVPR2016最佳論文獎(jiǎng)。??隨著卷積網(wǎng)絡(luò)層數(shù)的增加,誤差的逆?zhèn)鞑ミ^(guò)程中存在的梯 度消失和梯度爆炸問(wèn)題同樣也會(huì)導(dǎo)致模型的訓(xùn)練難以進(jìn)行,甚至?xí)霈F(xiàn)隨著網(wǎng)絡(luò)深度的加深,模型在訓(xùn)練集上的訓(xùn)練誤差會(huì)出現(xiàn)先降低再升高的現(xiàn)象。殘差網(wǎng)絡(luò)的引入則有助于解決梯度消失和梯度爆炸問(wèn)題。??殘差塊:??ResNet的核心是叫做殘差塊(Residual block)的小單元, 殘差塊可以視作在標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)基礎(chǔ)上加入了跳躍連接(Skip connection)。- 原連接:
- 跳躍連接:
- Skip connection作用: