【算法】Normalization

Normalization(歸一化)

寫這一篇的緣由是之前只知道一個Batch Normalization,自覺得懂了。結果最近看文章,又發現一個Layer Normalization,一下就懵逼了。搞不懂這二者的區別。後來是不查不知道,一查嚇一跳,Normalization的方法五花八門,Batch Normalization, Layer Normalization, Weight Normalization, Cosine Normalization, Instance Normalization, Group Normlization, Switchable Normlization.... 估計我沒看到的還有不少。並且鬱悶的是,感受越看越不懂了...網絡

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

白化

白化的目的是但願特徵符合獨立同分布i.i.d條件。包括:spa

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

這裏我有了第一個問題。什麼叫作去除特徵之間的相關性?
好比,有兩個輸入向量,X1=(x11,x12,x13,x14), X2=(x21,x22,x23,x24)
去除特徵之間的相關性,只是去除x11,x12,x13,x14之間的相關性,仍是去除x11和x21的相關性?.net

Normalization的好處

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

Normalization基本公式

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

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

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

第二個問題,g和b是根據什麼肯定的,是trainable的嗎?get

Batch Normalization

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

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

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

第三個問題,不少文章都說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. http://www.javashuo.com/article/p-dzhwesqi-ht.html
相關文章
相關標籤/搜索