1. 程式人生 > >Batch Normolization(批歸一化)

Batch Normolization(批歸一化)

Why:

Internal  Covariate Shift:網路中間層在訓練過程中,輸入資料分佈的改變。訓練過程中引數會不斷的更新,前面層訓練引數的更新將導致後面層輸入資料分佈的變化。

因此,模型引數要不斷去適應這種隨迭代變化的輸入分佈,這回導致模型引數學習很慢。如果能使每層的輸入分佈固定(如均值為0,方差為1的高斯分佈),那麼模型引數的學習將會更加容易。

What:

 

將每層輸入的分佈做歸一化的操作,叫做Batch Normolization(批歸一化)。

輸入——>計算mini-batch的均值和方差——>歸一化——>線性變換——>輸出

Results:

  1. 輸入資料樣本空間中的分佈將更加均勻和固定,模型引數的學習也會變得更加容易,顯著加速模型訓練的收斂速度
  2.  限制了在前層的引數的更新,減少了輸入值改變的問題,使輸出值更加穩定,因此有輕微的正則化的效果。
  3. 給隱藏層增加了噪音,有一定的正則化效果。

How:

卷積神經網路經過卷積後得到的是一系列的特徵圖,如果min-batch sizes為m,那麼網路某一層輸入資料可以表示為四維矩陣(m,f,p,q),m為min-batch sizes,f為特徵圖個數,p、q分別為特徵圖的寬高。在cnn中我們可以把每個特徵圖看成是一個特徵處理(一個神經元)

,因此在使用Batch Normalization,mini-batch size 的大小就是:m*p*q,於是對於每個特徵圖都只有一對可學習引數:γ、β。說白了吧,這就是相當於求取所有樣本所對應的一個特徵圖的所有神經元的平均值、方差,然後對這個特徵圖神經元做歸一化

>> 參考:https://blog.csdn.net/hjimce/article/details/50866313