1. 程式人生 > >【深度學習】batch normalization

【深度學習】batch normalization

參考:https://www.cnblogs.com/guoyaohua/p/8724433.html

引入原因:深度網路訓練過程中,每一層的引數都會不斷變化,很可能導致每一層的輸出(即對下一層的輸入)的分佈發生變化,因此導致模型收斂變慢,(本質原因:輸出逐漸向左右兩端移動,導致曲線平緩,比如sigmoid,從而梯度消失問題產生,因此收斂越來越慢)。

解決方法:BatchNorm就是在深度神經網路訓練過程中使得每一層神經網路的輸入保持相同分佈的。具體就是將上一層的輸出(即本層的輸入)轉換成均值為0方差為1的比較標準的正態分佈,使得非線性變換函式的輸入值落入對輸入比較敏感的區域,以此避免梯度消失問題。

優點:①不僅僅極大提升了訓練速度,收斂過程大大加快;②還能增加分類效果,一種解釋是這是類似於Dropout的一種防止過擬合的正則化表達方式,所以不用Dropout也能達到相當的效果;③另外調參過程也簡單多了,對於初始化要求沒那麼高,而且可以使用大的學習率等。

注意:normalization的均值方差只基於當前的minibatch,並且normalization對輸入層的每一維單獨計算均值方差。