1.分類
- BN是在batch上,對N、H、W做歸一化,而保留通道 C 的維度。BN對較小的batch size效果不好。BN適用于固定深度的前向神經網絡,如CNN,不適用于RNN;
- LN在通道方向上,對C、H、W歸一化,主要對RNN效果明顯;
- IN在圖像像素上,對H、W做歸一化,用在風格化遷移;
- GN將channel分組,然后再做歸一化。
2.BN
為什么要進行BN呢?
1)在深度神經網絡訓練的過程中,通常以輸入網絡的每一個mini-batch進行訓練,這樣每個batch具有不同的分布,使模型訓練起來特別困難。
(2)Internal Covariate Shift (ICS) 問題:在訓練的過程中,激活函數會改變各層數據的分布,隨著網絡的加深,這種改變(差異)會越來越大,使模型訓練起來特別困難,收斂速度很慢,會出現梯度消失的問題。
BN的主要思想:針對每個神經元,使數據在進入激活函數之前,沿著通道計算每個batch的均值、方差,‘強迫’數據保持均值為0,方差為1的正態分布,避免發生梯度消失。具體來說,就是把第1個樣本的第1個通道,加上第2個樣本第1個通道 … 加上第 N 個樣本第1個通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是單純除以 N,最后得到的是一個代表這個 batch 第1個通道平均值的數字,而不是一個 H×W 的矩陣)。求通道 1 的方差也是同理。對所有通道都施加一遍這個操作,就得到了所有通道的均值和方差。
BN的使用位置:全連接層或卷積操作之后,激活函數之前。
BN算法過程:
沿著通道計算每個batch的均值μ
沿著通道計算每個batch的方差σ2
做歸一化
加入縮放和平移變量 γ 和 β
其中 ε 是一個很小的正值1e-8,比如 。加入縮放和平移變量的原因是:保證每一次數據經過歸一化后還保留原有學習來的特征,同時又能完成歸一化操作,加速訓練。 這兩個參數是用來學習的參數。
BN的作用:
(1)允許較大的學習率;
(2)減弱對初始化的強依賴性
(3)保持隱藏層中數值的均值、方差不變,讓數值更穩定,為后面網絡提供堅實的基礎;
(4)有輕微的正則化作用(相當于給隱藏層加入噪聲,類似Dropout)
BN存在的問題:
(1)每次是在一個batch上計算均值、方差,如果batch size太小,則計算的均值、方差不足以代表整個數據分布。
(2)batch size太大:會超過內存容量;需要跑更多的epoch,導致總訓練時間變長;會直接固定梯度下降的方向,導致很難更新。
3.LN
針對BN不適用于深度不固定的網絡(sequence長度不一致,如RNN),LN對深度網絡的某一層的所有神經元的輸入按以下公式進行normalization操作。
LN中同層神經元的輸入擁有相同的均值和方差,不同的輸入樣本有不同的均值和方差。
對于特征圖在這里插入圖片描述 ,LN 對每個樣本的 C、H、W 維度上的數據求均值和標準差,保留 N 維度。其均值和標準差公式為:
Layer Normalization (LN) 的一個優勢是不需要批訓練,在單條數據內部就能歸一化。LN不依賴于batch size和輸入sequence的長度,因此可以用于batch size為1和RNN中。LN用于RNN效果比較明顯,但是在CNN上,效果不如BN。
4.Instance Normalization, IN
IN針對圖像像素做normalization,最初用于圖像的風格化遷移。在圖像風格化中,生成結果主要依賴于某個圖像實例,feature map 的各個 channel 的均值和方差會影響到最終生成圖像的風格。所以對整個batch歸一化不適合圖像風格化中,因而對H、W做歸一化。可以加速模型收斂,并且保持每個圖像實例之間的獨立。
對于,IN 對每個樣本的 H、W 維度的數據求均值和標準差,保留 N 、C 維度,也就是說,它只在 channel 內部求均值和標準差,其公式如下: