作者 | G-kdom
編輯 | 唐裡
公眾號 | AI科技評論
本文轉自知乎作者G-kdom文章:常用的 Normalization 方法:BN、LN、IN、GN。AI科技評論獲授權轉載,如需轉載請聯繫原作者。
文章地址:
https://zhuanlan.zhihu.com/p/72589565
沿著通道計算每個batch的均值μ
沿著通道計算每個batch的方差σ²
做歸一化
加入縮放和平移變量 γ 和 β
其中 ε 是一個很小的正值,比如 。加入縮放和平移變量的原因是:保證每一次數據經過歸一化後還保留原有學習來的特徵,同時又能完成歸一化操作,加速訓練。 這兩個參數是用來學習的參數。BN的作用:
(1)允許較大的學習率;
(2)減弱對初始化的強依賴性
(3)保持隱藏層中數值的均值、方差不變,讓數值更穩定,為後面網絡提供堅實的基礎;
(4)有輕微的正則化作用(相當於給隱藏層加入噪聲,類似Dropout)
BN存在的問題:
(1)每次是在一個batch上計算均值、方差,如果batch size太小,則計算的均值、方差不足以代表整個數據分布。
(2)batch size太大:會超過內存容量;需要跑更多的epoch,導致總訓練時間變長;會直接固定梯度下降的方向,導致很難更新。
二、 Layer Normalization, LN
論文連結:https://arxiv.org/pdf/1607.06450v1.pdf
針對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。
三、 Instance Normalization, IN
論文連結:https://arxiv.org/pdf/1607.08022.pdf
IN針對圖像像素做normalization,最初用於圖像的風格化遷移。在圖像風格化中,生成結果主要依賴於某個圖像實例,feature map 的各個 channel 的均值和方差會影響到最終生成圖像的風格。所以對整個batch歸一化不適合圖像風格化中,因而對H、W做歸一化。可以加速模型收斂,並且保持每個圖像實例之間的獨立。
對於,IN 對每個樣本的 H、W 維度的數據求均值和標準差,保留 N 、C 維度,也就是說,它只在 channel 內部求均值和標準差,其公式如下:
四、 Group Normalization, GN(拿小本本get一下)論文連結:https://arxiv.org/pdf/1803.08494.pdf
GN是為了解決BN對較小的mini-batch size效果差的問題。GN適用於佔用顯存比較大的任務,例如圖像分割。對這類任務,可能 batch size 只能是個位數,再大顯存就不夠用了。而當 batch size 是個位數時,BN 的表現很差,因為沒辦法通過幾個樣本的數據量,來近似總體的均值和標準差。GN 也是獨立於 batch 的,它是 LN 和 IN 的折中。
GN的主要思想:在 channel 方向 group,然後每個 group 內做 Norm,計算的均值和方差,這樣就與batch size無關,不受其約束。具體方法:GN 計算均值和標準差時,把每一個樣本 feature map 的 channel 分成 G 組,每組將有 C/G 個 channel,然後將這些 channel 中的元素求均值和標準差。各組 channel 用其對應的歸一化參數獨立地歸一化。代碼如下:
def GroupNorm(x, gamma, beta, G=16):
# x_shape:[N, C, H, W]
results = 0.
eps = 1e-5
x = np.reshape(x, (x.shape[0], G, x.shape[1]/16, x.shape[2], x.shape[3]))
x_mean = np.mean(x, axis=(2, 3, 4), keepdims=True)
x_var = np.var(x, axis=(2, 3, 4), keepdims=True0)
x_normalized = (x - x_mean) / np.sqrt(x_var + eps)
results = gamma * x_normalized + beta
return results
我們將feature map shape 記為[N, C, H, W]。如果把特徵圖比喻成一摞書,這摞書總共有 N 本,每本有 C 頁,每頁有 H 行,每行 有W 個字符。
1. BN是在batch上,對N、H、W做歸一化,而保留通道 C 的維度。BN 相當於把這些書按頁碼一一對應地加起來,再除以每個頁碼下的字符總數:N×H×W。2. LN在通道方向上,對C、H、W歸一化。LN 相當於把每一本書的所有字加起來,再除以這本書的字符總數:C×H×W。3. IN在圖像像素上,對H、W做歸一化。IN 相當於把一頁書中所有字加起來,再除以該頁的總字數:H×W。4. GN將channel分組,然後再做歸一化。GN 相當於把一本 C 頁的書平均分成 G 份,每份成為有 C/G 頁的小冊子,對每個小冊子做Norm。另外,還需要注意它們的映射參數γ和β的區別:對於 BN,IN,GN, 其γ和β都是維度等於通道數 C 的向量。而對於 LN,其γ和β都是維度等於 normalized_shape 的矩陣。最後,BN 和 IN 可以設置參數:momentum和track_running_stats來獲得在整體數據上更準確的均值和標準差。LN 和 GN 只能計算當前 batch 內數據的真實均值和標準差。推薦閱讀:
嚮往的GAT(圖注意力模型)
如何評價Word2Vec作者提出的fastText算法?深度學習是否在文本分類等簡單任務上沒有優勢?
從Word2Vec到Bert,聊聊詞向量的前世今生(一)