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