• 正文
    • 一、卷積層
    • 二、激活函數(shù)
    • 三、池化層
    • 四、全連接與輸出層
    • 五、CNN的訓練
    • 一、LeNet-5
    • 二、AlexNet
    • 三、VGGNet
    • 四、Inception Net
    • 五、ResNet
    • 六、Densenet
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

一文精簡介紹CNN神經(jīng)網(wǎng)絡(luò)

2021/12/07
1504
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

 

這是love1005lin在CSDN上2021-11-19發(fā)布的一篇深度學習的卷積神經(jīng)網(wǎng),內(nèi)容整理的精簡,移動,現(xiàn)在將其進行轉(zhuǎn)載,供大家參考。

01 基本原理

卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)大致包括:卷積層、激活函數(shù)、池化層、全連接層、輸出層等。

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

 

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

 

一、卷積層

 

1、二維卷積

給定二維的圖像作為輸入,二維卷積核,卷積運算可以表示為:$$Sleft( {i,j} right) = left( {I * K} right)left( {i,j} right) = sumlimits_m{} {sumlimits_n{} {Ileft( {i - m,j - n} right) cdot Kleft( {m,n} right)} }$$

卷積運算中的卷積核需要進行上下翻轉(zhuǎn)和左右翻轉(zhuǎn):

如果忽略卷積核的左右翻轉(zhuǎn),對于實數(shù)卷積實際上與互相換運算是一致的:

▲ 圖1.1.1 二維卷積 運算示意圖

 

2、卷積步長

卷積步長,也就是每次卷積核移動的步長。

下圖顯示了卷積步長分別為1,2兩種情況下的輸出結(jié)果。從中可以看到,當步長大于1之后,相當于從原來的的步長為1的情況下結(jié)果進行降采樣。

▲ 圖1.1.2 卷積步長分別為1,2兩種情況下輸出的結(jié)果

 

3、卷積模式

根據(jù)結(jié)果是否要求卷積核與原始圖像完全重合,部分重合以及結(jié)果尺寸的要求,卷積模式包括有三種:

  • Full:允許卷積核部分與原始圖像重合;所獲得結(jié)果的尺寸等于原始圖像尺寸加上卷積核的尺寸減1;
  • Same:允許卷積核部分與原始圖像重合;但最終截取Full卷積結(jié)果中中心部分與原始圖像尺寸相同的結(jié)果;
  • Validate:所有卷積核與原始圖像完全重合下的卷積結(jié)果;結(jié)果的尺寸等于原始圖像的尺寸減去卷積核尺寸加1;

下面顯示了三種卷積模式對應(yīng)的情況。實際上可以通過對于原始圖像補零(Padding)然后通過Validate模式獲得前面的Full,Same兩種模式的卷積結(jié)果。

▲ 圖1.1.3 三種卷積模式示意圖

 

4、數(shù)據(jù)填充

 

(1)邊緣填充

數(shù)據(jù)填充,也稱為Padding。如果有一個尺寸為的圖像,使用尺寸為卷積核進行卷積操作,在進行卷積之前對于原圖像周圍填充層數(shù)據(jù),可以影響卷積輸出結(jié)果尺寸。

下面就是對于原始的圖像周圍進行1層的填充,可以將Validate模式卷積結(jié)果尺寸增加1。

▲ 圖1.1.4 對于原始的圖像周圍進行1層的填充,可以將Validate模式卷積結(jié)果尺寸增加1

▲ 圖1.1.5  邊緣填充,步長為2的卷積

 

(2)膨脹填充

對于數(shù)據(jù)的填充也可以使用數(shù)據(jù)上采樣填充的方式。這種方式主要應(yīng)用在轉(zhuǎn)置卷積(反卷積中)。

▲ 圖1.1.6  轉(zhuǎn)置卷積對于數(shù)據(jù)膨脹填充

 

5、感受野

感受野:卷積神經(jīng)網(wǎng)絡(luò)每一層輸出的特征圖(featuremap)上的像素點在輸 入圖片上映射的區(qū)域大小,即特征圖上的一個點對應(yīng)輸入圖上的區(qū) 域。

下圖反映了經(jīng)過幾層卷積之后,卷積結(jié)果所對應(yīng)前幾層的圖像數(shù)據(jù)范圍。

▲ 圖1.1.7 經(jīng)過幾層卷積之后,卷積結(jié)果所對應(yīng)前幾層的圖像數(shù)據(jù)范圍

 

計算感受野的大小,可以從后往前逐層計算:

  • 第層的感受野大小和第層的卷積核大小、卷積步長有關(guān)系,同時也與層的感受野大小有關(guān)系;假設(shè)最后一層(卷積層或者池化層)輸出的特征圖感受也都大學(相對于其直接輸入而言)等于卷積核的大?。?/li>

  ●  公式中:
   Si:第i層步長,Stride
   Ki:第i層卷積核大小,Kernel Size

感受野的大小除了與卷積核的尺寸、卷積層數(shù),還取決與卷積是否采用空洞卷積(Dilated Convolve)有關(guān)系:

▲ 圖1.1.8 卷積核進行膨脹之后,進行空洞卷積可以擴大視野的范圍

 

▲ 圖1.1.9 空洞卷積尺寸放大兩倍的情況

 

6、卷積深度

卷積層的深度(卷積核個數(shù)):一個卷積層通常包含多個尺寸一致的卷積核。如果在CNN網(wǎng)絡(luò)結(jié)構(gòu)中,一層的卷積核的個數(shù)決定了后面結(jié)果的層數(shù),也是結(jié)果的厚度。

▲ 圖1.1.10 多個卷積核形成輸出結(jié)果的深度(厚度)

 

7、卷積核尺寸

卷積核的大小一般為奇數(shù)奇數(shù) 1×1,3×3,5×5,7×7都是最常見的。這是為什么呢?為什么沒有偶數(shù)偶數(shù)?

(1)更容易padding

在卷積時,我們有時候需要卷積前后的尺寸不變。這時候我們就需要用到padding。

(2)更容易找到卷積錨點

在CNN中,進行卷積操作時一般會以卷積核模塊的一個位置為基準進行滑動,這個基準通常就是卷積核模塊的中心。若卷積核為奇數(shù),卷積錨點很好找,自然就是卷積模塊中心,但如果卷積核是偶數(shù),這時候就沒有辦法確定了,讓誰是錨點似乎都不怎么好。

▲ , LeNET CNN的結(jié)構(gòu)示意圖

 

二、激活函數(shù)

激活函數(shù)是用來加入非線性因素,提高網(wǎng)絡(luò)表達能力,卷積神經(jīng)網(wǎng)絡(luò)中最常用的是ReLU,Sigmoid使用較少。

▲ 圖1.2.1 常見到的激活函數(shù)

 

▲ 圖1.2.2 激活函數(shù)表達式以及對應(yīng)的微分函數(shù)

 

1、ReLU函數(shù)

ReLU函數(shù)的優(yōu)點:

  • 計算速度快,ReLU函數(shù)只有線性關(guān)系,比Sigmoid和Tanh要快很多輸入為正數(shù)的時候,不存在梯度消失問題

  ReLU函數(shù)的缺點:

  • 強制性把負值置為0,可能丟掉一些特征當輸入為負數(shù)時,權(quán)重無法更新,導致“神經(jīng)元死亡”(學習率不 要太大)

2、Parametric ReLU

  • 當?shù)臅r候,稱為 Leaky ReLU;當從高斯分布隨機產(chǎn)生的時候,稱為 Randomized ReLU(RReLU)

  PReLU函數(shù)的優(yōu)點:

  • 比sigmoid/tanh收斂快;解決了ReLU的“神經(jīng)元死亡”問題;

  PReLU函數(shù)的缺點:

  • 需要再學習一個參數(shù),工作量變大

3、ELU函數(shù)

ELU函數(shù)的優(yōu)點:

  • 處理含有噪聲的數(shù)據(jù)有優(yōu)勢更容易收斂

ELU函數(shù)的缺點:

  • 計算量較大,收斂速度較慢

CNN在卷積層盡量不要使用Sigmoid和Tanh,將導致梯度消失。首先選用ReLU,使用較小的學習率,以免造成神經(jīng)元死亡的情況。

如果ReLU失效,考慮使用Leaky ReLU、PReLU、ELU或者Maxout,此時一般情況都可以解決

4、特征圖

  • 淺層卷積層:提取的是圖像基本特征,如邊緣、方向和紋理等特征深層卷積層:提取的是圖像高階特征,出現(xiàn)了高層語義模式,如“車輪”、“人臉”等特征

三、池化層

池化操作使用某位置相鄰輸出的總體統(tǒng)計特征作為該位置 的輸出,常用最大池化 (max-pooling)和均值池化(average- pooling) 。

池化層不包含需要訓練學習的參數(shù),僅需指定池化操作的核大小、操作步幅以及池化類型。

▲ 圖1.3.1 最大值池化一是均值池化示意圖

 

池化的作用:

  • 減少網(wǎng)絡(luò)中的參數(shù)計算量,從而遏制過擬合;
  • 增強網(wǎng)絡(luò)對輸入圖像中的小變形、扭曲、平移的魯棒性(輸入里的微 小扭曲不會改變池化輸出——因為我們在局部鄰域已經(jīng)取了最大值/ 平均值)幫助我們獲得不因尺寸而改變的等效圖片表征。這非常有用,因為 這樣我們就可以探測到圖片里的物體,不管它在哪個位置

四、全連接與輸出層

  • 對卷積層和池化層輸出的特征圖(二維)進行降維將學到的特征表示映射到樣本標記空間的作用

輸出層:

  • 對于分類問題采用Softmax函數(shù):

  • 對于回歸問題,使用線性函數(shù):

五、CNN的訓練

 

1、網(wǎng)絡(luò)訓練基本步驟

CNN的訓練,也稱神經(jīng)網(wǎng)絡(luò)的學習算法與經(jīng)典BP網(wǎng)絡(luò)是一樣的,都屬于隨機梯度下降(SGD:Stochastic Gradient Descent),也稱增量梯度下降,實驗中用于優(yōu)化可微分目標函數(shù)的迭代算法。

Step 1:用隨機數(shù)初始化所有的卷積核和參數(shù)/權(quán)重

Step 2:將訓練圖片作為輸入,執(zhí)行前向步驟(卷積, ReLU,池化以及全連接層的前向傳播)并計算每個類別的對應(yīng)輸出概率。

Step 3:計算輸出層的總誤差

Step 4:反向傳播算法計算誤差相對于所有權(quán)重的梯度,并用梯度下降法更新所有的卷積核和參數(shù)/權(quán)重的值,以使輸出誤差最小化

注:卷積核個數(shù)、卷積核尺寸、網(wǎng)絡(luò)架構(gòu)這些參數(shù),是在 Step 1 之前就已經(jīng)固定的,且不會在訓練過程中改變——只有卷 積核矩陣和神經(jīng)元權(quán)重會更新。

2、網(wǎng)絡(luò)等效為BP網(wǎng)絡(luò)

和多層神經(jīng)網(wǎng)絡(luò)一樣,卷積神經(jīng)網(wǎng)絡(luò)中的參數(shù)訓練也是使用誤差反向傳播算法,關(guān)于池化層的訓練,需要再提一下,是將池化層改為多層神經(jīng)網(wǎng)絡(luò)的形式:

▲ 圖1.5.1 神經(jīng)網(wǎng)絡(luò)中池化層對應(yīng)著多層神經(jīng)網(wǎng)絡(luò)

 

▲ 圖1.5.2 卷積層對應(yīng)的多層神經(jīng)網(wǎng)絡(luò)的形式

 

▲ 圖1.5.3 卷積層對應(yīng)的多層神經(jīng)網(wǎng)絡(luò)形式

 

3、每層特征圖尺寸

輸入圖片的尺寸:一般用n×n表示輸入的image大小。

卷積核的大?。阂话阌?f*f 表示卷積核的大小。

填充(Padding):一般用 p 來表示填充大小。

步長(Stride):一般用 s 來表示步長大小。

輸出圖片的尺寸:一般用 o來表示。

如果已知n 、 f 、 p、 s 可以求得 o ,計算公式如下:

  ●  其中:
   []:是向下取整符號,用于結(jié)果不是整數(shù)時向下取整

 

02 經(jīng)典CNN

▲ 圖2.1 CNN發(fā)展脈絡(luò)

 

一、LeNet-5

 

1、簡介

LeNet-5由LeCun等人提出于1998年提出,主要進行手寫數(shù)字識別和英文字母識別。經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò),LeNet雖小,各模塊齊全,是學習 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)

▲ 圖2.1.1 LeNet-5網(wǎng)絡(luò)結(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)絡(luò)識別的結(jié)果是數(shù)字i。采用的是徑向基函數(shù)(RBF)的網(wǎng)絡(luò)連接方式:

$$y_i  = sumlimits_j{} {left( {x - j - w_{ij} } right)2 } $$

總結(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在計算機視覺領(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丟棄部分神元,避免了過擬合使用重疊MaxPooling(讓池化層的步長小于池化核的大小), 一定程度上提升了特征的豐富性使用CUDA加速訓練過程進行數(shù)據(jù)增強,原始圖像大小為256×256的原始圖像中重 復截取224×224大小的區(qū)域,大幅增加了數(shù)據(jù)量,大大減 輕了過擬合,提升了模型的泛化能力

2、網(wǎng)絡(luò)結(jié)構(gòu)

AlexNet可分為8層(池化層未單獨算作一層),包括5個卷 積層以及3個全連接層:

▲ 圖2.2.1 AlexNet網(wǎng)絡(luò)結(jié)構(gòu)

 

輸入層: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/

參考:K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. In ICLR, 2015.

比較常用的是VGG-16,結(jié)構(gòu)規(guī)整,具有很強的拓展性。相較于AlexNet,VGG-16網(wǎng)絡(luò)模型中的卷積層均使用 3 ∗ 3 的 卷積核,且均為步長為1的same卷積,池化層均使用 2 ∗ 2的 池化核,步長為2。

2、網(wǎng)絡(luò)結(jié)構(gòu)

▲ 圖2.3.1 VGGNet網(wǎng)絡(luò)結(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)絡(luò)。

Inception四個版本所對應(yīng)的論文及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)絡(luò)結(jié)構(gòu)

Inception Module

  • 深度:層數(shù)更深,采用了22層,在不同深度處增加了兩個 loss來避免上述提到的梯度消失問題
  • 寬度:Inception Module包含4個分支,在卷積核3x3、5x5 之前、max pooling之后分別加上了1x1的卷積核,起到了降低特征圖厚度的作用

1×1的卷積的作用:可以跨通道組織信息,來提高網(wǎng)絡(luò)的表達能力;可以對輸出通道進行升維和降維。

▲ 圖2.4.1 Inception Net網(wǎng)絡(luò)結(jié)構(gòu)

 

五、ResNet

 

1、簡介

ResNet(Residual Neural Network),又叫做殘差神經(jīng)網(wǎng) 絡(luò),是由微軟研究院的何凱明等人2015年提出,獲得ImageNet ILSVRC 2015比賽冠軍,獲得CVPR2016最佳論文獎。

隨著卷積網(wǎng)絡(luò)層數(shù)的增加,誤差的逆?zhèn)鞑ミ^程中存在的梯 度消失和梯度爆炸問題同樣也會導致模型的訓練難以進行,甚至會出現(xiàn)隨著網(wǎng)絡(luò)深度的加深,模型在訓練集上的訓練誤差會出現(xiàn)先降低再升高的現(xiàn)象。殘差網(wǎng)絡(luò)的引入則有助于解決梯度消失和梯度爆炸問題。

殘差塊:

  ResNet的核心是叫做殘差塊(Residual block)的小單元, 殘差塊可以視作在標準神經(jīng)網(wǎng)絡(luò)基礎(chǔ)上加入了跳躍連接(Skip connection)。

  • 原連接:

▲ 圖2.5.1 原鏈接結(jié)構(gòu)示意圖

 

  • 跳躍連接:

▲ 圖2.5.2 跳躍結(jié)構(gòu)示意圖

 

  • Skip connection作用:

記:

我們有:

 

六、Densenet

 

1、簡介

DenseNet中,兩個層之間都有直接的連接,因此該網(wǎng)絡(luò)的直接連接個數(shù)為L(L+1)/2。

對于每一層,使用前面所有層的特征映射作為輸入,并且使用其自身的特征映射作為所有后續(xù)層的輸入:

▲ 圖2.6.1 DenseNet示意圖

參考:Huang, G., Liu, Z., Van Der Maaten, L., & Weinberger, K. Q. (2017). Densely connected convolutional networks. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 4700- 4708).

2、網(wǎng)絡(luò)結(jié)構(gòu)

5層的稠密塊示意圖:

▲ 圖2.6.2 5層DenseNet的結(jié)構(gòu)

 

DenseNets可以自然地擴展到數(shù)百個層,而沒有表現(xiàn)出優(yōu)化困難。在實驗中,DenseNets隨著參數(shù)數(shù)量的增加,在精度上產(chǎn)生一致的提高,而沒有任何性能下降或過擬合的跡象。

優(yōu)點:

  • 緩解了消失梯度問題加強了特征傳播,鼓勵特征重用一定程度上減少了參數(shù)的數(shù)量

※ 總  結(jié) ※

這是love1005lin在CSDN上2021-11-19發(fā)布的一篇深度學習的卷積神經(jīng)網(wǎng),內(nèi)容整理的精簡,移動,現(xiàn)在將其進行轉(zhuǎn)載,并發(fā)布在公眾號“TSINGHUAZHUOQING”中。

深度學習-卷積神經(jīng)網(wǎng)絡(luò)(CNN)[2] : https://blog.csdn.net/love1005lin/article/details/121418206?utm_source=app&app_version=4.20.0

參考資料

[1]深度學習-卷積神經(jīng)網(wǎng)絡(luò)(CNN): https://blog.csdn.net/love1005lin/article/details/121418206?utm_source=app&app_version=4.20.0

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

公眾號TsinghuaJoking主筆。清華大學自動化系教師,研究興趣范圍包括自動控制、智能信息處理、嵌入式電子系統(tǒng)等。全國大學生智能汽車競賽秘書處主任,技術(shù)組組長,網(wǎng)稱“卓大大”。