卷積神經網絡與普通神經網絡的區別在於,卷積神經網絡包含了一個由卷積層和子採樣層(池化層)構成的特徵抽取器。在卷積神經網絡的卷積層中,一個神經元只與部分鄰層神經元鏈接。在CNN的一個卷積層中,一般包含若干個特徵圖(featureMap),每一個特徵圖由一些矩形排列的的神經元組成,同一特徵圖的神經元共享權值,這裏共享的權值就是卷積核。卷積核通常以隨機小數矩陣的形式初始化,在網絡的訓練過程當中卷積核將學習獲得合理的權值。共享權值(卷積核)帶來的直接好處是減小網絡各層之間的鏈接,同時又下降了過擬合的風險。子採樣也叫作池化(pooling),一般有均值子採樣(mean pooling)和最大值子採樣(max pooling)兩種形式。子採樣能夠看做一種特殊的卷積過程。卷積和子採樣大大簡化了模型複雜度,減小了模型的參數。html
2.1 神經網絡算法
首先介紹神經網絡,神經網絡的每一個單元以下:網絡
其對應的公式以下:機器學習
其中,該單元也能夠被稱做是Logistic迴歸模型。當將多個單元組合起來並具備分層結構時,就造成了神經網絡模型。下圖展現了一個具備一個隱含層的神經網絡。函數
其對應的公式以下:學習
比較相似的,能夠拓展到有2,3,4,5,…個隱含層。優化
神經網絡的訓練方法也同Logistic相似,不過因爲其多層性,還須要利用鏈式求導法則對隱含層的節點進行求導,即梯度降低+鏈式求導法則,專業名稱爲反向傳播。關於訓練算法的相關原理及操做過程,可參見以前寫的關於BP算法http://www.javashuo.com/article/p-ccurltqr-nh.html。ui
2.2 卷積神經網絡spa
首先,咱們先獲取一個感性認識,下圖是一個卷積神經網絡的實例:.net
卷積神經網絡一般包含如下幾種層:
2.2.1 卷積層(Convolutional layer)
卷積層是卷積神經網絡的核心基石。在圖像識別裏咱們提到的卷積是二維卷積,即離散二維濾波器(也稱做卷積核)與二維圖像作卷積操做,簡單的講是二維濾波器滑動到二維圖像上全部位置,並在每一個位置上與該像素點及其領域像素點作內積。卷積操做被普遍應用與圖像處理領域,不一樣卷積核能夠提取不一樣的特徵,例如邊沿、線性、角等特徵。在深層卷積神經網絡中,經過卷積操做能夠提取出圖像低級到複雜的特徵。
上圖給出一個卷積計算過程的示例圖,輸入圖像大小爲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計算如上圖右下角公式所示。
記住這幾個符號:
在卷積操做中卷積核是可學習的參數,通過上面示例介紹,每層卷積的參數大小爲D×F×F×K。卷積層的參數較少,這也是由卷積層的主要特性即局部鏈接和共享權重所決定。
經過介紹卷積計算過程及其特性,能夠看出卷積是線性操做,並具備平移不變性(shift-invariant),平移不變性即在圖像每一個位置執行相同的操做。卷積層的局部鏈接和權重共享使得須要學習的參數大大減少,這樣也有利於訓練較大卷積神經網絡。
總體計算過程以下(與上圖中的數據不一樣,可是計算過程相同):
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操做對四個數進行,以下圖所示:
池化操做將保存深度大小不變。若是池化層的輸入單元大小不是二的整數倍,通常採起邊緣補零(zero-padding)的方式補成2的倍數,而後再池化。
2.2.4 全鏈接層( Fully-Connected layer)
全鏈接層和卷積層能夠相互轉換:
* 對於任意一個卷積層,要把它變成全鏈接層只須要把權重變成一個巨大的矩陣,其中大部分都是0 除了一些特定區塊(由於局部感知),並且好多區塊的權值還相同(因爲權重共享)。
* 相反地,對於任何一個全鏈接層也能夠變爲卷積層。
2.2.5 反向傳播
下面講解卷積層的反向傳播過程:
(因爲公式格式不太好整理,因此用截圖代替)
其餘關於反向傳播的介紹:
http://www.cnblogs.com/pinard/p/6494810.html
通常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)上效果奇好