博客:blog.shinelee.me | 博客園 | CSDN
寫在前面
本文重點在於回顧深度神經網絡在CV領域的First Blood——AlexNet,AlexNet是首個在大規模圖像識別問題取得突破性進展的深度神經網絡,相比基於SIFT+FVs、稀疏編碼的傳統方法,性能提升了10多個百分點(error rate 26.2% → 15.3%,ILSVRC-2012),並由此開啟了深度神經網絡血洗CV各領域的開端,如下圖所示(SuperVision即AlexNet)。
截止本文時間2019年9月2日,AlexNet論文的引用量達45305,論文作者Alex Krizhevsky、Ilya Sutskever和“深度學習之父”Geoff Hinton。
網絡結構
AlexNet的原始網絡結構如下,可以參見caffe的網絡定義bvlc_alexnet,pytorch等也給出了變種實現,見torchvision/models/alexnet.py。
整個網絡大體由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:
創新點
為了獲得最佳表現,論文中綜合應用了很多技術,有些后來已成為通用的標准做法。
-
使用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種方式從\(256\times 256\)圖像中隨機裁剪+左右翻轉出\(224\times 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標准差的高斯隨機值。
- 預測階段,從待預測\(256\times 256\)圖中上下左右中間crop+左右翻轉得到10張\(224\times 224\)的圖像,逐一輸入網,絡對輸出結果取平均,來提升預測階段的准確率,相當於數據層面的集成學習。
- 訓練階段,通過生成大量訓練數據來降低過擬合,生成數據的方式有2種,
-
對前2個全連接層使用Dropout技術,訓練時每次隨機讓50%的神經元輸出為0,以此來降低過擬合,預測時將權重乘以0.5。這樣可以強迫網絡學習到更魯棒的特征,也可以從集成學習的視角理解,預測階段相當於對隨機到的所有模型求了個期望。
-
batchsize 128,SGD Momentum 0.9,weight decay 0.0005,initial learning rate 0.01 停滯時divide by 10,
其他有意思的點
回顧AlexNet論文,發現論文中提及了很多有意思的點,有些僅僅是一筆帶過,但是可能啟發了后面大量的工作,翻回來看才發現“祖師爺”早有預兆。
-
finetune,在一個庫上訓練,在另一個庫上finetune
-
權重可視化,僅可視化第1個卷積層的96個卷積核權重,發現網絡學到了頻率方向性的特征,更有意思的是,GPU1上的48個卷積核是顏色無關的,GPU2上的是顏色相關的。
-
匹配與檢索,使用最后一個全連接層的輸出作為特征,通過歐氏距離可計算圖像間的特征相似度,可做匹配,提出可以通過auto-encoder進一步壓縮獲取到short binary code,可用於檢索,如下圖所示,檢索與最左邊一列特征最近的圖像
-
深度十分重要,增加深度可以進一步提升性能,當前性能只是受限於計算資源和訓練時間(微笑)
-
在ILSVRC 2012上做的報告展示了使用AlexNet做detection的結果,如下
不愧是開創性工作的paper,給這含金量跪了。
參考
- paper: ImageNet Classification with Deep Convolutional Neural Networks
- slides LSVRC 2012: ImageNet Classification with Deep Convolutional Neural Networks
- slides 2015: ImageNet Classification with Deep Convolutional Neural Networks
- cs231n_2017_lecture9
- Large Scale Visual Recognition Challenge 2012 (ILSVRC2012)