卷積神經網絡(CNN)詳解

1、卷積神經網絡的基本概念

       卷積神經網絡與普通神經網絡的區別在於,卷積神經網絡包含了一個由卷積層和子採樣層(池化層)構成的特徵抽取器。在卷積神經網絡的卷積層中,一個神經元只與部分鄰層神經元鏈接。在CNN的一個卷積層中,一般包含若干個特徵圖(featureMap),每一個特徵圖由一些矩形排列的的神經元組成,同一特徵圖的神經元共享權值,這裏共享的權值就是卷積核。卷積核通常以隨機小數矩陣的形式初始化,在網絡的訓練過程當中卷積核將學習獲得合理的權值。共享權值(卷積核)帶來的直接好處是減小網絡各層之間的鏈接,同時又下降了過擬合的風險。子採樣也叫作池化(pooling),一般有均值子採樣(mean pooling)和最大值子採樣(max pooling)兩種形式。子採樣能夠看做一種特殊的卷積過程。卷積和子採樣大大簡化了模型複雜度,減小了模型的參數。html

2、卷積神經網絡的基本原理

2.1 神經網絡算法

       首先介紹神經網絡,神經網絡的每一個單元以下:網絡

logistic

       其對應的公式以下:機器學習

equal

       其中,該單元也能夠被稱做是Logistic迴歸模型。當將多個單元組合起來並具備分層結構時,就造成了神經網絡模型。下圖展現了一個具備一個隱含層的神經網絡。函數

equal

        其對應的公式以下:學習

equal

       比較相似的,能夠拓展到有2,3,4,5,…個隱含層。優化

       神經網絡的訓練方法也同Logistic相似,不過因爲其多層性,還須要利用鏈式求導法則對隱含層的節點進行求導,即梯度降低+鏈式求導法則,專業名稱爲反向傳播。關於訓練算法的相關原理及操做過程,可參見以前寫的關於BP算法http://www.javashuo.com/article/p-ccurltqr-nh.htmlui

2.2 卷積神經網絡spa

      首先,咱們先獲取一個感性認識,下圖是一個卷積神經網絡的實例:.net

卷積神經網絡一般包含如下幾種層:

  • 卷積層(Convolutional layer),卷積神經網路中每層卷積層由若干卷積單元組成,每一個卷積單元的參數都是經過反向傳播算法優化獲得的。卷積運算的目的是提取輸入的不一樣特徵,第一層卷積層可能只能提取一些低級的特徵如邊緣、線條和角等層級,更多層的網絡能從低級特徵中迭代提取更復雜的特徵。
  • 線性整流層(Rectified Linear Units layer, ReLU layer),這一層神經的活性化函數(Activation function)使用線性整流(Rectified Linear Units, ReLU)f(x)=max(0,x)f(x)=max(0,x)。
  • 池化層(Pooling layer),一般在卷積層以後會獲得維度很大的特徵,將特徵切成幾個區域,取其最大值或平均值,獲得新的、維度較小的特徵。
  • 全鏈接層( Fully-Connected layer), 把全部局部特徵結合變成全局特徵,用來計算最後每一類的得分。

2.2.1 卷積層(Convolutional layer)

       卷積層是卷積神經網絡的核心基石。在圖像識別裏咱們提到的卷積是二維卷積,即離散二維濾波器(也稱做卷積核)與二維圖像作卷積操做,簡單的講是二維濾波器滑動到二維圖像上全部位置,並在每一個位置上與該像素點及其領域像素點作內積。卷積操做被普遍應用與圖像處理領域,不一樣卷積核能夠提取不一樣的特徵,例如邊沿、線性、角等特徵。在深層卷積神經網絡中,經過卷積操做能夠提取出圖像低級到複雜的特徵。

網絡解析(一):LeNet-5詳解

       上圖給出一個卷積計算過程的示例圖,輸入圖像大小爲H=5,W=5,D=3,即5×5大小的3通道(RGB,也稱做深度)彩色圖像。這個示例圖中包含兩(用K表示)組卷積核,即圖中濾波器W0和W1。在卷積計算中,一般對不一樣的輸入通道採用不一樣的卷積核,如圖示例中每組卷積核包含(D=3)個3×3(用F×F表示)大小的卷積核。另外,這個示例中卷積核在圖像的水平方向(W方向)和垂直方向(H方向)的滑動步長爲2(用S表示);對輸入圖像周圍各填充1(用P表示)個0,即圖中輸入層原始數據爲藍色部分,灰色部分是進行了大小爲1的擴展,用0來進行擴展。通過卷積操做獲得輸出爲3×3×2(用Ho×Wo×K表示)大小的特徵圖,即3×3大小的2通道特徵圖,其中Ho計算公式爲:Ho=(H−F+2×P)/S+1,Wo同理。 而輸出特徵圖中的每一個像素,是每組濾波器與輸入圖像每一個特徵圖的內積再求和,再加上偏置bo,偏置一般對於每一個輸出特徵圖是共享的。輸出特徵圖o[:,:,0]中的最後一個−2計算如上圖右下角公式所示。

記住這幾個符號:

  • H:圖片高度;
  • W:圖片寬度;
  • D:原始圖片通道數,也是卷積核個數;
  • F:卷積核高寬大小;
  • P:圖像邊擴充大小;
  • S:滑動步長。
  • K: 深度,輸出單元的深度

       在卷積操做中卷積核是可學習的參數,通過上面示例介紹,每層卷積的參數大小爲D×F×F×K。卷積層的參數較少,這也是由卷積層的主要特性即局部鏈接和共享權重所決定。

  • 局部鏈接:每一個神經元僅與輸入神經元的一塊區域鏈接,這塊局部區域稱做感覺野(receptive field)。在圖像卷積操做中,即神經元在空間維度(spatial dimension,即上圖示例H和W所在的平面)是局部鏈接,但在深度上是所有鏈接。對於二維圖像自己而言,也是局部像素關聯較強。這種局部鏈接保證了學習後的過濾器可以對於局部的輸入特徵有最強的響應。局部鏈接的思想,也是受啓發於生物學裏面的視覺系統結構,視覺皮層的神經元就是局部接受信息的。
  • 權重共享:計算同一個深度切片的神經元時採用的濾波器是共享的。例上圖中計算o[:,:,0]的每一個每一個神經元的濾波器均相同,都爲W0,這樣能夠很大程度上減小參數。共享權重在必定程度上講是有意義的,例如圖片的底層邊緣特徵與特徵在圖中的具體位置無關。可是在一些場景中是無心的,好比輸入的圖片是人臉,眼睛和頭髮位於不一樣的位置,但願在不一樣的位置學到不一樣的特徵 。請注意權重只是對於同一深度切片的神經元是共享的,在卷積層,一般採用多組卷積核提取不一樣特徵,即對應不一樣深度切片的特徵,不一樣深度切片的神經元權重是不共享。另外,偏重對同一深度切片的全部神經元都是共享的。

經過介紹卷積計算過程及其特性,能夠看出卷積是線性操做,並具備平移不變性(shift-invariant),平移不變性即在圖像每一個位置執行相同的操做。卷積層的局部鏈接和權重共享使得須要學習的參數大大減少,這樣也有利於訓練較大卷積神經網絡。

總體計算過程以下(與上圖中的數據不一樣,可是計算過程相同):

網絡解析(一):LeNet-5詳解

 

2.2.2 線性整流層(Rectified Linear Units layer, ReLU layer)--激勵層
       把卷積層輸出結果作非線性映射。


       CNN採用的激勵函數通常爲ReLU(The Rectified Linear Unit/修正線性單元),它的特色是收斂快,求梯度簡單,但較脆弱,圖像以下。

 

激勵層的實踐經驗:
  ①不要用sigmoid!不要用sigmoid!不要用sigmoid!
  ② 首先試RELU,由於快,但要當心點
  ③ 若是2失效,請用Leaky ReLU或者Maxout
  ④ 某些狀況下tanh卻是有不錯的結果,可是不多

2.2.3 池化層(Pooling layer)

       池化(pool)即下采樣(downsamples),目的是爲了減小特徵圖,主要做用是經過減小網絡的參數來減少計算量,而且可以在必定程度上控制過擬合。一般在卷積層的後面會加上一個池化層。池化操做對每一個深度切片獨立,規模通常爲 2*2,相對於卷積層進行卷積運算,池化層進行的運算通常有如下幾種: 
      * 最大池化(Max Pooling)。取4個點的最大值。這是最經常使用的池化方法。 
     * 均值池化(Mean Pooling)。取4個點的均值。 
     * 高斯池化。借鑑高斯模糊的方法。不經常使用。 
     * 可訓練池化。訓練函數 ff ,接受4個點爲輸入,出入1個點。不經常使用。

最多見的池化層是規模爲2*2, 步幅爲2,對輸入的每一個深度切片進行下采樣。每一個MAX操做對四個數進行,以下圖所示: 

網絡解析(一):LeNet-5詳解

       

      池化操做將保存深度大小不變。若是池化層的輸入單元大小不是二的整數倍,通常採起邊緣補零(zero-padding)的方式補成2的倍數,而後再池化。

2.2.4 全鏈接層( Fully-Connected layer)

全鏈接層和卷積層能夠相互轉換: 
       * 對於任意一個卷積層,要把它變成全鏈接層只須要把權重變成一個巨大的矩陣,其中大部分都是0 除了一些特定區塊(由於局部感知),並且好多區塊的權值還相同(因爲權重共享)。 
    * 相反地,對於任何一個全鏈接層也能夠變爲卷積層。

2.2.5 反向傳播

下面講解卷積層的反向傳播過程:

(因爲公式格式不太好整理,因此用截圖代替)

其餘關於反向傳播的介紹:

https://mp.weixin.qq.com/s?__biz=MzU4MjQ3MDkwNA==&mid=2247485971&idx=1&sn=632e3c135ead5f0ac730eee5b6a05647&chksm=fdb69784cac11e9258f67312fa2798e9c8210b8f77741a3d7bab4c1ccfa1c1f66632183f4f26&scene=0#rd

http://www.cnblogs.com/pinard/p/6494810.html

3、其餘

通常CNN結構依次爲
  1. INPUT
  2. [[CONV -> RELU]*N -> POOLING]*M 
  3. [FC -> RELU]*K
  4. FC


卷積神經網絡之訓練算法
  1. 同通常機器學習算法,先定義Loss function,衡量和實際結果之間差距。
  2. 找到最小化損失函數的W和b, CNN中用的算法是SGD(隨機梯度降低)。


卷積神經網絡之優缺點
優勢
  • 共享卷積核,對高維數據處理無壓力
  • 無需手動選取特徵,訓練好權重,即得特徵分類效果好
缺點
  • 須要調參,須要大樣本量,訓練最好要GPU
  • 物理含義不明確(也就說,咱們並不知道沒個卷積層到底提取到的是什麼特徵,並且神經網絡自己就是一種難以解釋的「黑箱模型」)

卷積神經網絡之典型CNN  • LeNet,這是最先用於數字識別的CNN  • AlexNet, 2012 ILSVRC比賽遠超第2名的CNN,比  • LeNet更深,用多層小卷積層疊加替換單大卷積層。  • ZF Net, 2013 ILSVRC比賽冠軍  • GoogLeNet, 2014 ILSVRC比賽冠軍  • VGGNet, 2014 ILSVRC比賽中的模型,圖像識別略差於GoogLeNet,可是在不少圖像轉化學習問題(好比object detection)上效果奇好

相關文章
相關標籤/搜索