Batch Normalization(批標准化,BN)


1.什么是標准化?

標准化:使數據符合 0 均值,1 為標准差的分布。

神經網絡對0附近的數據更敏感,但是隨着網絡層數的增加,特征數據會出現偏離0均值的情況,標准化能夠使數據符合0均值,1為標准差的分布,把偏移的特征數據重新拉回到0附近

Batch Normalization(批標准化): 對一小批數據在網絡各層的輸出做標准化處理,其具體實現方式如圖 5-10 所示。
Batch Normalization 將神經網絡每層的輸入都調整到均值為 0,方差為 1 的標准正態分布, 其目的是解決神經網絡中梯度消失的問題,如圖 5-11 所示。

 

 BN操作使得原本偏移的特征數據,如5-11的第一個圖,重新拉回到0均值,使進入激活函數的數據分布在激活函數線性區,使得輸入數據的微小變化,更明顯的體現到激活函數的輸出,提升了激活函數對輸入數據的區分力。

但是,這種簡單的特征數據標准化,使特征數據完全滿足標准正態分布,圖5-12黃色的線,集中在激活函數中心的線性區域,使激活函數喪失了非線性特性,因此在BN操作中為每個卷積核引入了兩個可訓練的參數,縮放因子γ和偏移因子β,會與其他待訓練參數一同被訓練化,使標准正態分布后的特征數據通過縮放因子和偏移因子,優化了特征數據分布的寬窄和偏移量。保證了網絡的非線性表達力(如果不加入這兩個參數,相當於這一層所學習的特征分布被搞壞了)

BN 操作的另一個重要步驟是縮放和偏移,值得注意的是,縮放因子 γ 以及偏移因子 β都是可訓練參數,其作用如圖 5-12 所示。

 

 2.BN層的位置(也屬於網絡的一層,即相當於加了個預處理層)

BN 操作通常位於卷積層之后,激活層之前,在 Tensorflow 框架中,通常使用 Keras 中的 tf.keras.layers.BatchNormalization 函數來構建 BN 層。在調用此函數時,需要注意的一個參數是 training,此參數只在調用時指定,在模型進行前向推理時產生作用,當 training = True 時, BN 操作采用當前 batch 的均值和標准差;當training = False 時, BN 操作采用滑動平均(running)的均值和標准差。
在 Tensorflow 中,通常會指定 training = False,可以更好地反映模型在測試集上的真實效果。

3.滑動平均

滑動平均(running) 的解釋:滑動平均,即通過一個個 batch 歷史的疊加,最終趨向數據集整體分布的過程,在測試集上進行推理時,滑動平均的參數也就是最終保存的參數。
此外, Tensorflow 中的 BN 函數其實還有很多參數,其中比較常用的是 momentum,即動量參數, 與 sgd 優化器中的動量參數含義類似但略有區別, 具體作用為滑動平均 running =momentum * running + (1 – momentum) * batch, 一般設置一個比較大的值, 在 Tensorflow 框架中默認為 0.99。

 

4.tensorflow中BN的使用

 

1.1 tf.nn.moments

 (1)計算2x3向量的mean和variance

 

 

(2)計算卷積神經網絡某層的mean和variance

假定我們需要計算的數據形狀是[batchsize, height, width, kernels]

輸出:

 

 

 (3)tf.nn.batch_normalizatin

 

 

 

 注意:

tf.control_dependencies(control_inputs)

 

 


免責聲明!

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



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