深度學習模型——AlexNet




Alex2012提出的alexnet網絡結構模型引爆了神經網絡的應用熱潮並贏得了2012屆圖像識別大賽的冠軍,使得CNN成爲在圖像分類上的核心算法模型

注:input的圖片如果是3通道,用三維卷積核進行卷積操作,得到的是二維的(將三個通道的卷積相加),再加上卷積核的數目,變成了三維特徵,例如:13*13*256,13*13\是卷積後的大小,256是kernel(filter)的數目。
Norm層是進行局部響應歸一化(Local Response Normalization,LRN),local_size=5是指將相鄰的五個神經元歸一化。

AlexNet

接下來本文對該網絡配置結構中各個層進行詳細的解讀(訓練階段):

注:下述關於卷積核的尺寸來自於Alex2012年發表的經典論文。


 

1. conv1階段DFDdata flow diagram):

 

第一層輸入數據爲原始的227*227*3的圖像,這個圖像被11*11*3的卷積核進行卷積運算,卷積覈對原始圖像的每次卷積都生成一個新的像素。卷積核沿原始圖像的x軸方向和y軸方向兩個方向移動,移動的步長是4個像素。因此,卷積核在移動的過程中會生成(227-11)/4+1=55個像素(227個像素減去11,正好是54,即生成54個像素,再加上被減去的11也對應生成一個像素),行和列的55*55個像素形成對原始圖像卷積之後的像素層。共有96個卷積核,會生成55*55*96個卷積後的像素層。96個卷積核分成2組,每組48個卷積核。對應生成255*55*48的卷積後的像素層數據。這些像素層經過relu1單元的處理,生成激活像素層,尺寸仍爲255*55*48的像素層數據。

這些像素層經過pool運算(池化運算)的處理,池化運算的尺度爲3*3,運算的步長爲2,則池化後圖像的尺寸爲(55-3)/2+1=27。 即池化後像素的規模爲27*27*96;然後經過歸一化處理,歸一化運算的尺度爲5*5;第一卷積層運算結束後形成的像素層的規模爲27*27*96。分別對應96個卷積核所運算形成。這96層像素層分爲2組,每組48個像素層,每組在一個獨立的GPU上進行運算。

反向傳播時,每個卷積覈對應一個偏差值。即第一層的96個卷積覈對應上層輸入的96個偏差值。

2. conv2階段DFDdata flow diagram):

 

第二層輸入數據爲第一層輸出的27*27*96的像素層,爲便於後續處理,每幅像素層的左右兩邊和上下兩邊都要填充2個像素;27*27*96的像素數據分成27*27*48的兩組像素數據,兩組數據分別再兩個不同的GPU中進行運算。每組像素數據被5*5*48的卷積核進行卷積運算,卷積覈對每組數據的每次卷積都生成一個新的像素。卷積核沿原始圖像的x軸方向和y軸方向兩個方向移動,移動的步長是1個像素。因此,卷積核在移動的過程中會生成(27-5+2*2)/1+1=27個像素。(27個像素減去5,正好是22,在加上上下、左右各填充的2個像素,即生成26個像素,再加上被減去的5也對應生成一個像素),行和列的27*27個像素形成對原始圖像卷積之後的像素層。共有2565*5*48卷積核;這256個卷積核分成兩組,每組針對一個GPU中的27*27*48的像素進行卷積運算。會生成兩組27*27*128個卷積後的像素層。這些像素層經過relu2單元的處理,生成激活像素層,尺寸仍爲兩組27*27*128的像素層。

這些像素層經過pool運算(池化運算)的處理,池化運算的尺度爲3*3,運算的步長爲2,則池化後圖像的尺寸爲(57-3)/2+1=13。 即池化後像素的規模爲213*13*128的像素層;然後經過歸一化處理,歸一化運算的尺度爲5*5;第二卷積層運算結束後形成的像素層的規模爲213*13*128的像素層。分別對應2128個卷積核所運算形成。每組在一個GPU上進行運算。即共256個卷積核,共2GPU進行運算。

反向傳播時,每個卷積覈對應一個偏差值。即第一層的96個卷積覈對應上層輸入的256個偏差值。

 

3. conv3階段DFDdata flow diagram):

 

第三層輸入數據爲第二層輸出的213*13*128的像素層;爲便於後續處理,每幅像素層的左右兩邊和上下兩邊都要填充1個像素;2組像素層數據都被送至2個不同的GPU中進行運算。每個GPU中都有192個卷積核,每個卷積核的尺寸是3*3*256。因此,每個GPU中的卷積核都能對213*13*128的像素層的所有數據進行卷積運算。卷積覈對每組數據的每次卷積都生成一個新的像素。卷積核沿像素層數據的x軸方向和y軸方向兩個方向移動,移動的步長是1個像素。因此,運算後的卷積核的尺寸爲(13-3+1*2)/1+1=1313個像素減去3,正好是10,在加上上下、左右各填充的1個像素,即生成12個像素,再加上被減去的3也對應生成一個像素),每個GPU中共13*13*192個卷積核。2GPU中共13*13*384個卷積後的像素層。這些像素層經過relu3單元的處理,生成激活像素層,尺寸仍爲213*13*192像素層,共13*13*384個像素層。

 

4. conv4階段DFDdata flow diagram):

 

第四層輸入數據爲第三層輸出的213*13*192的像素層;爲便於後續處理,每幅像素層的左右兩邊和上下兩邊都要填充1個像素;2組像素層數據都被送至2個不同的GPU中進行運算。每個GPU中都有192個卷積核,每個卷積核的尺寸是3*3*192。因此,每個GPU中的卷積核能對113*13*192的像素層的數據進行卷積運算。卷積覈對每組數據的每次卷積都生成一個新的像素。卷積核沿像素層數據的x軸方向和y軸方向兩個方向移動,移動的步長是1個像素。因此,運算後的卷積核的尺寸爲(13-3+1*2)/1+1=1313個像素減去3,正好是10,在加上上下、左右各填充的1個像素,即生成12個像素,再加上被減去的3也對應生成一個像素),每個GPU中共13*13*192個卷積核。2GPU中共13*13*384個卷積後的像素層。這些像素層經過relu4單元的處理,生成激活像素層,尺寸仍爲213*13*192像素層,共13*13*384個像素層。

 

5. conv5階段DFDdata flow diagram):

 

第五層輸入數據爲第四層輸出的213*13*192的像素層;爲便於後續處理,每幅像素層的左右兩邊和上下兩邊都要填充1個像素;2組像素層數據都被送至2個不同的GPU中進行運算。每個GPU中都有128個卷積核,每個卷積核的尺寸是3*3*192。因此,每個GPU中的卷積核能對113*13*192的像素層的數據進行卷積運算。卷積覈對每組數據的每次卷積都生成一個新的像素。卷積核沿像素層數據的x軸方向和y軸方向兩個方向移動,移動的步長是1個像素。因此,運算後的卷積核的尺寸爲(13-3+1*2)/1+1=1313個像素減去3,正好是10,在加上上下、左右各填充的1個像素,即生成12個像素,再加上被減去的3也對應生成一個像素),每個GPU中共13*13*128個卷積核。2GPU中共13*13*256個卷積後的像素層。這些像素層經過relu5單元的處理,生成激活像素層,尺寸仍爲213*13*128像素層,共13*13*256個像素層。

213*13*128像素層分別在2個不同GPU中進行池化(pool)運算處理。池化運算的尺度爲3*3,運算的步長爲2,則池化後圖像的尺寸爲(13-3)/2+1=6。 即池化後像素的規模爲兩組6*6*128的像素層數據,共6*6*256規模的像素層數據。

 

6. fc6階段DFDdata flow diagram):

 

第六層輸入數據的尺寸是6*6*256,採用6*6*256尺寸的濾波器對第層的輸入數據進行卷積運算;每個6*6*256尺寸的濾波器對第層的輸入數據進行卷積運算生成一個運算結果,通過一個神經元輸出這個運算結果;共有40966*6*256尺寸的濾波器輸入數據進行卷積運算,通過4096個神經元輸出運算結果;這4096運算結果通過relu激活函數生成4096並通過drop運算後輸出4096本層的輸出結果值。

     由於第六層的運算過程中,採用的濾波器的尺寸(6*6*256)待處理的feature map的尺寸(6*6*256)相同即濾波器中的每個係數只與feature map中的一個像素相乘而其它卷積層,每個濾波器的係數都會與多個feature map像素值相乘;因此第六層稱爲全連接層。

第五層輸出的6*6*256規模的像素層數據與第六層的4096個神經元進行全連接,然後經由relu6進行處理後生成4096個數據,再經過dropout6處理後輸出4096個數據。

 

7. fc7階段DFDdata flow diagram):

 

第六層輸出的4096個數據與第七層的4096個神經元進行全連接,然後經由relu7進行處理後生成4096個數據,再經過dropout7處理後輸出4096個數據。

 

8. fc8階段DFDdata flow diagram):

 

第七層輸出的4096個數據與第八層的1000個神經元進行全連接,經過訓練後輸出被訓練的數值。

 

Alexnet網絡中各個層發揮的作用如下表所述:

 

在學習過程中我們使用隨機梯度下降法和一批大小爲128、動力爲0.9、權重衰減爲0.0005的樣例來訓練我們的網絡。我們發現,這少量的權重衰減對於模型學習是重要的。換句話說,這裏的權重衰減不僅僅是一個正則化矩陣:它減少了模型的訓練誤差。對於權重w的更新規則爲:


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

 

各種layeroperation更多解釋可以參考http://caffe.berkeleyvision.org/tutorial/layers.html

從計算該模型的數據流過程中,該模型參數大概5kw+

caffe開源的model樣例中,它也給出了alexnet的復現,具體網絡配置文件如下https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt

 

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