1 Batch Normalization(BN)的作用
1.1 特徵分佈對神經網絡訓練的作用
在神經網絡的訓練過程中,我們一般會將輸入樣本特徵進行歸一化處理,使數據變爲均值爲0,標準差爲1的分佈或者範圍在0~1的分佈。因爲當我們沒有將數據進行歸一化的話,由於樣本特徵分佈較散,可能會導致神經網絡學習速度緩慢甚至難以學習。
用2維特徵的樣本做例子。如下兩個圖
上圖中樣本特徵的分佈爲橢圓,當用梯度下降法進行優化學習時,其優化過程將會比較曲折,需要經過好久才能到達最優點。
上圖中樣本特徵的分佈爲比較正的圓,當用梯度下降法進行優化學習時,其有過的梯度方向將往比較正確的方向走,訓練比較快就到達最優點。
因此一個比較好的特徵分佈將會使神經網絡訓練速度加快,甚至訓練效果更好
1.2 BN的作用
但是我們以前在神經網絡訓練中,只是對輸入層數據進行歸一化處理,卻沒有在中間層進行歸一化處理。要知道,雖然我們對輸入數據進行了歸一化處理,但是輸入數據經過 這樣的矩陣乘法以及非線性運算之後,其數據分佈很可能被改變,而隨着深度網絡的多層運算之後,數據分佈的變化將越來越大。如果我們能在網絡的中間也進行歸一化處理,是否對網絡的訓練起到改進作用呢?答案是肯定的。
這種在神經網絡中間層也進行歸一化處理,使訓練效果更好的方法,就是批歸一化Batch Normalization(BN)。BN在神經網絡訓練中會有以下一些作用:
- 加快訓練速度
- 可以省去dropout,L1, L2等正則化處理方法
- 提高模型訓練精度
2. BN的原理
既然BN這麼厲害,那麼BN究竟是怎麼樣的呢?
BN可以作爲神經網絡的一層,放在激活函數(如Relu)之前。BN的算法流程如下圖:
1. 求上一層輸出數據的均值
2. 求上一層輸出數據的標準差
3. 歸一化處理,得到
4. 對經過上面歸一化處理得到的數據進行重構,得到
上述是BN訓練時的過程,但是當在投入使用時,往往只是輸入一個樣本,沒有所謂的均值 和標準差 ,那該怎麼辦呢?此時,網絡中使用的均值 是計算所有batch 值的平均值得到,標準差 採用每個batch 的無偏估計得到。