Batch Normalization和Layer Normalization的區別

網上有不少解釋,包括下面這張圖片
圖片出處:https://mlexplained.com/2018/11/30/an-overview-of-normalization-methods-in-deep-learning/
光靠圖片理解還是不夠,而且特別容易理解反了。這裏用一個實例進行講解。
一個非常簡單的數據集,包含兩個sample,3個features。
第一個sample: X1=1.0,X2=1.0, X3=1.0
第二個sample: X1=10.0,X2=10.0, X3=10.0

data = tf.constant([1.0,1.0,1.0],[10.0,10.0,10.0])

Layer Normalization

tf.keras.layers.LayerNormalization()(data)

給出的結果是

<tf.Tensor: id=260, shape=(2, 3), dtype=float32, numpy=
array([[0., 0., 0.],
       [0., 0., 0.]], dtype=float32)>

Batch Normalization

tf.keras.layers.BatchNormalization()(data)

給出的結果是

<tf.Tensor: id=311, shape=(2, 3), dtype=float32, numpy=
array([[0.9995004, 0.9995004, 0.9995004],
       [9.995004 , 9.995004 , 9.995004 ]], dtype=float32)>

總結

由於數據集中每個sample中的3個feature的取值都一樣,所以Layer Normalization之後值全部變成0。也就是說

  • Batch Normalization是將feature X在所有batch sample中normalization,所有batch sample中的featture X根據得到的平均值和方差進行normalization;
  • Layer Normalization是將每個batch sample中的三個feature X1 X2 X3進行normalization,每個batch sample中的三個feature根據得到的平均值和方差進行normalization。由於Layer Normalization是每個sample獨立進行的,所以統計參數(平均值和方差)對於每個sample來說是互相獨立的。

參考文獻

  1. https://mlexplained.com/2018/11/30/an-overview-of-normalization-methods-in-deep-learning/
  2. https://mlexplained.com/2018/01/13/weight-normalization-and-layer-normalization-explained-normalization-in-deep-learning-part-2/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章