卷積神經網絡已經斷斷續續的學了大半年了,卻發現本身仍是一頭霧水,連基本的概念都沒搞清楚。這兩天在網上查了一些資料,看了一些教程。將卷積神經網絡的基本概念和原理理了一下,並整理出來,以供你們參考。注:本文中有些結論是本人對卷積神經網絡的理解和總結,若有不正,還請各位大蝦指正!算法
卷積神經網絡是(Convolutional Neural Networks,CNN)是一類包含卷積計算且有深度結構的前饋型神經網絡,是深度學習的表明算法之一。卷積神經網絡是模仿生物神經網絡的行爲特徵,他從信息處理的角度對人腦神經元網絡進行抽象,創建某種簡單數學模型,按不一樣的鏈接方式組成不一樣的網絡。
卷積神經網絡的構成:網絡
數據輸入/input-> 卷積層(卷積/CONV->激勵/RELU->池化/POOL ... n)->全鏈接/fullconnection->softmax/分類/歸一化->輸出
數據輸入時,須要對原始數據圖像進行預處理,包括如下3各步驟:
1.去均值;即將樣本的均值轉化爲0.
2.歸一化;即將樣本在各個維度上進行歸一化處理
3.PCA/白化; PCA(principal components analysis),是一種降維和去除相關性的方法,它經過方差來評價特徵的價值,認爲方差大的特徵包含信息多,應予以保留。白化是將PCA去相關性以後將每一特徵的方差歸一化到1分佈式
在學習卷積層以前,先來了解一下卷積層相關的一些概念。
感覺野(Receptive Field):
卷積神經網絡每一層輸出的特徵圖(feature map)上的像素點在輸入圖片上映射的區域大小。通俗點講就是特徵圖上一個點對應輸入圖上的區域。
卷積核:
卷積核就是圖像處理時,給定輸入圖像,在輸出圖像中每個像素時輸入圖像中一個小區域中像素的加權平均,其中權值由一個函數定義,這個函數稱爲卷積核,也就是下面說到的filter、濾波器
卷積深度:
卷積層卷積的次數
卷積核大小:
卷積核/濾波器作卷積時每次採樣的感覺野的大小。卷積核大小能夠指定爲小於輸入圖像尺寸的任意值,卷積核越大,可提取的輸入特徵越複雜。
步長/stride:
定義了卷積核相鄰兩次掃過特徵圖時位置的距離,卷積步長爲1時,卷積核會逐個掃過特徵圖的元素,步長爲n時會在下一次掃描跳過n-1個像素。
填充/padding:
對圖像作卷積時,nn的圖像每次卷積以後會生成(n-f+1)(n-f+1)特徵,隨着卷積層數的增多,最終的卷積結果會一直縮小下去,最後變成0。這是由於在作卷積的時候邊緣像素使用的次數相對其它像素較少,致使卷積後邊緣特徵的不斷弱化。爲了解決這個問題,咱們能夠在圖片邊緣進行加0填充。稱爲zero-padding。這樣padding操做就能夠保證卷積先後寬高不變化。填充能夠分爲如下四種:
1.有效填充(valid padding):即徹底不使用填充,卷積核只容許訪問特徵圖中包含完整感覺野的位置。輸出的全部像素都是輸入中相同數量像素的函數。使用有效填充的卷積被稱爲「窄卷積(narrow convolution)」,窄卷積輸出的特徵圖尺寸爲(L-f+1)/s。
2.相同填充/半填充(same/half padding):只進行足夠的填充來保持輸出和輸入的特徵圖尺寸相同。相同填充下特徵圖的尺寸不會縮減但輸入像素中靠近邊界的部分相比於中間部分對於特徵圖的影響更小,即存在邊界像素的欠表達。使用相同填充的卷積被稱爲「等長卷積(equal-width convolution)」。
3.全填充(full padding):進行足夠多的填充使得每一個像素在每一個方向上被訪問的次數相同。步長爲1時,全填充輸出的特徵圖尺寸爲L+f-1,大於輸入值。使用全填充的卷積被稱爲「寬卷積(wide convolution)」
4.任意填充(arbitrary padding):介於有效填充和全填充之間,人爲設定的填充,較少使用。
卷積層參數包括卷積核大小、步長和填充,三者共同決定了卷積層輸出特徵圖的尺寸,是卷積神經網絡重要的超參數(注:超參數是在開始學習過程以前設置值的參數)。ide
1. 卷積的數學概念:
卷積/convolution是經過兩個函數f和g生成第三個函數的一種數學方法,表徵函數f與g通過翻轉和和平移後重疊部分的面積,所以,卷積也就是具有了翻轉和平移不變性。
2.卷積的做用
經過指定大小的卷積核/濾波器(感覺野大小一般爲奇數1,3,5,7,...), 按必定步長對逐個掃描圖像作卷積,用來提取圖像特徵。
3.卷積操做
作卷積時,使用卷積核ffNC的矩陣,NC爲輸入圖像的channel數,按固定步長s掃描輸入圖像進行卷積操做。以下圖所示,卷積核/濾波器將矩陣中的數據與掃描區域對應的數據相乘,並累加獲得的結果做爲卷積輸出結果(栗子中輸入圖像和濾波器channel爲1)。掃描完整個輸入圖像以後能夠獲得該圖像的卷積矩陣RW*RH。
RW=[(NW+2p-f)/s + 1];
RH=[(NH+2p-f)/s + 1];函數
對一幅圖像進行特徵提取的結果:
從上圖可知,一樣的圖片,使用不一樣的卷積核,不一樣的卷積核/濾波器,會致使提取的特徵點不同。性能
1.池化的原理和做用
在圖像中,相鄰位置的圖像像素具備很大的相關性。圖像在卷積以後圖像/特徵的尺寸變化不大,因爲圖像的相關性,致使卷積以後提取的圖像特徵會有很大的相關性而致使產生不少冗餘的特徵。而池化則可以對特徵圖像進行壓縮,一方面能夠簡化網絡複雜度,另外一方面能夠保留圖像的主要特徵。學習
2.池化主要有兩種類型:
最大池化
池化時取區域像素的最大值做爲該區域的池化結果,是目前比較通用的池化方法。
平均池化
池化時取區域像素的平均值做爲該區域的池化結果,目前使用很少。人工智能
3.池化的過程
池化時,使用濾波器對輸入圖像進行掃描,在掃描區域內取最大值(若是是平均池化則取區域內的平均值)做爲池化的結果,這樣不只能壓縮特徵圖像的大小,還能保留圖像的主要特徵。濾波器使用給定的跨度對輸入圖像/特徵進行掃描,並輸出結果區域內的最大值做/平均值做爲池化結果。以下圖所示:
假設輸入圖像的寬是NW,高是NH,濾波器尺寸是ff,步長是s,池化輸出結果是RWRH。填充爲P。那麼
RW=[(NW-2p-f)/s+1];
RH=[(NH-2p-f)/s+1];
如上圖所示,池化後圖像的特徵數減小,能夠有效的下降網絡的複雜度,同時保留圖像的主特徵。有些相似於圖像的縮放,但有所不一樣的是,圖像縮放時全部的圖像特徵都有有損失,可是最大池化會優先保留圖像的主特徵(最大值),從而到達更好的特徵提取效果。spa
激勵函數在神經網絡的做用通俗上講就是將多個線性輸入轉換爲非線性的關係。不使用激勵函數的話,神經網絡每層都只作線性變換,多層輸入疊加後仍是線性變化。由於線性模型的表達力不夠,激勵函數能夠引入非線性因素。
常見的激勵函數:
1.sigmoid
如上圖所示,sigmoid函數將一個實數壓縮至0-1之間。當x很是大時,該函數無限接近1,當x爲很是大的負數時,該函數無限接近0。sigmoid函數很好地解釋了神經元受到刺激後是否會激活和向後傳遞的場景(0,沒有被激活,1,被徹底激活),故在早期的神經網絡中用得比較多。可是sigmoid函數容易出現梯度彌散(靠近輸出層的梯度大,參數更新快,靠近輸入層的梯度小,參數更新慢)或者梯度飽和(靠近輸出層的梯度小,參數更新慢,幾乎再也不變化)。
2.tanh
如上圖所示,tanh(tanh(x)=sinh(x)/cosh(x))函數將輸入值壓縮至-1到1之間。tanh函數在特徵相差明顯時會有很好的效果,在循環過程當中會不斷擴大特徵效果。該函數與sigmoid相似,也存在着梯度彌散或梯度飽和的缺點,它們的區別是,tanh函數是0均值的,所以在實際應用中會比sigmoid更好。3d
3.ReLU
ReLU(Rectified Linear Unit),線性整流函數,又叫修正線性單元。該函數被認爲有必定的生物學原理,而且因爲在實踐中一般有着比其餘經常使用激活函數更好的效果,而被現在的深度神經網絡普遍使用於諸如圖像識別等計算機視覺人工智能領域。對於進入神經元的輸入x,使用線性整流激活函數的神經元會輸出max(0, wTx+b)。ReLU的缺點是比較脆弱,當一個很是大的梯度通過ReLU神經元時,更新參數後,這個神經元不再會被激活,致使全部流過這個神經元的梯度都將變成0,形成ReLu神經元的死亡。故在訓練中學習率不宜設置得過高。
4. LReLU
LReLU(Leaky ReLU),帶泄漏線性整流函數,是爲了嘗試解決ReLU死亡問題而產生的一個變種。如上圖所示,其中ai是一個很小的常數,i表示不一樣通道對於不一樣的ai。ReLU中,當x<0時,函數值爲0,而Leaky ReLU則是給出了一個很小的負數梯度值。這樣保留了一些負軸的值,使得負軸的信息不會所有丟失。
5.ELU
emsp; ELU(The exponential Linear unit),指數線性單元。如上圖所示,ELU融合了sigmoid和RELU,左側具備軟飽和性,讓ELU對輸入變化或噪音更魯棒。右側無飽和性,可以緩解ELU梯隊消失。
6.Maxout
Maxout時ReLU的一個泛化版本,如上圖所示,當w一、b1設置爲0時,便轉換爲ReLU公式。所以Maxout繼承了ReLU的優勢,有沒有「一不當心就死掉」的擔心。該函數至關於在網絡中加入一個激活函數層,該函數層與其它激活函數的不一樣之處在於,該函數層增長了k個&神經元,並輸出k個神經元中最大的激活值。常見的隱含層輸出:
hi(x)=sigmoid(xTW…i+bi)
而Maxout網絡中輸出
hi(x)=max(Zi1,Zi2,..., Zik);
其中Zij=XTWij + bij,其中j取值範圍爲[1,k]
所以,Maxout是一個可學習的分段線性函數。實驗證實,Maxout能夠擬合任何凸函數,是一個通用的函數你擬合器。以下圖所示:
;優勢:
1)、擬合能力很是強,能夠擬合任意凸函數
2)、具備ReLU的全部優勢,線性,不飽和性。
3)、不會致使神經元死亡
缺點:
每一個神經元有兩組(W,b)參數,那麼參數量就增長一倍,這就致使了總體參數的數量和運算量激增。
全鏈接(Full Connection)層的每個結點都與上一層的全部結點相連,用來把前邊提取到的特徵綜合起來。它在整個卷積神經網絡中起到分類器的做用。若是說卷積層、池化層和激活函數層等操做是將原始數據映射到隱層特徵空間的話,全鏈接層則起到將學到的「分佈式特徵表示」映射到樣本標記空間的做用。全鏈接的核心操做就是矩陣向量乘積
y=Wx
本質就是由一個特徵空間線性變換到另外一個特徵空間。以下圖所示: 在CNN網絡中,通過多個卷積層和池化層後,鏈接着1個或1個以上的全鏈接層。全鏈接層的每一個神經元與其前一層的全部神經元進行全鏈接。全鏈接層能夠整合卷積層或者池化層中具備類別區分的局部信息。爲了提高CNN網絡性能,全鏈接層每一個神經元激勵函數通常採用ReLU函數,最後一層全鏈接層的輸出值被傳遞給一個輸出,能夠採用softmax邏輯迴歸(softmax regression)進行分類,該層能夠稱爲softmax層。對於一個具體的分類任務,選擇一個合適的損失函數是十分重要的,CNN網絡中幾種經常使用的損失函數並分析了它們各自的特色。