第一天《CNN基礎知識點》From:Convolutional Neural Networks (LeNet)
- 神經認知機。
CNN的靈感來源在諸多論文中已經講得很全面了,就是偉大的生物發現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 - 稀疏連接。
CNN層與層之間的連接並不全是全連接,而是局部連接,它的作用就是大幅度減少參數。
圖1 層間連接示意圖 - 權值共享。
濾波器(filter)是圖2第m層中每個小圓圈對應的一個神經元,它們的weight和bias是相同的(就是共享相同的參數),然后每個神經元與輸入圖像數據進行卷積運算,就得到了m層 –特征圖層(feature map,每一層可以包含多個特征圖),此特征圖包含3個隱藏節點(hidden units)。(以上是我個人理解,如有錯誤,歡迎指出,初學者,見諒)。梯度下降法仍然可以用來訓練它們所共享的參數,不過需要在原算法基礎上進行小的改動。weight的梯度就是簡單的對每個weight中的參數的梯度求和得到。
圖2 權值共享圖 - 注解說明。
定義 hk代表某層的第k個特征圖。
公式 hkij=tanh((Wk∗x)ij+bk) 用來計算hk 。
為了更豐富的表示數據特征,每個隱藏層會包含多個特征圖。以下圖為例:
圖3 舉例,一層中含4個特征圖
圖3中的CNN含有2層,m−1層包含4個特征圖,m層包含2個特征圖,記為h0和h1,h0和h1中的每個像素值是由前一層的每個特征圖通過2∗2的感受野計算得出。其中,h0和h1的權值W0和W1是一個3維張量(在這里或許等同於矢量,求解釋),第一維表示前一層特征圖的下標,后兩維表示該特征圖的坐標。綜合起來,Wklij表示m層第k個特征圖的每一個像素點的權重與m−1層第l個特征圖的(i,j)像素點的權重相連接。 - 卷積運算。
用的是著名的Python庫Theano. ConvOp。具體如何使用見原網頁,講的很詳細。 - 最大池化。
CNN中另外一個很重的概念就是最大池化。它是一種非線性的下采樣(個人理解其作用類似於降維)方法。最大池化把輸入圖像划分不相重疊的圖像矩陣塊,每一個子區域輸出其最大值。最大池化方法在視覺處理問題中非常有效的兩個原因是:
(1) 通過減少非最大值來降低對上層的計算復雜度。
(2) 池化結果支持平移不變性。在卷積層中,每個像素點有8個方向可以平移。當最大池化窗口為2∗2區域時,其中有3個方向會產生相同結果;當最大池化窗口為3∗3區域時,則會有5個方向會產生相同的結果。
在Theano中的應用舉例就不介紹了。 -
至此,CNN的基本知識點基本介紹完畢。下一節學習一個完整的CNN模型–LeNet-5
參考資料
(1) http://deeplearning.net/tutorial/lenet.html
(2) Deep Learning(深度學習)學習筆記整理系列之(七)
(3) Deep learning with Theano 官方中文教程(翻譯)(四)—— 卷積神經網絡(CNN)
版權聲明:本文為博主原創文章,水平有限,歡迎批評指正。歡迎轉載,但請注明轉載出處,謝謝。QQ:371073260