1. 程式人生 > >AlexNet論文(ImageNet Classification with Deep Convolutional Neural Networks)(譯)

AlexNet論文(ImageNet Classification with Deep Convolutional Neural Networks)(譯)

前言

最近一直比較忙,總算才有時間看點深度學習的論文。這篇論文是大神Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton三人提出的AlexNet深度卷積神經網路,摘得了2010年ILSVRC比賽的桂冠。AlexNet在現在也經常會用到,可以說是很經典的一個CNN框架了。出於學習的目的,一方面可以做筆記,一方面也可以督促自己的學習,我才打算翻譯下這篇論文。由於個人水平有限,翻譯僅供參考,如有錯誤,歡迎交流指正。
下面是一些可能有用的參考資料:
論文原文:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf


基於caffe的實現:http://caffe.berkeleyvision.org/gathered/examples/imagenet.html

翻譯正文

ImageNet Classification with Deep Convolutional Neural Networks

摘要

我們訓練了一個龐大的深層卷積神經網路,將ImageNet LSVRC-2010比賽中的120萬張高解析度影象分為1000個不同的類別。在測試資料上,我們取得了37.5%和17.0%的前1和前5的錯誤率,這比以前的先進水平要好得多。具有6000萬個引數和650,000個神經元的神經網路由五個卷積層組成,其中一些隨後是最大池化層,三個全連線層以及最後的1000個softmax輸出。為了加快訓練速度,我們使用非飽和神經元和能高效進行卷積運算的GPU實現。為了減少全連線層中的過擬合,我們採用了最近開發的稱為“dropout”的正則化方法,該方法證明是非常有效的。我們還在ILSVRC-2012比賽中使用了這種模式的一個變種,取得了15.3%的前五名測試失誤率,而第二名的成績是26.2%。

1、介紹

目前,機器學習方法對物體識別非常重要。為了改善他們的表現,我們可以收集更大的資料集,訓練更強大的模型,並使用更好的技術來防止過擬合。直到最近,標記好影象的資料集相對還較小——大約上萬的數量級(例如,NORB [16],Caltech-101/256 [8,9]和CIFAR-10/100 [12])。使用這種規模的資料集可以很好地解決簡單的識別任務,特別是如果他們增加了保留標籤轉換(label-preserving transformations)。例如,目前MNIST數字識別任務的最低錯誤率(<0.3%)基本達到了人類的識別水平[4]。但是物體在現實環境中可能表現出相當大的變化性,所以要學會識別它們,就必須使用更大的訓練集。事實上,小影象資料集的缺點已是眾所周知(例如,Pinto[21]),但直到最近才可以收集到數百萬的標記資料集。新的大型資料集包括LabelMe [23],其中包含數十萬個完全分割的影象,以及ImageNet [6],其中包含超過15,000萬個超過22,000個類別的高解析度影象。
要從數百萬影象中學習數千個類別,我們需要一個具有強大學習能力的模型。然而,物體識別任務的巨大複雜性意味著即使是像ImageNet這樣大的資料集也不能完美地解決這個問題,所以我們的模型也需要使用很多先驗知識來彌補我們資料集不足的問題。卷積神經網路(CNN)就構成了一類這樣的模型[16,11,13,18,15,22,26]。它們的容量可以通過改變它們的深度和寬度來控制,並且它們也對影象的性質(即統計量的定態假設以及畫素區域性依賴性假設)做出準確而且全面的假設。因此,與具有相同大小的層的標準前饋神經網路相比,CNN具有更少的連線和引數,因此它們更容易訓練,而其理論最優效能可能稍微弱一些。
儘管CNN具有很好的質量,並且儘管其區域性結構的效率相對較高,但將它們大規模應用於高解析度影象時仍然顯得非常昂貴。幸運的是,當前的GPU可以用於高度優化的二維卷積,能夠加速許多大型CNN的訓練,並且最近的資料集(如ImageNet)包含足夠多的標記樣本來訓練此類模型,而不會出現嚴重的過度擬合。
本文的具體貢獻如下:我們在ILSVRC-2010和ILSVRC-2012比賽中使用的ImageNet子集上訓練了迄今為止最大的卷積神經網路之一[2],並在這些資料集上取得了迄今為止最好的結果。我們編寫了一個高度優化的2D卷積的GPU實現以及其他訓練卷積神經網路的固有操作,並將其公開。我們的網路包含許多新的和不同尋常的功能,這些功能可以提高網路的效能並縮短訓練時間,詳情請參閱第3節。我們的網路規模較大,即使有120萬個帶標籤的訓練樣本,仍然存在過擬合的問題,所以我們採用了幾個有效的技巧來阻止過擬合,在第4節中有詳細的描述。我們最終的網路包含五個卷積層和三個全連線層,並且這個深度似乎很重要:我們發現去除任何卷積層(每個卷積層只包含不超過整個模型引數的1%的引數)都會使網路的效能變差。
最後,網路的規模主要受限於目前GPU上可用的記憶體量以及我們可接受的訓練時間。我們的網路需要在兩塊GTX 580 3GB GPU上花費五到六天的時間來訓練。我們所有的實驗都表明,通過等待更快的GPU和更大的資料集出現,我們的結果可以進一步完善。

2、資料集

ImageNet是一個擁有超過1500萬個已標記高解析度影象的資料集,大概有22,000個類別。影象都是從網上收集,並使用Amazon-Mechanical Turk群智工具人工標記。從2010年起,作為Pascal視覺物件挑戰賽的一部分,這是每年舉辦一次的名為ImageNet大型視覺識別挑戰賽(ILSVRC)的比賽。 ILSVRC使用的是ImageNet的一個子集,每1000個類別中大約有1000個影象。總共有大約120萬張訓練影象,50,000張驗證影象和150,000張測試影象。
ILSVRC-2010是ILSVRC中的唯一可以使用測試集標籤的版本,因此這也正是我們進行大部分實驗的版本。由於我們也在ILSVRC-2012比賽中引入了我們的模型,因此在第6部分中,我們也會給出此版本資料集的結果,儘管這個版本的測試集標籤不可用。在ImageNet上,習慣上使用兩種錯誤率:top-1和top-5,其中top-5錯誤率是正確標籤不在被模型認為最可能的五個標籤之中的測試影象的百分率。
ImageNet由可變解析度的影象組成,而我們的系統需要固定的輸入尺寸。因此,我們將影象下采樣到256×256的固定解析度。給定一個矩形影象,我們首先重新縮放影象,使得短邊長度為256,然後從結果中裁剪出中心的256×256的圖片。除了將每個畫素中減去訓練集的畫素均值之外,我們沒有以任何其他方式對影象進行預處理。所以我們在畫素的(中心)原始RGB值上訓練了我們的網路。

3、結構

圖2概括了我們所提出網路的結構。它包含八個學習層——五個卷積層和三個全連線層。下面,我們將描述一些所提出網路框架中新穎或不尋常的地方。 3.1-3.4節按照我們對它們重要性的估計進行排序,其中最重要的是第一個。

3.1、ReLU非線性單元

對一個神經元模型的輸出的常規套路是,給他接上一個啟用函式:f(x)=tanh(x)或者f(x)=(1+ex)1。就梯度下降法的訓練時間而言,這些飽和非線性函式比非飽和非線性函式如f(x)=max(0,x)慢得多。根據Nair和Hinton的說法[20],我們將這種非線性單元稱為——修正非線性單元(Rectified Linear Units (ReLUs))。使用ReLUs做為啟用函式的卷積神經網路比起使用tanh單元作為啟用函式的訓練起來快了好幾倍。這個結果從圖1中可以看出來,該圖展示了對於一個特定的四層CNN,CIFAR-10資料集訓練中的誤差率達到25%所需要的迭代次數。從這張圖的結果可以看出,如果我們使用傳統的飽和神經元模型來訓練CNN,那麼我們將無法為這項工作訓練如此大型的神經網路。
png
我們並不是第一個考慮在CNN中替換掉傳統神經元模型的。例如,Jarrett等人[11]聲稱,非線性函式f(x)=|tanh(x)|在他們的對比度歸一化問題上,再接上區域性均值池化單元,在Caltech-101資料集上表現的非常好。然而,在這個資料集中,主要擔心的還是防止過擬合,所以他們觀察到的效果與我們在使用ReLU時觀察到的訓練集的加速能力還是不一樣。加快訓練速度對大型資料集上訓練的大型模型的效能有很大的影響。

3.2、在多個GPU上訓練

單個GTX 580 GPU只有3GB記憶體,這限制了可以在其上訓練的網路的最大尺寸。事實證明,120萬個訓練樣本足以訓練那些因規模太大而不適合使用一個GPU訓練的網路。因此,我們將網路分佈在兩個GPU上。目前的GPU很適合於跨GPU並行化操作,因為它們能夠直接讀寫對方的記憶體,而無需通過主機記憶體。我們採用的並行化方案基本上將半個核心(或神經元)放在各個GPU上,另外還有一個技巧:GPU只在某些層間進行通訊。這意味著,例如,第3層的核心從第2層的所有核心對映(kernel maps)中獲取輸入。然而,第4層中的核心又僅從位於同一GPU上的第3層中的那些核心對映獲取輸入。選擇連線模式對於交叉驗證是一個不小的問題,但這使得我們能夠精確調整通訊量,直到它的計算量的達到可接受的程度。
由此產生的架構有點類似於Cire¸san等人使用的“柱狀”CNN[5],除了我們的每列不是獨立的之外(見圖2)。與一個GPU上訓練的每個卷積層只有一半的核心數量的網路相比,該方案分別將我們的top-1和top-5錯誤率分別降低了1.7%和1.2%。雙GPU網路的訓練時間比單GPU網路更少。

3.3、區域性響應歸一化(Local Response Normalization)

ReLU具有理想的屬性,它們不需要對輸入進行歸一化來防止它們飽和。如果至少有一些訓練例項為ReLU產生了正的輸入,那麼這個神經元就會學習。然而,我們還是發現下面的這種歸一化方法有助於泛化。設ax,yi表示第i個核心計算(x,y)位置的ReLU非線性單元的輸出,而響應歸一化(Local Response Normalization)的輸出值定義為bx,yi

bx,yi=ax,yi(k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2)β
其中,求和部分公式中的n表示同一個位置下與該位置相鄰的核心對映的數量,而N表示這一層所有的核心數(即通道數)。核心對映的順序當然是任意的,並且在訓練之前就已經定好了。這種響應歸一化實現了一種模模擬實神經元的橫向抑制,從而在使用不同核心計算的神經元輸出之間產生較大的競爭。常數knαβ都是超引數(hyper-parameters),它們的值都由驗證集決定。我們取k=2n=5α=104β=0.75。我們在某些層的應用ReLU後再使用這種歸一化方法(參見第3.5節)。
這個方案與Jarrett等人[11]的區域性對比歸一化方案有些相似之處,但我們的被更準確地稱為“亮度歸一化”,因為我們沒有減去均值。響應歸一化將我們的top-1和top-5的錯誤率分別降低了1.4%和1.2%。我們還驗證了這種方案在CIFAR-10資料集上的有效性:沒有進行歸一化的四層CNN實現了13%的測試錯誤率,而進行了歸一化的則為11%。

3.4、重疊池化

CNN中的池化層彙集了相同核心對映中相鄰神經元組的輸出。在傳統方法中,相鄰池化單元之間互不重疊(例如[17,11,4])。更準確地說,一個池化層可以被認為是由一些間隔為s個畫素的池化單元組成的網格,每個都表示了一個以池化單元的位置為中心的大小為z×z的鄰域。如果我們令s = z,我們就可以得到CNN中常用的傳統的區域性池化。如果我們令s

3.5、整體結構

現在我們已經準備好描述CNN的整體架構了。如圖2所示,這個網路包含了八層權重;前五個是卷積層,其餘三個為全連線層。最後的全連線層的輸出被送到1000維的softmax函式,其產生1000個類的預測。我們的網路最大化多項邏輯迴歸目標,這相當於在預測的分佈下最大化訓練樣本中正確標籤對數概率的平均值。
第二,第四和第五個卷積層的核心僅與上一層存放在同一GPU上的核心對映相連(見圖2)。第三個卷積層的核心連線到第二層中的所有核心對映。全連線層中的神經元連線到前一層中的所有神經元。響應歸一化層緊接著第一個和第二個卷積層。 在3.4節中介紹的最大池化層,後面連線響應歸一化層以及第五個卷積層。將ReLU應用於每個卷積層和全連線層的輸出。
png
第一個卷積層的輸入為224×224×3的影象,對其使用96個大小為11×11×3、步長為4(步長表示核心對映中相鄰神經元感受野中心之間的距離)的核心來處理輸入影象。第二個卷積層將第一個卷積層的輸出(響應歸一化以及池化)作為輸入,並使用256個核心處理影象,每個核心大小為5×5×48。第三個、第四個和第五個卷積層彼此連線而中間沒有任何池化或歸一化層。第三個卷積層有384個核心,每個的大小為3×3×256,其輸入為第二個卷積層的輸出。第四個卷積層有384個核心,每個核心大小為3×3×192。第五個卷積層有256個核心,每個核心大小為3×3×192。全連線層各有4096個神經元。

4、減少過擬合

我們的神經網路架構擁有6000萬個引數。儘管ILSVRC的1000個類別使得每個訓練樣本從影象到標籤的對映被限制在了10 bit之內,但這不足以保證訓練這麼多引數而不出現過擬合。下面,我們將介紹對付過度擬合的兩個方法。

4.1、資料增強(Data Augmentation)

減小過擬合的最簡單且最常用的方法就是,使用標籤保留轉換(label-preserving transformations,例如[25,4,5]),人為地放大資料集。我們採用兩種不同形式的資料增強方法,它們都允許通過很少的計算就能從原始影象中生成轉換影象,所以轉換後的影象不需要儲存在硬碟上。在我們實現過程中,轉換後的影象是使用CPU上的Python程式碼生成的,在生成這些轉換影象的同時,GPU還在訓練上一批影象資料。所以這些資料增強方案實際上是很高效的。
資料增強的第一種形式包括平移影象和水平對映。我們通過從256×256影象中隨機提取224×224的影象塊(及其水平對映)並在這些提取的影象塊上訓練我們的網路來做到這一點。這使我們的訓練集的規模增加了2048倍,儘管由此產生的訓練樣本當然還是高度相互依賴的。如果沒有這個方案,我們的網路就可能會遭受大量的的過擬合,可能會迫使我們不得不使用更小的網路。在測試時,網路通過提取5個224×224的影象塊(四個角塊和中心塊)以及它們的水平對映(因此總共包括10個塊)來進行預測,並求網路的softmax層的上的十個預測結果的均值。
第二種形式的資料增強包括改變訓練影象中RGB通道的灰度。具體而言,我們在整個ImageNet訓練集的影象的RGB畫素值上使用PCA。對於每個訓練影象,我們新增多個通過PCA找到的主成分,大小與相應的特徵值成比例,乘以一個隨機值,該隨機值屬於均值為0、標準差為0.1的高斯分佈。因此,對於每個影象的RGB畫素有: