1. 程式人生 > >深度學習(DL)與卷積神經網路(CNN)學習筆記隨筆-01-CNN基礎知識點

深度學習(DL)與卷積神經網路(CNN)學習筆記隨筆-01-CNN基礎知識點

  1. 神經認知機
     卷積神經網路是受生物靈感的多層感知機的變體。從Hubel和Wiesel的早期對貓的視覺皮層的研究工作中得出,視覺皮層包含一組複雜的細胞排列。這些細胞會對很小的子區域敏感,稱作Receptive Field(感受野細胞)。根據這個概念提出了神經認知機。它的主要作用就是Recept部分影象資訊(或特徵),然後通過分層區域性相連,將各個區域性特徵組合成整個影象特徵。 需要仔細閱讀的論文包括:
     (1) 第一篇關於感受野功能的論文Receptive fields and functional architecture of monkey striate cortex,1968
     (2) the NeoCognitron
    A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position,1980
     (3) HMAX Robust object recog-nition with cortex-like mechanisms,2007
     (4) 非常重要的LeNet-5 Gradient-based learning applied to document recognition,1998
     
  2. 稀疏連線
     CNN層與層之間的連線並不全是全連線,而是區域性連線,它的作用就是大幅度減少引數。
    圖1 層間連線示意圖

    圖1 層間連線示意圖
  3. 權值共享
     在CNNs中,每一種過濾器都可以通過重複堆疊而覆蓋整個視野。這種堆疊就是複製自己,因此它們的單元共享同一個權值和偏置值,從而形成一張特徵圖。
     
     圖2中m層是由3個隱層單元構成的一張特徵圖。相同顏色的權值是共享的。梯度下降法仍然可以用來訓練它們所共享的引數,不過需要在原演算法基礎上進行小的改動。共享權值的梯度就是簡單的對每個共享引數的梯度求和得到。
    圖2 權值共享圖

    圖2 權值共享圖
  4. 詳細計算說明
     為了更豐富的表示資料特徵,每個隱藏層會包含多個特徵圖
     定義 hk代表某層的第k個特徵圖。
     公式 hkij=tanh((Wkx)ij+bk)
    用來計算hk ;其中是卷積操作。
     以上公式是如何計算特徵圖的呢?是通過針對整個影象中不同的子區域資料,重複的呼叫同一個函式,最終覆蓋整幅影象時,就得到了一張特徵圖。換句話說,就是用帶有偏置項(bk)的線性濾波器(Wk)與輸入影象(x)進行卷積運算(),再將結果通過一個非線性函式(tanh)所得到的結果(hk)
     
    圖3 舉例一層含多個特徵圖

    圖3 舉例,一層中含4個特徵圖

      圖3中的CNN含有2層,m1層包含4個特徵圖,m層包含2個特徵圖,記為h0h1h0h1由不同的卷積核在前一層所有map上作卷積並將對應元素累加後加一個偏置,再求sigmod得到的(假設m與m-1層全連線,則m層共有4*2=8個卷積核)。其中,h0h1的權值W0W1是一個3維張量,第一維表示前一層特徵圖的下標,後兩維表示該特徵圖的座標。綜合起來,Wklij表示m層第k個特徵圖的每一個畫素點的權重與m1層第l個特徵圖的(i,j)畫素點的權重相連線。
      
  5. 卷積運算
      用的是著名的Python庫Theano. ConvOp。具體如何使用及執行效果,見我的另外一篇部落格Python之Theano.ConvOp,講的很詳細。
      
  6. 最大池化
      CNN中另外一個很重的概念就是最大池化。它是一種非線性的下采樣(個人理解其作用類似於降維)方法。最大池化把輸入影象劃分不相重疊的影象矩陣塊,每一個子區域輸出其最大值。最大池化方法在視覺處理問題中非常有效的兩個原因是:
     (1) 通過減少非最大值來降低對上層的計算複雜度。
     (2) 池化結果支援平移不變性。在卷積層中,每個畫素點有8個方向可以平移。當最大池化視窗為22區域時,其中有3個方向會產生相同結果;當最大池化視窗為33區域時,則會有5個方向會產生相同的結果。
     在Theano中的應用舉例就不介紹了。