從AlexNet(2012)開始

  • 2019 年 10 月 3 日
  • 筆記

部落格:blog.shinelee.me | 部落格園 | CSDN

寫在前面

本文重點在於回顧深度神經網路在CV領域的First Blood——AlexNet,AlexNet是首個在大規模影像識別問題取得突破性進展的深度神經網路,相比基於SIFT+FVs、稀疏編碼的傳統方法,性能提升了10多個百分點(error rate 26.2% → 15.3%,ILSVRC-2012),並由此開啟了深度神經網路血洗CV各領域的開端,如下圖所示(SuperVision即AlexNet)。

ImageNet Classification error throughout years and groups

截止本文時間2019年9月2日,AlexNet論文的引用量達45305,論文作者Alex Krizhevsky、Ilya Sutskever和「深度學習之父」Geoff Hinton。

citations

網路結構

AlexNet的原始網路結構如下,可以參見caffe的網路定義bvlc_alexnet,pytorch等也給出了變種實現,見torchvision/models/alexnet.py

AlexNet architecture

整個網路大體由5個卷積層和3個全連接層組成,受限於當時的計算資源,網路通過2塊GTX580 3GB的GPU訓練,上圖可見,整個網路上下一分為二,各用1塊GPU訓練(在caffe中通過group層實現),每個GPU放一半的神經元,網路中第3個卷積層和3個全連接層跨GPU連接。與使用單個GPU和50%神經元的網路相比,這個雙GPU方案的Top1和Top5錯誤率分別降低了1.7%和1.2%。

每層的配置如下,第一個卷積層的kernel size為11,stride為4:

AlexNet architecture

創新點

為了獲得最佳表現,論文中綜合應用了很多技術,有些後來已成為通用的標準做法。

  • 使用ReLU作為激活函數,作為non-saturating非線性激活函數有效避免了梯度消失問題,同時與tanh(saturating非線性激活函數)相比,訓練速度提升了數倍(CIFAR-10上訓練達到25%錯誤率速度快了6倍)。

  • 多GPU訓練,實際上相當於增加了網路的寬度,如上節所述,Top1和Top5錯誤率比單GPU網路分別降低了1.7%和1.2%。

  • 提出了LRN(Local Response Normalization)層,使用相鄰(n)個特徵圖上同位置的值對當前值進行歸一化,公式如下。LRN被認為沒有太大效果,已不被後來者採用。
    [ b_{x, y}^{i}=a_{x, y}^{i} /left(k+alpha sum_{j=max (0, i-n / 2)}^{min (N-1, i+n / 2)}left(a_{x, y}^{j}right)^{2}right)^{beta} ]

  • 使用Overlapping Max-Pooling,如上節圖中,Pooling層的kernel size (z=3),stride (s=2)(z > s),與(s=z=2)相比,Top1和Top5錯誤率分別下降了0.4%和0.3%。

  • 通過Data Augmentation數據增廣降低過擬合,提高預測準確度

    • 訓練階段,通過生成大量訓練數據來降低過擬合,生成數據的方式有2種,
      • 第1種方式從(256times 256)影像中隨機裁剪+左右翻轉出(224times 224)的影像,將訓練數據擴大了2048倍;
      • 第2種方式對每張訓練影像RGB通道做數值擾動,擾動量通過對整個訓練集的RGB像素進行PCA獲得,擾動量為(left[mathbf{P}_{1}, mathbf{P}_{2}, mathbf{P}_{3}right]left[alpha_{1} lambda_{1}, alpha_{2} lambda_{2}, alpha_{3} lambda_{3}right]^{T})(mathbf{P}_{i})(lambda_{i})為RGB像素協方差矩陣的特徵向量和特徵值,(alpha_{i})為0均值0.1標準差的高斯隨機值。
    • 預測階段,從待預測(256times 256)圖中上下左右中間crop+左右翻轉得到10張(224times 224)的影像,逐一輸入網,絡對輸出結果取平均,來提升預測階段的準確率,相當於數據層面的集成學習
  • 對前2個全連接層使用Dropout技術,訓練時每次隨機讓50%的神經元輸出為0,以此來降低過擬合,預測時將權重乘以0.5。這樣可以強迫網路學習到更魯棒的特徵,也可以從集成學習的視角理解,預測階段相當於對隨機到的所有模型求了個期望。

    dropout

  • batchsize 128,SGD Momentum 0.9,weight decay 0.0005,initial learning rate 0.01 停滯時divide by 10,

[ begin{aligned} v_{i+1} & :=0.9 cdot v_{i}-0.0005 cdot epsilon cdot w_{i}-epsilon cdotleftlangleleft.frac{partial L}{partial w}right|_{w_{i}}rightrangle_{D_{i}} \ w_{i+1} & :=w_{i}+v_{i+1} end{aligned} ]

其他有意思的點

回顧AlexNet論文,發現論文中提及了很多有意思的點,有些僅僅是一筆帶過,但是可能啟發了後面大量的工作,翻回來看才發現「祖師爺」早有預兆。

  • finetune,在一個庫上訓練,在另一個庫上finetune

    AlexNet finetune

  • 權重可視化,僅可視化第1個卷積層的96個卷積核權重,發現網路學到了頻率方向性的特徵,更有意思的是,GPU1上的48個卷積核是顏色無關的,GPU2上的是顏色相關的。

96 Convolutional Kernels

  • 匹配與檢索,使用最後一個全連接層的輸出作為特徵,通過歐氏距離可計算影像間的特徵相似度,可做匹配,提出可以通過auto-encoder進一步壓縮獲取到short binary code,可用於檢索,如下圖所示,檢索與最左邊一列特徵最近的影像

    retrieve images

  • 深度十分重要,增加深度可以進一步提升性能,當前性能只是受限於計算資源和訓練時間(微笑)

    depth is important

depth is important

  • 在ILSVRC 2012上做的報告展示了使用AlexNet做detection的結果,如下

    AlexNet Localization

不愧是開創性工作的paper,給這含金量跪了。

參考