Normalization Technique總結

1.相關介紹:

神經網絡在多個領域取得了非凡的成就,例如,語音識別,圖像識別等。所以,訓練神經網絡是個重要的任務,gradient descent常被用來尋來拿神經網絡。但在網絡比較深時,gradient descent容易出現梯度消失或梯度爆炸等現象。因此,在使用SGD算法對神經網絡進行優化時,需要小心的對模型超參數進行微調,例如學習速率,模型參數的初始化等。神經網絡的訓練過程是很複雜的,每層的輸入受前面層參數的影響,隨着網絡變得更深,網絡參數的微小變化會放大。
由於上面介紹的現象,神經網絡每層的輸入的數據分佈都會改變,訓練中,會導致每層都需要適應新的數據分佈,這種現象被稱爲internal covariate shift。每層的cocariate shift都會在網絡中延伸。下面有一個對covariate shift比較好的解釋:
這裏寫圖片描述
internal covariate shift 導致的問題:
簡而言之,每個神經元的輸入數據不再是“獨立同分布”。

其一,上層參數需要不斷適應新的輸入數據分佈,降低學習速度。

其二,下層輸入的變化可能趨向於變大或者變小,導致上層落入飽和區,使得學習過早停止。

其三,每層的更新都會影響到其它層,因此每層的參數更新策略需要儘可能的謹慎。

因此,類似訓練數據與測試數據具有相同的分佈的這種分佈屬性有利於神經網絡訓練的更有效率,通過改變神經網絡內部節點數據的分佈,會加快模型的訓練速度。

2.主流Normalization方法

Normalization Technique目前來說主要有四個,分別爲Batch Normalization,Weighted Normalization,Layer Normalization以及Cosine Normalization。下面對這四個Normalizaition分別進行介紹:

2.1 Batch Normalization3

在(1),(2)的工作中,看到在將數據通過線性變換到具有0均值,1方差,並不相關時,即白化處理,可以加快模型的擬合。通過白化處理,能夠將神經網絡中每層的數據分佈固定,並能消除internal covariate shift的不利影響。
白化一般包含兩個目的:

去除特徵之間的相關性 —> 獨立;
使得所有特徵具有相同的均值和方差 —> 同分布。

Batch Normalization算法的主要思想是將每層的輸入使用樣本均值進行平移,方差進行放縮。樣本的均值以及方差可以使用mini-batch的均值以及方差代替。主要的算法思想如下圖所示:
這裏寫圖片描述
相對於一層神經元的水平排列,BN 可以看做一種縱向的規範化。由於 BN 是針對單個維度定義的,因此標準公式中的計算均爲 element-wise 的。
BN 獨立地規範化每一個輸入維度 x_i ,但規範化的參數是一個 mini-batch 的一階統計量和二階統計量。這就要求 每一個 mini-batch 的統計量是整體統計量的近似估計,或者說每一個 mini-batch 彼此之間,以及和整體數據,都應該是近似同分布的。分佈差距較小的 mini-batch 可以看做是爲規範化操作和模型訓練引入了噪聲,可以增加模型的魯棒性;但如果每個 mini-batch的原始分佈差別很大,那麼不同 mini-batch 的數據將會進行不一樣的數據變換,這就增加了模型訓練的難度。
最後,Batch Normalization在每層中的輸入,一般不是x,而是WX+b,不是直接對x進行處理。
這裏寫圖片描述

Batch Normalization的優點:

  • 增加了神經網絡的訓練速度

    下圖顯示了幾個正態分佈:

這裏寫圖片描述

假設某個隱層神經元原先的激活輸入x取值符合正態分佈,正態分佈均值是-2,方差是0.5,對應上圖中最左端的淺藍色曲線,通過BN後轉換爲均值爲0,方差是1的正態分佈(對應上圖中的深藍色圖形),意味着什麼,意味着輸入x的取值正態分佈整體右移2(均值的變化),圖形曲線更平緩了(方差增大的變化)。這個圖的意思是,BN其實就是把每個隱層神經元的激活輸入分佈從偏離均值爲0方差爲1的正態分佈通過平移均值壓縮或者擴大麴線尖銳程度,調整爲均值爲0方差爲1的正態分佈。
那麼把激活輸入x調整到這個正態分佈有什麼用?
首先我們看下均值爲0,方差爲1的標準正態分佈代表什麼含義:
這裏寫圖片描述
這意味着在一個標準差範圍內,也就是說64%的概率x其值落在[-1,1]的範圍內,在兩個標準差範圍內,也就是說95%的概率x其值落在了[-2,2]的範圍內。那麼這又意味着什麼?我們知道,激活值x=WU+B,U是真正的輸入,x是某個神經元的激活值,假設非線性函數是sigmoid,那麼看下sigmoid(x)其圖形:
這裏寫圖片描述
及sigmoid(x)的導數爲:G’=f(x)*(1-f(x)),因爲f(x)=sigmoid(x)在0到1之間,所以G’在0到0.25之間,其對應的圖如下:
這裏寫圖片描述

假設沒有經過BN調整前x的原先正態分佈均值是-6,方差是1,那麼意味着95%的值落在了[-8,-4]之間,那麼對應的Sigmoid(x)函數的值明顯接近於0,這是典型的梯度飽和區,在這個區域裏梯度變化很慢,爲什麼是梯度飽和區?請看下sigmoid(x)如果取值接近0或者接近於1的時候對應導數函數取值,接近於0,意味着梯度變化很小甚至消失。而假設經過BN後,均值是0,方差是1,那麼意味着95%的x值落在了[-2,2]區間內,很明顯這一段是sigmoid(x)函數接近於線性變換的區域,意味着x的小變化會導致非線性函數值較大的變化,也即是梯度變化較大,對應導數函數圖中明顯大於0的區域,就是梯度非飽和區。

從上面幾個圖應該看出來BN在幹什麼了吧?其實就是把隱層神經元激活輸入x=WU+B從變化不拘一格的正態分佈通過BN操作拉回到了均值爲0,方差爲1的正態分佈,即原始正態分佈中心左移或者右移到以0爲均值,拉伸或者縮減形態形成以1爲方差的圖形。什麼意思?就是說經過BN後,目前大部分Activation的值落入非線性函數的線性區內,其對應的導數遠離導數飽和區,這樣來加速訓練收斂過程。

  • Batch Normalization 對模型進行正則化

2.2 LayerNormalization4

layer normalization主要是針對batch normalization在RNN網絡中不太適用而提出的。
這裏寫圖片描述

層規範化就是針對 BN 的上述不足而提出的。與 BN 不同,LN 是一種橫向的規範化,如圖所示。它綜合考慮一層所有維度的輸入,計算該層的平均輸入值和輸入方差,然後用同一個規範化操作來轉換各個維度的輸入。
考慮在一個前向神經網絡=的lth隱藏層,al表示所有該隱藏層所有輸入的和的向量表示,W表示權值矩陣。則:
這裏寫圖片描述
其中,f(.)表示element-wise 非線性函數,b表示偏置參數。與batch normalization不同,layer normalization的均值以及方差可以計算爲:
這裏寫圖片描述
其中H表示爲隱藏層神經元的的數目。

LN 針對單個訓練樣本進行,不依賴於其他數據,因此可以避免 BN 中受 mini-batch 數據分佈影響的問題,可以用於 小mini-batch場景、動態網絡場景和 RNN,特別是自然語言處理領域。此外,LN 不需要保存 mini-batch 的均值和方差,節省了額外的存儲空間。

但是,BN 的轉換是針對單個神經元可訓練的——不同神經元的輸入經過再平移和再縮放後分布在不同的區間,而 LN 對於一整層的神經元訓練得到同一個轉換——所有的輸入都在同一個區間範圍內。如果不同輸入特徵不屬於相似的類別(比如顏色和大小),那麼 LN 的處理可能會降低模型的表達能力。

layer normalization在RNN中的應用:
在標準的RNN中,當前的輸入Xt和先前的隱藏層ht-1組成了下一層隱藏層的輸入:
這裏寫圖片描述
因此,在RNN中使用layer normalization的主要方式爲:
這裏寫圖片描述
其中Whh 表示隱藏層到隱藏層的權值矩陣,Wxh 表示輸入到隱藏層的權值矩陣,g用來進行縮放。

2.3 WeightNormalization5

與Batch Normalization與Layer Normalization不同,Weight Normalization主要是針對神經網絡中的權值進行線性變換,而BN與LN是針對不同層的數據進行處理。
這裏寫圖片描述
在標準的人工神經網絡中,每個神經元的計算可以表示爲:
這裏寫圖片描述
其中,w表示爲k維的權值向量,b是一個標量偏置項,x是一個k維的輸入向量。
weight normalization算法的思想是reparameterize每個權值向量w,主要使用參數向量v以及標量參數g,SGD算法主要對v,g參數進行優化。具體的公式可以表示爲:
這裏寫圖片描述
其中||W||=g,v是k維向量。
另外,針對weight normalization的優化可以表示爲(使用SGD):
這裏寫圖片描述
weight normalization的優化主要是針對g和v。

WN 的規範化不直接使用輸入數據的統計量,因此避免了 BN 過於依賴 mini-batch 的不足,以及 LN 每層唯一轉換器的限制,同時也可以用於動態網絡結構。BN 和 LN 是用輸入的特徵數據的方差對輸入數據進行 scale,而 WN 則是用 神經元的權重的歐氏範式對輸入數據進行 scale。雖然在原始方法中分別進行的是特徵數據規範化和參數的規範化,但本質上都實現了對數據的規範化,只是用於 scale 的參數來源不同。

2.4 ConsineNormalization6

在傳統的神經網絡結構中,主要是使用了dot product,如下所示:
這裏寫圖片描述
其中,net表示的是激活函數的輸入,x表示爲輸入向量或是前一層的輸出。另外,上面的式子可以重寫爲:
這裏寫圖片描述
因爲dot product的結果是無界的,所以增加了大方差的風險,而大的方差導致模型對輸入分佈改變的敏感,最後造成了差得泛化能力。大的方差可能也會加劇internal covariate shift。爲了限制dot product,直接的方法是可以使用cosine similarity。
因此,consine normalization的思想是使用consine similarity代替dot product,這樣網絡的值被限定在[-1,1]之間。
這裏寫圖片描述
cosine normalization算法的導數推導:
爲了求導方便,可以net=wx轉化爲:
這裏寫圖片描述
因此,相關的導數爲:
這裏寫圖片描述

則cosine normalization的導數爲:
這裏寫圖片描述
這裏寫圖片描述

可以簡化的表示爲:
這裏寫圖片描述

固定units的輸入有利於模型的訓練,Batch Normalization以及Layer Normalization都對輸入數據進行了center處理,因此可以使用Pearson Correlation Coefficient對數據進行中心化處理。具體如下所示:
這裏寫圖片描述
算法對比
1)與weight normalization對比
針對數據的縮放,cosine normalization使模型更爲的robust,另外,在backward procedure中,weight normalization的導數可以表示爲:
這裏寫圖片描述
當將輸入縮放λ,則:
這裏寫圖片描述
而cosine normalization縮放後,與分母消除掉,則與沒有縮放前的公式一致。
2)與layer normalization對比(pearson correlation coefficient)
Pearson correlation coefficient主要是針對w和x進行constrains,而layer normalization僅對x進行了constrains。因此,PCC在對weight以及input進行scale以及shift時更爲的robust。
Layer Normalization計算mean和standard deviation在activation之前和dot product之後。而PCC計算mean和standard deviation在dot product之前和activation之後。
在卷積神經網絡中,PCC從receptive field中計算mean以及standard deviation,而layer normalization則是從整個layer中計算mean和standard deviation。

3. 總結

3.1 權重伸縮不變性

權重伸縮不變性(weight scale invariance)指的是,當權重 \bold{W} 按照常量 \lambda 進行伸縮時,得到的規範化後的值保持不變,即:
這裏寫圖片描述
其中W=λW
上述規範化方法均有這一性質,這是因爲,當權重 \bold{W} 伸縮時,對應的均值和標準差均等比例伸縮,分子分母相抵。
Norm(Wx)=Norm(gWxμσ+b)=Norm(gλWxλμλσ+b)=Norm(gWxμσ+b)=Norm(Wx)
權重伸縮不變性可以有效地提高反向傳播的效率。

由於
Norm(Wx)x=Norm(Wx)x

因此,權重的伸縮變化不會影響反向梯度的 Jacobian 矩陣,因此也就對反向傳播沒有影響,避免了反向傳播時因爲權重過大或過小導致的梯度消失或梯度爆炸問題,從而加速了神經網絡的訓練。

權重伸縮不變性還具有參數正則化的效果,可以使用更高的學習率。
由於Norm(Wx)W=1λNorm(Wx)W
因此,下層的權重值越大,其梯度就越小。這樣,參數的變化就越穩定,相當於實現了參數正則化的效果,避免參數的大幅震盪,提高網絡的泛化性能。

3.2 Normalization 的數據伸縮不變性

數據伸縮不變性(data scale invariance)指的是,當數據 \bold{x} 按照常量 \lambda 進行伸縮時,得到的規範化後的值保持不變,即:
Norm(Wx)=Norm(Wx)
其中 x=λx
數據伸縮不變性僅對 BN、LN 和 CN 成立。因爲這三者對輸入數據進行規範化,因此當數據進行常量伸縮時,其均值和方差都會相應變化,分子分母互相抵消。而 WN 不具有這一性質。
數據伸縮不變性可以有效地減少梯度彌散,簡化對學習率的選擇。
對於某一層神經元hl=fWl(xl) 而言,展開可得
hl=fWl(xl)=fWl(fWl1(xl1))==x0k=0lWk
每一層神經元的輸出依賴於底下各層的計算結果。如果沒有正則化,當下層輸入發生伸縮變化時,經過層層傳遞,可能會導致數據發生劇烈的膨脹或者彌散,從而也導致了反向計算時的梯度爆炸或梯度彌散。

加入 Normalization 之後,不論底層的數據如何變化,對於某一層神經元 hl=fWl(xl) 而言,其輸入 \bold{x}_l 永遠保持標準的分佈,這就使得高層的訓練更加簡單。從梯度的計算公式來看:
Norm(Wx)W=Norm(Wx)W
數據的伸縮變化也不會影響到對該層的權重參數更新,使得訓練過程更加魯棒,簡化了對學習率的選擇。

參考文獻:

(1)LeCun, Y., Bottou, L., Orr, G., and Muller, K. Efficient backprop. In Orr, G. and K., Muller (eds.), Neural Net- works: Tricks ofthe trade. Springer, 1998b.
(2)Wiesler, Simon and Ney, Hermann. A convergence anal- ysis of log-linear training. In Shawe-Taylor, J., Zemel, R.S., Bartlett, P., Pereira, F.C.N., and Weinberger, K.Q. (eds.), Advances in Neural Information Processing Sys- tems 24, pp. 657–665, Granada, Spain, December 2011.
(3)Ioffe, Sergey,Szegedy, Christian.Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
(4)Ba, Jimmy Lei,Kiros, Jamie Ryan,Hinton, Geoffrey E.Layer Normalization
(5)Salimans, Tim,Kingma, Diederik P.Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks
(6)Luo, Chunjie,Zhan, Jianfeng,Wang, Lei,Yang, Qiang.Cosine Normalization: Using Cosine Similarity Instead of Dot Product in Neural Networks

參考博客:
(1)https://zhuanlan.zhihu.com/p/33173246
(2)https://blog.csdn.net/malefactor/article/details/51476961

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