[知乎轉載] BN的具體作用和過程

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

1. What is BN?
顧名思義,batch normalization嘛,就是“批規範化”咯。Google在ICML文中描述的非常清晰,即在每次SGD時,通過mini-batch來對相應的activation做規範化操作,使得結果(輸出信號各個維度)的均值爲0,方差爲1. 而最後的“scale and shift”操作則是爲了讓因訓練所需而“刻意”加入的BN能夠有可能還原最初的輸入(即當[公式]),從而保證整個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應作用在非線性映射前,即對[公式]做規範化。另外對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就是分佈不一致假設之下的一個分支問題,它是指源空間和目標空間的條件概率是一致的,但是其邊緣概率不同,即:對所有[公式],[公式],但是[公式]. 大家細想便會發現,的確,對於神經網絡的各層輸出,由於它們經過了層內操作作用,其分佈顯然與各層對應的輸入信號分佈不同,而且差異會隨着網絡深度增大而增大,可是它們所能“指示”的樣本標記(label)仍然是不變的,這便符合了covariate shift的定義。由於是對層間信號的分析,也即是“internal”的來由。
那麼好,爲什麼前面我說Google將其複雜化了。其實如果嚴格按照解決covariate shift的路子來做的話,大概就是上“importance weight”(ref)之類的機器學習方法。可是這裏Google僅僅說“通過mini-batch來規範化某些層/所有層的輸入,從而可以固定每層輸入信號的均值與方差”就可以解決問題。如果covariate shift可以用這麼簡單的方法解決,那前人對其的研究也真真是白做了。此外,試想,均值方差一致的分佈就是同樣的分佈嗎?當然不是。顯然,ICS只是這個問題的“包裝紙”嘛,僅僅是一種high-level demonstration。
那BN到底是什麼原理呢?說到底還是爲了防止“梯度彌散”。關於梯度彌散,大家都知道一個簡單的栗子:[公式]。在BN中,是通過將activation規範爲均值和方差一致的手段使得原本會減小的activation的scale變大。可以說是一種更有效的local response normalization方法(見4.2.1節)。

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

 

本文轉載自:

深度學習中 Batch Normalization爲什麼效果好? - 魏秀參的回答 - 知乎 https://www.zhihu.com/question/38102762/answer/85238569

有一個疑問是爲什麼BN對輸入信號x進行scaling的時候,函數的形式那麼像標準化而不是歸一化的。弄清楚答案,博主會更新下。

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