均值归一化_超越BN和GN!谷歌提出新的归一化层:FRN
碼字不易,歡迎給個贊!
歡迎交流與轉載,文章會同步發布在公眾號:機器學習算法工程師(Jeemy110)
目前主流的深度學習模型都會采用BN層(Batch Normalization)來加速模型訓練以及提升模型效果,對于CNN模型,BN層已經上成為了標配。但是BN層在訓練過程中需要在batch上計算中間統計量,這使得BN層嚴重依賴batch,造成訓練和測試的不一致性,當訓練batch size較小,往往會惡化性能。GN(Group Normalization)通過將特征在channel維度分組來解決這一問題,GN在batch size不同時性能是一致的,但對于大batch size,GN仍然難以匹敵BN。這里我們要介紹的是谷歌提出的一種新的歸一化方法FRN,和GN一樣不依賴batch,但是性能卻優于BN和GN。
從BN到GN
訓練數據進行歸一化處理有助于模型的優化,對于深度模型來說,歸一化中間特征同樣有助于訓練,BN層就是最常用的歸一化方法。BN層通過計算batch中所有樣本的每個channel上的均值和方差來進行歸一化,其計算方式如下所示:
以CNN模型為例,中間特征的維度為[B, H, W, C],BN首先在計算在(N H, W)維度上的均值
和方差,然后各個通道上(C維度)進行標準歸一化。最后對歸一化的特征進行放縮和平移(scale and shift),這里和是可學習的參數(參數大小為C)。BN的一個問題是訓練時batch size一般較大,但是測試時batch size一般為1,而均值和方差的計算依賴batch,這將導致訓練和測試不一致。BN的解決方案是在訓練時估計一個均值和方差量來作為測試時的歸一化參數,一般對每次mini-batch的均值和方差進行指數加權平均來得到這個量。雖然解決了訓練和測試的不一致性,但是BN對于batch size比較敏感,當batch size較小時,模型性能會明顯惡化。對于一個比較大的模型,由于顯存限制,batch size難以很大,比如目標檢測模型,這時候BN層可能會成為一種限制。
解決BN上述問題的另外一個方向是避免在batch維度進行歸一化,這樣當然就不會帶來訓練和測試的不一致性問題。這些方法包括Layer Normalization (LN),Instance Normalization (IN)以及最新的Group Normalization(GN),這些方法與BN的區別可以從圖1中看出來:
圖1 不同的歸一化方法對比這些方法處理方式和BN類似,但是歸一化的維度不一樣,BN是在(N, H, W)維度上,LN是在(H,W,C)維度上,IN是在(H,W)維度上,GN更巧妙,其通過對C分組,此時特征可以從[N, H, W, C]變成[N, H, W, G, C/G],GN的計算是在[H, W, G]維度上。LN,IN以及GN都沒有在B維度上進行歸一化,所以不會有BN的問題。相比之下,GN是更常用的,GN和BN的效果對比如圖2所示:
圖2 ResNet50模型采用BN和GN在ImageNet上不同batch size下的性能差異從圖中可以看到GN基本不受batch size的影響,而BN在batch size較小時性能大幅度惡化,但是在較大batch size,BN的效果是稍好于GN的。
解決BN在小batch性能較差的另外一個方向是直接降低訓練和測試之間不一致性,比較常用的方法是Batch Renormalization (BR),它主要的思路是限制訓練過程中batch統計量的值范圍。另外的一個解決辦法是采用多卡BN方法訓練,相當于增大batch size。
FRN
谷歌的提出的FRN層包括歸一化層FRN(Filter Response Normalization)和激活層TLU(Thresholded Linear Unit),如圖3所示。FRN層不僅消除了模型訓練過程中對batch的依賴,而且當batch size較大時性能優于BN。
圖3 FRN層結構示意圖其中FRN的操作是(H, W)維度上的,即對每個樣例的每個channel單獨進行歸一化,這里
就是一個N維度(HxW)的向量,所以FRN沒有BN層對batch依賴的問題。BN層采用歸一化方法是減去均值然后除以標準差,而FRN卻不同,這里沒有減去均值操作,公式中的是的二次范數的平均值。這種歸一化方式類似BN可以用來消除中間操作(卷積和非線性激活)帶來的尺度問題,有助于模型訓練。 公式里的是一個很小的正常量,以防止除0。FRN是在H,W兩個維度上歸一化,一般情況下網絡的特征圖大小N=HxW較大,但是有時候可能會出現1x1的情況,比如InceptionV3和VGG網絡,此時就比較關鍵,圖4給出了當N=1時不同下歸一化的結果。當值較小時,歸一化相當于一個符號函數(sign function),這時候梯度幾乎為0,嚴重影響模型訓練;當值較大時,曲線變得更圓滑,此時的梯度利于模型學習。對于這種情況,論文建議采用一個可學習的。對于不含有1x1特征的模型,論文中采用的是一個常量值1e-6。值得說明的是IN也是在H,W維度上進行歸一化,但是會減去均值,對于N=1的情況歸一化的結果是0,但FRN可以避免這個問題。圖4 當N=1時不同e對FRN歸一化的影響歸一化之后同樣需要進行縮放和平移變換,這里的
和也是可學習的參數(參數大小為C):FRN缺少去均值的操作,這可能使得歸一化的結果任意地偏移0,如果FRN之后是ReLU激活層,可能產生很多0值,這對于模型訓練和性能是不利的。為了解決這個問題,FRN之后采用的閾值化的ReLU,即TLU:
這里的
是一個可學習的參數。論文中發現FRN之后采用TLU對于提升性能是至關重要的。FRN層的實現也是極其容易,在TensorFlow中的實現代碼如下所示:
defFRN層的效果也是極好的,下圖給出了FRN與BN和GN的效果對比:
圖5 ResNet50模型采用FRN,BN,GN在ImageNet上不同batch size下的性能差異可以看到FRN是不受batch size的影響,而且效果是超越BN的。論文中還有更多的對比試驗證明FRN的優越性。
小結
BN目前依然是最常用的歸一化方法,GN雖然不會受batch size的影響,但是目前還沒大范圍采用,不知道FRN的提出會不會替代BN,這需要時間的檢驗。
參考
總結
以上是生活随笔為你收集整理的均值归一化_超越BN和GN!谷歌提出新的归一化层:FRN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用器件选型——电源篇
- 下一篇: 从网页中读取数据 python_数据分析