Convolution Neural Network 介紹(CNN 介紹)

C.C.Lo
8 min readJul 8, 2017

--

CNN近幾年比較重要的paper如下

1998: LeNet

2012: AlexNet

2013: ZFNet

2014: VGG, GoogLeNet (Inception v1)

2015: ResNet, Inception v2, Inception v3

2016: Inception v4, SqueezeNet, DarkNet

2017: MobileNet

LeNet

這篇pape大概算是公認的CNN始祖,由Yann LeCun於1998年提出,CNN核心架構即源自這篇paper,同時也是目前CNN的hello world。

LeNet-5 Architecture, 1998

其架構可以歸納為 convolution layer > pooling layer > fully connective layer > activation(non-linearity) layer

[convolution layer]: 由於特徵會出現在影像中不定位置,並且特徵是規律性的,所以可利用convolution對於local detect會比對整張影像global detect來的較有效率。

[pooling layer]: 影像的spatial information不會因scale而消失,所以加入pooling layer來減少運算量。

[activation layer]: 使用tanh / sigmoid等non-linear funciton

[fully connective layer]: 即經典的MLP(Multi-Layer Perceptron) layer,最後輸出10維即為對應數字的機率

AlexNet

AlexNet為Hinton學生Alex Krizhevsky於2012年提出並拿下ILSVRC”12的冠軍讓CNN重返榮耀,其將top-5 error減少至15.3% , outperform同年度第二名26.2%

  • 註: top-1 error為辨識目標不是top-1的機率,top-5 error為辨識目標不在前五(top-5)個結果內的機率(反之即為top-1/top-5 accuracy)
AlexNet Architecture, 2012

基本架構跟LeNet大致上相同可以算是LeNet5的加強版,主要的新技術與應用有將ReLU, Dropout, LRN加到model中,並用GPU來加快training效率以及data augmentation增加訓練資料集

[ReLU]: 取代以前的tanh和sigmoid, 可解決vanishing gradient problem, 讓training的效率更好並且也提高精準度

[Dropout]: 降低overfitting

[Max Pooling]: 之前LeNet是用average pooling但會有特徵被模糊化的問題,AlexNet則是用Max Pooling, 並且step比pooling kernel來的小,這樣輸出之間會有重複的部分,避免遺失特徵

[LRN]: 看無

[GPU]: 用GPU training加快訓練的效率,並且在設計model時就將結構分成兩個相同的子模型可以加強訓練速度

[Data augmentation]: 訓練時將原始影像256x256透過隨機擷取其中224x224的region以及水平翻轉,使得資料量增加了(256–224)² X 2 = 2048倍,大幅度增加資料量並可以降低overfitting

dropout的加入,在訓練過程中隨機地將某些connection拔掉,可有效降低overfitting的問題。

ZFNet

VGG

VGG為Visual Geometry Group所提出之model,可以視為是AlexNet的延伸版CNN model,其架構仍為Conv layer + FC layer,特點是conv kernel皆為3x3奠定了使用3x3 conv kernel的趨勢,而pooling kernel為2x2,論文中有從11到19層的測試,雖然越後面的model層數多了不少,但其參數量主要還是最後三層fc layer貢獻的,所以參數量並沒有增長多少,而其中VGG16和VGG19則是最廣泛被使用的model,每一個VGG都主要分成五個部分,而每個部分都會進行Conv+ReLU數次後max pooling縮小f. map size並到下一個部分。

論文中解釋關於僅使用3x3 conv kernel,因為兩個3x3的conv kernel疊合的reception field等效於一個5x5 conv kernel(亦即每個pixel可以correlate到周圍的5x5個pixel), 而三個3x3則可以等效於一個7x7,但兩層3x3的參數量僅有一層5x5的(3x3x2)/(5x5) = 0.72倍,而三層3x3參數量是一層7x7的(3x3x3)/(7x7)=0.55倍,對應到的範圍等效並且可使得需參數量更少,並且疊越多層Conv+ReLU的特徵學習能力比單一層Conv+ReLU來的更好。

而VGG在訓練時,是先訓練11層的model,再將trained好的weights套用到後面層數更多的model,來減少訓練所需要的時間。

ResNet

ResNet的概念來自於Highway Network,由於深度對於CNN的辨識結果非常重要,但是越深的網路其訓練複雜度會大幅提高(較常見的原因是因為越深的網路,gradient descent越難更新到越前面的層,導致參數更新的極緩慢),相較於一般NN的activation function是將輸入做非線性的轉換,Highway Network提出除了非線性轉換外,會保留一定比例的原始輸入直接輸出到下一layer中。而在ResNet中的residual unit則也是透用此概念,每兩層conv會有一個shortcut將輸入直接連結到後面的網路,因為傳統的conv layer在傳遞資料的時候,不可避免地都會有資料損耗的問題,而此residual unit則某種程度上可以保存資料的完整性,整個網路只要學習輸入與輸出差別的部分,可簡化訓練難度。

GoogLeNet (Inception)

[Inception V1]

Inception network中的inception block直接整合使用了4種layer,分別為1x1, 3x3, 5x5, max pooling,再將每一個layer的結果合併經過activation計算後再送到後面的inception block。第一個分支是1x1 conv, 1x1 conv是NIN提出的結構,其他三個分支也有使用到此結構,可以提高或是降低維度,一般是用來降低feature maps的channel數目(相較於pooling layer是降低feature maps的W/H),第二分支是1x1 + 3x3而第三層是1x1 + 5x5,這裡的1x1 layer是充當bottleneck的作用,可以先將channel維度降低之後再透過3x3/5x5 kernel來計算,如此可以在等效於直接套用3x3/5x5的功能之下大幅減少參數量,而最後一個分支則是用3x3 max pooling + 1x1 conv,最後再將四個分支合併,經由透過不同大小的conv kernel來增強對於不同大小的特徵擷取能力,而由於1x1 conv可以用很小的運算量就達到特徵變換與activate所以被大量地使用在這個block中。

[Inception V2]

將5x5 conv用兩層3x3 conv取代,以降低參數並減少overfitting,並且提出了Batch Normalization(BN),主要思維是在訓練時先對每一個mini batch的資料進行normalization,降低其batch中的covariance以便提高訓練效率

[Inception V3]

將一個較大的2-d conv kernel拆成兩個1xn + nx1的kernel,這樣做會比原本的參數量更少,並且會增加一層activation層增加model的表達能力,而論文中指出這樣的非對稱性kernel其結果比傳統對稱kernel更好,可以處理更多的spatial features

[Inception V4]

主要是將MS的Residual network架構加入Inception V3中,

SqueezeNet

DarkNet

MobileNet

--

--