卷積神經網絡

神經元

  • 神經網絡由大量的神經元相互連接而成。每個神經元接受線性組合的輸入後,再將其放在非線性的激活函數中計算後輸出。每兩個神經元連接線上的值代表加權值,稱之爲權重。 不同的權重和激活函數 ,就會導致神經元有不同的輸出。神經網絡的每個神經元如下所示。
  • 一開始爲了簡單,人們把激活函數定義成一個線性函數,比如一個簡單的線性激活函數是g(z)=z。後來實際應用中發現,線性激活函數太過侷限,於是人們引入了非線性激活函數。
  • 常用的非線性激活函數有sigmoid、tanh、relu等,前兩者比較常見於全連接層,後者relu常見於卷積層。sigmoid的函數表達式如下。
  • sigmoid函數g(z)的圖形表示如下。
  • 也就是說,sigmoid函數的功能是相當於把一個實數壓縮至0到1之間。當z是非常大的正數時,g(z)會趨近於1,而z是非常小的負數時,g(z)會趨近於0。壓縮至0到1的用處是可以把激活函數看作一種分類的概率,比如激活函數的輸出爲0.9的話便可以解釋爲90%的概率爲正樣本。

神經網絡

  • 將單個神經元組織在一起,便形成了神經網絡。下圖便是一個三層神經網絡結構,圖中最左邊的層稱之爲輸入層,最右邊的層稱之爲輸出層,中間的叫隱藏層。
  1. 輸入層,接受大量非線形輸入信息的層,輸入的信息稱爲輸入向量。
  2. 輸出層,形成輸出結果的層。輸出的信息稱爲輸出向量。
  3. 隱藏層,輸入層和輸出層之間的各個層。
  • 每一層都可能由單個或多個神經元組成,每一層的輸出將會作爲下一層的輸入數據。
  • 此外,輸入層和隱藏層都存在一個偏置單元,所以上圖中也增加了偏置項x0和a0。針對上圖,有如下公式。

卷積神經網絡

  • 卷積神經網絡層次結構如下。
  1. 最左邊是輸入層,對數據做一些處理,比如去均值、歸一化等等。CNN只對訓練集做去均值這一步。
  2. 中間有CONV,即卷積計算層;RELU,即激勵層,激勵層使用的ReLU是激活函數的一種;POOL,即池化層,取區域平均值或最大值。
  3. 最右邊是FC,即全連接層
  • 對圖像中不同窗口內的數據和濾波矩陣做內積的操作就是所謂的卷積操作,也是卷積神經網絡的名字來源。非嚴格意義上來講,下圖中紅框框起來的部分便可以理解爲一個濾波器,即帶着一組固定權重的神經元。多個濾波器疊加便成了卷積層。
  • 在下圖對應的計算過程中,輸入是一定大小的數據,它和濾波器做內積後等到新的二維數據。不同的濾波器會得到不同的輸出數據。如果想提取圖像的不同特徵,則用不同的濾波器,提取想要的關於圖像的特定信息,比如顏色深淺或輪廓。
  • 在CNN中,濾波器對局部輸入數據進行卷積計算。每計算完一個數據窗口內的局部數據後,數據窗口不斷平移滑動,直到計算完所有數據。這個過程中,有以下幾個參數。
  1. 深度:神經元個數,即濾波器個數,決定輸出的厚度。
  2. 步長:決定滑動多少步可以到邊緣。
  3. 填充值:在外圍邊緣補充的0的圈數,方便從初始位置以步長爲單位可以剛好滑倒末尾位置。
  • 每次濾波器都是針對某一局部的數據窗口進行卷積,這就是所謂的CNN中的局部感知機制。與此同時,數據窗口滑動,導致輸入在變化,但中間濾波器的權重是固定不變的,這個權重不變即所謂的CNN中的權重共享機制。
  • 在實際梯度下降中,sigmoid容易飽和,造成終止梯度傳遞,且沒有0中心化。可以使用另外一個激活函數:ReLU。ReLU的優點是收斂快,求梯度簡單。它對於輸入的負值,輸出全爲0,對於正值,原樣輸出。
  • 池化層可以將一幅大的圖像縮小,同時又保留其中的重要信息。通常情況下,池化都是2乘以2大小,比如對於最大池化來說,就是取輸入圖像中2乘以2大小的塊中的最大值,作爲結果的像素值,相當於將原始圖像縮小了4倍。同理,對於平均池化來說,就是取2*2大小塊的平均值作爲結果的像素值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章