深度學習筆記(三):BatchNorm(BN)層


學習記錄:

  深度學習筆記(一):卷積層+激活函數+池化層+全連接層
  深度學習筆記(二):激活函數總結
  深度學習筆記(三):BatchNorm(BN)層
  深度學習筆記(四):梯度下降法與局部最優解
  深度學習筆記(五):欠擬合、過擬合


   防止過擬合(一):正則化
   防止過擬合(二):Dropout
   防止過擬合(三):數據增強


一、背景

  卷積神經網絡的出現,網絡參數量大大減低,使得幾十層的深層網絡成爲可能。然而,在殘差網絡出現之前,網絡的加深使得網絡訓練變得非常不穩定,甚至出現網絡長時間不更新或者不收斂的情形,同時網絡對超參數比較敏感,超參數的微量擾動也會導致網絡的訓練軌跡完全改變。

二、提出

  2015 年,Google 研究人員Sergey Ioffe等提出了一種參數標準化(Normalize)的手段,並基於參數標準化設計了 Batch Nomalization(簡稱 BatchNorm或 BN)層 。BN層提出後:
(1)使得網絡的超參數的設定更加自由,比如更大的學習率,更隨意的網絡初始化等,同時網絡的收斂速度更快,性能也更好。
(2)廣泛地應用在各種深度網絡模型上,卷積層、BN 層,ReLU 層、池化層一度成爲網絡模型的標配單元,通過堆疊 Conv-BN-ReLU-Pooling 方式往往可以獲得不錯的模型性能。

三、原理

  網絡層的輸入x分佈相近,並且分佈在較小範圍內時(如 0 附近),更有利於函數的迭代優化。那麼如何保證輸入x的分佈相近呢?
數據標準化可以實現此目的,通過數據標準化操作可以將數據x映射x^\widehat{x}
在這裏插入圖片描述
  其中μr\mu_rδr2\delta_r^2來自統計的所有數據x的均值和方差,ϵ\epsilon是爲防止出現除 0的錯誤而設置的較小數,比如ϵ=1e8\epsilon=1e-8
  很容易很看出來:上面的公式表示的是正太分佈。也就是說,通過上面的公式計算,可以將原本隨機分佈的輸入數據x,轉化成按正太分佈分佈的數據x^\widehat{x},從而使得輸入網絡的數據分佈較近,有利於網絡的迭代優化。

四、計算

  要使得原本的輸入x映射到正太分佈的x^\widehat{x},就需要分別計算出μr\mu_rδr2\delta_r^2的值,然後帶入下面公式,完成轉換。
(1)訓練階段
  通過統計可以得到Batch組數據的均值μB\mu_B和方差δB2\delta_B^2,計算公式如下:
在這裏插入圖片描述
  其中,m爲Batch樣本數。在實際應用過程中,μB\mu_BδB2\delta_B^2近似於μr\mu_rδr2\delta_r^2。計算時,可直接用μB\mu_BδB2\delta_B^2代替。
  因此,在訓練階段,通過下面公式標準化輸入:
在這裏插入圖片描述
(2)測試階段
  在測試階段,μB\mu_BδB2\delta_B^2計算原理和訓練階段相同。需要注意的是,這裏的xix_i是測試集的數據,m是測試集一次輸入的batch數。
  因此,在測試階段,通過下面公式標準化輸入:
在這裏插入圖片描述
注意:測試階段也進行標準化,並不是爲了去優化訓練,只是爲了和訓練解階段保持一致,這樣得到的測試結果纔有意義。

五、Scale and Shift

  上述的標準化運算並沒有引入額外的待優化變量,μB\mu_BδB2\delta_B^2 均由統計得到,不需要參與梯度更新。實際上,爲了提高 BN 層的表達能力,BN 層作者引入了“scale and shift”技巧,將x^\widehat{x}變量再次映射變換:
在這裏插入圖片描述
  其中γ\gamma參數實現對標準化後的x^\widehat{x}再次進行縮放,β\beta參數實現對標準化的x^\widehat{x}進行平移。不同的是,γ\gammaβ\beta參數均由反向傳播算法自動優化,實現網絡層“按需”縮放平移數據的分佈的目的。
於是,在測試階段,標準化公式與縮放平移結合變爲:
在這裏插入圖片描述

六、BN層實現

  在 TensorFlow 中,通過 layers.BatchNormalization()類可以非常方便地實現 BN 層:

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