天天看點

Group Normalization 論文了解

Batch Normalization是一個裡程碑式的工作,使得大量cnn可以正常訓練,Kaiming He等人提出Group Normalization又做了進一步提升

paper:: Group Normalization

link:GN paper

code:引入GN實作訓練的Mask-RCNN

摘要

  • 文中提出一種新的CNN訓練優化技術:
    • BN現存問題:随着batch size的減小,由不準确的批量統計估計造成的BN的錯誤率上升;
    • BN受限領域:由于計算mem的限制在detection、segmentation、video等領域模型的訓練需要小batch size;
    • 提出GN:GN以channel為group計算均值和方差,獨立于batch size,在batch size小的時候優于BN,batch size大的時候和BN效果相似;
Group Normalization 論文了解

簡介

  • 由于BN對網絡訓練時候的batch size有要求是以引申出的問題是:在訓練中引入BN時由于mem的限制需要在網絡設計和batch size之間進行妥協;
  • GN是作為BN的簡單代替方法提出的,不僅在視覺任務上适用,同時也可以在序列模型和生成模型上适用;

相關知識

  • 模型主要是學習訓練資料的分布,對輸入資料進行normalization可以提升模型的訓練速度;但是資料在經過一層layer的計算後會出現Internal Covariate Shift,即資料的分布會改變是的後續學習變得困難;
  • 簡單回顧一下BN的計算原理:
    • Internal Covariate Shfit是指發生在模型内部的資料分布變化,Covariate Shift表示訓練資料和測試資料存在的分布差異;
    • batch normalization的含義是對一個batch中的資料進行normalization,假設 輸入資料為 m = n × h × w m = n \times h \times w m=n×h×w(會得到channel組資料):
      • 首先求出資料的均值: μ β = 1 m ∑ i = 1 m x i \mu _ { \beta } = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } x _ { i } μβ​=m1​∑i=1m​xi​
      • 然後求出資料的方差: σ β 2 = 1 m ∑ i = 1 m ( x i − μ β ) 2 \sigma _ { \beta } ^ { 2 } = \frac { 1 } { m } \sum _ { i = 1 } m \left( x _ { i } - \mu _ { \beta } \right) ^ { 2 } σβ2​=m1​∑i=1​m(xi​−μβ​)2
      • 然後對資料進行歸一化: x ^ i = x i − μ B σ B 2 + ϵ \widehat { x } _ { i } = \frac { x _ { i } - \mu _ { \mathcal { B } } } { \sqrt { \sigma _ { \mathcal { B } } ^ { 2 } + \epsilon } } x

        i​=σB2​+ϵ

        ​xi​−μB​​

      • 最後進行平移縮放計算: y i = γ x ^ i + β y _ { i } = \gamma \widehat { x } _ { i } + \beta yi​=γx

        i​+β

    • 如果對網絡的輸出做單純歸一化會破壞網絡學習到的資料分布, γ \gamma γ和 β \beta β平移縮放參數是為了保證每一次計算出來的資料經過歸一化後還可以保留學習到特征,但此時已經完成歸一化操作;
  • 由于batch的減小會batch統計資料産生很大影響是以後續提出一些不在batch次元做norm的方法:
    • LN:在channel次元做norm;
    • IN:方法和BN類似不過隻在一個sample中做norm;
Group Normalization 論文了解

Group Normalization

  • GN算法建構思路:
    • 正常的特征歸一化計算公式:
      • x ^ i = 1 σ i ( x i − μ i ) \hat { x } _ { i } = \frac { 1 } { \sigma _ { i } } \left( x _ { i } - \mu _ { i } \right) x^i​=σi​1​(xi​−μi​)
      • 其中 μ i = 1 m ∑ k ∈ S i x k , σ i = 1 m ∑ k ∈ S i ( x k − μ i ) 2 + ϵ \mu _ { i } = \frac { 1 } { m } \sum _ { k \in \mathcal { S } _ { i } } x _ { k } , \quad \sigma _ { i } = \sqrt { \frac { 1 } { m } \sum _ { k \in \mathcal { S } _ { i } } \left( x _ { k } - \mu _ { i } \right) ^ { 2 } + \epsilon } μi​=m1​∑k∈Si​​xk​,σi​=m1​∑k∈Si​​(xk​−μi​)2+ϵ

        ​, ϵ \epsilon ϵ是一個小常量

      • 在 ( N , C , H , W ) ( N , C , H , W ) (N,C,H,W)tensor中 i = ( i N , i C , i H , i W ) i = \left( i _ { N } , i _ { C } , i _ { H } , i _ { W } \right) i=(iN​,iC​,iH​,iW​)
    • BN計算過程: S i = { k ∣ k C = i C } \mathcal { S } _ { i } = \{ k | k _ { C } = i _ { C } \} Si​={k∣kC​=iC​}在 ( N , H , W ) ( N , H , W ) (N,H,W)次元做norm計算;
    • LN計算過程: S i = { k ∣ k N = i N } \mathcal { S } _ { i } = \{ k | k _ { N } = i _ { N } \} Si​={k∣kN​=iN​}在 ( C , H , W ) ( C , H , W ) (C,H,W)次元做norm計算;
    • BN計算過程: S i = { k ∣ k N = i N , k ∣ k C = i C } \mathcal { S } _ { i } = \{ k | k_{ N } = i_{ N }, \quad k | k _ { C } = i _ { C } \} Si​={k∣kN​=iN​,k∣kC​=iC​}在 ( H , W ) ( H , W ) (H,W)次元做norm計算;
    • y i = γ x ^ i + β y _ { i } = \gamma \hat { x } _ { i } + \beta yi​=γx^i​+β 通過線性變換來彌補表達能力可能的損失
    • GN計算過程: S i = { k ∣ k N = i N , ⌊ k C C / G ⌋ = ⌊ i C C / G ⌋ } \mathcal { S } _ { i } = \{ k | k _ { N } = i _ { N } , \left\lfloor \frac { k _ { C } } { C / G } \right\rfloor = \left\lfloor \frac { i _ { C } } { C / G } \right\rfloor \} Si​={k∣kN​=iN​,⌊C/GkC​​⌋=⌊C/GiC​​⌋}在 ( C / G , H , W ) ( C/G , H , W ) (C/G,H,W)次元做norm計算
  • GN在tensorflow中的實作:
Group Normalization 論文了解

實驗結果show

  • 具體實驗結果展示可見原文,在此不就不做額外展示啦~

總結

  • 本文提出不利用batch次元的norm方式GN用來優化模型的訓練,但是由于BN影響力太多目前許多先進的系統都為其設計了超參數,但是這個對于基于GN的模型來說可能不是最優的,後續可能會重新設計系統或者探索新的超參數;
  • 文中展示了GN的LN以及IN的相關性,說明GN在序列模型和生成模型領域也适用,後續應該會對GN在這些領域的應用加強研究,同時作者提到還出探索GN在RL任務中學習表征的性能;

繼續閱讀