〖想觀看更多中文論文導讀,至[論文速速讀]系列文章介紹可以看到目前已發布的所有文章!〗
AlexNet,2012年的ILSVRC冠軍,也是首度使用了CNN模型屌打傳統的ML方法,讓大家開始脫離手工提取特徵的時代。
這一篇只有9頁,對比於上一篇LeNet,真是感激萬分。
Abstract
To make training faster, we used non-saturating neurons and a very efficient GPU implementation of the convolution operation. To reduce overfitting in the fully-connected layers we employed a recently-developed regularization method called “dropout” that proved to be very effective.
摘要主要點出了幾個使用到的技術:
- non-saturating neurons: 就是ReLU La~
- effifient GPU implementation: 各位當時的設備很可憐阿QQ GPU的memory非常少R,所以他們把model分到兩個不同的gpu,然後再去共享data
- 使用了dropout來避免overfitting
Introduction
However, the immense complexity of the object recognition task means that this problem cannot be specified even by a dataset as large as ImageNet, so our model should also have lots of prior knowledge to compensate for all the data we don’t have. Convolutional neural networks (CNNs) constitute one such class of models…
圖像識別任務的巨大複雜度(從數百萬張圖片分類數千個對象)在即使給予了很龐大的dataset,像是ImageNet也很難做得好,模型中應該需要包含大量的先驗知識來補償我們不具有的data。在此之上CNN就是一個很適合的方法。
不過在當時的年代,CNN的計算量仍然是一個很大的負擔,這篇論文主要的貢獻如下:
- 寫了一個使用GPU來training CNN的implementation
- 透過一些技巧(ReLU, data augumentation)得到了更好的result
- 加入了dropout防止overfitting
- AlexNet: 5層Conv layer + 3層FC layer
- 「快…還要更快…」實驗數據表明只要有更快更強的GPU,我們結果就能夠好
The Dataset
介紹ILSVRC和ImageNet,有興趣的可以再自己去看。主要做的前處理部分是:
- 圖像的大小不同,所以統一reszie到256x256
- 對RGB做centering,也就是說計算所有圖片在R,G,B上面的mean跟std,然後做normalization
所以這也解釋了為什麼會在Pytorch document中看到這種神奇的數字1
2normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
[0.485, 0.456, 0.406]就是ImageNet中R, G, B的mean,後來大家習慣使用在ImageNet上pretrain的model時也會一併使用這組value來做前處理
The Architecture
接下來他們依照重要程度來介紹它們使用了那些技術,以及模型架構。
ReLU Nonlinearity
傳統的activation function,如sigmoid, tanh都是saturating nonlinearities,也就是說他們的值會有一個區間。而AlexNet使用了non-saturating nonlinearity的ReLU($f(x)=max(0,x)$),使得訓練速度快了很多。
這張圖是說,使用ReLU(實現)比使用tanh(虛線)的快了六倍,棒棒哒。
Training on Multiple GPUs
當時他們使用了兩顆GTX 580 GPU,然後分別進行訓練,只在某些layer進行交互,細節看架構圖就知道了。
Local Response Normalization
儘管ReLU在positive沒有upper bound,他們卻發現對ReLU做Normalization也能提升效能,這個就是Local Response Normalization,公式如下:
其中$k, \alpha, \beta$都是超參數,$a_{x,y}$是(x, y)位置經過activation function後的值,也就是說以(x, y)為中心,左右共取了$n$個值一起做Normalization(左邊取i-n/2,右邊取i+n/2)。
他們發現這樣做讓testing err從13%降到11%
(題外話,後來好像很少人用LRN,所以去查了一下,結果在VGG的paper中好像提到了使用LRN對他們並沒有幫助)
Overlapping Pooling
一般的pooling並不會overlap,不過這邊使用到stride< width(height)的pooling,使得pooling之間取值是會重疊的,他們發現這樣可以降低overfitting。
使用overlapping使得error降低了0.4%
Overall Architecture
很久以前看到這圖還想說是不是截圖的人沒截好,這圖怎麼被切到了,今天看完paper才恍然大悟…
原來他本來就長的一副被切樣阿阿阿阿阿!
注意到這個架構雖然使用到了2張GPU,但他並不是像現在的平行處理架構,而是有特別設計過的。這個架構現在應該也沒什麼人會用了,因為Nivdia乾爹威猛,區區記憶體還不夠多嗎
值得一提的是,最後一層是使用了softmax而不是cross entropy做為activation function
其他架構的細節我這裡就不講了,有興趣的可以參考可能是史上最全面的AlexNet 论文笔记与复现!!的內容
Reducing Overfitting
介紹了兩種使用到的避免overfitting的方法
Data Augmentation
包含了圖像平移和水平翻轉。
圖像平移的部分在256x256的圖上隨機提取224x224來當作training image,然後再搭配水平翻轉
- 這樣的方法使得training data增加了2048倍(每一張圖都有32x32個不同的子圖,然後還可以水平翻轉所以共有32x32x2=2048)
- 儘管這樣取得的圖片當然具有高度的相關性(因為可能是同一張圖片然後切成不同的子圖),但仍然有效。
在testing時,他們會對同一張圖片取5張224x224的子圖和水平翻轉的圖,總共10張去predict然後在用average output做softmax取得label。
第二種方式是改變RGB channel的強度,透過PCA去取得RGB的principle component,然後對每張圖加上隨機量的RGB principle component:
這樣的方法降低了1%的error
Dropout
在training時,每個neuron有0.5的機率會被隱藏,這樣能使得模型更加的robust(有點類似ensemble model的效果)。testing時使用所有的neuron,但將結果乘上0.5。
AlexNet在前兩層FC中使用到了dropout,他們也提到使用dropout會使得收斂所需要的iteration加倍。
Details of learning
使用SGD,然後搭配weight decay的learning rate…剩下的自己看。
Results
7層的AlexNet效果最好,棒棒哒。
然後他們也觀察了在第一層Conv的kernel長怎樣(第一層Conv有2個(48,3,11,11),所以總共有96張(3,11,11)的視覺化圖),然後他們發現第一個GPU都是學習到邊緣的特徵,第二個GPU都是學習到顏色的特徵比較多。
- 這也是CNN可視化的開山始祖
接下來他們做了另一件事情: 透過最後一層的output vector來觀察是不是距離相近的相似度也比較近(這裡用的是歐式距離)。下圖中第一欄都是testing set的圖片,然後二到五欄都是training set中與第一欄的歐式距離最小的圖片。
透過這個觀察可以說,模型在higher level如果距離比較小的vector是它認為比較相似的。儘管AlexNet最後一層是4096在計算上很沒有效率,不過他們也提到了這個是可以被優化的,例如train一個auto-encoder來壓縮vector長度,這在圖像檢索領域(image retrieval)上是一個很大的進展。
總結
AlexNet作為第一個在ILSVRC告訴大家別再傻傻地人工取feature然後用SVM的人,這篇的出現導致從此ILSVRC正式CNN時代。
雖然裡面的架構現在很少人在用了,不過裡面使用到的技術如ReLU, Dropout等技術仍然是現在很受用的技巧。
然後這一篇只有9頁,非常簡潔有力,小弟看得很開心,希望後續要看的paper再接再厲。
References
- 可能是史上最全面的AlexNet 论文笔记与复现!!
- Pytorch document
- 深度学习中Normalization的简介以及Batch Normalization的Alternative实现
- 【阅读笔记】AlexNet - ImageNet Classification with Deep Convolutional Neural Networks