卷積神經網絡

  卷積神經網絡已經斷斷續續的學了大半年了,卻發現自己還是一頭霧水,連基本的概念都沒搞清楚。這兩天在網上查了一些資料,看了一些教程。將卷積神經網絡的基本概念和原理理了一下,並整理出來,以供大家參考。注:本文中有些結論是本人對卷積神經網絡的理解和總結,如有不正,還請各位大蝦指正!

1.卷積神經網絡的概念

  卷積神經網絡是(Convolutional Neural Networks,CNN)是一類包含卷積計算且有深度結構的前饋型神經網絡,是深度學習的代表算法之一。卷積神經網絡是模仿生物神經網絡的行爲特徵,他從信息處理的角度對人腦神經元網絡進行抽象,建立某種簡單數學模型,按不同的連接方式組成不同的網絡。
  卷積神經網絡的構成:

數據輸入/input-> 卷積層(卷積/CONV->激勵/RELU->池化/POOL ... n)->全連接/fullconnection->softmax/分類/歸一化->輸出

2 數據輸入層

  數據輸入時,需要對原始數據圖像進行預處理,包括以下3各步驟:
  1.去均值;即將樣本的均值轉化爲0.
  2.歸一化;即將樣本在各個維度上進行歸一化處理
  3.PCA/白化; PCA(principal components analysis),是一種降維和去除相關性的方法,它通過方差來評價特徵的價值,認爲方差大的特徵包含信息多,應予以保留。白化是將PCA去相關性之後將每一特徵的方差歸一化到1

3 卷積層/隱藏層

3.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):介於有效填充和全填充之間,人爲設定的填充,較少使用。
  卷積層參數包括卷積核大小、步長和填充,三者共同決定了卷積層輸出特徵圖的尺寸,是卷積神經網絡重要的超參數(注:超參數是在開始學習過程之前設置值的參數)。

3.2 卷積

  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];
clipboard.png

  對一幅圖像進行特徵提取的結果:
clipboard.png
  從上圖可知,同樣的圖片,使用不同的卷積核,不同的卷積核/濾波器,會導致提取的特徵點不一樣。

3.3 池化

  1.池化的原理和作用
  在圖像中,相鄰位置的圖像像素具有很大的相關性。圖像在卷積之後圖像/特徵的尺寸變化不大,由於圖像的相關性,導致卷積之後提取的圖像特徵會有很大的相關性而導致產生很多冗餘的特徵。而池化則能夠對特徵圖像進行壓縮,一方面可以簡化網絡複雜度,另一方面可以保留圖像的主要特徵。

  2.池化主要有兩種類型:
  最大池化
  池化時取區域像素的最大值作爲該區域的池化結果,是目前比較通用的池化方法。
  平均池化
  池化時取區域像素的平均值作爲該區域的池化結果,目前使用不多。

  3.池化的過程
  池化時,使用濾波器對輸入圖像進行掃描,在掃描區域內取最大值(如果是平均池化則取區域內的平均值)作爲池化的結果,這樣不僅能壓縮特徵圖像的大小,還能保留圖像的主要特徵。濾波器使用給定的跨度對輸入圖像/特徵進行掃描,並輸出結果區域內的最大值作/平均值作爲池化結果。如下圖所示:
clipboard.png
  假設輸入圖像的寬是NW,高是NH,濾波器尺寸是ff,步長是s,池化輸出結果是RWRH。填充爲P。那麼
RW=[(NW-2p-f)/s+1];
RH=[(NH-2p-f)/s+1];
clipboard.png
  如上圖所示,池化後圖像的特徵數減少,可以有效的降低網絡的複雜度,同時保留圖像的主特徵。有些類似於圖像的縮放,但有所不同的是,圖像縮放時所有的圖像特徵都有有損失,但是最大池化會優先保留圖像的主特徵(最大值),從而到達更好的特徵提取效果。

4 激勵函數

  激勵函數在神經網絡的作用通俗上講就是將多個線性輸入轉換爲非線性的關係。不使用激勵函數的話,神經網絡每層都只做線性變換,多層輸入疊加後還是線性變化。因爲線性模型的表達力不夠,激勵函數可以引入非線性因素。
  常見的激勵函數:
  1.sigmoid
clipboard.png
  如上圖所示,sigmoid函數將一個實數壓縮至0-1之間。當x非常大時,該函數無限接近1,當x爲非常大的負數時,該函數無限接近0。sigmoid函數很好地解釋了神經元受到刺激後是否會激活和向後傳遞的場景(0,沒有被激活,1,被完全激活),故在早期的神經網絡中用得比較多。但是sigmoid函數容易出現梯度彌散(靠近輸出層的梯度大,參數更新快,靠近輸入層的梯度小,參數更新慢)或者梯度飽和(靠近輸出層的梯度小,參數更新慢,幾乎不再變化)。
  2.tanh
clipboard.png
  如上圖所示,tanh(tanh(x)=sinh(x)/cosh(x))函數將輸入值壓縮至-1到1之間。tanh函數在特徵相差明顯時會有很好的效果,在循環過程中會不斷擴大特徵效果。該函數與sigmoid類似,也存在着梯度彌散或梯度飽和的缺點,它們的區別是,tanh函數是0均值的,因此在實際應用中會比sigmoid更好。

  3.ReLU
clipboard.png
  ReLU(Rectified Linear Unit),線性整流函數,又叫修正線性單元。該函數被認爲有一定的生物學原理,並且由於在實踐中通常有着比其他常用激活函數更好的效果,而被如今的深度神經網絡廣泛使用於諸如圖像識別等計算機視覺人工智能領域。對於進入神經元的輸入x,使用線性整流激活函數的神經元會輸出max(0, wTx+b)。ReLU的缺點是比較脆弱,當一個非常大的梯度經過ReLU神經元時,更新參數後,這個神經元再也不會被激活,導致所有流過這個神經元的梯度都將變成0,造成ReLu神經元的死亡。故在訓練中學習率不宜設置得太高。
  4. LReLU
clipboard.png
  LReLU(Leaky ReLU),帶泄漏線性整流函數,是爲了嘗試解決ReLU死亡問題而產生的一個變種。如上圖所示,其中ai是一個很小的常數,i表示不同通道對於不同的ai。ReLU中,當x<0時,函數值爲0,而Leaky ReLU則是給出了一個很小的負數梯度值。這樣保留了一些負軸的值,使得負軸的信息不會全部丟失。
  5.ELU

clipboard.png
emsp; ELU(The exponential Linear unit),指數線性單元。如上圖所示,ELU融合了sigmoid和RELU,左側具有軟飽和性,讓ELU對輸入變化或噪音更魯棒。右側無飽和性,能夠緩解ELU梯隊消失。
  6.Maxout
clipboard.png
  Maxout時ReLU的一個泛化版本,如上圖所示,當w1、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可以擬合任何凸函數,是一個通用的函數你擬合器。如下圖所示:
clipboard.png
;優點:
  1)、擬合能力非常強,可以擬合任意凸函數
  2)、具有ReLU的所有優點,線性,不飽和性。
  3)、不會導致神經元死亡
  缺點:
  每個神經元有兩組(W,b)參數,那麼參數量就增加一倍,這就導致了整體參數的數量和運算量激增。

5. 全連接層

  全連接(Full Connection)層的每一個結點都與上一層的所有結點相連,用來把前邊提取到的特徵綜合起來。它在整個卷積神經網絡中起到分類器的作用。如果說卷積層、池化層和激活函數層等操作是將原始數據映射到隱層特徵空間的話,全連接層則起到將學到的“分佈式特徵表示”映射到樣本標記空間的作用。全連接的核心操作就是矩陣向量乘積

y=Wx

  本質就是由一個特徵空間線性變換到另一個特徵空間。如下圖所示:
clipboard.png
  在CNN網絡中,經過多個卷積層和池化層後,連接着1個或1個以上的全連接層。全連接層的每個神經元與其前一層的所有神經元進行全連接。全連接層可以整合卷積層或者池化層中具有類別區分的局部信息。爲了提升CNN網絡性能,全連接層每個神經元激勵函數一般採用ReLU函數,最後一層全連接層的輸出值被傳遞給一個輸出,可以採用softmax邏輯迴歸(softmax regression)進行分類,該層可以稱爲softmax層。對於一個具體的分類任務,選擇一個合適的損失函數是十分重要的,CNN網絡中幾種常用的損失函數並分析了它們各自的特點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章