引自:https://blog.csdn.net/u013289254/article/details/99690730
一. 本文的內容包括:
1. Batch Normalization,其論文:https://arxiv.org/pdf/1502.03167.pdf
2. Layer Normalizaiton,其論文:https://arxiv.org/pdf/1607.06450v1.pdf
3. Instance Normalization,其論文:https://arxiv.org/pdf/1607.08022.pdf
4. Group Normalization,其論文:https://arxiv.org/pdf/1803.08494.pdf
5. Switchable Normalization,其論文:https://arxiv.org/pdf/1806.10779.pdf
二. 介紹
在介紹各個算法之前,我們先引進一個問題:為什么要做歸一化處理?
神經網絡學習過程的本質就是為了學習數據分布,如果我們沒有做歸一化處理,那么每一批次訓練數據的分布不一樣,從大的方向上看,神經網絡則需要在這多個分布中找到平衡點,從小的方向上看,由於每層網絡輸入數據分布在不斷變化,這也會導致每層網絡在找平衡點,顯然,神經網絡就很難收斂了。當然,如果我們只是對輸入的數據進行歸一化處理(比如將輸入的圖像除以255,將其歸到0到1之間),只能保證輸入層數據分布是一樣的,並不能保證每層網絡輸入數據分布是一樣的,所以也需要在神經網絡的中間層加入歸一化處理。
BN、LN、IN和GN這四個歸一化的計算流程幾乎是一樣的,可以分為四步:
1.計算出均值
2.計算出方差
3.歸一化處理到均值為0,方差為1
4.變化重構,恢復出這一層網絡所要學到的分布
訓練的時候,是根據輸入的每一批數據來計算均值和方差,那么測試的時候,平均值和方差是怎么來的?
對於均值來說直接計算所有訓練時batch 均值的平均值;然后對於標准偏差采用每個batch 方差的無偏估計
接下來,我們先用一個示意圖來形象的表現BN、LN、IN和GN的區別(圖片來自於GN這一篇論文),在輸入圖片的維度為(NCHW)中,HW是被合成一個維度,這個是方便畫出示意圖,C和N各占一個維度
Batch Normalization:
1.BN的計算就是把每個通道的NHW單獨拿出來歸一化處理
2.針對每個channel我們都有一組γ,β,所以可學習的參數為2*C
3.當batch size越小,BN的表現效果也越不好,因為計算過程中所得到的均值和方差不能代表全局
Layer Normalizaiton:
1.LN的計算就是把每個CHW單獨拿出來歸一化處理,不受batchsize 的影響
2.常用在RNN網絡,但如果輸入的特征區別很大,那么就不建議使用它做歸一化處理
Instance Normalization
1.IN的計算就是把每個HW單獨拿出來歸一化處理,不受通道和batchsize 的影響
2.常用在風格化遷移,但如果特征圖可以用到通道之間的相關性,那么就不建議使用它做歸一化處理
Group Normalizatio
1.GN的計算就是把先把通道C分成G組,然后把每個gHW單獨拿出來歸一化處理,最后把G組歸一化之后的數據合並成CHW
2.GN介於LN和IN之間,當然可以說LN和IN就是GN的特列,比如G的大小為1或者為C
Switchable Normalization
1.將 BN、LN、IN 結合,賦予權重,讓網絡自己去學習歸一化層應該使用什么方法
2.集萬千寵愛於一身,但訓練復雜