Batch Normalization的作用及原理

聲明

由於學習本篇博客的內容時翻閱了很多資源,如知乎、他人博客等,很多內容已經不記得是在哪學到的了,也沒有辦法一一列舉了,能列舉的我儘量列舉,如有侵權,請聯繫我刪除,謝謝。

BN是什麼[1]

BN是谷歌在這篇文章中提出的。具體的操作是,在每次SGD時,對mini-batch進行規範化操作,使結果的均值爲0,方差爲1。再經過scale+shift操作,儘量去還原BN前的輸出。


爲什麼提出BN[1, 2]

先看一下論文的題目《Batch Normalization: Accelerating Deep Network Training b
y Reducing Internal Covariate Shift》,可以看出,BN的動機是降低Internal Covariate Shift(以下簡稱ICS)來加速網絡訓練,下面解釋什麼是ICS。

在訓練過程中,由於不同層的參數是不斷變化的,這會導致,對於不同層,輸入的分佈是不斷變化的。隨着網絡層數的加深,高層輸入的分佈會與原始輸入樣本的分佈存在較大差異。以上便是ICS問題。

由於ICS問題,模型的優化難度變大,收斂速度慢。

BN的作用及原理

加速訓練,提高收斂速度[1]

一方面,BN通過固定層間數據分佈的方法,解決了ICS問題,從而提高了模型的訓練速度。另一方面,由於BN能夠緩解梯度消失(梯度爆炸),可以提高模型的收斂速度。

緩解梯度消失(梯度爆炸)[3]

  • 不使用BN
    在不使用BN時,對於某一層的前向傳播,應有:
    Hl=WlTHl1H_l=W_l^TH_{l-1}
    那麼該層的反向傳播梯度爲:
    HlHl1=Wl\frac{\partial H_l}{\partial H_{l-1}}=W_l
    多層累計後的梯度爲:
    HlHk=i=k+1lWi\frac{\partial H_l}{\partial H_k}=\prod_{i=k+1}^lW_i
    可以看出,如果WiW_i總是較小的,經過不斷的連乘,梯度呈指數級下降,即梯度消失。反之,如果WiW_i總是較大的,會發生梯度爆炸。

  • 使用BN
    帶有BN的前向傳播爲:
    Hl=BN(WlTHl1)=1σl(WlTHl1μl)H_l=BN(W_l^TH_{l-1})=\frac{1}{\sigma_l}(W_l^TH_{l-1}-\mu_l)
    則反向傳播的梯度爲:
    HlHl1=Wl1σl\frac{\partial H_l}{\partial H_{l-1}}=W_l\frac{1}{\sigma_l}
    多層累計後的梯度爲:
    HlHk=i=k+1lWi1σi\frac{\partial H_l}{\partial H_k}=\prod_{i=k+1}^lW_i\frac{1}{\sigma_i}
    可以看出,使用BN後,在反向傳播時,使用1σi\frac{1}{\sigma_i}對梯度進行了縮放。如果WiW_i較小,則WiTHl1W_i^TH_{l-1}較小,則σi{\sigma_i}較小,1σi\frac{1}{\sigma_i}較大,Wi1σlW_i\frac{1}{\sigma_l}WiW_i大,實現了放縮。如果WiW_i較大,也是同理。爲什麼WiTHl1W_i^TH_{l-1}較小,則σi{\sigma_i}較小?舉個例子,1,5,10,20,30這組數據的標準差是10.5338,而0.1,0.5,1,2,3這組數據的標準差是1.05338。

緩解過擬合[4]

BN能夠緩解過擬合在於引入了noise。對於特定的一層,在某個batch的前向傳播過程中,如果添加了BN操作,則會對該層的輸出進行normalization,具體如下式:
outputAfter_BN=outputbatch_mean(output)batch_variance(output)output_{After\_BN}=\frac{output-batch\_mean(output)}{batch\_variance(output)}
這說明,在每一次訓練過程中,即使對於相同的樣本,如果在batch中的其他樣本發生了變化,batch_mean(output)batch\_mean(output)batch_variance(output)batch\_variance(output)就會發生變化。這會導致,相同樣本在不同的batch中會產生不同的outputAfter_BNoutput_{After\_BN},相當於對於每個樣本都引入了noise。模型爲了克服樣本的noise,會更加generalize,即降低了過擬合。

其他相關問題

BN和激活函數的順序問題[5]

現在大多數的模型中都是用BN+ReLU,但是從BN論文的原理上將,其實ReLU+BN似乎能更好的解決ICS問題,下面分析一下兩種方式的優缺點。

  • BN+ReLU
    讓ReLU更好的進行特徵選擇,使其單側抑制起作用。
  • ReLU+BN
    更好地解決ICS問題,訓練效率更高。

使用ReLU還需要用BN嗎[6, 7]

由於ReLU有dead neuron問題,使用BN後可以保證有一定佔比的神經元處於激活狀態,解決了dying ReLU問題。


[1] https://www.zhihu.com/question/38102762
[2] https://zhuanlan.zhihu.com/p/136701745
[3] https://www.zhihu.com/collection/537883741
[4] https://www.zhihu.com/question/291571486/answer/861428056
[5] https://zhuanlan.zhihu.com/p/113442866
[6] https://www.zhihu.com/question/304603935/answer/544970232
[7] https://www.zhihu.com/question/338802747/answer/784239481

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