Batch Normalization原理總結

Batch Normalization 是Google於2015年提出的一種歸一化方法。

BN帶來以下優點:

  • 加速訓練過程;
  • 可以使用較大的學習率;
  • 允許在深層網絡中使用sigmoid這種易導致梯度消失的激活函數;
  • 具有輕微地正則化效果,以此可以降低dropout的使用。

ICS(Internal Covariate Shift)

我們知道在網絡訓練過程中,隨着上一層參數的改變,下一層輸入的分佈也會發生變化,這樣就會導致每一層的數據分佈都可能是不一致的,系統就需要花費額外的精力去補償這部分輸入分佈變化帶來的損失而不是專心於模型的分類問題上。當模型越深時,這種情況更甚,會減緩模型的收斂速度,影響模型的整體性能。這種由於網絡參數改變導致輸入分佈變化的現象被稱爲“Internal Covariate Shift”(ICS)。

爲了使得輸入的分佈保持一致,我們可以對輸入進行規範化操作,即使得數據的均值爲0,方差爲1。假如某一層的輸入爲

其中x(i)表示第i維的向量,共d維,可以對輸入的每一維都進行如下規範化:

均值和方差是在整個訓練集上計算得到的。這種做法雖然可以對輸入進行規範化了,但是這種強行加入的操作又可能帶來另一個問題——影響了上一層學到的表示。我們希望加入的操作一邊規範化改變分佈,一邊又希望有機會還原原來的分佈,這裏引用魏秀參的解釋,就是提高了網絡的capacity(容納)能力,網絡既可以改變輸入分佈,讓其Nomalize,又可以還原原來的輸入(保持學習到的表示),就是提高了capacity能力。

爲了解決這個這個問題,引入了兩個可學習的參數,γ和β。這兩個參數應用到規範化後的輸出上:

我們注意到,只要這兩個參數取合適的值,就可以還原原來的輸入。

前面提到,用來規範化的均值和方差是在整個訓練集上計算得到的,但是這在使用SGD訓練網絡的時候是不切實際的,因此做出如下簡化:使用每個mini-batch來計算均值和方差。

BN算法的步驟如下:

 

在網絡中,Batch Normalization一般應用於非線性層的前面。

 

爲什麼 Batch Normalization 有效

Batch Normalization可以有效的加快模型的訓練,以及使模型訓練過程更穩定,Google對此的解釋是BN可以減少internal convariate shift(ICS)。

而《How Does Batch Normalization Help Optimization》一文提出BN之所以有效,其根本原因是BN層使得網絡的loss landscape變得更加平滑,而不是減少了ICS。

文章指出,BN能夠work的真正原因是它重新參數化了優化問題,使得loss landscape更加的平滑

通常,在沒有BN的網絡中,損失函數不僅非凸,還有很多的平坦和尖銳區域。這些使得以梯度下降爲基礎的訓練算法表現得很不穩定,需要對學習率和參數的初始化認真選擇。而加了BN層後,loss landscape變得更加平滑,梯度的方向更加穩定和可預測,網絡可以接受較大範圍的初始學習率,對參數的初始化也不會很敏感。

下面的兩張圖可以類比普通的網絡和加入BN的網絡loss函數情況:

                        

 

 

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