AlexNet網絡介紹

本文轉自紅黑聯盟https://www.2cto.com/kf/201608/533035.html

1LeNet-5

1.1侷限性

早在1989年,Yann LeCun (現紐約大學教授)和他的同事們就發表了卷積神經網絡(Convolution NeuralNetworks, 簡稱CNN)的工作。在很長時間裏,CNN雖然在小規模的問題上,如手寫數字,取得過當時世界最好結果,但一直沒有取得巨大成功。這主要原因是,CNN在大規模圖像上效果不好,比如像素很多的自然圖片內容理解,所以沒有得到計算機視覺領域的足夠重視。

這個驚人的結果爲什麼在之前沒有發生? 原因當然包括算法的提升,比如dropout等防止過擬合技術,但最重要的是,GPU帶來的計算能力提升和更多的訓練數據。

 

1.2理解

\

(1)爲什麼F6神經元是84維 ?

\

原文是用於手寫字識別,手寫字範圍爲0-9共有10個字符,因此輸出OUTPUT層的節點共10個,可以把每個字符格式化爲12*7的圖像,如上圖,共有84個像元,像元的參數成分(即像素值)可以設爲1和-1,此時C5到F6是通過sigmod函數計算的,因此F6節點的值範圍爲-1到1,因此可以根據F6節點的值\和格式化圖像\(參數向量)的值距離,來判斷輸入圖像的類別,即通過徑向基函數:

\

輸入離參數向量越遠,RBF輸出的越大。

所有訓練參數和連接個數:

\

 

2AlexNet

本深度學習網絡是Alex和Hinton參加ILSVRC2012比賽的卷積網絡論文,本網絡結構也是開啓ImageNet數據集更大,更深CNN的開山之作,本文對CNN的一些改進成爲以後CNN網絡通用的結構;在一些報告中被稱爲Alex-net,之後在Imagenet上取得更好結果的ZF-net,SPP-net,VGG等網絡,都是在其基礎上修改得到。

原論文:ImageNet Classification with Deep ConvolutionalNeural Networks

2.1結構介紹

2.1.1ReLU非線性

模擬神經元輸出的標準函數一般是:tanh(x)或者sigmoid(x)函數,由於此類函數在x非常大或者非常小時,函數輸出基本不變,所以此類函數成爲飽和函數;f(x)=max(0,x),扭曲線性函數,是一種非線性的非飽和函數。在訓練時間上,非飽和函數比飽和函數訓練更快。而且這種扭曲線性函數,不但保留了非線性的表達能力,而且由於其具有線性性質(正值部分),相比tanh和sigmoid函數在誤差反向傳遞時,不會有由於非線性引起的梯度彌散形象(頂層誤差較大,由於逐層遞減誤差傳遞,引起低層誤差很小,導致深度網絡地層權值更新量很小,導致深度網絡局部最優)。ReLU的這些性質可以讓我們訓練更深的網絡。

 

ReLu相關知識:http://www.mamicode.com/info-detail-873243.html

2.1.2在多個GPU上訓練

單個GTX 580 GPU只有3GB內存,這限制了可以在其上訓練的網絡的最大規模。事實證明,120萬個訓練樣本才足以訓練網絡,這網絡太大了,不適合在一個GPU上訓練。因此我們將網絡分佈在兩個GPU上。目前的GPU特別適合跨GPU並行化,因爲它們能夠直接從另一個GPU的內存中讀出和寫入,不需要通過主機內存。我們採用的並行方案基本上是在每個GPU中放置一半核(或神經元),還有一個額外的技巧:GPU間的通訊只在某些層進行。這就是說,例如,第3層的核需要從第2層中所有核映射輸入。然而,第4層的核只需要從第3層中位於同一GPU的那些核映射輸入。選擇連接模式是一個交叉驗證的問題,但是這讓我們可以精確地調整通信量,直到它的計算量在可接受的部分。

2.1.3局部響應歸一化

ReLU具有所希望的特性,它們不需要輸入歸一化來防止它們達到飽和。如果至少有一些訓練樣例對ReLU產生了正輸入,學習就將發生在那個神經元。可是,我們仍然發現下列局部歸一化方案有助於一般化。用\表示點\處通過應用核 計算出的神經元激活度,然後應用ReLU非線性,響應歸一化活性\由下式給出

\

其中求和覆蓋了n個「相鄰的」位於相同空間位置的核映射,N是該層中的核總數。核映射的順序當然是任意的,且在訓練開始前就確定。受到在真實神經元中發現的類型啓發,這種響應歸一化實現了一種側向抑制,在使用不同覈計算神經元輸出的過程中創造對大激活度的競爭。常數k,n,α和β是超參數,它們的值要用驗證集來確定;我們使用\。我們在某些層應用ReLU歸一化後再應用這種歸一化(見3.5節)。
該方案與Jarrett等人的局部對比度歸一化方案具有一些相似之處[11],但我們的方案更正確的命名爲「亮度歸一化」,因爲我們不減去平均活躍度。響應歸一化將我們的top-1與top-5誤差率分別減少了1.4%與1.2%。我們也驗證了該方案在CIFAR-10數據集上的有效性:四層CNN不帶歸一化時的測試誤差率是13%,帶歸一化時是11%。

2.1.4重疊Pooling

CNN中的Pooling層總結了同一核映射中鄰近神經元組的輸出。傳統上,通過鄰接pooling單元總結的鄰近關係不重疊(例如,[17,11,4])。更準確地說,一個pooling層可以被認爲是由間隔s像素的pooling單元網格組成,每個網格總結出一個z×z大小的鄰近關係,都位於pooling單元的中心位置。若設s=z,我們得到傳統的局部pooling,正如常用於CNN中的那樣。若設s<z,則得到有重疊pool。整個網絡結構中,s=2,z=3,即pool區域的大小爲3*3,間隔爲2,即相鄰兩個pool,會重疊一個像素,這種方法使top-1和top-5錯誤率分別減少0.4%和0.3%,與s=2,z=2相比,它們池化結果有相同的維度,並且重疊pool在訓練過程中不容易產生過擬合。< p="">

2.1.5減少過擬合

我們的神經網絡結構有6000萬個參數。雖然ILSVRC的1000個類別,使得每個訓練樣本在圖像到標籤的映射上強加了10比特約束,事實上學習如此多的參數而不帶相當大的過擬合,這些類別是不夠的。下面,我們描述減少過擬合的兩種主要方法。

<1>數據擴充

對於圖像數據來說,減少過擬合問題,最早使用的同時也是最常用的方法就是,在保持數據標籤不變的情況下增大數據集。這裏我們使用了兩種不同的方法,它們都只需要很少的計算量,因此變換後的圖像並不需要存儲在硬盤中,而只需要存放在內存中即可。在我們的實現中,轉換圖像是由CPU上的Python代碼生成的,與此同時,在GPU上訓練先前產生的圖像,因此這些數據擴展方案是計算自由的。

(1)圖像平移和翻轉

我們從256×256的圖像中提取隨機的224×224的碎片(還有它們的水平反射),並在這些提取的碎片上訓練我們的網絡(這就是圖2中輸入圖像是224×224×3維的原因)。這使得我們的訓練集規模擴大了2048倍(32*32*2=2048),但是由此產生的訓練樣例一定高度地相互依賴。如果沒有這個方案,我們的網絡會有大量的過擬合,這將迫使我們使用小得多的網絡。在測試時,該網絡通過提取五個224×224的碎片(四個邊角碎片和中心碎片)連同它們的水平反射(因此總共是十個碎片)做出了預測,並在這十個碎片上來平均該網絡的softmax層做出的預測。

 

(2)調整RGB像素值

具體來說,我們在遍及整個ImageNet訓練集的RGB像素值集合中執行PCA。對於每個訓練圖像,我們成倍增加已有主成分,比例大小爲對應特徵值乘以一個從均值爲0,標準差爲0.1的高斯分佈中提取的隨機變量。這樣一來,對於每個RGB圖像像素\,我們增加下面這項:\

其中\\分別是RGB像素值的3×3協方差矩陣的第i個特徵向量與特徵值,是\前面提到的隨機變量。每個\對於特定訓練圖像的全部像素只提取一次,直到那個圖像再次被用於訓練,在那時它被重新提取。這個方案大致抓住了自然圖像的一個重要屬性,即,光照強度與顏色是變化的,而對象識別是不變的。該方案將top-1誤差率減少了1%以上。

 

<2>Dropout

結合許多不同模型的預測是一種非常成功的減少測試誤差的方式[1,3],但它先前訓練花了好幾天時間,似乎對於大型神經網絡來說太過昂貴。然而,有一個非常有效的模型組合版本,它在訓練中只花費兩倍於單模型的時間。最近推出的叫做「dropout」的技術[10],它做的就是以0.5的概率將每個隱層神經元的輸出設置爲零。以這種方式「dropped out」的神經元既不參與前向傳播,也不參與反向傳播。所以每次提出一個輸入,該神經網絡就嘗試一個不同的結構,但是所有這些結構之間共享權重。因爲神經元不能依賴於其他特定神經元而存在,所以這種技術降低了神經元複雜的互適應關係。正因如此,要被迫學習更爲魯棒的特徵,這些特徵在結合其他神經元的一些不同隨機子集時有用。在測試時,我們將所有神經元的輸出都僅僅只乘以0.5,對於獲取指數級dropout網絡產生的預測分佈的幾何平均值,這是一個合理的近似方法。
前兩個全連接層使用dropout。如果沒有dropout,我們的網絡會表現出大量的過擬合。dropout使收斂所需的迭代次數大致增加了一倍。

理解:每次選擇一半的節點進行連接構成網絡,只在被選中參與連接的節點上進行正向和反向傳播,如下圖,左側是全連接形式,右邊是一半節點構成的網絡:

\

爲什麼有助於防止過擬合呢?可以簡單地這樣解釋,運用了dropout的訓練過程,相當於訓練了很多個只有半數隱層單元的神經網絡(後面簡稱爲「半數網絡」),每一個這樣的半數網絡,都可以給出一個分類結果,這些結果有的是正確的,有的是錯誤的。隨着訓練的進行,大部分半數網絡都可以給出正確的分類結果,那麼少數的錯誤分類結果就不會對最終結果造成大的影響。

Dropout相關知識:http://www.mamicode.com/info-detail-517504.html

2.2總體結構

2.2.1總體介紹

\

 

該網絡包括八個帶權層;前五層是卷積層,剩下三層是全連接層。最後一個全連接層的輸出被送到一個1000-way的softmax層,其產生一個覆蓋1000類標籤的分佈。我們的網絡使得多分類的Logistic迴歸目標最大化,這相當於最大化了預測分佈下訓練樣本中正確標籤的對數概率平均值。

第二、第四和第五個卷積層的核只連接到前一個卷積層也位於同一GPU中的那些核映射上(見圖2)。第三個卷積層的核被連接到第二個卷積層中的所有核映射上。全連接層中的神經元被連接到前一層中所有的神經元上。響應歸一化層跟在第一、第二個卷積層後面。最大Pooling層,跟在響應歸一化層以及第五個卷積層之後。ReLU非線性應用於每個卷積層及全連接層的輸出。
第一個卷積層利用96個大小爲11×11×3、步長爲4個像素(這是同一核映射中鄰近神經元的感受野中心之間的距離)的核,來對大小爲224×224×3的輸入圖像進行濾波。第二個卷積層需要將第一個卷積層的(響應歸一化及池化的)輸出作爲自己的輸入,且利用256個大小爲5×5×48的核對其進行濾波(注:48對應第一層得到的48個map,即第一層的所有map卷積生成第二層的一個map圖)。第三、第四和第五個卷積層彼此相連,沒有任何介於中間的pooling層與歸一化層。第三個卷積層有384個大小爲3×3×256的核被連接到第二個卷積層的(歸一化的、池化的)輸出。第四個卷積層擁有384個大小爲3×3×192的核,第五個卷積層擁有256個大小爲3×3×192的核。全連接層都各有4096個神經元。

2.2.2各層運算、維度和參數

\

\

 

\

 

\

 

\

\

\

\

\

\

 

 

 

2.3學習過程

我們使用隨機梯度下降法和一批大小爲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上花了五到六天。