【深度學習原理第4篇】卷積神經網路詳解(CNN)

剛入坑AI的小白發表於2020-11-21

前言

思來想去,還是回頭寫下CNN原理吧,也是自己回顧一下,做個總結,如果覺得不錯的話,歡迎點贊,收藏,交流。
在這裡插入圖片描述

卷積神經網路(Convolutional Neural NetWork)

一、卷積神經網路的結構

卷積神經網路主要由卷積層下采樣層全連線層 3種網路構成。。上述三種網路層排列組合可以構建一個完整的卷積神經網路,下圖為一個簡單卷積神經網路。
在這裡插入圖片描述
輸入層->卷積層->下采樣層->卷積層->下采樣層->全連線層->輸出層
即輸入,兩個卷積+下采樣,再接兩個全連線,輸出

現在我們來通過解釋下上圖,稍微深入瞭解下這個簡單的CNN網路結構:
輸入影像假設為灰度圖Grey,對應影像矩陣表示為(w,h,1),1表示單通道,即沒有彩色,如果是從彩色圖,就有RGB三個通道,就寫成(w,h,3),其中w,h對應輸入影像的寬和高。
過程:
1、首先將灰度圖Grey作為輸入層,然後接一個卷積層,第一次卷積後,得到3個特徵圖(Feature Map),每一個特徵圖對應一個卷積核(Convolution Kernel,又稱濾波器),卷積核可以決定產生幾個特徵圖,如卷積核為3×3就會產生3個特徵圖,若為5×5則會產生5個,此時網路模型結構變為(w,h,3),其中3個特徵圖的矩陣也被稱為“特徵矩陣”,3代表特徵矩陣的深度。接著卷積後,到了下采樣層,也稱為pooling層,下采樣層對輸入的3個特徵圖(特徵矩陣)進行下采樣,長寬減半,得到更小的特徵矩陣(w/2,h/2,3)。

2、接著到第二個卷積層,此時卷積核為5×5,所以卷積產生5個特徵圖,第二次下采樣後得到更小的特徵圖(w/4,h/4,5),不斷卷積和下采樣過程就是在提取影像高維特徵的過程。

3、接著兩個全連線層,第一個全連線層與上一層的5個特徵圖的每個神經元(每個畫素)進行全連線,下一個全連線層與上一個全連線層進行全連線,最後一層是輸出層,對全連線後的特徵向量進行計算,得到分類評分值,然後作為結果輸出。

舉個例子:假如輸入的影像是32*32的灰色貓影像,用來識別貓狗概率,看看它寬、高、通道三個的變化
輸入層:(32,32,1)
—>卷積層(卷積核3×3):(32,32,3)
—>下采樣層:(16,16,3)
—>卷積層(卷積核5×5):(16,16,5)
—>下采樣層:(8,8,5) 即得到(8,8,5)大小的特徵向量,一共8×8×5=320神經元
—>全連線層全連線層
—>輸出層(假設啟用函式為softmax):假設影像分類選項為(貓、狗),而softmax得出的是概率,則輸出得到[0.7,0.3],選擇概率最大的,則影像預測是貓
總結: 卷積改變深度,下采樣改變寬高
上述卷積核為3×3,常常程式碼中表示為kernel=3

二、卷積操作

Padding操作
卷積操作時會遇到在影像邊界造成影像資訊丟失的問題,Padding操作則是為了解決邊界卷積問題問題而提出的。
可分為Same Padding、Valid Padding和自定義Padding3種方法,常用前兩種。
Same Padding(padding = “same”)是根據卷積核的大小,對輸入影像矩陣進行邊界補充(一般填充0),使得卷積後得到的特徵矩陣與輸入矩陣大小一致,Same Padding方法設定padding引數為1,一般無特殊宣告,都預設用Same Padding。Vaild Padding實際上不需要進行Padding操作,Vaild Padding方法設定padding引數為0,使得輸出特徵矩陣比輸入矩陣要小。
自定義Padding生成的特徵圖要根據公式得出,如下:在這裡插入圖片描述
input為輸入矩陣,padding為邊界填充數量,kernel為卷積核大小,stride為步長大小(卷積核移動大小)
圖解如下:
在這裡插入圖片描述
矩陣卷積操作
矩陣操作能在計算機種快速且方便的移植到GPU中,極大的減少卷積運算的時間。實際環境中可以通過兩步來完成卷積操作:
(1)Im2col演算法(Image to column)將輸入影像卷積核轉換成規定的矩陣,這個Im2col中間的2表示,輸入影像和卷積核這兩個物件,最後都要轉成矩陣形式,矩陣運算
(2)GEMM演算法(General Martrix Martrix Multiply—一般矩陣乘法):將轉換後的矩陣相乘

首先來講下Im2col演算法,如圖
在這裡插入圖片描述
(1)假設輸入影像為C×H×W,C為深度,H,W為高和寬,卷積核大小為K*K,卷積核以步長(stride)為1,從左上角開始原圖進行特徵轉換,一直走到右下角,將整幅圖轉換完畢,每次轉換都會得到一個特徵向量:C×K×K(卷積核大小為K×K,共C個,不同顏色標出),走完後得到(H×W)個特徵向量,組成特徵矩陣(H×W)×(C×K×K),該影像轉換的特徵矩陣記為Feature Matrix
(2)下面卷積矩陣的操作理解就相對簡單了,就是有Cout個C×K×K大小的卷積核,一個卷積核轉換出一個C×K×K的特徵向量,所以這些特徵向量,組成特徵矩陣為Cout×(C×K×K)大小,將其稱為過濾矩陣(Filter Matrix),因為卷積核又稱濾波器。
可見影像核卷積核最終都是要轉成矩陣的,因為最終需要矩陣運算

GEMM演算法(一般矩陣乘法)
該演算法就是將卷積核產生的過濾矩陣 × 輸入影像產生的特徵矩陣的轉置,得到Cout×(H×W)的輸出特徵矩陣feature map
在這裡插入圖片描述

三、卷積神經網路的三大核心思想

1、區域性感知
2、權值共享
3、下采樣技術

大致講解下則三個核心思想:
區域性感知:每一個神經元節點不再與下一層的所有神經元結點相連線(不再是全連線的方式),只與下一層的部分神經元進行連線,即連與自己相關的,不再全連。

權值共享:一組連線可以共享一個權重引數,或者多組連線共享一個卷積核,不再是每條連線都有自己的權重,即如果多個連線對應的權重相同,就只要連線同一個權重,而不是每個連線都要一個相同的權重。

下采樣pooling:通過pooling技術對輸入的資料進行下采樣壓縮操作,減少輸出結點。
常用pooling方法有兩種:最大池化(Max Pooling)與均值池化(Mean Pooling),圖解如下
在這裡插入圖片描述
CNN通過區域性感知和權值共享,保留了畫素間的關聯資訊,有聯絡的才連線,而不是全連線,大大減少了所需引數的數量。通過pooling技術,進一步縮減網路引數數量,提高模型的魯棒性。上面三項技術,主要就是為了減少運算時引數的數量,縮減影像尺寸(pooling),減少計算量,提升計算速度。

講解完畢,需要程式碼實踐的可以看看卷積神經網路中最經典的模型LeNet5模型,該模型是第一個成熟的卷積神經網路模型,主要用於手寫體識別,拿來練練手。

LetNet5模型手寫體識別連結:https://blog.csdn.net/weixin_39615182/article/details/109637561

相關文章