1. 程式人生 > 實用技巧 >圖解BN,LN,IN,SN資料歸一化

圖解BN,LN,IN,SN資料歸一化

目錄

簡介

  1. BN(Batch Normalization)於2015年由 Google 提出,開創了Normalization 先河;2016年出了LN(layer normalization)和IN(Instance Normalization);2018年提出了GN(Group normalization)和SN(Switchable Normalization)。
  2. 獨立同分布(i.i.d)
    機器學習領域有個很重要的假設:IID獨立同分布假設,就是假設訓練資料和測試資料是滿足相同分佈這樣才能保證通過訓練資料獲得的模型,能夠在測試集獲得好的效果。那BatchNorm的作用是什麼呢?BatchNorm就是在深度神經網路訓練過程中使得每一層神經網路的輸入保持相同分佈的。(獨立同分布的資料可以簡化常規機器學習模型的訓練、提升機器學習模型的預測能力,這已經是一個共識。)
  3. Internal Covariate Shift–內部協變數轉移
    如果ML系統例項集合<X,Y>中的輸入值X的分佈老是變,這不符合IID假設,網路模型很難穩定地學規律,這不得引入遷移學習才能搞定嗎,我們的ML系統還得去學習怎麼迎合這種分佈變化啊。對於深度學習這種包含很多隱層的網路結構,在訓練過程中,因為各層引數不停在變化,所以每個隱層都會面臨covariate shift的問題,也就是在訓練過程中,隱層的輸入分佈老是變來變去,這就是所謂的“Internal Covariate Shift”。Internal指的是深層網路的隱層,是發生在網路內部的事情,而不是covariate shift問題只發生在輸入層。這也是我們要解決的問題。

    每個神經元的輸入資料不再是“獨立同分布”的後果:
    1. 各層引數需要不斷適應新的輸入資料分佈,降低學習速度。(學習率不能大,訓練速度緩慢)
    2. 深層輸入的變化可能趨向於變大或者變小,導致淺層落入飽和區,使得學習過早停止。(容易梯度飽和、消失。)
    3. 每層的更新都會影響到其它層,因此每層的引數更新策略需要儘可能謹慎地選擇。(調參困難)

計算流程

BN、LN、IN和GN這四個歸一化的計算流程幾乎是一樣的,可以分為四步:
1.計算出均值
2.計算出方差
3.歸一化處理到均值為0,方差為1
4.變化重構,恢復出這一層網路所要學到的分佈
在這裡插入圖片描述

為什麼要對資料歸一化

啟用輸入值定義:就是relu層之前的那個輸入值。也就是說資料經過歸一化

後,才能給relu,如下圖(每個啟用層前都要經過BN歸一化
在這裡插入圖片描述

  1. 隨著網路深度加深或者在訓練過程中,啟用輸入值的分佈逐漸發生偏移或者變動,一般是整體分佈逐漸往非線性函式的取值區間的上下限兩端靠近(對於Sigmoid函式來說,在極大或極小的值處函式的導數接近0),所以這導致反向傳播時低層神經網路的梯度消失,這是訓練深層神經網路收斂越來越慢的本質原因。而BN就是通過一定的規範化手段,把每層神經網路任意神經元這個啟用輸入值的分佈強行拉回到均值為0方差為1的標準正態分佈,這樣使得啟用輸入值落在非線性函式對輸入比較敏感的區域(例如sigmoid函式的中間的部分),這樣輸入的小變化就會導致損失函式較大的變化。
    在這裡插入圖片描述

Batch Normalization

  1. 均值方差的計算
    在這裡插入圖片描述

  2. Inference階段均值方差的求取
    對於train階段,一個min_batch=32, 32張圖片用來求均值方差,但是Inference階段一次查詢一張圖片的話便沒有了min_batch。可以用從所有train例項中獲得的統計量的平均值來代替inference階段的均值和方差統計量
    在這裡插入圖片描述

  3. BatchNorm的優勢與侷限
    優點

    • 極大提升了訓練速度,收斂過程大大加快;
    • 還能增加分類效果,一種解釋是這是類似於Dropout的一種防止過擬合的正則化表達方式,所以不用Dropout也能達到相當的效果;
    • 另外調參過程也簡單多了,對於初始化要求沒那麼高,而且可以使用大的學習率等;

    缺點

    • 由於BN與mini-batch的資料分佈緊密相關,故而mini-batch的資料分佈需要與總體的資料分佈近似相等。因此BN適用於batch size較大且各mini-batch分佈相近似的場景下(訓練前需進行充分的shuffle)。BN計算過程需要儲存某一層神經網路batch的均值和方差等統計資訊,適合定長網路結構DNN CNN,不適用動態網路結構RNN。

Layer Normalizaiton

BN特別依賴batch Size,所以接下來提出Layer Normalizaiton,一張圖片計算一組均值和方差,使得LN不受batch size的影響。同時,LN可以很好地用到序列型網路RNN中。
在這裡插入圖片描述

Instance Normalization

在這裡插入圖片描述
影象風格化中,生成結果主要依賴於某個影象的例項。所以適合對每個feature map特徵圖(HW)做歸一化操作,保證各影象例項間的獨立。

Group Normalization

BN所遇到的問題(batch size太大的話會out of memory)。GN對系統的優化程度完全不依賴Batch size有多大。Group Normalization的error不受batchsize影響,但是對於網路優化效能的提升是否好過batch norm,自己還沒用過。
在這裡插入圖片描述

在這裡插入圖片描述

Switchable Normalization

SN自適配歸一化方法,將 BN、LN、IN 結合,賦予不同權重,讓網路自己去學習歸一化層應該使用什麼方法
在這裡插入圖片描述

References
https://blog.csdn.net/u013289254/article/details/99690730
https://www.cnblogs.com/guoyaohua/p/8724433.html
https://blog.csdn.net/ft_sunshine/article/details/99203548
https://blog.csdn.net/qq_24153697/article/details/79880202