淺議Alexnet網路

HL_VISION發表於2018-05-10

前不久讀了Alexnet的文章,做了一點筆記,分享給大家,僅供參考。

第一次寫部落格,不到之處,請見諒。 

1、資料集:

  • ImageNet資料集包含有大概22000種類別共150多萬帶標籤的高解析度影象
  • ImageNet大規模視覺識別挑戰(ImageNet Large-Scale Visual Recognition Challenge,ILSVRC),比賽採用ImageNet的子集,共包含一千個類別,每個類別包含大約1000幅影象。總的來說,大約有120萬張訓練影象,5萬張驗證影象以及15萬張測試影象。
  • 資料預處理:
    • ImageNet包含不同解析度的影象,但是本文的模型要求固定的輸入維度。
  1. 將這些影象下采樣為256x256 。
  2. 給定一幅矩形影象,本文采用的方法是首先重新調整影象使得短邊長度為256
  3. 然後裁剪出中央256x256 的區域
  4. 除了將影象減去訓練集的均值影象(訓練集和測試集都減去訓練集的均值影象),本文不做任何其他影象預處理
  5. 因此本文直接在每個畫素的原始RGB值上進行訓練

2、網路結構:

  • ReLU非線性函式(ReLU Nonlinearity)
      • ReLU的有效性體現在兩個方面:   
      • 1. 克服梯度消失的問題
      • 2. 提高訓練速度

而這兩個方面是相輔相成的,因為克服了梯度消失問題,所以訓練才會快。

  • 使用ReLUs的深度卷積神經網路訓練速度比同樣情況下使用tanh單元的速度快好幾倍

上圖表示使用特定的四層卷積網路在資料集CIFAR-10上達到25%錯誤率所需的迭代次數。

這個圖表明如果使用傳統的飽和神經元模型我們不可能利用這麼大規模的神經網路對本文工作進行試驗。

  • 多GPU訓練(Training on Multiple GPUs)
    • 兩塊GTX580,共6G記憶體
    • 兩塊GPU進行交叉GPU並行,因為它們可以直接相互讀寫記憶體,而不用經過主機記憶體
    • 技巧
  1. 每一個GPU上放二分之一的核(或者神經元)
  2. 只有某些層才能進行GPU之間的通訊,

例如第三層的輸入為第二層的所有特徵圖。但是,第四層的輸入僅僅是第三層在同一GPU上的特徵圖

  • 這種結構降低了錯誤率,top-1和top-5錯誤率分別下降了1.7%和1.2%;

兩塊GPU網路訓練時間比一個GPU的時間都要略少

 

  • 區域性響應歸一化(Local Response Normalization)
  • a表示使用核i作用於(x,y)然後再採用ReLU非線性函式計算得到的活躍度,那麼響應標準化活躍b
  • 區域性標準化方案有助於增加泛化效能

 

  • 重疊池化(Overlapping Pooling)
    • s=2(間隔),z=3(濾波器大小).與無重疊的s=z=2相比,這一模式在產生相同維度的輸出時分別將TOP1和TOP5降低了0.4%和0.3%
    • 採用有重疊的池化能稍稍讓模型更難過擬合

 

  • 整體結構(Overall Architecture)
    • 八個有權值的層:前五層是卷積層,剩下的三層是全連線層。最後一個全連線層的輸出傳遞給一個1000路的softmax層,這個softmax產生一個對1000類標籤的分佈

 
  • 第二、四、五層卷積層的核只和同一個GPU上的前層的核特徵圖相連。
  • 第三層卷積層和第二層所有的核特徵圖相連線。
  • 全連線層中的神經元和前一層中的所有神經元相連線。
  • 響應歸一化層跟著第一和第二層卷積層。
  • 最大池化層(max-pooling),既跟著響應歸一化層也跟著第五層卷積層。
  • ReLU非線性變換應用於每一個卷積和全連線層的輸出。

 

  • 第一層卷積層使用96個大小為11x11x3的卷積核對224x224x3的輸入影象以4個畫素為步長(這是核特徵圖中相鄰神經元感受域中心之間的距離)進行濾波。
  • 第二層卷積層將第一層卷積層的輸出(經過響應歸一化和池化)作為輸入,並使用256個大小為5x5x48的核對它進行濾波。
  • 第三層、第四層和第五層的卷積層在沒有任何池化或者歸一化層介於其中的情況下相互連線。
  • 第三層卷積層有384個大小為3x3x256的核與第二層卷積層的輸出(已歸一化和池化)相連。
  • 第四層卷積層有384個大小為3x3x192的核,第五層卷積層有256個大小為3 × 3 × 192 的核。
  • 每個全連線層有4096個神經元。

 

3、降低過擬合

  • 資料增強
    • 目的:減少過擬合
    • 本文中利用GPU訓練先前一批影象的同時,使用CPU執行Python程式碼生成轉換影象。因此這些資料增強方法實際上是不用消耗計算資源的
      • 第一種資料增強的形式包括生成平移影象和水平翻轉影象。做法就是從256x256的影象中提取隨機的224x224大小的塊(以及它們的水平翻轉),然後基於這些提取的塊訓練網路。這個讓我們的訓練集增大了2048倍((256-224)2*2=2048)
      • 第二種資料增強的形式包括改變訓練影象的RGB通道的強度。這個方案得到了自然影象的一個重要的性質,也就是,改變光照的顏色和強度,目標的特性是不變的。
  • Dropout
    • 它將每一個隱藏神經元的輸出以50%的概率設為0
    • 在圖2中的前兩個全連線層使用dropout。
    • Dropout大致地使達到收斂的迭代次數增加了一倍。

 

4、學習細節

  • 本文使用隨機梯度下降來訓練模型,同時設定batch size大小為128,0.9倍動量以及0.0005的權值衰減
  • 本文對每一層的權值使用均值為0、標準差為0.01的高斯分佈進行初始化。對第二層、第四層、第五層卷積層以及全連線的隱藏層使用常數1初始化神經元偏置項。這個初始化通過給ReLUs提供正輸入加快了學習的初始階段。本文對剩餘的層使用常數0初始化神經元偏置項。

值得注意的是BatchNorm的出現,很大程度上替代了LRNdropout,現代網路結構中,已經很少採用LRNdropout了,VGGNet中的LRN並沒有提高效能,所以VGGNet並沒有採用LRN,ResNet中由於在每個卷積層後面新增了Batch Norm層,所以也沒有采dropout

本文參考:
https://blog.csdn.net/qianqing13579/article/details/71381016?locationNum=15&fps=1

https://blog.csdn.net/chaipp0607/article/details/72847422
對兩位表示感謝

相關文章