卷積神經網絡(Convolutional Neural Network, CNN)簡析

目錄
1 神經網絡
2 卷積神經網絡
  2.1 局部感知
  2.2 參數共享
  2.3 多卷積核
  2.4 Down-pooling
  2.5 多層卷積
3 ImageNet-2010網絡結構
4 DeepID網絡結構
5 參考資源php

自今年七月份以來,一直在實驗室負責卷積神經網絡(Convolutional Neural Network,CNN),期間配置和使用過theano和cuda-convnet、cuda-convnet2。爲了增進CNN的理解和使用,特寫此博文,以其與人交流,互有增益。正文以前,先說幾點本身對於CNN的感觸。先明確一點就是,Deep Learning是所有深度學習算法的總稱,CNN是深度學習算法在圖像處理領域的一個應用。算法

  • 第一點,在學習Deep learning和CNN以前,總覺得它們是很了不起的知識,總覺得它們能解決不少問題,學習了以後,才知道它們不過與其餘機器學習算法如svm等類似,仍然能夠把它當作一個分類器,仍然能夠像使用一個黑盒子那樣使用它。網絡

  • 第二點,Deep Learning強大的地方就是能夠利用網絡中間某一層的輸出當作是數據的另外一種表達,從而能夠將其認爲是通過網絡學習到的特徵。基於該特徵,能夠進行進一步的類似度比較等。機器學習

  • 第三點,Deep Learning算法可以有效的關鍵實際上是大規模的數據,這一點緣由在於每一個DL都有衆多的參數,少許數據沒法將參數訓練充分。函數

接下來話很少說,直接奔入主題開始CNN之旅。學習

1 神經網絡

首先介紹神經網絡,這一步的詳細能夠參考資源1。簡要介紹下。神經網絡的每一個單元以下:測試

其對應的公式以下:.net

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

其對應的公式以下:orm

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

神經網絡的訓練方法也同Logistic相似,不過因爲其多層性,還須要利用鏈式求導法則對隱含層的節點進行求導,即梯度降低+鏈式求導法則,專業名稱爲反向傳播。關於訓練算法,本文暫不涉及。

2 卷積神經網絡

在圖像處理中,每每把圖像表示爲像素的向量,好比一個1000×1000的圖像,能夠表示爲一個1000000的向量。在上一節中提到的神經網絡中,若是隱含層數目與輸入層同樣,即也是1000000時,那麼輸入層到隱含層的參數數據爲1000000×1000000=10^12,這樣就太多了,基本無法訓練。因此圖像處理要想練成神經網絡大法,必先減小參數加快速度。就跟辟邪劍譜似的,普通人練得很挫,一旦自宮後內力變強劍法變快,就變的很牛了。

2.1 局部感知

卷積神經網絡有兩種神器能夠下降參數數目,第一種神器叫作局部感知野。通常認爲人對外界的認知是從局部到全局的,而圖像的空間聯繫也是局部的像素聯繫較爲緊密,而距離較遠的像素相關性則較弱。於是,每一個神經元其實沒有必要對全局圖像進行感知,只須要對局部進行感知,而後在更高層將局部的信息綜合起來就獲得了全局的信息。網絡部分連通的思想,也是受啓發於生物學裏面的視覺系統結構。視覺皮層的神經元就是局部接受信息的(即這些神經元只響應某些特定區域的刺激)。以下圖所示:左圖爲全鏈接,右圖爲局部鏈接。

在上右圖中,假如每一個神經元只和10×10個像素值相連,那麼權值數據爲1000000×100個參數,減小爲原來的萬分之一。而那10×10個像素值對應的10×10個參數,其實就至關於卷積操做。

2.2 參數共享

但其實這樣的話參數仍然過多,那麼就啓動第二級神器,即權值共享。在上面的局部鏈接中,每一個神經元都對應100個參數,一共1000000個神經元,若是這1000000個神經元的100個參數都是相等的,那麼參數數目就變爲100了。

怎麼理解權值共享呢?咱們能夠這100個參數(也就是卷積操做)當作是提取特徵的方式,該方式與位置無關。這其中隱含的原理則是:圖像的一部分的統計特性與其餘部分是同樣的。這也意味着咱們在這一部分學習的特徵也能用在另外一部分上,因此對於這個圖像上的全部位置,咱們都能使用一樣的學習特徵。

更直觀一些,當從一個大尺寸圖像中隨機選取一小塊,好比說 8x8 做爲樣本,而且從這個小塊樣本中學習到了一些特徵,這時咱們能夠把從這個 8x8 樣本中學習到的特徵做爲探測器,應用到這個圖像的任意地方中去。特別是,咱們能夠用從 8x8 樣本中所學習到的特徵跟本來的大尺寸圖像做卷積,從而對這個大尺寸圖像上的任一位置得到一個不一樣特徵的激活值。

以下圖所示,展現了一個3×3的卷積核在5×5的圖像上作卷積的過程。每一個卷積都是一種特徵提取方式,就像一個篩子,將圖像中符合條件(激活值越大越符合條件)的部分篩選出來。

2.3 多卷積核

上面所述只有100個參數時,代表只有1個10*10的卷積核,顯然,特徵提取是不充分的,咱們能夠添加多個卷積核,好比32個卷積核,能夠學習32種特徵。在有多個卷積核時,以下圖所示:

上圖右,不一樣顏色代表不一樣的卷積核。每一個卷積核都會將圖像生成爲另外一幅圖像。好比兩個卷積核就能夠將生成兩幅圖像,這兩幅圖像能夠看作是一張圖像的不一樣的通道。以下圖所示,下圖有個小錯誤,即將w1改成w0,w2改成w1便可。下文中仍以w1和w2稱呼它們。

下圖展現了在四個通道上的卷積操做,有兩個卷積核,生成兩個通道。其中須要注意的是,四個通道上每一個通道對應一個卷積核,先將w2忽略,只看w1,那麼在w1的某位置(i,j)處的值,是由四個通道上(i,j)處的卷積結果相加而後再取激活函數值獲得的。

因此,在上圖由4個通道卷積獲得2個通道的過程當中,參數的數目爲4×2×2×2個,其中4表示4個通道,第一個2表示生成2個通道,最後的2×2表示卷積核大小。

2.4 Down-pooling

在經過卷積得到了特徵 (features) 以後,下一步咱們但願利用這些特徵去作分類。理論上講,人們能夠用全部提取獲得的特徵去訓練分類器,例如 softmax 分類器,但這樣作面臨計算量的挑戰。例如:對於一個 96X96 像素的圖像,假設咱們已經學習獲得了400個定義在8X8輸入上的特徵,每個特徵和圖像卷積都會獲得一個 (96 − 8 + 1) × (96 − 8 + 1) = 7921 維的卷積特徵,因爲有 400 個特徵,因此每一個樣例 (example) 都會獲得一個 7921 × 400 = 3,168,400 維的卷積特徵向量。學習一個擁有超過 3 百萬特徵輸入的分類器十分不便,而且容易出現過擬合 (over-fitting)。

爲了解決這個問題,首先回憶一下,咱們之因此決定使用卷積後的特徵是由於圖像具備一種「靜態性」的屬性,這也就意味着在一個圖像區域有用的特徵極有可能在另外一個區域一樣適用。所以,爲了描述大的圖像,一個很天然的想法就是對不一樣位置的特徵進行聚合統計,例如,人們能夠計算圖像一個區域上的某個特定特徵的平均值 (或最大值)。這些概要統計特徵不只具備低得多的維度 (相比使用全部提取獲得的特徵),同時還會改善結果(不容易過擬合)。這種聚合的操做就叫作池化 (pooling),有時也稱爲平均池化或者最大池化 (取決於計算池化的方法)。

至此,卷積神經網絡的基本結構和原理已經闡述完畢。

2.5 多層卷積

在實際應用中,每每使用多層卷積,而後再使用全鏈接層進行訓練,多層卷積的目的是一層卷積學到的特徵每每是局部的,層數越高,學到的特徵就越全局化。

3 ImageNet-2010網絡結構

ImageNet LSVRC是一個圖片分類的比賽,其訓練集包括127W+張圖片,驗證集有5W張圖片,測試集有15W張圖片。本文截取2010年Alex Krizhevsky的CNN結構進行說明,該結構在2010年取得冠軍,top-5錯誤率爲15.3%。值得一提的是,在今年的ImageNet LSVRC比賽中,取得冠軍的GoogNet已經達到了top-5錯誤率6.67%。可見,深度學習的提高空間還很巨大。

下圖即爲Alex的CNN結構圖。須要注意的是,該模型採用了2-GPU並行結構,即第一、二、四、5卷積層都是將模型參數分爲2部分進行訓練的。在這裏,更進一步,並行結構分爲數據並行與模型並行。數據並行是指在不一樣的GPU上,模型結構相同,但將訓練數據進行切分,分別訓練獲得不一樣的模型,而後再將模型進行融合。而模型並行則是,將若干層的模型參數進行切分,不一樣的GPU上使用相同的數據進行訓練,獲得的結果直接鏈接做爲下一層的輸入。

上圖模型的基本參數爲:

  • 輸入:224×224大小的圖片,3通道
  • 第一層卷積:11×11大小的卷積核96個,每一個GPU上48個。
  • 第一層max-pooling:2×2的核。
  • 第二層卷積:5×5卷積核256個,每一個GPU上128個。
  • 第二層max-pooling:2×2的核。
  • 第三層卷積:與上一層是全鏈接,3*3的卷積核384個。分到兩個GPU上個192個。
  • 第四層卷積:3×3的卷積核384個,兩個GPU各192個。該層與上一層鏈接沒有通過pooling層。
  • 第五層卷積:3×3的卷積核256個,兩個GPU上個128個。
  • 第五層max-pooling:2×2的核。
  • 第一層全鏈接:4096維,將第五層max-pooling的輸出鏈接成爲一個一維向量,做爲該層的輸入。
  • 第二層全鏈接:4096維
  • Softmax層:輸出爲1000,輸出的每一維都是圖片屬於該類別的機率。

4 DeepID網絡結構

DeepID網絡結構是香港中文大學的Sun Yi開發出來用來學習人臉特徵的卷積神經網絡。每張輸入的人臉被表示爲160維的向量,學習到的向量通過其餘模型進行分類,在人臉驗證試驗上獲得了97.45%的正確率,更進一步的,原做者改進了CNN,又獲得了99.15%的正確率。

以下圖所示,該結構與ImageNet的具體參數相似,因此只解釋一下不一樣的部分吧。

上圖中的結構,在最後只有一層全鏈接層,而後就是softmax層了。論文中就是以該全鏈接層做爲圖像的表示。在全鏈接層,以第四層卷積和第三層max-pooling的輸出做爲全鏈接層的輸入,這樣能夠學習到局部的和全局的特徵。

5 參考資源

[1] http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B 梔子花對Stanford深度學習研究團隊的深度學習教程的翻譯
[2] http://blog.csdn.net/zouxy09/article/details/14222605 csdn博主zouxy09深度學習教程系列
[3] http://deeplearning.net/tutorial/ theano實現deep learning
[4] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.
[5] Sun Y, Wang X, Tang X. Deep learning face representation from predicting 10,000 classes[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1891-1898.

From:http://blog.csdn.net/stdcoutzyx/article/details/41596663

相關文章
相關標籤/搜索