原文 ImageNet Classification with Deep ConvolutionalNeural Networks
下載地址:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
在這之前,關於AlexNet的講解的博客已經有很多,我認為還是有必要自己親自動手寫一篇關於AlexNet相關的博客,從而鞏固我的理解。
一 介紹
Alex Krizhevsky等人訓練了一個大型的卷積神經網絡用來把ImageNet LSVRC-2010比賽中120萬張高分辨率的圖像分為1000個不同的類別。在測試卷上,獲得很高准確率(top-1 and top-5 error rates of 37.5%and 17.0% ).。通過改進該網絡,在2012年ImageNet LSVRC比賽中奪取了冠軍,且准確率遠超第二名(top-5 test error rate of 15.3%,第二名26.2%。這在學術界引起了很大的轟動,開啟了深度學習的時代,雖然后來大量比AlexNet更快速更准確的卷積神經網絡結構相繼出現,但是AlexNet作為開創者依舊有着很多值得學習參考的地方,它為后續的CNN甚至是R-CNN等其他網絡都定下了基調,所以下面我們將從AlexNet入手,理解卷積神經網絡的一般結構。
AlexNet網絡包括了6000萬個參數和65000萬個神經元,5個卷積層,在一些卷積層后面還有池化層,3個全連接層,輸出為 的softmax層。
二 數據集
實驗采用的數據集是ImageNet。ImageNet是超過1500萬個標記的高分辨率圖像的數據集,大約有22,000個類別。這些圖像是從網上收集的,並使用亞馬遜的Mechanical Turk眾包服務進行了標記。從2010年開始,舉辦ILSVRC比賽,數據使用的是ImageNet的 一個子集,每個類別大約有1000個圖像,總共有1000個類別。總共有大約120萬個訓練圖像,50000個驗證圖像,以及150000個測試圖像。ImageNet比賽給出兩個錯誤率,top-1和top-5,top-5錯誤率是指你的模型預測的概率最高的5個類別中都不包含正確的類別。ImageNet由可變分辨率的圖像組成,而神經網絡輸入維度是固定的。 因此,我們將圖像下采樣到256×256的固定分辨率矩形圖像,我們首先重新縮放圖像,使短邊長度為256,然后從結果圖像中裁剪出中心256×256的圖片。 我們沒有預先處理圖像以任何其他方式,我們在像素的原始RGB值上訓練了我們的網絡。
三 ReLU激活函數

四 局部歸一化( Local Response Normalization)

其中aix,y表示第i個卷積在(x,y)產生的值然后應用ReLU激活函數的結果,n表示相鄰的幾個卷積核,N表示這一層總的卷積核數量。k,n,α,β都是超參數,他們的值是在驗證集實驗上得到的,k=2,n=5,α=1e-4,β=0.75.這種歸一化操作實現了某種形式的橫向抑制,這也是真實神經元的某種行為啟發。這種具有對局部神經元的活動創建競爭機制,使得其中響應比較大的值變得更大,而對響應比較小的值更加加以抑制,從而增強模型的泛化能力,這和讓更加明顯的特征更加明顯,很細微不明顯的特征加以抑制是一個道理。
后來證明該步驟起到的作用很小,所以后來就很少使用。
五 重疊poolin(overlap pooling)
六 網絡結構

從圖上可以明顯看到網絡結構分為上下兩側,這是因為網絡分布在兩個GPU上,這種葯是因為NVIDIA GTX 580 GPU只用3GB內存,裝不下那么大的網絡。為了減少GPU之間的通信,第2,4,5個卷積層只連接同一個GPU上的上一層的kernel map(指和卷積核相乘后得到的矩陣)。第三個卷積層連接第二層的所有的kernel map。全連接的神經元連接到上一層的所有神經元。第1,2個卷積層里ReLU操作后軸LRN操作。第1,2,5卷積層卷積之后進行max pooling操作。ReLU激活函數應用於所有的卷積層和全連接層。
在AlexNet中,我們標記5個卷積層依次2為C1,C2,C3,C4,C5。而每次卷積后的結果在上圖中可以看到,比如經過卷積層C1后,原始的圖像變成了55x55的尺寸,一共有96個通道,分布在2張3G的顯卡上,所以上圖中一個立方體的尺寸是55x55x48,48是通道數目(后面會詳細的說明),而在這個立方體里面還有一個5x5x48的小立方體,這個就是C2卷積層的核尺寸,48是核的厚度(后面會詳細說明)。這樣我們就能看到它每一層的卷積核尺寸以及每一層卷積之后的尺寸。我們按照上面的說明,推到下每一層的卷積操作:
需要說明的是,雖然AlexNet網絡都用上圖的結構來表示,但是其實輸入圖像的尺寸不是224x224x3,而應該是227x227x3,大家可以用244的尺寸推導下,會發現邊界填充的結果是小數,這顯然是不對的,在這里就不做推導了。
C1:96x11x11x3 (卷積核個數/高/寬/深度)
C2:256x5x5x48(卷積核個數/高/寬/深度)
C3:384x3x3x256(卷積核個數/高/寬/深度)
C4:384x3x3x192(卷積核個數/高/寬/深度)
C5:256x3x3x192(卷積核個數/高/寬/深度)
更詳細的結構如下:









- 采用的是1000個神經元,然后對FC7中4096個神經元進行全鏈接,然后會通過高斯過濾器,得到1000個float型的值,也就是我們所看到的預測的可能性,。
- 如果是訓練模型的話,會通過標簽label進行對比誤差,然后求解出殘差,再通過鏈式求導法則,將殘差通過求解偏導數逐步向上傳遞,並將權重進行推倒更改,類似與BP網絡思慮,然后會逐層逐層的調整權重以及偏置.
由於上面網絡是分布在兩個GPU上面,看起來有些凌亂,因此我們把AlexNet網絡整合在一塊,如下:
- AlexNet 首先用一張 227×227×3 的圖片作為輸入,實際上原文中使用的圖像是 224×224×3,但是如果你嘗試去推導一下,你會發現 227×227 這個尺寸更好一些。
- C1 第一層我們使用 96 個11×11 的過濾器,步幅為 4,由於步幅是 4,因此尺寸縮小到 55×55,縮小了 4 倍左右。然后用一個 3×3 的過濾器構建最大池化層,f=3,s=2,尺寸縮小為 27×27×96。
- C2 接着再執行一個 5×5 的same卷積, p=3,s=1,輸出是 27×27×256。然后再次進行最大池化,尺寸縮小到 13×13。
- C3 再執行一次 same 卷積,p=1,s=1,得到的結果是 13×13×384, 384 個過濾器。
- C4 再做一次 same 卷積,p=1,s=1,得到的結果是 13×13×384, 384 個過濾器。
- C5 再做一次 same 卷積,p=1,s=1,得到的結果是 13×13×256。最后再進行一次最大池化,尺寸縮小到 6×6×256。
- 6×6×256 等於 9216,將其展開為 9216 個單元,然后是一些全連接層。最后使用 softmax 函數輸出識別的結果。
七 防止過擬合
1.增加圖片數據集(Data Augmentation)
- 對圖片進行變化,例如裁切,縮放,翻轉等。
- 在圖片每個像素的RGB值上加入一個偏移量,使用主成分分析方法處理。將每個像素的RGB值x,y = [Ix,yR,Ix,yG,Ix,yB]加上下面的值:
其中pi和λi分別是RGB值3x3協方差矩陣的第i個特征向量和特征值。αi是一個服從均值0,標准差為0.1的高斯分布的隨機變量,在訓練一張圖片之前生成,同一張圖片訓練多次會生成多次。這兩個矩陣相乘,得到一個3x1的矩陣。
這種方法將top-1錯誤率減少了1%。
2.Dropout
dropout是以一定的概率使神經元的輸出為0,AlexNet設置概率為0.5,這種技術打破了神經元之間固定的依賴,使得學習到的參數更加健壯。AlexNet在第1,2個全連接網絡中使用了dropout,這使得迭代收斂的速度增加了一倍。
八 訓練學習
該模型訓練使用了隨機梯度下降法,每批圖片有180張,權重更新公式如下:
其中i是迭代的索引,v是動量,0.9是動量參數,ε是學習率,0.0005是權重衰減系數,在這里不僅起到正則化的作用,而且減少了模型的訓練誤差。是這一批圖片代價函數對權重w的偏導數。
所有的權重都采用均值為0,方差為0.01的高斯分布進行初始化。第2,4,5卷積層和所有全連接層的偏置都初始化為1,其他層的偏置初始化為0.學習率ε=0.01,所有層都使用這個學習率,在訓練過程中,當錯誤率不在下降時,將學習率除以10,在終止訓練之前減少3次,我們把120萬張圖片訓練了90遍,總過花費了5到6天。
參考文章