歸一化方法總結 | 又名「BN和它的後浪們「
- 2021 年 5 月 30 日
- 筆記
前言:
歸一化相關技術已經經過了幾年的發展,目前針對不同的應用場合有相應的方法,在本文將這些方法做了一個總結,介紹了它們的思路,方法,應用場景。主要涉及到:LRN,BN,LN, IN, GN, FRN, WN, BRN, CBN, CmBN等。
本文又名「BN和它的後浪們」,是因為幾乎在BN後出現的所有歸一化方法都是針對BN的三個缺陷改進而來,在本文也介紹了BN的三個缺陷。相信讀者會讀完此文會對歸一化方法有個較為全面的認識和理解。
LRN(2012)
局部響應歸一化(Local Response Normalization, 即LRN)首次提出於AlexNet。自BN提出後,其基本被拋棄了,因此這裡只介紹它的來源和主要思想。
LRN的創意來源於神經生物學的側抑制,被激活的神經元會抑制相鄰的神經元。用一句話來形容LRN:讓響應值大的feature map變得更大,讓響應值小的變得更小。
其主要思想在於讓不同卷積核產生feature map之間的相關性更小,以實現不同通道上的feature map專註於不同的特徵的作用,例如A特徵在一通道上更顯著,B特徵在另一通道上更顯著。
Batch Normalization(2015)
論文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
論文中關於BN提出的解釋:訓練深度神經網路非常複雜,因為在訓練過程中,隨著先前各層的參數發生變化,各層輸入的分布也會發生變化,圖層輸入分布的變化帶來了一個問題,因為圖層需要不斷適應新的分布,因此訓練變得複雜,隨著網路變得更深,網路參數的細微變化也會放大。
由於要求較低的學習率和仔細的參數初始化,這減慢了訓練速度,並且眾所周知,訓練具有飽和非線性的模型非常困難。我們將此現象稱為內部協變數偏移,並通過歸一化層輸入來解決該問題。
其它的解釋:假設輸入數據包含多個特徵x1,x2,…xn。每個功能可能具有不同的值範圍。例如,特徵x1的值可能在1到5之間,而特徵x2的值可能在1000到99999之間。
如下左圖所示,由於兩個數據不在同一範圍,但它們是使用相同的學習率,導致梯度下降軌跡沿一維來回振蕩,從而需要更多的步驟才能達到最小值。且此時學習率不容易設置,學習率過大則對於範圍小的數據來說來回震蕩,學習率過小則對範圍大的數據來說基本沒什麼變化。
如下右圖所示,當進行歸一化後,特徵都在同一個大小範圍,則loss landscape像一個碗,學習率更容易設置,且梯度下降比較平穩。
此外,在訓練過程中還保存了每個mini-batch每一BN層的均值和方差,最後求所有mini-batch均值和方差的期望值,以此來作為推理過程中該BN層的均值和方差。
註:BN放在激活函數後比放在激活函數前效果更好。
實際效果:
1)與沒有BN相比,可使用更大的學習率
2)防止過擬合,可去除Dropout和Local Response Normalization
3)由於dataloader打亂順序,因此每個epoch中mini-batch都不一樣,對不同mini-batch做歸一化可以起到數據增強的效果。
4)明顯加快收斂速度
5)避免梯度爆炸和梯度消失
註:BN存在一些問題,後續的大部分歸一化論文,都是在圍繞BN的這些缺陷來改進的。為了行文的方便,這些缺陷會在後面各篇論文中逐一提到。
BN、LN、IN和GN的區別與聯繫
下圖比較明顯地表示出了它們之間的區別。(N表示N個樣本,C表示通道,這裡為了表達方便,把HxW的二維用H*W的一維表示。)
它們之間的區別在於計算均值和方差的數據範圍不同,LN計算單個樣本在所有通道上的均值和方差,IN值計算單個樣本在每個通道上的均值和方差,GN將每個樣本的通道分成g組,計算每組的均值和方差。
它們之間的效果對比。(註:這個效果是只在同一場合下的對比,實際上它們各有自己的應用場景,且後三者在各自的應用場合上都明顯超過了BN)
Instance Normalization(2016)
論文:Instance Normalization: The Missing Ingredient for Fast Stylization
在影像影片等識別任務上,BN的效果是要優於IN的。但在GAN,style transfer和domain adaptation這類生成任務上,IN的效果明顯比BN更好。
從BN與IN的區別來分析產生這種現象的原因:BN對多個樣本統計均值和方差,而這多個樣本的domain很可能是不一樣的,相當於模型把不同domain的數據分布進行了歸一化。
Layer Normalization (2016)
論文:Layer Normalization
BN的第一個缺陷是依賴Batch size,第二個缺陷是對於RNN這樣的動態網路效果不明顯,且當推理序列長度超過訓練的所有序列長度時,容易出問題。為此,提出了Layer Normalization。
當我們以明顯的方式將批歸一化應用於RNN時,我們需要為序列中的每個時間步計算並存儲單獨的統計資訊。如果測試序列比任何訓練序列都長,這是有問題的。LN沒有這樣的問題,因為它的歸一化項僅取決於當前時間步長對層的總輸入。它還只有一組在所有時間步中共享的增益和偏置參數。(註:LN中的增益和偏置就相當於BN中的gamma 和beta)
LN的應用場合:RNN,transformer等。
Group Normalization(2018)
論文:Group Normalization
如下圖所示,當batch size減少時,BN退化明顯,而Group Normalization始終一致,在batch size比較大的時候,略低於BN,但當batch size比較小的時候,明顯優於BN。
但GN有兩個缺陷,其中一個是在batchsize大時略低於BN,另一個是由於它是在通道上分組,因此它要求通道數是分組數g的倍數。
GN應用場景:在目標檢測,語義分割等要求儘可能大的解析度的任務上,由於記憶體限制,為了更大的解析度只能取比較小的batch size,可以選擇GN這種不依賴於batchsize的歸一化方法。
GN實現演算法
Weights Normalization(2016)
論文:Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks
前面的方法都是基於feature map做歸一化,這篇論文提出對Weights做歸一化。
解釋這個方法要費挺多筆墨,這裡用一句話來解釋其主要做法:將權重向量w分解為一個標量g和一個向量v,標量g表示權重向量w的長度,向量v表示權重向量的方向。
這種方式改善了優化問題的條件,並加速了隨機梯度下降的收斂,不依賴於batch size的特點,適用於循環模型(如 LSTM)和雜訊敏感應用(如深度強化學習或生成模型),而批量歸一化不太適合這些應用。
Weight Normalization也有個明顯的缺陷:WN不像BN有歸一化特徵尺度的作用,因此WN的初始化需要慎重,為此作者提出了對向量v和標量g的初始化方法。
Batch Renormalization(2017)
論文:Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-Normalized Models
前面我們提到BN使用訓練過程中每個mini-batch的均值和方差的期望作為推理過程中的均值和方差,這樣做的前提是mini-batch與樣本總體是獨立同分布的。因此BN的第三個缺陷是當mini-batch中的樣本非獨立同分布時,性能比較差。
基於第一個缺陷batchsize太小時性能退化和第三個缺陷,作者提出了Batch Renormalization(簡稱BRN)。
BRN與BN的主要區別在於BN使用訓練過程中每個mini-batch的均值和方差的期望來當作整個數據集的均值和方差,而訓練過程中每個mini-batch都有自己的均值和方差,因此在推理階段的均值和方差與訓練時不同,而BRN提出在訓練過程中就不斷學習修正整個數據集的均值和方差,使其儘可能逼近整個數據集的均值和方差,並最終用於推理階段。
BRN實現演算法如下:
註:這裡r和d表示尺度縮放和平移,不參與反向傳播。
當使用小batchsize或非獨立同分布的mini-batch進行訓練時,使用BRN訓練的模型的性能明顯優於BN。同時,BRN保留了BN的優勢,例如對初始化的敏感性和訓練效率
Cross-GPU BN(2018)
論文:MegDet: A Large Mini-Batch Object Detector
在使用多卡分散式訓練的情況下,輸入數據被等分成多份,在各自的卡上完成前向和回傳,參數更新,BN是針對單卡上的樣本做的歸一化,因此實際的歸一化的樣本數並不是batchsize。例如batchsize=32,用四張卡訓練,實際上只在32/4=8個樣本上做歸一化。
Cross-GPU Batch Normalization的思想就是在多張卡上做歸一化。
具體實現演算法如下:
FRN(2019)
論文:Filter Response Normalization Layer: Eliminating Batch Dependence in the Training of Deep Neural Networks
FRN仍然是基於小batchsize會退化性能的問題改進的。
FRN由兩個組件構成,一個是Filter Response Normalization (FRN),一個是Thresholded Linear Unit (TLU)。
前者跟Instance Normalization非常相似,也是基於單樣本單通道,所不同的是IN減去了均值,再除以標準差。而FRN沒有減去均值。作者給出的理由如下:雖然減去均值是歸一化方案的正常操作,但對於batch independent的歸一化方案來說,它是任意的,沒有任何理由。
TLU則是在ReLU的基礎上加了一個閾值,這個閾值是可學習的參數。這是考慮到FRN沒有減去均值的操作,這可能使得歸一化的結果任意地偏移0,如果FRN之後是ReLU激活層,可能產生很多0值,這對於模型訓練和性能是不利的。
FRN實現演算法
實驗效果
Cross-Iteration BN(2020)
論文:Cross-Iteration Batch Normalization
CBN的主要思想在於將前k-1個iteration的樣本參與當前均值和方差的計算。但由於前k-1次iteration的數據更新,因此無法直接拿來使用。論文提出了一個處理方式是通過泰勒多項式來近似計算出前k-1次iteration的數據。
實驗效果
總結
本文介紹了目前比較經典的歸一化方法,其中大部分都是針對BN改進而來,本文比較詳盡地介紹了它們的主要思想,改進方式,以及應用場景,部分方法並沒有詳細介紹實現細節,對於感興趣或有需要的讀者請自行閱讀論文原文。
除了以上方法外,還有很多歸一化方法,例如Eval Norm,Normalization propagation,Normalizing the normalizers等。但這些方法並不常用,這裡不作贅述。
其他文章
本文來源於公眾號CV技術指南的技術總結系列。
在公眾號《CV技術指南》中回復「技術總結」可獲取以上所有總結系列文章的匯總pdf
參考論文
-
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
-
Instance Normalization: The Missing Ingredient for Fast Stylization
-
Layer Normalization
-
Group Normalization
-
Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks
-
Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-Normalized Models
-
MegDet: A Large Mini-Batch Object Detector
-
Filter Response Normalization Layer: Eliminating Batch Dependence in the Training of Deep Neural Networks
-
Cross-Iteration Batch Normalization
-
YOLOv4: Optimal Speed and Accuracy of Object Detection
-
EvalNorm: Estimating Batch Normalization Statistics for Evaluation