AlexNet詳細解讀


AlexNet詳細解讀

目前在自學計算機視覺與深度學習方向的論文,今天給大家帶來的是很經典的一篇文章 :《ImageNet Classification with Deep Convolutional Neural Networks》。純粹是自學之后,自己的一點知識總結,如果有什么不對的地方歡迎大家指正。AlexNet的篇文章當中,我們可以主要從五個大方面去講:ReLU,LPN,Overlapping Pooling,總體架構,減少過度擬合。重點介紹總體結構和減少過度擬合。

1. ReLU Nonlinearity

一般神經元的激活函數會選擇sigmoid函數或者tanh函數,然而Alex發現在訓練時間的梯度衰減方面,這些非線性飽和函數要比非線性非飽和函數慢很多。在AlexNet中用的非線性非飽和函數是f=max(0,x),即ReLU。實驗結果表明,要將深度網絡訓練至training error rate達到25%的話,ReLU只需5個epochs的迭代,但tanh單元需要35個epochs的迭代,用ReLU比tanh快6倍。

2. 雙GPU並行運行

為提高運行速度和提高網絡運行規模,作者采用雙GPU的設計模式。並且規定GPU只能在特定的層進行通信交流。其實就是每一個GPU負責一半的運算處理。作者的實驗數據表示,two-GPU方案會比只用one-GPU跑半個上面大小網絡的方案,在准確度上提高了1.7%的top-1和1.2%的top-5。值得注意的是,雖然one-GPU網絡規模只有two-GPU的一半,但其實這兩個網絡其實並非等價的。

3. LRN局部響應歸一化

ReLU本來是不需要對輸入進行標准化,但本文發現進行局部標准化能提高性能。

 

其中a代表在feature map中第i個卷積核(x,y)坐標經過了ReLU激活函數的輸出,n表示相鄰的幾個卷積核。N表示這一層總的卷積核數量。k, n, α和β是hyper-parameters,他們的值是在驗證集上實驗得到的,其中k = 2,n = 5,α = 0.0001,β = 0.75。

這種歸一化操作實現了某種形式的橫向抑制,這也是受真實神經元的某種行為啟發。

卷積核矩陣的排序是隨機任意,並且在訓練之前就已經決定好順序。這種LPN形成了一種橫向抑制機制。

4. Overlapping Pooling

池層是相同卷積核領域周圍神經元的輸出。池層被認為是由空間距離s個像素的池單元網格的組成。也可以理解成以大小為步長對前面卷積層的結果進行分塊,對塊大小為的卷積映射結果做總結,這時有。然而,Alex說還有的情況,也就是帶交疊的Pooling,顧名思義這指Pooling單元在總結提取特征的時候,其輸入會受到相鄰pooling單元的輸入影響,也就是提取出來的結果可能是有重復的(對max pooling而言)。而且,實驗表示使用 帶交疊的Pooling的效果比的傳統要好,在top-1和top-5上分別提高了0.4%和0.3%,在訓練階段有避免過擬合的作用。

5. 總體結構

如果說前面的ReLU、LRN、Overlapping Pooling是鋪墊的話,那么它們一定是為這部分服務的。

因為這才是全文的重點!!!理解這里才是把握住這篇的論文的精華!

首先總體概述下:

  • AlexNet為8層結構,其中前5層為卷積層,后面3層為全連接層;學習參數有6千萬個,神經元有650,000個
  • AlexNet在兩個GPU上運行;
  • AlexNet在第2,4,5層均是前一層自己GPU內連接,第3層是與前面兩層全連接,全連接是2個GPU全連接;
  • RPN層第1,2個卷積層后;
  • Max pooling層在RPN層以及第5個卷積層后。
  • ReLU在每個卷積層以及全連接層后。
  • 卷積核大小數量:

conv1:96 11*11*3(個數/長/寬/深度)

conv2:256 5*5*48

conv3:384 3*3*256

conv4: 384 3*3*192

conv5: 256 3*3*192

ReLU、雙GPU運算:提高訓練速度。(應用於所有卷積層和全連接層)

重疊pool池化層:提高精度,不容易產生過度擬合。(應用在第一層,第二層,第五層后面)

局部響應歸一化層(LRN):提高精度。(應用在第一層和第二層后面)

Dropout:減少過度擬合。(應用在前兩個全連接層)

第1層分析:

第一層輸入數據為原始圖像的227*227*3的圖像(最開始是224*224*3,為后續處理方便必須進行調整),這個圖像被11*11*3(3代表深度,例如RGB的3通道)的卷積核進行卷積運算,卷積核對原始圖像的每次卷積都會生成一個新的像素。卷積核的步長為4個像素,朝着橫向和縱向這兩個方向進行卷積。由此,會生成新的像素;(227-11)/4+1=55個像素(227個像素減去11,正好是54,即生成54個像素,再加上被減去的11也對應生成一個像素),由於第一層有96個卷積核,所以就會形成55*55*96個像素層,系統是采用雙GPU處理,因此分為2組數據:55*55*48的像素層數據。

重疊pool池化層:這些像素層還需要經過pool運算(池化運算)的處理,池化運算的尺度由預先設定為3*3,運算的步長為2,則池化后的圖像的尺寸為:(55-3)/2+1=27。即經過池化處理過的規模為27*27*96.

局部響應歸一化層(LRN):最后經過局部響應歸一化處理,歸一化運算的尺度為5*5;第一層卷積層結束后形成的圖像層的規模為27*27*96.分別由96個卷積核對應生成,這96層數據氛圍2組,每組48個像素層,每組在獨立的GPU下運算。

第2層分析:

第二層輸入數據為第一層輸出的27*27*96的像素層(為方便后續處理,這對每幅像素層進行像素填充),分為2組像素數據,兩組像素數據分別在兩個不同的GPU中進行運算。每組像素數據被5*5*48的卷積核進行卷積運算,同理按照第一層的方式進行:(27-5+2*2)/1+1=27個像素,一共有256個卷積核,這樣也就有了27*27*128兩組像素層。

重疊pool池化層:同樣經過池化運算,池化后的圖像尺寸為(27-3)/2+1=13,即池化后像素的規模為2組13*13*128的像素層。

局部響應歸一化層(LRN):最后經過歸一化處理,分別對應2組128個卷積核所運算形成。每組在一個GPU上進行運算。即共256個卷積核,共2個GPU進行運算。

第3層分析

 

第三層輸入數據為第二層輸出的兩組13*13*128的像素層(為方便后續處理,這對每幅像素層進行像素填充),分為2組像素數據,兩組像素數據分別在兩個不同的GPU中進行運算。每組像素數據被3*3*128的卷積核(兩組,一共也就有3*3*256)進行卷積運算,同理按照第一層的方式進行:(13-3+1*2)/1+1=13個像素,一共有384個卷積核,這樣也就有了13*13*192兩組像素層。

第4層分析:

第四層輸入數據為第三層輸出的兩組13*13*192的像素層(為方便后續處理,這對每幅像素層進行像素填充),分為2組像素數據,兩組像素數據分別在兩個不同的GPU中進行運算。每組像素數據被3*3*192的卷積核進行卷積運算,同理按照第一層的方式進行:(13-3+1*2)/1+1=13個像素,一共有384個卷積核,這樣也就有了13*13*192兩組像素層。

第5層分析:

第五層輸入數據為第四層輸出的兩組13*13*192的像素層(為方便后續處理,這對每幅像素層進行像素填充),分為2組像素數據,兩組像素數據分別在兩個不同的GPU中進行運算。每組像素數據被3*3*192的卷積核進行卷積運算,同理按照第一層的方式進行:(13-3+1*2)/1+1=13個像素,一共有256個卷積核,這樣也就有了13*13*128兩組像素層。

重疊pool池化層:進過池化運算,池化后像素的尺寸為(13-3)/2+1=6,即池化后像素的規模變成了兩組6*6*128的像素層,共6*6*256規模的像素層。

第6層分析:

第6層輸入數據的尺寸是6*6*256,采用6*6*256尺寸的濾波器對第六層的輸入數據進行卷積運算;每個6*6*256尺寸的濾波器對第六層的輸入數據進行卷積運算生成一個運算結果,通過一個神經元輸出這個運算結果;共有4096個6*6*256尺寸的濾波器對輸入數據進行卷積,通過4096個神經元的輸出運算結果;然后通過ReLU激活函數以及dropout運算輸出4096個本層的輸出結果值。

很明顯在第6層中,采用的濾波器的尺寸(6*6*256)和待處理的feature map的尺寸(6*6*256)相同,即濾波器中的每個系數只與feature map中的一個像素值相乘;而采用的濾波器的尺寸和待處理的feature map的尺寸不相同,每個濾波器的系數都會與多個feature map中像素相乘。因此第6層被稱為全連接層。

第7層分析:

第6層輸出的4096個數據與第7層的4096個神經元進行全連接,然后經由ReLU和Dropout進行處理后生成4096個數據。

第8層分析:

第7層輸入的4096個數據與第8層的1000個神經元進行全連接,經過訓練后輸出被訓練的數值。

6. 減少過度擬合

6.1 數據增益

增強圖片數據集最簡單和最常用的方法是在不改變圖片核心元素(即不改變圖片的分類)的前提下對圖片進行一定的變換,比如在垂直和水平方向進行一定的唯一,翻轉等。

AlexNet用到的第一種數據增益的方法:是原圖片大小為256*256中隨機的提取224*224的圖片,以及他們水平方向的映像。

第二種數據增益的方法就是在圖像中每個像素的R、G、B值上分別加上一個數,用到 方法為PCA。對於圖像每個像素,增加以下量 :

p是主成分,lamda是特征值,alpha是N(0,0.1)高斯分布中采樣得到的隨機值。此方案名義上得到自然圖像的重要特性,也就是說,目標是不隨着光照強度和顏色而改變的。此方法降低top-1錯誤率1%。

6.2 Dropout

結合多個模型的預測值是減少錯誤的有效方法,但是對於訓練時間用好幾天的大型神經網絡太耗費時間。Dropout是有效的模型集成學習方法,具有0.5的概率講隱藏神經元設置輸出為0。運用了這種機制的神經元不會干擾前向傳遞也不影響后續操作。因此當有輸入的時候,神經網絡采樣不用的結構,但是這些結構都共享一個權重。這就減少了神經元適應的復雜性。測試時,用0.5的概率隨機失活神經元。dropout減少了過擬合,也使收斂迭代次數增加一倍。

7. 學習細節

AlexNet訓練采用的是隨機梯度下降 (stochastic gradient descent),每批圖像大小為128,動力為0.9,權重衰減為0.005,(Alexnet認為權重衰減非常重要,但是沒有講為什么)

對於權重值的更新規則如下:

其中i是迭代指數,v是動力變量,ε是學習率,是目標關於w、對求值的導數在第i批樣例上的平均值。我們用一個均值為0、標准差為0.01的高斯分布初始化了每一層的權重。我們用常數1初始化了第二、第四和第五個卷積層以及全連接隱層的神經元偏差。該初始化通過提供帶正輸入的ReLU來加速學習的初級階段。我們在其余層用常數0初始化神經元偏差。
    對於所有層都使用了相等的學習率,這是在整個訓練過程中手動調整的。我們遵循的啟發式是,當驗證誤差率在當前學習率下不再提高時,就將學習率除以10。學習率初始化為0.01,在終止前降低三次。作者訓練該網絡時大致將這120萬張圖像的訓練集循環了90次,在兩個NVIDIA GTX 580 3GB GPU上花了五到六天。

8. 實驗結果

ILSVRC2010比賽冠軍方法是Sparse coding,這之后(AlexNet前)報道最好方法是SIFT+FVs。CNN方法橫空出世,遠超傳統方法。 

 

ILSVRC-2012,Alex參加比賽,獲得冠軍,遠超第二名SIFT+FVs。

定量分析:

圖3顯示了卷積層學到的有頻率和方向選擇性的卷積核,和顏色斑點(color blob)。GPU 1 (color-agnostic)和GPU 2(color-specific)學習到的卷積核並不一樣。不一樣的原因是3.5中的受限連接(restricted connectivity)。

圖4顯示,即使目標偏離中心,也可以被識別出來,比如mite。top-5預測結果是reasonable的,比如leopard的預測的可能結果是其他類型的貓科動物。但是也存在對intended focus的模糊問題,就是網絡不知道我們到底想識別圖片中的什么物體,比如cherry,分類結果是dalmatian,網絡顯然關注的是dog。

 

網絡最后4096-d隱藏層產生的是feature activations是另一個重要指標。如果兩張圖像產生歐氏距離相近的feature activation vectors,那么網絡的higher levels就認為他們是相似的。使用此度量,可以實現較好的圖像檢索。

通過歐氏距離計算兩個4096維度效率太低,可以使用自動編碼壓縮向量成二進制碼。這比直接在原始像素上使用自動編碼效果更好。因為在raw pixels上使用quto-encoder,沒用到標簽數據,只是檢索有相似邊緣模式(similar patterns of edges)的圖像,卻不管他們語義(semantically)上是否相似。

9.探討

深度很重要,去掉任一層,性能都會降低。

為了簡化實驗,沒有使用非監督預訓練。但是當有足夠計算能力擴大網絡結構,而沒增加相應數據時,非監督預訓練可能會有所幫助。

雖然通過增大網絡結構和增加訓練時長可以改善網絡,但是我們與達到人類視覺系統的時空推理能力(infero-temporal pathway of the human visual system)還相距甚遠。所以,最終希望能將CNN用到視頻序列分析中,視頻相對靜態圖像有很多有用的時間結構信息。

AlexNet的論文下載地址:點擊打開鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM