1. 程式人生 > >AlexNet論文總結

AlexNet論文總結

part 過去 主機 architect 浪潮 推理 手動 near 之前

目錄

  • 0. 論文鏈接
  • 1. 概述
  • 2. 對數據集的處理
  • 3. 網絡模型
    • 3.1 ReLU Nonlinearity
    • 3.2 Training on multiple GPUs
    • 3.3 Local Response Normalization
    • 3.4 Overlapping Pooling
    • 3.5 Overall Architecture
  • 4. 減少過擬合
    • 4.1 Data Augmentation
    • 4.2 dropout
  • 5. details of learning
  • 效果

@

0. 論文鏈接

1. 概述

??AlexNet算是第一個把CNN應用到計算機視覺領域並且十分成功。從這開始之後,開啟了深度學習的浪潮,計算機視覺的主要方向也是利用深度學習來解決一系列問題,本文提出了一種5個卷積層(某些層跟著池化層),3個全連接層最後跟著1000-way的softmax,共6kw個參數650000個神經元。在imagenet lsvrc-2010中,此模型Top-1的錯誤率為37.5%,Top-5錯誤率為17%,遠好於過去所用的算法水平,網絡有四個亮點使用1,RELU,2利用多個GPU,3.使用LRN(Local Response Normalization)4.Overlapping Pooling,也使用了一些減少過擬合的方法。

2. 對數據集的處理

??ImageNet數據集的圖片分辨率各有不同。我們對圖像統一下采樣到256*256分辨率。除了把每個像素減去均值,沒有做別的預處理,采用原生RGB像素值作為輸入。

3. 網絡模型

??網絡包含8個學習模型,其中包括5個卷積層與3個全連接層,下圖為網絡結構模型圖。
技術分享圖片

3.1 ReLU Nonlinearity

??以往的激活函數通常用的是sigmod或者tanh,他們有一個問題就是就算做了標準化,還是很容易“飽和”(saturating),即數值過大,斜率便不會再增長了。 因此作者使用了ReLU函數,即Rectified Linear Units,使用ReLU作為深度神經網絡的激活函數是訓練速度是遠遠快於tanh的,下圖是文章給的在CART兩者的配圖:
技術分享圖片

3.2 Training on multiple GPUs

??一個 GTX 580 GPU 只有 3GB內存, 這限制了可訓練神經網絡的最大容量。所以作者把網絡放在兩個GPU中訓練。當前的GPU很適合跨GP並行,它們可以互相直接讀寫不必經過主機內存。作者采取的並行化方式是 每個GPU放一半的核,另外還有一個小技巧:GPU只在特定層之間通信。例如 第三層的核以全部第二層的的特征圖作為輸入,第四層的核僅以第三層中同一GPU的特征圖作為輸入。選擇這種鏈接方式不利於交叉驗證,但是可以精確的調整通信的數量直到達到可接受的計算量。

3.3 Local Response Normalization

??ReLU 不需要輸入歸一化解決飽和問題。只要ReLU的輸入大於0就可以學習。但是 LRN( local normalization scheme )有利於增加泛化能力。局部響應歸一化原理是仿造生物學上活躍的神經元對相鄰神經元的抑制現象(側抑制),響應比較大的值變得更大,抑制其他反饋比較小的神經元,增強了模型的泛化能力。
\[ b_{x,y}^{i} = a_{x, y}^{i} / (k + \alpha \sum_{j = max(0, i-n/2)}^{min(N-1,i+n/2)} (a_{x, y}^{j})^{2})^{\beta} \]


\(a_{x, y}^{i}\)是把第\(i\)個核用在\((x,y)\)位置,\(b\)是歸一化以後的值。 上述公式中的和是\(n\)個相鄰的核映射(卷積完之後的特征)到同一個地方的值之和。 \(N\)是在這一層的核的總個數。
核映射的順序是隨意的並且是在訓練前就確定的。 常數\(k,n,α,β\)是超參數,用驗證集得到的,文中用的是\(k = 2, n = 5, \alpha = 10^{-4}, \beta = 0.75\)
??為什麽可以響應比較大的值變得更大,抑制其他反饋比較小的神經元:待推理

3.4 Overlapping Pooling

??相比於正常池化(步長s=2,窗口z=2) 重疊池化(步長s=2,窗口z=3) 可以減少top-1, top-5分別為0.4% 和0.3%。重疊池化可以比避免過擬合。

3.5 Overall Architecture

技術分享圖片

??AlexNet網絡包含8個帶權重的層,前五層是卷積層,後三層是全連接層。最後的全連接層的輸出是1000維softmax的輸入,對應著1000個類別。

??第2,4,5卷積層的核只與位於同一GPU上的前一層的核映射相連接。第3卷積層的核與第2層的所有核映射相連。全連接層的神經元與前一層的所有神經元相連。第1,2卷積層之後是響應歸一化層。最大池化層在響應歸一化層和第5卷積層之後。ReLU非線性應用在每個卷積層和全連接層的輸出上

??第1卷積層使用96個核對224 × 224 × 3的輸入圖像進行濾波,核大小為11 × 11 × 3,步長是4個像素(核映射中相鄰神經元感受野中心之間的距離)。第2卷積層使用用第1卷積層的輸出(響應歸一化和池化)作為輸入,並使用256個核進行濾波,核大小為5 × 5 × 48。第3,4,5卷積層互相連接,中間沒有接入池化層或歸一化層。第3卷積層有384個核,核大小為3 × 3 × 256,與第2卷積層的輸出(歸一化的,池化的)相連。第4卷積層有384個核,核大小為3 × 3 × 192,第5卷積層有256個核,核大小為3 × 3 × 192。每個全連接層有4096個神經元。

4. 減少過擬合

??AlexNet共6kw個參數650000個神經元,所以肯定是需要控制過擬合的。

4.1 Data Augmentation

??圖像數據上最簡單常用的用來減少過擬合的方法是使用標簽保留變換來人工增大數據集,我們使用了兩種在cpu上通過小型的計算完成的圖像變換,當gpu在進行訓練時cpu就可以進行這種變換,因此並不會對整體帶來負擔。

??第一種是在256256上隨機取224224的部分和他們的水平翻轉,雖然這些增加的部分有比較高的相關性,但是沒有這些的話alexnet就會有很高的過擬合,也會逼迫我們使用更小的網絡,在測試的時候,我們在四角和中心取五個224*224的部分和他們的水平翻轉也就是一共10個部分,然後計算他們的softmax平均值。

??第二種方式是改變訓練圖集中的rgb通道的強度,我們在Imagenet的訓練集上做pca,對每張圖片我們加上主成分的倍數,即大小成正比的對應特征值乘以一個隨機變量,隨機變量通過均值為0,標準差為0.1的高斯分布得到。因此對於每幅RGB圖像像素Ixy=

\[[I_{xy}^{R}, I_{x,y}^{G}, I_{x,y}^{B}]^{T}\]

,我們加上
\[[p_{1},p_{2},p_{3}][\alpha_{1}\lambda_{1},\alpha_{2}\lambda_{2},\alpha_{3}\lambda_{3}]^{T}\]

\(p_i\)\(λ_i\)分別是RGB像素值3 × 3協方差矩陣的第i個特征向量和特征值,\(α_i\)是前面提到的隨機變量。對於某個訓練圖像的所有像素,每個\(α_i\)只獲取一次,直到圖像進行下一次訓練時才重新獲取。這個方案近似抓住了自然圖像的一個重要特性,即降低了光照和顏色和燈光對結果的影響。這個方案減少了top 1錯誤率1%以上。

4.2 dropout

??dropout會以0.5的概率對每個隱層神經元的輸出設為0。那些“失活的”的神經元不再進行前向傳播並且不參與反向傳播。因此每次輸入時,神經網絡會采樣一個不同的架構,但所有架構共享權重。這個技術減少了復雜的神經元互適應,因為一個神經元不能依賴特定的其它神經元的存在。因此,神經元被強迫學習更魯棒的特征,它在與許多不同的其它神經元的隨機子集結合時是有用的。在測試時,我們使用所有的神經元但它們的輸出乘以0.5.相當於多個模型集成學習,可以很有效的抑制過擬合。

5. details of learning

??使用能動隨機梯度下降,batch大小128,momentum0.9 權重衰減0.0005 少量的權重衰減對於模型的學習是重要的。換句話說,權重衰減不僅僅是一個正則項:它減少了模型的訓練誤差。權重w的更新規則是
\[ v_{i+1} := 0.9 * v_i - 0.0005 * \epsilon * w_i - \epsilon *<\frac{\partial L}{\partial w}|_{w_i}>_{D_i} \]
\[ w_{i+1} := w_i +v_{i+1} \]
其中\(i\)為叠代次數的下標,\(v\)為能動值,\(\epsilon\)為學習率,\(<\frac{\partial L}{\partial w}|_{w_i}>_{D_i}\)是第i個batch上關於\(w_i\)的偏導數的均值

??我們使用均值為0,標準差為0.01的高斯分布對每一層的權重進行初始化。我們在第2,4,5卷積層和全連接隱層將神經元偏置初始化為常量1。這個初始化通過為ReLU提供正輸入加速了學習的早期階段。我們在剩下的層將神經元偏置初始化為0。

??我們對所有的層使用相等的學習率,這個是在整個訓練過程中我們手動調整得到的。當驗證誤差在當前的學習率下停止提供時,我們遵循啟發式的方法將學習率除以10。學習率初始化為0.01,在訓練停止之前降低三次。我們在120萬圖像的訓練數據集上訓練神經網絡大約90個循環,在兩個NVIDIA GTX 580 3GB GPU上花費了五到六天。

效果

技術分享圖片

AlexNet論文總結