深度學習(DL)與卷積神經網路(CNN)學習筆記隨筆-01-CNN基礎知識點
阿新 • • 發佈:2019-01-05
- 神經認知機。
卷積神經網路是受生物靈感的多層感知機的變體。從Hubel和Wiesel的早期對貓的視覺皮層的研究工作中得出,視覺皮層包含一組複雜的細胞排列。這些細胞會對很小的子區域敏感,稱作Receptive Field(感受野細胞)。根據這個概念提出了神經認知機。它的主要作用就是Recept部分影象資訊(或特徵),然後通過分層區域性相連,將各個區域性特徵組合成整個影象特徵。 需要仔細閱讀的論文包括:
(1) 第一篇關於感受野功能的論文Receptive fields and functional architecture of monkey striate cortex,1968
(2) the NeoCognitron
(3) HMAX Robust object recog-nition with cortex-like mechanisms,2007
(4) 非常重要的LeNet-5 Gradient-based learning applied to document recognition,1998
- 稀疏連線。
CNN層與層之間的連線並不全是全連線,而是區域性連線,它的作用就是大幅度減少引數。
圖1 層間連線示意圖 - 權值共享。
在CNNs中,每一種過濾器都可以通過重複堆疊而覆蓋整個視野。這種堆疊就是複製自己,因此它們的單元共享同一個權值和偏置值,從而形成一張特徵圖。
圖2中m 層是由3個隱層單元構成的一張特徵圖。相同顏色的權值是共享的。梯度下降法仍然可以用來訓練它們所共享的引數,不過需要在原演算法基礎上進行小的改動。共享權值的梯度就是簡單的對每個共享引數的梯度求和得到。
圖2 權值共享圖 - 詳細計算說明。
為了更豐富的表示資料特徵,每個隱藏層會包含多個特徵圖。
定義hk 代表某層的第k 個特徵圖。
公式hkij=tanh((Wk∗x)ij+bk) 用來計算hk ;其中∗ 是卷積操作。
以上公式是如何計算特徵圖的呢?是通過針對整個影象中不同的子區域資料,重複的呼叫同一個函式,最終覆蓋整幅影象時,就得到了一張特徵圖。換句話說,就是用帶有偏置項(bk )的線性濾波器(Wk )與輸入影象(x )進行卷積運算(∗ ),再將結果通過一個非線性函式(tanh )所得到的結果(hk )。
圖3 舉例,一層中含4個特徵圖
圖3中的CNN含有2層,m−1 層包含4個特徵圖,m 層包含2個特徵圖,記為h0 和h1 ,h0 和h1 是由不同的卷積核在前一層所有map上作卷積並將對應元素累加後加一個偏置,再求sigmod得到的(假設m與m-1層全連線,則m層共有4*2=8個卷積核)。其中,h0 和h1 的權值W0 和W1 是一個3維張量,第一維表示前一層特徵圖的下標,後兩維表示該特徵圖的座標。綜合起來,Wklij 表示m 層第k 個特徵圖的每一個畫素點的權重與m−1 層第l 個特徵圖的(i,j) 畫素點的權重相連線。
- 卷積運算。
用的是著名的Python庫Theano. ConvOp。具體如何使用及執行效果,見我的另外一篇部落格Python之Theano.ConvOp,講的很詳細。
- 最大池化。
CNN中另外一個很重的概念就是最大池化。它是一種非線性的下采樣(個人理解其作用類似於降維)方法。最大池化把輸入影象劃分不相重疊的影象矩陣塊,每一個子區域輸出其最大值。最大池化方法在視覺處理問題中非常有效的兩個原因是:
(1) 通過減少非最大值來降低對上層的計算複雜度。
(2) 池化結果支援平移不變性。在卷積層中,每個畫素點有8個方向可以平移。當最大池化視窗為2∗2 區域時,其中有3個方向會產生相同結果;當最大池化視窗為3∗3 區域時,則會有5個方向會產生相同的結果。
在Theano中的應用舉例就不介紹了。