天天看點

深度學習AlexNet模型詳細分析

Alex在2012年提出的alexnet網絡結構模型引爆了神經網絡的應用熱潮,并赢得了2012屆圖像識别大賽的冠軍,使得CNN成為在圖像分類上的核心算法模型。

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

注:下述關于卷積核的尺寸來自于Alex在2012年發表的經典論文。

深度學習AlexNet模型詳細分析
  1. conv1階段DFD(data flow diagram):
    深度學習AlexNet模型詳細分析

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

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

反向傳播時,每個卷積核對應一個偏內插補點。即第一層的96個卷積核對應上層輸入的96個偏內插補點。

  1. conv2階段DFD(data flow diagram):
    深度學習AlexNet模型詳細分析

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

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

反向傳播時,每個卷積核對應一個偏內插補點。即第一層的96個卷積核對應上層輸入的256個偏內插補點。

  1. conv3階段DFD(data flow diagram):
    深度學習AlexNet模型詳細分析

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

  1. conv4階段DFD(data flow diagram):
    深度學習AlexNet模型詳細分析

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

  1. conv5階段DFD(data flow diagram):
    深度學習AlexNet模型詳細分析

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

2組1313128像素層分别在2個不同GPU中進行池化(pool)運算處理。池化運算的尺度為33,運算的步長為2,則池化後圖像的尺寸為(13-3)/2+1=6。 即池化後像素的規模為兩組66128的像素層資料,共66*256規模的像素層資料。

  1. fc6階段DFD(data flow diagram):
    深度學習AlexNet模型詳細分析

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

由于第六層的運算過程中,采用的濾波器的尺寸(6*6*256)與待處理的feature map的尺寸(6*6*256)相同,即濾波器中的每個系數隻與feature map中的一個像素值相乘;而其它卷積層中,每個濾波器的系數都會與多個feature map中像素值相乘;是以,将第六層稱為全連接配接層。
           

第五層輸出的66256規模的像素層資料與第六層的4096個神經元進行全連接配接,然後經由relu6進行處理後生成4096個資料,再經過dropout6處理後輸出4096個資料。

  1. fc7階段DFD(data flow diagram):
    深度學習AlexNet模型詳細分析

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

  1. fc8階段DFD(data flow diagram):
    深度學習AlexNet模型詳細分析

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

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

深度學習AlexNet模型詳細分析

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

深度學習AlexNet模型詳細分析

其中i是疊代指數,v是動力變量,ε是學習率,是目标關于w、對求值的導數在第i批樣例上的平均值。我們用一個均值為0、标準差為0.01的高斯分布初始化了每一層的權重。我們用常數1初始化了第二、第四和第五個卷積層以及全連接配接隐層的神經元偏差。該初始化通過提供帶正輸入的ReLU來加速學習的初級階段。我們在其餘層用常數0初始化神經元偏差。

對于所有層都使用了相等的學習率,這是在整個訓練過程中手動調整的。我們遵循的啟發式是,當驗證誤差率在目前學習率下不再提高時,就将學習率除以10。學習率初始化為0.01,在終止前降低三次。作者訓練該網絡時大緻将這120萬張圖像的訓練集循環了90次,在兩個NVIDIA GTX 580 3GB GPU上花了五到六天。

各種layer的operation更多解釋可以參考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:

作者:南極粥

來源:CSDN

原文:https://blog.csdn.net/zyqdragon/article/details/72353420

版權聲明:本文為部落客原創文章,轉載請附上博文連結!