Convolutional Neural Networks(CNN)
Abstract
隨着深度學習的發展,學術界造就了一個又一個優秀的神經網絡,目前,最受歡迎的神經網絡之一則是卷積神經網絡,盡管有時它出現讓我們無法理解的黑盒子現象,但它依然是值得我們去探索的,CNN的設計也遵循了活生物體的視覺處理過程。
首先分析一下人腦的神經元(人腦視覺系統)。
人腦神經元信息處理過程包括接受輸入,處理,輸出這么三個階段。對應到一個神經元上就是樹突,胞體,軸突。
神經網絡仿照人腦的神經元結構之間的聯系,當某個神經元的軸突電信號強度達到一定程度時,就會觸發將信號傳遞到下一個神經元。在傳遞的過程中加上一些對數據處理的操作,從而達到處理傳遞信息的目的。其中的信號正是將數據抽象過后的數值或者多維矩陣。
卷積神經網絡,在CNN出現之前,對於人工智面臨着兩大難題:
- 圖像需要處理的數據量太大,導致成本很高,效率很低
- 圖像在數字化的過程中很難保留原有的特征,導致圖像處理的准確率不高
需要處理的數據量太大。由於圖像是由像素構成的,每個像素又是由多種顏色構成的。
幾乎任何一張圖片都是 1000×1000 像素以上的, 每個像素都有RGB 3個參數來表示顏色信息。這樣就需要處1000×1000×3個參數,因此訓練任務太過復雜, CNN 解決的第一個問題就是「將復雜問題簡化」,通過卷積/池化的方式把大量參數降維成少量參數,再做處理。更重要的是:我們在大部分場景下,降維並不會影響結果。比如10000像素的圖片縮小成2000像素,並不影響肉眼認出來圖片中是一只貓還是一只狗,機器也是如此。
保留圖像特征。圖片數字化的傳統方式我們簡化一下,就類似下圖的過程:
假如有圓形是1,沒有圓形是0,那么圓形的位置不同就會產生完全不同的數據表達。但是從視覺的角度來看,圖像的內容(本質)並沒有發生變化,只是位置發生了變化。所以當我們移動圖像中的物體,用傳統的方式的得出來的參數會差異很大!這是不符合圖像處理的要求的。而 CNN 解決了這個問題,它用類似視覺的方式保留了圖像的特征,當圖像做翻轉,旋轉或者變換位置時,它也能有效的識別出來是類似的圖像。
Introduction
卷積神經網絡(Convolutional Neural Network, CNN)是一種前饋神經網絡,同時結合了多層感知器,多層感知器通常是指完全連接的網絡,也就是說,一層中的每個神經元都與下一層中的所有神經元相連。這些網絡的“完全連接”使它們易於過度擬合數據。正則化的典型方法包括向損失函數添加某種形式的權重度量。CNN采用不同的正規化方法:它們利用數據中的分層模式,並使用更小和更簡單的模式組合更復雜的模式。與其他圖像分類算法相比,CNN使用的預處理相對較少。這意味着網絡將學習傳統算法中手工設計的過濾器。與特征設計中的先驗知識和人工無關的這種獨立性是主要優勢。
典型的CNN訓練主要由三層結構組成
- 卷積層
- 池化層
- 全連接層
Convolution(卷積層)
對CNN模型進行實現時,輸入的數據為形狀(圖像數量)x(圖像高度)x(圖像寬度)x(圖像深度)。然后,在經過卷積層后,圖像將被抽象為特征圖,其形狀(圖像數量)x(特征圖高度)x(特征圖寬度)x(特征圖通道)。神經網絡中的卷積層應具有以下屬性:
- 由寬度和高度(超參數)定義的卷積核。
- 輸入通道和輸出通道的數量(超參數)。
- 卷積過濾器(輸入通道)的深度必須等於輸入要素圖的通道數(深度)。
Pooling(池化)
池化層通過將一層神經元簇的輸出組合到下一層中的單個神經元中來減少數據的大小。池化層包括局部或全局池化層,局部池合並了通常為2 x 2的小簇。全局池作用於卷積層的所有神經元。池化方式又有兩種:最大池化和平均池化
-
最大池化
取上一層中每個神經元簇的最大值來作為下一層神經元簇的特征
-
平均池化
取上一層中每個神經元簇的平均值來作為下一層神經元簇的特征
下圖以最大池化為例
Fully Connected(全連接層)
全連接層,上一層的每個神經元都會連接到下一層每個神經元,因此該層的處理又與全連接神經網絡類似。
Development Overview
從1959年,Hubel & Wiesel發現動物視覺皮層中的細胞負責檢測感受野(receptive fields)中的光線。論文:Receptive fields and functional architecture of monkey striate cortex(1968)
1980年,Kunihiko Fukushima提出新認知機(neocognitron),被認為是CNN的前身。論文:A self-organizing neural network model for a mechanism of visual pattern recognition(1982)
1990年,LeCun建立了CNN的現代框架。論文:Handwritten digit recognition with a back-propagation network(1989NIPS)
1998年,LeCun改進CNN,他們開發了一個名為LeNet-5的多層人工神經網絡,可以對手寫數字進行分類。與其他神經網絡一樣,LeNet-5具有多個層,可以通過反向傳播算法進行訓練。它可以獲得原始圖像的有效表示,這使得從原始像素直接識別視覺模式成為可能,而且很少進行預處理。論文:Gradient-based learning applied to document recognition(1998)
1990年,Zhang使用一個平移不變性的人工神經網絡(SIANN),識別圖像的字符。但由於當時缺乏大量的訓練數據和計算能力,他們的網絡在更復雜的問題,例如大規模的圖像和視頻分類方面不能很好地運行。論文:Parallel distributed processing model with local space-invariant interconnections and its optical architecture(1990)
2015年,Krizhevsky提出一個經典的CNN架構,即AlexNet。它顯示了在圖像分類任務上根據以前方法的重大改進,在整體結構上與LeNet-5類似,但深度更深。論文:Imagenet large scale visual recognition challenge(2015IJCV)
CNN每一階段的發展,都對訓練的復雜度進行了降低,辨識能力提高。
Comparison
LeNet-5的出現可以說標志着現代CNN模型發展的開端,以至於有了后來的AlexNet。相比於LeNet-5,AlexNet有更深的結構,用多層小的卷積來替代大卷積。
Common
LeNet-5雖然出現較早,但其結構並不缺少,包括卷積層-池化層-全連接層三層結構,AlexNet與其總體結構也是十分相似的。
Difference
首先,AlexNet最明顯的特征是用多層小的卷積核來代替原來較大的卷積核,這使得AlexNet有更高的准確率。
LeNet-5最初主要用於圖像識別,若按照處理過程來分析LeNet-5,其共有八層:
-
Input層-輸入層
輸入圖像的尺寸統一歸一化為32*32
-
C1層-卷積層
對輸入圖像進行第一次卷積運算(使用 6 個大小為 5×5 的卷積核),得到6個C1特征圖(6個大小為28*28的 feature maps, 32-5+1=28)
-
S2層-池化層(下采樣層)
第一次卷積之后緊接着就是池化運算,使用 2*2核 進行池化,於是得到了S2(6@14×14)
-
C3層-卷積層
利用前六個C3特征,從三個連續子集中獲取輸入S2中的功能圖。接下來的六個從第四個的不連續子集開始。最后一個從所有S2特征映射中獲取輸入。因此C3層有1516個可訓練參數和151600個連接,下圖引自LeNet-5 paper。
-
S4層-池化層(下采樣層)
S4是pooling層,窗口大小仍然是2*2,共計16個feature map,C3層的16個10x10的圖分別進行以2x2為單位的池化得到16個5x5的特征圖
-
C5層-卷積層
C5層是一個卷積層。由於S4層的16個圖的大小為5x5,與卷積核的大小相同,所以卷積后形成的圖的大小為1x1。
-
F6層-全連接層
全連接到下一層
-
Output層-全連接層
全連接輸出層,輸出結果
下圖引自LeNet-5 paper
可總結出LeNet-5卷積層的參數較少,這也是由卷積層的特性即局部連接與共享權值所決定
AlexNet是在LeNet-5的基礎上加深了網絡的結構,學習更豐富更高維的圖像特征
-
使用層疊的卷積層-(卷積層+卷積層+池化層來提取圖像的特征)
-
使用Dropout抑制過擬合
以0.5的概率,將每個隱層神經元的輸出設置為零。
-
使用數據增強Data Augmentation抑制過擬合
通過訓練數據進行自我變換的方式進行擴充數據規模,以提高算法的識別准確率
- 水平翻轉圖像
- 給圖像增加隨機的色彩
-
使用Relu激活函數替換之前的sigmoid的作為激活函數
Sigmoid 是常用的非線性的激活函數,用0-1區間的值來壓縮特征,假若有個比較大的特征值9999,我們也需要把它壓縮到0-1,這就使得壓縮過強
Relu是分段線性函數,所有的負值和0為0,所有的正值不變,這種操作被稱為單側抑制
- 發現使用 ReLU 得到的SGD的收斂速度會比 sigmoid/tanh 快很多。
-
多GPU訓練
Conclusion
AlexNet 優勢在於:網絡增大(5個卷積層+3個全連接層+1個softmax層),同時解決過擬合,並且利用多GPU加速計算。