目錄
聲明
由於學習本篇博客的內容時翻閱了很多資源,如知乎、他人博客等,很多內容已經不記得是在哪學到的了,也沒有辦法一一列舉了,能列舉的我儘量列舉,如有侵權,請聯繫我刪除,謝謝。
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時,對於某一層的前向傳播,應有:
那麼該層的反向傳播梯度爲:
多層累計後的梯度爲:
可以看出,如果總是較小的,經過不斷的連乘,梯度呈指數級下降,即梯度消失。反之,如果總是較大的,會發生梯度爆炸。
- 使用BN
帶有BN的前向傳播爲:
則反向傳播的梯度爲:
多層累計後的梯度爲:
可以看出,使用BN後,在反向傳播時,使用對梯度進行了縮放。如果較小,則較小,則較小,較大,比大,實現了放縮。如果較大,也是同理。爲什麼較小,則較小?舉個例子,1,5,10,20,30這組數據的標準差是10.5338,而0.1,0.5,1,2,3這組數據的標準差是1.05338。
緩解過擬合[4]
BN能夠緩解過擬合在於引入了noise。對於特定的一層,在某個batch的前向傳播過程中,如果添加了BN操作,則會對該層的輸出進行normalization,具體如下式:
這說明,在每一次訓練過程中,即使對於相同的樣本,如果在batch中的其他樣本發生了變化,和就會發生變化。這會導致,相同樣本在不同的batch中會產生不同的,相當於對於每個樣本都引入了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