深度學習中 Batch Normalization為什么效果好


看mnist數據集上其他人的CNN模型時了解到了Batch Normalization 這種操作。效果還不錯,至少對於訓練速度提升了很多。

batch normalization的做法是把數據轉換為0均值和單位方差

這里分五部分簡單解釋一下Batch Normalization (BN)。
1. What is BN?
顧名思義,batch normalization嘛,就是“批規范化”咯。Google在ICML文中描述的非常清晰,即在每次SGD時,通過mini-batch來對相應的activation做規范化操作,使得結果(輸出信號各個維度)的均值為0,方差為1. 而最后的“scale and shift”操作則是為了讓因訓練所需而“刻意”加入的BN能夠有可能還原最初的輸入(即當 \gamma^{(k)}=\sqrt{Var[x^{(k)}]}, \beta^{(k)}=E[x^{(k)}]),從而保證整個network的capacity。(有關capacity的解釋:實際上BN可以看作是在原模型上加入的“新操作”,這個新操作很大可能會改變某層原來的輸入。當然也可能不改變,不改變的時候就是“還原原來輸入”。如此一來,既可以改變同時也可以保持原輸入,那么模型的容納能力(capacity)就提升了。)

關於DNN中的normalization,大家都知道白化(whitening),只是在模型訓練過程中進行白化操作會帶來過高的計算代價和運算時間。因此本文提出兩種簡化方式:1)直接對輸入信號的每個維度做規范化(“normalize each scalar feature independently”);2)在每個mini-batch中計算得到mini-batch mean和variance來替代整體訓練集的mean和variance. 這便是Algorithm 1.

 

2. How to Batch Normalize?
怎樣學BN的參數在此就不贅述了,就是經典的chain rule:


3. Where to use BN?
BN可以應用於網絡中任意的activation set。文中還特別指出在CNN中,BN應作用在非線性映射前,即對x=Wu+b做規范化。另外對CNN的“權值共享”策略,BN還有其對應的做法(詳見文中3.2節)。

4. Why BN?
好了,現在才是重頭戲--為什么要用BN?BN work的原因是什么?
說到底,BN的提出還是為了克服深度神經網絡難以訓練的弊病。其實BN背后的insight非常簡單,只是在文章中被Google復雜化了。
首先來說說“Internal Covariate Shift”。文章的title除了BN這樣一個關鍵詞,還有一個便是“ICS”。大家都知道在統計機器學習中的一個經典假設是“源空間(source domain)和目標空間(target domain)的數據分布(distribution)是一致的”。如果不一致,那么就出現了新的機器學習問題,如,transfer learning/domain adaptation等。而covariate shift就是分布不一致假設之下的一個分支問題,它是指源空間和目標空間的條件概率是一致的,但是其邊緣概率不同,即:對所有x\in \mathcal{X},P_s(Y|X=x)=P_t(Y|X=x),但是P_s(X)\ne P_t(X). 大家細想便會發現,的確,對於神經網絡的各層輸出,由於它們經過了層內操作作用,其分布顯然與各層對應的輸入信號分布不同,而且差異會隨着網絡深度增大而增大,可是它們所能“指示”的樣本標記(label)仍然是不變的,這便符合了covariate shift的定義。由於是對層間信號的分析,也即是“internal”的來由。

那么好,為什么前面我說Google將其復雜化了。其實如果嚴格按照解決covariate shift的路子來做的話,大概就是上“importance weight”( ref)之類的機器學習方法。可是這里Google僅僅說“通過mini-batch來規范化某些層/所有層的輸入,從而可以固定每層輸入信號的均值與方差”就可以解決問題。如果covariate shift可以用這么簡單的方法解決,那前人對其的研究也真真是白做了。此外,試想,均值方差一致的分布就是同樣的分布嗎?當然不是。顯然,ICS只是這個問題的“包裝紙”嘛,僅僅是一種high-level demonstration。

那BN到底是什么原理呢?說到底還是為了防止“梯度彌散”。關於梯度彌散,大家都知道一個簡單的栗子:0.9^{30}\approx 0.04。在BN中,是通過將activation規范為均值和方差一致的手段使得原本會減小的activation的scale變大。可以說是一種更有效的local response normalization方法(見4.2.1節)。

5. When to use BN?
OK,說完BN的優勢,自然可以知道什么時候用BN比較好。例如,在神經網絡訓練時遇到收斂速度很慢,或梯度爆炸等無法訓練的狀況時可以嘗試BN來解決。另外,在一般使用情況下也可以加入BN來加快訓練速度,提高模型精度。


誠然,在DL中還有許多除BN之外的“小trick”。別看是“小trick”,實則是“大殺器”,正所謂“The devil is in the details”。希望了解其它DL trick(特別是CNN)的各位請移步我之前總結的:Must Know Tips/Tricks in Deep Neural Networks
以上。

 
 

作者:魏秀參
鏈接:https://www.zhihu.com/question/38102762/answer/85238569
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

 

參考資料:

https://blog.csdn.net/shuzfan/article/details/50723877

https://www.zhihu.com/question/38102762

https://arxiv.org/pdf/1502.03167.pdf


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM