深度學習經典卷積神經網路之AlexNet

marsjhao發表於2020-04-06

論文地址:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

中文翻譯:http://blog.csdn.net/liumaolincycle/article/details/50496499

1. 網路結構

2012年,Hinton的學生AlexKrizhevsky提出了深度卷積神經網路模型,可以算是LeNet的一種更深更寬的版本,其獲得了2012年ILSVRC比賽分類專案的冠軍,top-5錯誤率16.4%,使用額外資料可達到15.3%。AlexNet包含了八個學習層——5個卷積層和3個全連線層。

1.1 修正線性單元ReLU

相對於飽和非線性函式如tanh和sigmoid函式,不飽和非線性函式f(x)=max(0,x)在梯度訓練時間上表現要快得多,稱這種不飽和非線性的神經元為修正線性單元ReLU。訓練帶ReLUs的深度卷積神經網路比帶tanh單元的同等網路要快好幾倍。

如圖,對於特定的4層卷積網路,在CIFAR-10資料集上達到25%訓練誤差多需要的迭代次數顯示。帶ReLU網路比帶tanh網路快六倍。

另外,使用ReLU作為CNN的啟用函式,在較深的網路中成功解決了sigmoid在較深網路中的梯度彌散問題。

1.2 在多個GPU上訓練

通過多個GPU加速訓練過程,跨GPU並行化時,GPU之間的讀寫通訊不需要通過主機記憶體。同時,AlexNet的設計讓GPU之間的通訊只在網路的某些層進行,控制了通訊的效能損耗。

1.3 區域性響應歸一化層

區域性響應歸一化層,LocalResponse Normalization(LRN)。

表示點(x,y)處通過應用核計算出的神經元啟用度,然後應用ReLU非線性,響應歸一化活性由下式給出 

其中求和覆蓋了n個“相鄰的”位於相同空間位置的核對映,N是該層中的核總數。核對映的順序當然是任意的,且在訓練開始前就確定。受到在真實神經元中發現的型別啟發,這種響應歸一化實現了一種側向抑制,在使用不同核計算神經元輸出的過程中創造對大啟用度的競爭,使得其中響應比較大的值變得相對更大,並抑制其他反饋較小的神經元,增強了模型的泛化能力。常數k,n,α和β是超引數,它們的值要用驗證集來確定;我們使用。我們在某些層應用ReLU歸一化後再應用這種歸一化。

1.4 重疊的最大池化

此前的CNN普遍使用平均池化,AlexNet全部使用最大池化,避免了平均池化的模糊化效果,並且AlexNet提出步長比池化層的尺寸小,池化層的輸出之間就會有重疊和覆蓋,提升了特徵的豐富性。

2. 減少過擬合

2.1 資料增強 Data Augmentation

減少資料影像過擬合最簡單最常用的方法,是使用標籤保留轉換(label-preserving transformations),人為地擴大資料集。這裡採用了兩種方法,隨機裁取和水平映象翻轉,即隨機地從256*256的原始影像中擷取224*224大小的區域及它們的水平翻轉映象,相當於增加了2*(256-224)^2=2048倍的資料量,且由此產生的擴充訓練集一定是高度相互依賴的。如果沒有資料增強,引數眾多的CNN會陷入嚴重的過擬閤中,採用了資料增強後,大大減輕了過擬合,增強了模型的泛化能力。

在模型預測的時候,對圖片的四個角加中心位置共5個位置並進行水平映象翻轉得到10張圖片,對他們進行10次預測後求平均值。

論文中還提到了會對影像的RGB資料進行PCA處理,並對主成分做一個標準差為0.1的高斯擾動,增加一些噪聲。這個Trick可以讓錯誤率再下降1%。

2.2 Dropout

一種非常有效的模型組合版本,起到多模型組合預測的作用,且在訓練中只花費兩倍於單模型的時間。Dropout技術做的就是以0.5的概率將每個隱層神經元的輸出設定為0,即隨機忽略一部分神經元,以避免模型過擬合。在AlexNet結構中,對前兩個全連線層使用Dropout,若沒有Dropout我們的網路會表現出大量的過擬合,Dropout使收斂所需的迭代次數大致增加了一倍。

3. 整體結構

如圖所示,AlexNet包括了8個引數層(不包括池化層和LRN層),5層卷積層和3層全連線層,最後一個全連線層的輸出送到一個1000-way的Softmax層,產生一個覆蓋1000類標籤的分佈。

LRN層出現在第1個及第2個卷積層後,最大池化層(3*3,步長為2)出現在2個LRN層及最後一個卷積層後。ReLU啟用函式應用在這8層每一層後面。

CNN體系結構示意圖,明確顯示了兩個GPU之間的職責劃分。一個GPU執行圖中頂部的層次部分,而另一個GPU執行圖中底部的層次部分。GPU之間僅在某些層互相通訊。該網路的輸入是150,528維的,且該網路剩下各層的神經元數分別為253,440–186,624–64,896–64,896–43,264–4096–4096–1000。


第一個卷積層利用96個大小為11×11×3、步長為4個畫素(這是同一核對映中鄰近神經元的感受野中心之間的距離)的核,來對大小為224×224×3的輸入影像進行濾波。第二個卷積層需要將第一個卷積層的(響應歸一化及池化之後的)輸出作為自己的輸入,且利用256個大小為5×5×48的核對其進行濾波。第三、第四和第五個卷積層彼此相連,沒有任何介於中間的pooling層與歸一化層。第三個卷積層有384個大小為3×3×256的核被連線到第二個卷積層的(歸一化的、池化的)輸出。第四個卷積層擁有384個大小為3×3×192的核,第五個卷積層擁有256個大小為3×3×192的核。全連線層都各有4096個神經元。

4. 學習過程

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

其中i是迭代指數,v是動力變數,ε是學習率,是目標關於w、對 wi求值的導數在第i批樣例 Di上的平均值。

我們用一個均值為0、標準差為0.01的高斯分佈初始化了每一層的權重。用常數1初始化了第二、第四和第五個卷積層以及全連線隱層的神經元偏差。該初始化通過提供帶正輸入的ReLU來加速學習的初級階段。在其餘層用常數0初始化神經元偏差。

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

相關文章