CNN Architecture

CS231n: Convolutional Neural Networks for Visual Recognition Lecture 9 CNN Architecture 筆記總結

主要根據ILSVRC(ImageNet Large Scale Visual Recognition Challenge)歷屆冠軍論文,把經典的CNN Architecture做了整理,其中有加入個人理解,如有錯誤,請積極指出。

課程內容非常好,講解很細緻,推薦。

Preview

總結一下卷積層的性質(其中兩個公式要牢記,之後會用到):

  • 輸入數據體的尺寸爲W1H1D1
  • 四個超參數:
    • 濾波器的數量K
    • 濾波器的空間尺寸F*F
    • 步長S
    • 零填充數量P
  • 輸出數據體的尺寸爲W2H2D2 ,其中
    • W2=(W1F+2P)/S+1
    • H2=(H1F+2P)/S+1 (寬度與高度計算方法相同)
    • D2=K
    • P=(FS)/2 (保證輸入和輸出尺寸相同)
  • 由於參數共享,每個濾波器包含FFD1 個權重,卷積層一共有FFD1K 個權重和K 個偏置。
  • 在輸出中,第d 個深度切片(空間尺寸是W2H2 ),用第d 個濾波器和輸入數據進行有效卷積運算的結果(使用步長S),最後再加上第d 個偏差。

Case study: LeNet-5

【LeCun et al., 1998】

這裏寫圖片描述
1998年,LeCun提出基於梯度學習的卷積神經網絡算法,並將其成功用於手寫數字字符識別(mnist數據集),LeNet模型並沒有參與ILSVRC比賽,但它是卷積神經網絡的開山之作。

LeNet-5的網絡結構非常簡單,是一個7層的網絡(不包括輸入層),其深度爲5,有3個卷積層,2個池化層,2個全連接層。

網絡結構特點如下:

C1、C3、C5三個卷積層使用的Kernel大小全部都是5*5,並且步長爲1。

輸入圖像尺寸統一歸一化爲32x32。

S2和S4兩個池化層(或者說是下采樣層)使用的window大小均爲2x2,步長爲2,採樣方式是4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置,結果通過sigmoid。(即不是max pooling,也不是average pooling)

F6全連接層,輸出大小爲84,這一層輸出經過了非線性函數sigmoid。

F7是輸出層,也是全連接層,共有10個節點,分別表示數字0-9,採用歐式徑向基函數(Euclidean Radial Basis Function,RBF)的網絡連接方式。假設x是上一層的輸入,y是RBF的輸出,則RBF輸出的計算方式是:

yi=j(xjwij)2

(注:這部分寫的不清楚,需要再看看)

LeNet是最早的卷積神經網絡結構,它開創了卷積神經網絡的基本結構[CONV-POOL-CONV-POOL-FC-FC]。但由於計算資源限制和數據獲取瓶頸,卷積神經網絡發展停滯,沉寂多年。

Case study:AlexNet

【Krizhevsky et al. 2012】

這裏寫圖片描述

AlexNet是2012年ILSVRC的冠軍,且準確率遠超第二名(AlexNet top5 error rate 15.3%,第二年爲26.2%)。

AlexNet深度爲8,有5個卷積層,3個池化層,2個歸一化層,及3個全連接層。總結構如圖。[CONV1-MAX POOL1-NORM1-CONV2-MAX POOL2-NORM2-CONV3-CONV4-CONV5-MAX POOL3-FC6-FC7-FC8]

輸入:227x227x3 images(圖中以及論文寫的是224,作者應該是忘了說加上了3個zero-padding)

First layer(CONV1):96個卷積核,大小爲11x11,步長爲4

輸出數據體大小:套用計算公式,(227-11)/4+1=55,所以輸出數據體大小是[55x55x96]

這一層的參數量:(11113)96=35K

Second layer (POOL1):3x3大小的window,步長爲2

輸出數據體大小:套用計算公式,(55-3)/2+1=27,所以輸出數據體大小是[27x27x96]

這一層的參數量:0!(池化層沒有參數)

其餘各層計算相同,得到以下結果:

這裏寫圖片描述

其他細節及創新點:

  1. 第一次使用ReLU非線性激活代替tanh和sigmoid,加快訓練速度。
  2. 使用了局部響應歸一化層LRN(Local Response Normalization),在VGGNet被證實基本沒有效果,現已棄用。
  3. 使用了大量的數據增強,減小過擬合。數據增強包括:隨機crop圖像(平移、翻轉、對稱等)、改變RGB通道強度等,現在仍在使用。
  4. 使用了drop=0.5,減小過擬合。
  5. 使用帶動量的SGD,momentum=0.9。
  6. 隨着訓練的進行,逐漸減小學習率。初始設置爲1e-2,每到val accuracy plateaus就減小10倍。
  7. 使用L2權重衰減,設置爲5e-4。
  8. 使用集成學習,將7個CNN結果做平均,得到更好的結果。18.2% -> 15.4%

歷史原因:

2012年GPU還沒有很好性能,所以作者訓練AlexNet使用的是GTX 580的GPU卡,顯存只有3GB,不足以容納該網絡最大的模型(我們實驗室的Tesla P40顯存是24GB的,K80雙GPU顯存也是24GB的)。所以作者使用2塊GPU訓練:每個GPU上並行地分別運行AlexNet的一部分(例如第一個卷積層有96個feature map分別在兩塊GPU上,每塊有48個feature map),並且只在特定的層上有交互(圖中交叉部分)。

AlexNet的意義在於,使得CNNs又重回人們視野,再次掀起對CNNs的研究熱潮。

Case study: ZFNet

【Zeiler and Fergus, 2013】
這裏寫圖片描述
ZFNet是2013年ILSVRC的冠軍,在超參數上對AlexNet進行微調:

  1. 把AlexNet中CONV1(11x11 stride 4)改爲(7x7 stride 2)
  2. 把AlexNet中CONV3,4,5(384,384,256 filters)改爲使用(512,1024,512)

通過微調,ZFNet ImageNet top 5 error:16.4% -> 11.7%

ZFNet的意義不在於它獲得了2013年ILSVRC的冠軍,而是解釋了爲什麼CNNs有效、怎麼提高CNN性能。

其主要貢獻在於:

  1. 使用了反捲積,可視化feature map。通過feature map可以看出,前面的層學習的是物理輪廓、邊緣、顏色、紋理,後面的層學習的是和類別相關的抽象特徵。
  2. 與AlexNet相比,前面的層使用了更小的卷積核和更小的步長,保留了更多特徵。
  3. 通過遮擋,找出了決定圖像類別的關鍵部位。
  4. 通過實驗,說明了深度增加時,網絡可以學習到更好的特徵。

Case study:VGGNet

[Simonyan and Zisserman, 2014]
這裏寫圖片描述
VGGNet是2014年ILSVRC分類比賽第二名,定位比賽第一名。

主要思想:使用更小的卷積和更深的網絡

網絡結構特點:

VGG有16層和19層兩個版本,使用3x3的卷積,步長爲1,這樣pad=1時,卷積層輸入輸出空間大小不變。以及2x2的最大池化,步長爲2。

VGGNet ImageNet top 5 error:11.7% -> 7.3%

問題:爲什麼使用3x3的小卷積核?

所有卷積核都是3x3。連續多個卷積層,後面卷積層對於輸入的感受野會變大,如連續2個3x3卷積層,第二層每個神經元感受野爲5x5;連續3個3x3卷積層,第三層每個神經元感受野爲7x7。這樣做有兩個好處:

  1. 多個非線性表達能力強於1個非線性。
  2. 減少參數數量。depth爲C時,連續3個卷積核參數數量爲3(3×3C2)=27C2 ,單個7x7卷積層參數個數爲7×7C2=49C2

一張圖片的Total memory:24M * 4 bytes(假設每個數字4個字節 )~= 96MB / image,這相當於5G內存最多隻能存50張圖片,而這僅僅只是前向傳播的內存,反向傳播需要的內存是前者的兩倍。

Total params:138M parameters

通過計算可知,大多數內存用在前幾層卷積層上,大多數參數產生於最後幾層全連接層。

細節:

  1. VGGNet的訓練過程和AlexNet相似
  2. 沒有使用LRN,證明其無效
  3. 使用VGG16或VGG19,或者性能更好一些,但是佔用的內存更多
  4. 也使用了集成學習,獲得最好的結果
  5. FC7輸出的特徵泛化能力很好,可以用於其他任務

Case study:GoogLeNet

[Szegedy et al., 2014]

這裏寫圖片描述

GoogLeNet是2014年ILSVRC分類比賽冠軍(top 5 error:6.7%)。

主要思想:更深的網絡,計算高效

GoogLeNet創造了新的網絡結構形式,其特點如下:

  1. GoogLeNet一共有22層
  2. 使用了高效的“Inception module”,其結構如上圖所示:設計了一個局部網絡拓撲(網絡中嵌套着網絡),並且在頂層堆疊
  3. 沒有使用全連接層,因此減少了大量參數
  4. 只使用了5百萬的參數,比AlexNet要少12倍

”Inception module”也進行了一些改進,最初的設計如下圖所示:

這裏寫圖片描述

在進行最初的幾層基本卷積池化操作後,應用幾個平行的卷積操作:

  1. 多個不同感受野的卷積操作(1x1,3x3,5x5),通過zero-padding保持空間大小不變
  2. 最大池化操作(3x3),相當於保存了原始輸入的深度,額外增加一個池化會有額外溢出

低層特徵經過“inception module”提取,又把特徵混合在一起,空間大小不變,得到一個更深的輸出。參數計算如上圖所示,其輸出深度爲256,輸出爲672,深度增加,但同時卷積操作高達854M,計算力相當大!

問題:如何保證計算高效性?

解決方法:使用1x1卷積的“bottleneck”層去減小深度。如下圖所示。

這裏寫圖片描述
這裏引入1x1卷積的目的是:

  1. 降維,減小了計算量
  2. 保留了空間特徵,減小了深度

通過引入“bottleneck”層,卷積操作變爲358M,計算力大大減少。

這裏寫圖片描述
完整的網絡結構如上圖所示:

  1. 前面幾層依然是[CONV-POOL-CONV-CONV-POOL]
  2. 主體部分是Inception結構,通過堆疊”Inception Modules”形成
  3. 使用average pooling代替full-connect,最後一層爲softmax用來分類,移除了全連接層
  4. 將中間一些層的結果輸出,用作輔助分類輸出,按一個較小的權重(0.3)加到最終分類結果中,這樣做相當於做了模型融合,同時給網絡增加了反向傳播的梯度信號,也提供了額外的正則化,對訓練有幫助。但測試時不使用,後面實驗證明這個幫助其實不大。

Case study:ResNet

[He et al., 2015]

這裏寫圖片描述
ResNet是2015年ILSVRC的冠軍,幾乎橫掃了所有計算機視覺的比賽,贏得了everything,是深度學習的一次革命。ImageNet比賽中用了152層的模型,top 5 error:3.57%,比人眼分類的錯誤率更低(人眼是5.1%)。

主要思想:使用殘差連接的深度網絡

問題:網絡層數不斷加深,訓練誤差和測試誤差不降反升,爲什麼?

訓練誤差也升高,說明不是過擬合的問題。

這裏有一個假設:這個問題是一個優化問題,越深的網絡越難優化。因此自然而然地想到,一個更深的模型如果不能取得更好的性能,但至少與淺層的模型表現應該是一樣好的。所以可以嘗試通過設置額外層把淺層模型恆等映射到更深的模型中。

解決方法:使用網絡層來匹配一個殘差映射,而不是直接嘗試匹配所需的底層映射。如下圖所示。

這裏寫圖片描述

未加殘差結構時,學習映射爲H(x),但是H(x)不容易學;加上殘差結構後,學習映射爲F(x)=H(x)-x,學習F(x)比學習H(x)容易,那麼通過學習F(x)來得到H(x)=F(x)+x,這就是殘差結構。F(x)就是指殘差,也是delta。

完整的ResNet結構:

  1. 堆疊殘差塊,每個殘差塊都有2個3x3的卷積層
  2. 週期性使用尺寸大小爲3x3,步長爲2的卷積核進行下采樣
  3. 網絡最開始增加捲積層
  4. 在網絡最後一層沒有使用全連接

對於更深的網絡(超過50層),ResNet使用“bottleneck”層減少計算量(和GoogLeNet相似)。

這裏寫圖片描述

ResNet訓練細節:

  1. 在沒有卷積層後加了Batch Normalization(這是GoogLeNet V2提出的,效果非常好)
  2. 使用Xavier/2來初始化參數
  3. 帶動量參數的SGD(momentum=0.9)
  4. 初始學習率設爲0.1,每到驗證誤差高原期(validation error plateaus)的時候就下降10倍
  5. Mini-batch size 256
  6. 權重衰減weight decay 設爲1e-5
  7. 沒有使用dropout,因爲BN已經減少了過擬合,而且效果很好

Compare

這裏寫圖片描述

這裏寫圖片描述
Inception-v4:ResNet+Inception

VGG:佔用內存最多,計算量最大

GoogLeNet:更高效

AlexNet:計算量很小,但佔用內存很大,準確度低

ResNet:計算量,佔用內存,準確度三種權衡最佳

這裏寫圖片描述

Other…

除了以上這些經典結構以外,還有一些很不錯的網絡結構。

比如提出“bottleneck”的Network in Network

對ResNet進行改進的一系列結構,如Identity Mapping(這其實是Kaiming He解釋ResNet),Wide ResNetResNeXtDeep Networks with stochastic Depth

還有在ResNet之上的FractaNetDenseNet

或是其他更高效的網絡,SqueezeNet

有時間再整理一番。

Summary

  • VGG,GoogLeNet, ResNet all in wide use, available in modelzoos
  • ResNetcurrentbestdefault
  • Trendtowards extremely deep networks
  • Significantresearch centersarounddesign of layer / skip connections and improving gradientflow
  • Evenmore recent trend towards examining necessity of depth vs. widthand residualconnections

Reference

  1. CNN Architecture
  2. ILSVRC歷屆冠軍論文筆記
  3. 從LeNet-5到DenseNet

PS:網上博客僅供參考,很多也都是東拼西湊,有些不免還有錯誤,會誤導他人。還是需要自己認真研讀論文,思考揣摩。另,本人博客內容也僅供參考,如有錯誤,請積極指出。

一起學習,共同進步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章