【算法】Normalization


Normalization(歸一化)

寫這一篇的原因是以前只知道一個Batch Normalization,自以為懂了。結果最近看文章,又發現一個Layer Normalization,一下就懵逼了。搞不懂這兩者的區別。后來是不查不知道,一查嚇一跳,Normalization的方法五花八門,Batch Normalization, Layer Normalization, Weight Normalization, Cosine Normalization, Instance Normalization, Group Normlization, Switchable Normlization.... 估計我沒看到的還有很多。而且郁悶的是,感覺越看越不懂了...

這里簡單記錄一下目前的理解與問題。

白化

白化的目的是希望特征符合獨立同分布i.i.d條件。包括:

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

這里我有了第一個問題。什么叫做去除特征之間的相關性?
比如,有兩個輸入向量,X1=(x11,x12,x13,x14), X2=(x21,x22,x23,x24)
去除特征之間的相關性,只是去除x11,x12,x13,x14之間的相關性,還是去除x11和x21的相關性?

Normalization的好處

  1. 使得數據更加符合獨立同分布條件,減少internal corvariate shift導致的偏移
  2. 使數據遠離激活函數的飽和區,加快速度。(我理解是只對sigmoid這樣的激活函數有效,對relu則沒有加速作用了)

Normalization基本公式

\[h=f(g\frac{x-\mu}{\sigma}+b) \]

\(\mu\):均值
\(\sigma\):方差根
\(b\): 再平移參數,新數據以\(b\)為均值
\(g\): 再縮放參數,新數據以\(g^2\)為方差
歸一化后的目標就是統一不同\(x\)之間的均值和方差

加入\(g\)\(b\)的目的是使數據一定程度偏離激活函數的線性區,提高模型表達能力。因為均值是0的話正好落在sigmoid函數的線性部分。

第二個問題,g和b是根據什么確定的,是trainable的嗎?

Batch Normalization

Batch Normalization是針對不同batch導致的數據偏移做歸一化的方式。比如,一個batch有3個輸入,每個輸入是一個長度為4的向量。
\(X1=(x11,x12,x13,x14)\)
\(X2=(x21,x22,x23,x24)\)
\(X3=(x31,x32,x33,x34)\)

在上述條件下,歸一化時的均值是:
\(\mu=(\frac{x11+x21+x31}{3},\frac{x12+x22+x32}{3},\frac{x13+x23+x33}{3},\frac{x14+x24+x34}{3})\)

這里主要展示一下計算時的方向,即對於每個元素位置,對不同的輸入做歸一化。方差同理。

第三個問題,很多文章都說batch norm需要在batch size較大,不同batch之間均值方差相差不大的情況下效果好。
即batch的均值方差跟整體的均值方差一致時效果好。
這我就不懂了,無論之前每個batch的分布是怎樣的,經過歸一化,都已經是相同分布了。為什么一定要原始batch之間分布相似呢?

Batch norm有個缺點,即需要記錄每一個batch輸入的均值和方差,對於變長的RNN網絡來說計算麻煩。

第四個問題:為什么要記錄每個batch的均值和方差?對RNN效果不好僅僅因為麻煩嗎?
我個人理解BN在RNN上效果不好的原因是,雖然RNN訓練時網絡深度很深,但實際上只有一個神經元節點,相當於把所有層的神經元的均值和方差設定為相同的值了,導致效果不佳。

如果是圖像,則輸入是一個四維矩陣,(batch_size, channel_size, weight, height),此時batch norm是針對同一個batch的不同輸入中屬於同一通道的元素做歸一化。如下圖,是一個batch_size=2, channel_size=6, weight=5, height=3的例子。一次batch norm是對所有橙色部分元素做歸一化。

Layer Normalization

Layer Normalization是針對同一個輸入的不同維度特征的歸一化方式。還是用上面的例子。
對於\(X1\)來說,layer norm的歸一化均值是: \(\mu=\frac{x11+x12+x13+x14}{4}\)

對於圖像來說,則是對一個輸入的所有元素做歸一化。如下圖橙色部分:

Instance Norm

對一個輸入圖像的一個通道中的所有元素做歸一化。如下圖橙色部分:

Group Norm

對於一個輸入圖像的多個通道元素做歸一化。如下圖橙色部分:

Weight Norm

前面的歸一化方法都是從不同維度對輸入數據做歸一化,而weight norm則是對權重做歸一化。

Cosine Norm

拋棄了權重和輸入點積的計算方式,改用其他函數。

參考文獻

  1. https://zhuanlan.zhihu.com/p/33173246
  2. https://blog.csdn.net/liuxiao214/article/details/81037416


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM