從AlexNet(2012)開始


博客: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)層,使用相鄰nn個特徵圖上同位置的值對當前值進行歸一化,公式如下。LRN被認爲沒有太大效果,已不被後來者採用。
    bx,yi=ax,yi/(k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2)β 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=3z=3,stride s=2s=2z>sz > s,與s=z=2s=z=2相比,Top1和Top5錯誤率分別下降了0.4%和0.3%。

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

    • 訓練階段,通過生成大量訓練數據來降低過擬合,生成數據的方式有2種,
      • 第1種方式從256×256256\times 256圖像中隨機裁剪+左右翻轉出224×224224\times 224的圖像,將訓練數據擴大了2048倍;
      • 第2種方式對每張訓練圖像RGB通道做數值擾動,擾動量通過對整個訓練集的RGB像素進行PCA獲得,擾動量爲[P1,P2,P3][α1λ1,α2λ2,α3λ3]T\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}Pi\mathbf{P}_{i}λi\lambda_{i}爲RGB像素協方差矩陣的特徵向量和特徵值,αi\alpha_{i}爲0均值0.1標準差的高斯隨機值。
    • 預測階段,從待預測256×256256\times 256圖中上下左右中間crop+左右翻轉得到10張224×224224\times 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,

vi+1:=0.9vi0.0005ϵwiϵLwwiDiwi+1:=wi+vi+1 \begin{aligned} v_{i+1} & :=0.9 \cdot v_{i}-0.0005 \cdot \epsilon \cdot w_{i}-\epsilon \cdot\left\langle\left.\frac{\partial L}{\partial w}\right|_{w_{i}}\right\rangle_{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,給這含金量跪了。

參考

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