--- tags: Deep learning --- # 論文閱讀: AlexNet (ImageNet Classification with Deep Convolutional Neural Networks) [論文](https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf) ## Introduction AlexNet的提出,是深度學習領域中關鍵的分水嶺。2012年,在ImageNet的圖像分類競賽中,AlexNet top-5 錯誤率比上一年的冠軍下降了10%(如下圖)。證明了CNN在影像分類領域中的強大。 ![](https://i.imgur.com/cj8ckAG.png) 在AlexNet中,許多架構被證明可以增加deep learning model的穩定度與強度,至今仍在被使用,下面將會一一介紹。 ## DateSet ImageNet是一個擁有超過1500萬張有正確標記的影像,超過22,000種的類別的資料集。 從2010年開始,一個被稱為ImageNet Large-Scale Visual Recognition Challenge(ILSVRC)的比賽周年的舉行。使用的資料大約是從ImageNet中選出1000種類,再從中各挑出約1000張影像,總計Training Set約120萬張、Validation Set 5萬張、Testing Set 1.5萬張。AlexNet會在2010(有label)和2012(沒label)年的資料集都做實驗。 ImageNet 的圖片解析度不一,但因為AlexNet只能接受256x256的input。因此AlexNet的input是先把圖片的短邊rescale到256,之後再把長邊從中心往左右延伸128,其他多餘的部分剪裁掉。 ## The Architecture ![](https://i.imgur.com/VHiZarj.png) 如圖,AlexNet 的架構共八層,第一層到第五層是 Convolutional Layers 做卷積操作(Convolution Operation)與池化(Pooling);第六層到第八層是 Fully Connected Layers。 下面依照作者認為的重要程度順序(由大到小)介紹AlexNet與當時其他的CNN模型相比,一些比較不同的架構。 ### 1. ReLU Nonlinearity 縱使ReLu在現今已經幾乎是Activation Function中的首選, 但當時最常用的激活函數其實是 Sigmoid 和 tanh function。 然而比起ReLu,Sigmoid 和 tanh function擁有vanishing gradient的問題([可以參考李宏毅老師的課程11:20](https://www.youtube.com/watch?v=xki61j7z-30&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49&index=17&t=0s))。簡單來說,就是當CNN的層數越來越深時,input weight的變化對loss的影響就會隨著神經元的傳遞而衰減,導致靠近input層的weight沒辦法被更新,模型的training就已經converge了。 ![](https://i.imgur.com/6j8q2IE.png) ![](https://i.imgur.com/4Ze4sz8.png) 也因此AlexNet將激活函數換成ReLU,如下圖,可以看到收斂的速度變快。 ![](https://i.imgur.com/GhAGlhK.png) ### 2.Training on Multiple GPUs 礙於當時的GPU的記憶體容量比較小(使用的是GTX 580,只有3GB memory),因此將kernel(neurons)拆半並分到兩個GPU上,並且限制兩個GPU只在特定的層communicate。藉此,作者可以調整兩個GPU分別的計算量。 ### 3.Local Response Normalization 縱使ReLUs擁有不需要正規化input以預防saturating(將input壓到一個區間中)的特性,但作者仍發現加入正規的layer對於訓練仍有幫助。 ![](https://i.imgur.com/EgzaAVg.png) 如公式,AlexNet在每層ReLU後都接一層LRN,Node a 在位置(x, y)上的輸出先透過正規化函式(k = 2, n = 5, α = 10−4 , β = 0.75),以b的值輸入下一層。 不過在VGG的論文中,推翻了LRN有用的這個說法。 ### 4. Overlapping Pooling Poolingd可以蒐集某一區域的Pixel作為區域內的特徵,傳遞到下一層。傳統的Pooling層並不重疊。然而AlexNet論文中表示,使Pooling層重疊可以降低錯誤率並且防止overfitting。 然而實際上到底是不是如此呢?在VGG中反倒是認為使用不重疊的pooling層可以有更好的效果。在state-of-art的應用中,基本上也都是使用不重疊的pooling層來得更多。 ## Reducing Overfitting 在論文中對於overfitting問題提出兩個解法。 ### 1. Data Augmentation data augmentation是在深度學習上,是常被應用於防止overfitting的方法。 論文中使用了兩種方法來達成,由於這些方法的運算量並不大,因此經過augmentation的影像不需要存在disk上。此外augmentation使用了python code在cpu上處理,因此也不會影響到GPU上的training。 #### approach 1 前面有提到原始輸入影像尺寸是 256 x 256。然後論文的方法從中隨機裁切 224 x 224 的影像(包含水平鏡像)出來,在輸入到CNN中(這也是為甚麼input的尺寸是224x224x3),藉此,training set可以放大1024倍。 在使用testing data時,從輸入影像萃取5塊尺寸為 224 x 224 的patch(四個角+ 中心點),加上水平鏡射的影像總共10patch,合併經過Softmax得出最終預測。 #### approach 2 另一種data augmentation的方式是對影像進行PCA,找出整個training set 中RGB像素值的主成分。對於RGB image的每個 pixel Ixy = (IRxy, IGxy, IBxy) 加上一定隨機成分(如下圖)。 ![](https://i.imgur.com/m80cc9O.png) pi 和 λi 是 ith eigenvector 和 eigenvalue 對於RGB image的3 × 3 covariance matrix。αi為random variable,並且在同一階段中同一影像的所有pixel會使用同一個αi值。 ### 2. Dropout 像random forest一樣,透過多個decision tree作為weak learner做ensemble learning或許是避免overfitting的好方法。然而對於如deep learning這種需要耗費巨量時間訓練的模型來說,這顯然是一項耗費資源的作法。 AlexNet採用了一個在現今deep learning中常見的做法"dropout"。對於每次input,每個neuron會以0.5的機率不參與訓練(forwark跟back propagation)。因此每次input進來,模型都會呈現出些許的不同。 在test時,這些layer的weight則要被乘上0.5才能被使用。([對於dropout更詳細的介紹可以參考李宏毅老師的影片1:10:30](https://www.youtube.com/watch?v=xki61j7z-30&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49&index=16)) dropout在根據Figure 2的前兩個fully connected layer中被使用。 ## Details of learning 參數: * 使用stochastic gradient descent * batch size : 128 examples * momentum of 0.9 * weight decay of 0.0005,作者發現微小的weight decay設定可以降低training error。 * weight initialized 使用 zero-mean, standard deviation 0.01 的Gaussian distribution * 每個layer使用相同 learning rate並根據訓練狀況手動調整。 learning rate從0.01開始,調整共3次。當validation error無法進步時就把learning rate/10再繼續做。 ## Results 在ILSVRC-2010上的error rate,可以看到超出當時的冠軍sparse coding以及AlexNet推出前的最好結果SIFT+FVs許多。 ![](https://i.imgur.com/9oJZSiB.png) (詳細的結果可以閱讀論文,後面就先省略) ## Discussion 以現今的眼光來看,其實AlexNet並不複雜。然而幾個重要的架構設計使他獲得了成功。其透過ReLu的使用,證明了加深網路對於CNN的表現是有顯著影響的。並且,使用了data augmentation以及dropout以避免over training,這在現今仍然都是十分實用的技巧。 AlexNet的出現,可說是把CNN推入Image classification領域的關鍵,導致了深度學習在這領域上的研究開始蓬勃發展。 ## Reference [AlexNet 架構概述](https://medium.com/@WhoYoung99/alexnet-%E6%9E%B6%E6%A7%8B%E6%A6%82%E8%BF%B0-988113c06b4b)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up