AlexNet : ImageNet Classification with Deep Convolutional Neural Networks

1.摘要
       2010年ImageNet LSVRC -2010競賽中,AlexNet用來在1.2millon高分辨率圖片上辨別1000個類別,並取得了top1,top5錯誤率爲37.5%和17%。取得了當前的最高水平。該網絡使用了60millon參數和650000個神經元,包含5個卷積層 ,3個全連接層。爲了使訓練更加快速,我們使用了非飽和神經元和兩個GPU進行運算。爲了減少過擬合,文中首次提出了dropout正則化方法。在ILSVRC2012年的比賽中,我們的top5錯誤率達到了15.3%,遠低於第二名的26.3%。


2.數據集:
      ImageNet數據集包括15millon張高分辨率圖片,22000個類別,ILSVRC 使用ImageNet數據集中1000個類別,且每個類別大約1000張圖片。因此,大約有1.2millon訓練圖片,50000張驗證集,150000張測試集。ILLSVRC-2010是ILSVRC系列比賽中唯一一個提供測試集的,因此我們在2010的比賽中取得了最好的效果。
     實驗中,我們會經常使用top1,top5錯誤率,top5錯誤率是對一個圖片類別預測的前五個類別不包含正確的比例.
     ImageNet中包含不同分辨率的圖片,但是我們的系統需要輸入統一的尺寸。所以,我們採用下采樣得到固定大小256*256大小的圖片。下采樣的方法是:我們首先重新縮放圖像,使得短邊長度爲256,然後從得到的圖像中裁剪出中央256×256的一片,除了遍歷訓練集從每個像素中減去平均活躍度外,我們沒有以任何其他方式預處理圖像。所以我們用這些像素(中央那一片的)原始RGB值訓練網絡。(這裏也就是對圖像的每個像素進行中心化處理,即對每個圖像對應像素的R,G,B三個值分別求均值,然後每個圖像的每個像素的R值-R平均,G值-G平均,B值-B平均)


3.結構
   AlexNet包括5個卷積層,3個全連接層

3.1Relu不飽和非線性激活函數

      3.1.1爲什麼我們要引入激活函數?

       如果不用激勵函數(其實相當於激勵函數是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函數,很容易驗證,無論你神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。非線性激活函數的作用就是增加神經網絡非線性特性,進而增加其表示能力。

       3.1.2爲什麼要使用relu(不飽和非線性激活函數)?而使用sigmoid,tanh?

       sigmoid神經元有一個不好的特性,就是當神經元的激活在接近0或1處時會飽和:在這些區域,梯度幾乎爲0。回憶一下,在反向傳播的時候,這個(局部)梯度將會與整個損失函數關於該門單元輸出的梯度相乘。因此,如果局部梯度非常小,那麼相乘的結果也會接近零,這會有效地“殺死”梯度,幾乎就有沒有信號通過神經元傳到權重再到數據了。還有,爲了防止飽和,必須對於權重矩陣初始化特別留意。比如,如果初始化權重過大,那麼大多數神經元將會飽和,導致網絡就幾乎不學習了。

       而ReLU線性部分能很好的傳播梯度,不會產生梯度消失問題。ReLu只有負值纔會被稀疏掉,即引入的稀疏性是可以訓練調節的,是動態變化的,且減少了參數的相互依存關係,緩解了過擬合問題的發生。

      3.1.3生物神經的稀疏激活性

     在神經科學方面,除了新的激活頻率函數之外,神經科學家還發現了神經元的稀疏激活性。
     還是2001年,Attwell等人基於大腦能量消耗的觀察學習上,推測神經元編碼工作方式具有稀疏性和分佈性。
     2003年Lennie等人估測大腦同時被激活的神經元只有1~4%,進一步表明神經元工作的稀疏性。
     從信號方面來看,即神經元同時只對輸入信號的少部分選擇性響應,大量信號被刻意的屏蔽了,這樣可以提高學習的精度,更好更快地提取稀疏特徵。
     從這個角度來看,在經驗規則的初始化W之後,傳統的Sigmoid系函數同時近乎有一半的神經元被激活,這不符合神經科學的研究,而且會給深度網絡訓練帶來巨大問題。
     因而, 校正函數max(0,x)成了近似符合該模型的最大贏家。

     3.1.4 這種稀疏性有何作用?

      換句話說,我們爲什麼需要讓神經元稀疏?不妨舉個例子來說明。當看名偵探柯南的時候,我們可以根據故事情節進行思考和推理,這時用到的是我們的大腦左半球;而當看蒙面唱將時,我們可以跟着歌手一起哼唱,這時用到的則是我們的右半球。左半球側重理性思維,而右半球側重感性思維。也就是說,當我們在進行運算或者欣賞時,都會有一部分神經元處於激活或是抑制狀態,可以說是各司其職。再比如,生病了去醫院看病,檢查報告裏面上百項指標,但跟病情相關的通常只有那麼幾個。與之類似,當訓練一個深度分類模型的時候,和目標相關的特徵往往也就那麼幾個,因此通過ReLU實現稀疏後的模型能夠更好地挖掘相關特徵,擬合訓練數據。

  

 綜上:我們引入relu非線性激活函數有兩個原因:

    1.採用sigmoid等函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而採用Relu激活函數,整個過程的計算量節省很多。

    2.ReLU由於非負區間的梯度爲常數,因此不存在梯度消失問題(Vanishing Gradient Problem),使得模型的收斂速度維持在一個穩定狀態

    3.Relu會使一部分神經元的輸出爲0,這樣就造成了網絡的稀疏性,ReLU實現稀疏後的模型能夠更好地挖掘相關特徵,擬合訓練數據


3.2在兩個GPU上訓練

       受當時的條件限制,AlexNet採用2個GTX 580 GPU(3G memory)進行訓練,我們採用的方案基本上是在每個GPU中放置一半核(或神經元),GPU間的通訊只在某些層進行,例如,第3層的核需要從第2層中所有核映射輸入。然而,第4層的核只需要從第3層中位於同一GPU的那些核映射輸入,但其實在現有的條件下,使用單個GPU就可以運算,因此,在這裏我們就不必過多討論。

3.3Local Response Normalization(局部響應歸一化):

     3.3.1什麼叫做魯棒性:

      魯棒性我認爲指的是對個別異常點的反應不敏感,即個別異常點對分類器設計(神經網絡的連接權)的影響不大。

      這個方法源自生物學的“側抑制”。就是指被激活的神經元會抑制相鄰神經元。歸一化的目的就是抑制。特別是對於Relu函數的抑制作用特別大。用在卷積層(卷積後再激活)之後,因爲激活函數是一個非線性變換,會影響數據的分佈,激活函數改變了數據分佈,就需要進行歸一化。

      LRN處理類似於生物神經元的橫向抑制機制,可以理解爲將局部響應最大的再放大,並抑制其他響應較小的(我的理解這是放大局部顯著特徵,作用還是提高魯棒性)

   

     此處論文中給的公式爲:

   

 表示第i個核在位置(x,y)運用Relu非線性神經元的輸出,n是同一個位置上臨近位置kernel map的數目,N是kernel總數,

         k是偏置,是放縮比例(因爲不一定所有的數據本身的分佈都是以0爲中心的,如果強制歸一化就會出問題,所以稍微增加一點偏移和放縮)

          舉個例子:i=10,N=96(經過卷積與激活之後信道的維度),n=4表示第i=10個卷積核在位置x,y處輸出爲a,用a/第8/9/10/11/12在位置x,y處提取到的特徵之和

   如下圖:下面是一批卷積(包括激活)後的特徵圖,紅點是正在歸一化的點,該點值等於與其他相鄰的特徵圖上的對應位置的點(藍點)歸一化後的輸出值

     

   通常使用 k = 2,n= 5,α= 10-4, andβ= 0:75

   響應歸一化將我們的top-1與top-5誤差率分別減少了1.4%與1.2%

不妨我們舉個極端的例子,即當很大時, 當a10很大時,a9很小,n=N-1,則a9,a10都除以所有的激活值,很顯然,a9很小,a10較大,除以相同的值,a9變小很多,a10並沒有比a9小的那麼多


3.4重疊pooling

    AlexNet採用的步長s小於池化核的大小,這樣池化層的輸出之間會有重疊和覆蓋,提升了特徵的豐富性


3.5總體結構
  我這裏介紹的是採用單個GPU進行訓練的,因爲現有的條件已經可以實現
    conv1:輸入-卷積-relu-LRN-max pooling
    conv2:conv-relu-LRN-max pooling
    conv3:conv-relu
    conv4:conv-relu
    conv5:conv-relu-max pooling
    fc1:Fc-relu-dropout
    fc2:Fc-relu-dropout
    fc3:softmax
下面是論文中的圖,採用的是兩個GPU

  



我們現實中實現的是下面的圖



4.減少過擬合

AlexNet網絡有60millon參數,因此過擬合問題是我們急需考慮的,下面提供兩種方式來減少過擬合

此處我先解釋一下什麼叫過擬合:
  當學習器把訓練樣本學的太好了,很可能把訓練樣本身的一些特點當成所有潛在樣本都具有的一些性質,這樣會導致泛化性能下降,這種現象就是過擬合

       例如: 當用訓練器去識別樹葉時,它把樹葉具有鋸齒特徵也學了下來,而認爲沒有鋸齒的都不是樹葉,這就是學的太好了,導致不能適用於所有的樣本

當使用過多參數的時候,以至於太適應當前情況,而不適用於一般情況,也就是不能很好的預測未來。


4.1增加數據

最常見的解決過擬合的方法是人工增大數據集,我們使用兩種方式來增加數據集。

        第一種由圖片轉化和水平翻轉實現,我們從256*256中抽出224*224圖片,並進行反轉,得到(256-224)*(256-224)*2=2048,因此數據集擴大了2048倍,但是由此產生的數據有一定的相互依賴性。

  第二種是改變訓練圖片中rgb通道的強度,我們在遍歷ImageNet訓練集的RGB像素值集合中使用PCA?

 此處使用PCA達到降維的目的,具體分析看http://blog.codinglabs.org/articles/pca-tutorial.html


4.2dropout正則化

       首先解釋什麼是dropout: dropout會遍歷神經網絡的每一層,並設置消除神經網絡節點的概率,假設,神經網絡的每一層的每一個節點都以拋硬幣的方式設置概率,每個節點得以消除和保留的概率都是0.5,設置完節點概率,我們會消除一些節點,然後刪掉從該節點近處的連線,最後得到一個節點更少,規模更小的網絡,然後用反向傳播進行訓練,右邊就是網絡節點精簡後的一個樣本,對於每一個樣本,我們都採用精簡後的神經網絡來訓練它.因此使用dropout隨機忽略神經元減少過擬合。

      dropout在全連接層使用,爲什麼dropout會可以減少過擬合?

     通過dropout,該單元的輸入神經與幾乎被消除,因此,輸出不能依靠任何一個特徵,因爲該單元的任何一個輸入都有可能被隨機清除,我不願意把所有的賭注都放在一個節點上,不願意給任何一個輸入加入太多的權重,因爲它有可能被刪除,因此該神經網絡將以這種方式傳播,併爲每個單元的四個輸入增加一點權重,通過傳播所有權重,dropout會產生收縮權重的平方範數的效果,和L2範式類似,dropout的結果是它會壓縮權重,並完成一些預防過擬合的外層正則化,爲了防止過擬合,當某一層的節點數過多(更容易過擬合),設置keep-prob較低,對於最後一層,keep-prob=1,意味着保留其所有的節點現實中,我們對輸入層不用dropout。


5.使用momentum 梯度下降法進行訓練

  momentum梯度下降法的運行速度幾乎快於普通的梯度下降算法,其基本思想時計算梯度的指數加權平均,那麼什麼叫做指數的加權平均?點擊

http://blog.csdn.net/liyinhua123456/article/details/78625764

並利用該梯度更新權重。使用梯度的指數加權平均,可以減少縱軸的幅度,而不改變橫軸的幅度,使得損失函數儘快降到最小,儘快得到最優的模型,之前的普通的標準的梯度下降法就類似與人喝醉酒了一樣,當他站在山頂,往下走的時候,經常出現搖搖晃晃,偏離正確的路線很遠,因此,到達山底的速度也會很慢。而momentum梯度下降,就類似於一個石頭從山頂滾下,很少出現左右搖晃,即使搖晃,幅度也很小,因此能很快到達山底。這樣也就形象的表示了momentum與普通的梯度下降法的區別了。


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章