淺談幾種Normalization方法

前言

本文主要對以下幾種Normalization方法進行討論:

  • Batch Normalization(BN)
  • Instance Normalization(IN)
  • Layer Normalization(LN)
  • Group Normalization(GN)
  • Conditional Batch Normalization(CBN)
  • Conditional Instance Normalization(CIN)
  • Adaptive Instance Normalization(AdaIN)
  • SPatially-Adaptive (DE) normalization(SPADE)

以下Normalization方法本文不做討論,請自行搜索相應資料。

  • Local Response Normalization (LRN)
  • Weight Normalization (WN)
  • ······

Normalization方法

一、什麼是Normalization?

Normalization一般被譯爲“規範化”或是“歸一化”,是一種對數值的特殊函數變換方法。假設原始某個數值是xx,採用定義對規範化函數對數值xx進行轉換,形成一個規範化後的數值yy。準確來說它是一個統計學概念,並不是一個完全定義好的數學操作,可以根據需要自己定義規範化方式。它通過將數據進行偏移和尺度縮放調整,在數據預處理時是非常常見的操作。

二、爲什麼需要Normalization?

這得從“白化(whitening)”說起,白化的目的是希望特徵符合獨立同分布i.i.d條件。包括:去除特徵之間的相關性(獨立),使得所有特徵具有相同的均值和方差(同分布)。獨立同分布的數據可以簡化常規機器學習模型的訓練、提升機器學習模型的預測能力。因此,在把數據輸進機器學習模型之前,“白化”是一個重要的數據預處理步驟。

在深度學習中,因爲網絡的層數非常多,如果數據分佈在某一層開始有明顯的偏移,隨着網絡的加深這一問題會加劇(這一問題在BN的文章中被稱之爲internal covariate shift,ICS),進而導致模型優化的難度增加,甚至不能優化。所以,考慮通過使數據獨立同分布來減緩這個問題。

要解決獨立同分布的問題,“理論正確”的方法就是對每一層的數據都進行白化操作。然而標準的白化操作代價高昂,特別是我們還希望白化操作是可微的,保證白化操作可以通過反向傳播來更新梯度。

因此,以 BN 爲代表的 Normalization 方法退而求其次,進行了簡化的白化操作。基本思想是:在將 xx 送給神經元之前,先對其做平移和伸縮變換, 將 xx 的分佈規範化成在固定區間範圍的標準分佈。

三、Normalization有什麼好處?

1、使得數據更加符合獨立同分布條件,減少ICS導致的偏移。
2、使數據遠離Sigmoid激活函數的飽和區,加快速度。
3、使網絡不再依賴精細的參數初始化過程,可以調大學習率。

四、Normalization的一般形式

前面說到,Normalization是一個統計學概念,並不是一個完全定義好的數學操作,可以根據需要自己定義規範化方式。它通過將數據進行偏移和尺度縮放調整,通用的變換框架如下所示:
h=f(gxμσ+b)h=f(g\frac{x-\mu}{\sigma}+b)
其中,
μ\mu: 均值
σ\sigma: 標準差
bb: 再平移參數,新數據以bb爲均值
gg: 再縮放參數,新數據以g2g^2爲方差
通過μ\muσ\sigma這兩個參數進行 shift 和 scale 變換得到的數據符合均值爲 0、方差爲 1 的標準分佈:
x^=xμσ\hat x = \frac{x-\mu}{\sigma}
再通過bbgg這兩個參數將上一步得到的 x^\hat{x} 進一步變換爲:
y=gx^+by = g{\hat x}+b
最終得到的數據符合均值爲 bb 、方差爲 g2g^2 的分佈。

這裏需要指出的是,第一步已經得到的標準分佈,第二步再進行變化,是爲了保證模型的表達能力不因爲規範化而下降。

第一步的變換將輸入數據限制到了一個統一的確定範圍(均值爲 0、方差爲 1)。底層神經元可能很努力地在學習,但其輸出的結果在交給其上層神經元進行處理之前,都將被重新調整到這一確定範圍,損失了底層神經元學習的部分效果。將規範化後的數據進行再平移和再縮放,使得每個神經元對應的輸入範圍是針對該神經元量身定製的一個確定範圍(均值爲bb 、方差爲g2g^2)。rescale 和 reshift 的參數都是可學習的,這就使得 Normalization 層可以充分利用底層學習的能力。

另一方面的重要意義在於保證獲得非線性的表達能力。Sigmoid 等激活函數在神經網絡中有着重要作用,通過區分飽和區和非飽和區,使得神經網絡的數據變換具有了非線性計算能力。而第一步的規範化會將幾乎所有數據映射到激活函數的非飽和區(線性區),僅利用到了線性變化能力,從而降低了神經網絡的表達能力。而進行再變換,則可以將數據從線性區變換到非線性區,恢復模型的表達能力。

五、本文討論的Normalization方法

(1)Batch Normalization(BN)

在Ioffe和Szegedy的論文《Batch normalization: Accelerating deep network training by reducing internal covariate shift》中提到BN層可以有效改善前饋網絡的訓練過程。
給定一個輸入批次xRN×C×H×Wx\in \R^{N×C×H×W},BN指在每一個單獨的特徵通道上做歸一化:
BN(x)=γ(xμ(x)σ(x))+β(1){\rm {BN}}(x)=\gamma(\frac{x-\mu(x)}{\sigma(x)})+\beta \tag{1}
其中,γ,βRC\gamma,\beta \in \R^C是從數據中學習得到的仿射參數;μ(x),σ(x)RC\mu(x), \sigma(x) \in \R^C是在每一個獨立的特徵通道(CC)上,跨越batch_size(NN)和空間(H,WH,W)計算得到的均值和標準差。
μc(x)=1NHWn=1Nh=1Hw=1Wxnchw\mu_c(x)=\frac{1}{NHW}\sum_{n=1}^N\sum_{h=1}^H\sum_{w=1}^Wx_{nchw}
σc(x)=1NHWn=1Nh=1Hw=1W(xnchwμc(x))2+ϵ\sigma_c(x)=\sqrt{\frac{1}{NHW}\sum_{n=1}^N\sum_{h=1}^H\sum_{w=1}^W{(x_{nchw}-\mu_c(x))^2+\epsilon}}

(2)Instance Normalization(IN)

Ulyanov等人在其論文《 Improved texture networks: Maximizing quality and diversity in feed-forward stylization and texture synthesis》中指出可以通過使用IN來替換BN提升效果。
IN(x)=γ(xμ(x)σ(x))+β(2){\rm {IN}}(x)=\gamma(\frac{x-\mu(x)}{\sigma(x)})+\beta \tag{2}
與BN不同的是,這裏的μ(x)\mu(x)σ(x)\sigma(x)不再是僅對每一個獨立的特徵通道(CC)計算了,而是變成對每一個樣本(NN)的每一個特徵通道(CC)上計算了。也就是說不再對同批次樣本進行彙總計算了。
μnc(x)=1HWh=1Hw=1Wxnchw\mu_{nc}(x)=\frac{1}{HW}\sum_{h=1}^H\sum_{w=1}^Wx_{nchw}
σnc(x)=1HWh=1Hw=1W(xnchwμnc(x))2+ϵ\sigma_{nc}(x)=\sqrt{\frac{1}{HW}\sum_{h=1}^H\sum_{w=1}^W{(x_{nchw}-\mu_{nc}(x))^2+\epsilon}}
另外一點IN與BN不同的地方是,對BN而言,測試(inference)的時候是單實例,不存在minibatch,所以就無法獲得BN計算所需的均值和方差,一般的解決方法是採用訓練(training)時記錄的各個minibatch的統計量來推算全局的均值和方差,測試時採用推導出的統計量進行計算。整個過程存在訓練和測試階段統計量計算方式不一致的問題。而IN則不存在這個問題,其在訓練和測試階段保持同樣的統計量計算方式。

(3)Layer Normalization(LN)

相比BN是對每一個特徵通道(CC)上,跨越batch_size(NN)和空間(H,WH,W)計算得到的均值和標準差,LN則是對batch_size(NN)每一個樣本,直接用同層所有輸出的響應值來求均值和方差。對多層感知器MLP而言就是同層隱層神經元的響應值,對卷積神經網絡CNN而言就是同層卷積層的所有輸出(多個通道)。
LN(x)=γ(xμ(x)σ(x))+β(3){\rm {LN}}(x)=\gamma(\frac{x-\mu(x)}{\sigma(x)})+\beta \tag{3}
其中,γ,βRC\gamma,\beta \in \R^C是從數據中學習得到的仿射參數;μ(x),σ(x)RC\mu(x), \sigma(x) \in \R^C是在mini batch(NN)的每一個樣本上,跨越特徵通道(CC)和空間(H,WH,W)計算得到的均值和標準差。
μn(x)=1CHWc=1Ch=1Hw=1Wxnchw\mu_n(x)=\frac{1}{CHW}\sum_{c=1}^C\sum_{h=1}^H\sum_{w=1}^Wx_{nchw}
σn(x)=1CHWc=1Ch=1Hw=1W(xnchwμc(x))2+ϵ\sigma_n(x)=\sqrt{\frac{1}{CHW}\sum_{c=1}^C\sum_{h=1}^H\sum_{w=1}^W{(x_{nchw}-\mu_c(x))^2+\epsilon}}
BN對batch_size的大小很敏感,如果batch_size太小,則計算的均值和方差會不足以代表整個數據的分佈情況,合理的設定batch_size很重要。BN實際使用時需要計算並保存某一層神經網絡batch的均值和方差等統計量,這對於固定深度的前向神經網絡(DNN/CNN)而言比較方便有效,但對於樣本長度不完全一致的RNN而言效果就沒那麼有效了。

而LN不依賴於batch_size大小和輸入序列的深度,因此可以用於batch_size爲1和RNN中對邊長的輸入序列的Normalize操作。事實上LN在RNN上應用的效果比較明顯,但在CNN上一般不如BN。

(4)Group Normalization(GN)

LN是將同層所有神經元輸出作爲統計範圍,而IN則是CNN中將同一卷積層中每個卷積覈對應的輸出通道單獨作爲自己的統計範圍。那麼有沒有介於兩者之間的統計範圍呢?

通道分組是 CNN 常用的模型優化技巧,所以自然而然會想到對 CNN 中某一層卷積層的輸出或者輸入通道進行分組,在分組範圍內進行統計。這就是GN的核心思想,它是何凱明研究組於2017年提出的。
GN(x)=γ(xμ(x)σ(x))+β(4){\rm {GN}}(x)=\gamma(\frac{x-\mu(x)}{\sigma(x)})+\beta \tag{4}
其中,γ,βRC\gamma,\beta \in \R^C是從數據中學習得到的仿射參數;μ(x),σ(x)RC\mu(x), \sigma(x) \in \R^C是在
mini batch(NN)的每一個樣本上,跨越特徵通道(CC)和空間(H,WH,W)計算得到的均值和標準差。
μi(x)=1mkSixk\mu_i(x)=\frac{1}{m}\sum_{k\in S_i}x_{k}
σi(x)=1mkSi(xkμi(x))2+ϵ\sigma_i(x)=\sqrt{\frac{1}{m}\sum_{k\in S_i}{(x_{k}-\mu_i(x))^2+\epsilon}}
最重要的是SiS_i的劃分,
在BN中,
Si={kkC=iC}S_i = \{k\mid k_C = i_C\}
在LN中,
Si={kkN=iN}S_i = \{k\mid k_N = i_N\}
在IN中,
Si={kkN=iN,kC=iC}S_i = \{k\mid k_N = i_N, k_C = i_C\}
而在GN中,需要做分組操作,
Si={kkN=iN,kCC/G=iCC/G}S_i = \{k\mid k_N = i_N, \lfloor \frac{k_C}{C/G}\rfloor = \lfloor \frac{i_C}{C/G}\rfloor\}
其中,GG是分組數,是預定義好的超參數(原論文默認值爲32),C/GC/G是每個組分得的通道數。
下面這張圖很形象地說明了BN/LN/IN/GN的差異:
在這裏插入圖片描述

(5)Conditional Batch Normalization(CBN)

傳統的BN中γγββ是通過損失函數反向傳播學習得到參數值(這個值獨立於每次輸入的feature),而CBN中γγββ是輸入的feature經過一個幾層的小神經網絡(原論文中是MLP)前向傳播得到的網絡輸出。由於CBN的γγββ依賴於輸入的feature這個Condition,因此這個改進版的BN叫做CBN。
在這裏插入圖片描述
CBN這一思想在論文《Modulating early visual processing by language》中是爲了解決“在預訓練ResNet提取的圖片底層信息中,融合進自然語言信息,用於輔助圖片信息的提取”這一具體問題而提出的。而後面的《cGANs With Projection Discriminator》和《Self-Attention Generative Adversarial Networks》則是利用Condition的思想,把圖片的 類別信息用來指導生成BN層的仿射參數。

(6)Conditional Instance Normalization(CIN)

CIN相比IN最大的變化就是IN是通過數據學習得到一個單一的仿射參數集合γ\gammaβ\beta,而CIN是對於引入的不同的style學習得到不同的仿射參數集合γs\gamma^sβs\beta^s
CIN(x;s)=γs(xμ(x)σ(x))+βs(5){\rm {CIN}}(x;s)=\gamma^s(\frac{x-\mu(x)}{\sigma(x)})+\beta^s \tag{5}

(7)Adaptive Instance Normalization(AdaIN)

AdaIN接收一個內容輸入xx和一個style輸入yy,通過將xx的通道級(CC)均值和標準差對齊匹配到yy上以實現Normalization。相比BN/IN/CIN,AdaIN沒有需要學習的仿射參數,其能夠自適應地從style輸入中計算仿射參數。
AdaIN(x,y)=σ(y)(xμ(x)σ(x))+μ(y)(6){\rm {AdaIN}}(x,y)=\sigma(y)(\frac{x-\mu(x)}{\sigma(x)})+\mu(y) \tag{6}
AdaIN的IN是因爲其和IN一樣,也是對每一個樣本(NN)的每一個特徵通道(CC),在空間(H,WH,W)計算均值和標準差。

(8)SPatially-Adaptive (DE) normalization(SPADE)

類似於BN,SPADE是在每一個單獨的特徵通道上做歸一化。
給定語義分割的mask mLH×Wm \in L^{H×W},其中LL是指示語義標籤的整數集,HHWW是圖像高度和寬度。
hh是給定包含N個樣本的批次經過網絡後的某層特徵圖,在nN,cC,yH,xWn \in N, c ∈ C, y \in H, x \in W處的激活值爲:
SPADE(h;m)=γc,y,x(m)(hn,c,y,xμcσc)+βc,y,x(m)(7){\rm {SPADE}}(h;\bold m)=\gamma_{c,y,x}(\bold m)(\frac{h_{n,c,y,x}-\mu_c}{\sigma_c})+\beta_{c,y,x}(\bold m) \tag{7}
其中,hn,c,y,xh_{n,c,y,x}是經過normalization之前的激活值,μcσc\mu_c和{\sigma_c}是通道c上激活圖的均值和標準差。
μc(x)=1NHWn,y,xhn,c,y,x\mu_{c}(x)=\frac{1}{NHW}\sum_{n,y,x}h_{n,c,y,x}
σc(x)=1NHWn,y,x(hn,c,y,x)2μc2\sigma_{c}(x)=\sqrt{\frac{1}{NHW}\sum_{n,y,x}{(h_{n,c,y,x})^2-\mu_{c}^2}}
其中γc,y,x(m)βc,y,x(m)\gamma_{c,y,x}(\bold m)和\beta_{c,y,x}(\bold m)是可學習參數,與BN不同的是它們取決於輸入的語義分割mask,而且在不同的座標(y,x)(y,x)處不同。
在這裏插入圖片描述
值得注意的是,如果對mask m\bold m的任意兩點(y1,x1)(y_1,x_1)和(y_2,x_2),y1,y2{1,2,3...,H}y_1,y_2 \in \{1,2,3...,H\}x1,x2{1,2,3...,W}x_1,x_2 \in \{1,2,3...,W\},另仿射參數均相等,即γc,y1,x1γc,y2,x2\gamma_{c,y_1,x_1}\equiv\gamma_{c,y_2,x_2}βc,y1,x1βc,y2,x2\beta_{c,y_1,x_1}\equiv\beta_{c,y_2,x_2}(仿射參數保持空間不變),則SPADE變成CBN(Conditional Batch Normalization)。
當用另外一張style圖像替換mask圖像後,令仿射參數保持空間不變且N=1,則SPADE變成AdaIN。

參考資料

[1] 【AI初識境】深度學習模型中的Normalization,你懂了多少?,有三AI公衆號,https://mp.weixin.qq.com/s/Tuwg070YiXp5Rq4vULCy1w
[2] 詳解深度學習中的Normalization,不只是BN,http://www.dataguru.cn/article-13031-1.html
[3]【算法】Normalization,https://www.cnblogs.com/dplearning/p/10145137.html
[4] 專欄 | 深度學習中的Normalization模型,https://www.sohu.com/a/250702875_129720
[5] BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm總結, https://blog.csdn.net/liuxiao214/article/details/81037416
[6] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, https://arxiv.org/pdf/1502.03167.pdf
[7] Instance Normalization: The Missing Ingredient for Fast Stylization, https://arxiv.org/abs/1607.08022
[8] Layer Normalization, https://arxiv.org/pdf/1607.06450.pdf
[9] Group Normalization, https://arxiv.org/pdf/1803.08494.pdf
[10] Modulating early visual processing by language, https://papers.nips.cc/paper/7237-modulating-early-visual-processing-by-language.pdf
[11] Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization,https://arxiv.org/abs/1703.06868
[12] Semantic Image Synthesis with Spatially-Adaptive Normalization,https://arxiv.org/abs/1903.07291v1
[13] Conditional Batch Normalization 詳解,https://zhuanlan.zhihu.com/p/61248211

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章