深度學習FPGA實現基礎知識10(Deep Learning(深度學習)卷積神經網路(Convolutional Neural Network,CNN))
-
第一點,在學習Deep learning和CNN之前,總以為它們是很了不得的知識,總以為它們能解決很多問題,學習了之後,才知道它們不過與其他機器學習演算法如svm等相似,仍然可以把它當做一個分類器,仍然可以像使用一個黑盒子那樣使用它。
-
第二點,Deep Learning強大的地方就是可以利用網路中間某一層的輸出當做是資料的另一種表達,從而可以將其認為是經過網路學習到的特徵。基於該特徵,可以進行進一步的相似度比較等。
-
第三點,Deep Learning演算法能夠有效的關鍵其實是大規模的資料,這一點原因在於每個DL都有眾多的引數,少量資料無法將引數訓練充分。
接下來話不多說,直接奔入主題開始CNN之旅。
1. 神經網路
首先介紹神經網路,這一步的詳細可以參考資源1。簡要介紹下。神經網路的每個單元如下:
其對應的公式如下:
其中,該單元也可以被稱作是Logistic迴歸模型。當將多個單元組合起來並具有分層結構時,就形成了神經網路模型。下圖展示了一個具有一個隱含層的神經網路。
其對應的公式如下:
比較類似的,可以拓展到有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並行結構,即第1、2、4、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.