Batch Normalization原理與實戰(zhàn)(2)
在這里,我們構造一個4層神經網絡,輸入層結點數784,三個隱層均為128維,輸出層10個結點,如下圖所示:
實驗中,我們主要控制一下三個變量:
- 權重矩陣(較小初始化權重,標準差為0.05;較大初始化權重,標準差為10)
- 學習率(較小學習率:0.01;較大學習率:2)
- 隱層激活函數(relu,sigmoid)
測試結果如下圖:
我們可以得到以下結論:
- 在訓練與預測階段,加入BN的模型準確率都稍高一點;
- 加入BN的網絡收斂更快(黃線)
- 沒有加入BN的網絡訓練速度更快(483.61it/s>329.23it/s),這是因為BN增加了神經網絡中的計算量
為了更清楚地看到BN收斂速度更快,我們把減少Training batches,設置為3000,得到如下結果:
從上圖中我們就可以清晰看到,加入BN的網絡在第500個batch的時候已經能夠在validation數據集上達到90%的準確率;而沒有BN的網絡的準確率還在不停波動,并且到第3000個batch的時候才達到90%的準確率。
2.2 小權重,小學習率,Sigmoid學習率與權重均沒變,我們把隱層激活函數換為sigmoid。可以發(fā)現,BN收斂速度非常之快,而沒有BN的網絡前期在不斷波動,直到第20000個train batch以后才開始進入平穩(wěn)的訓練狀態(tài)。
2.3 小權重,大學習率,ReLU在本次實驗中,我們使用了較大的學習率,較大的學習率意味著權重的更新跨度很大,而根據我們前面理論部分的介紹,BN不會受到權重scale的影響,因此其能夠使模型保持在一個穩(wěn)定的訓練狀態(tài);而沒有加入BN的網絡則在一開始就由于學習率過大導致訓練失敗。
2.4 小權重,大學習率,Sigmoid在保持較大學習率(learning rate=2)的情況下,當我們將激活函數換為sigmoid以后,兩個模型都能夠達到一個很好的效果,并且在test數據及上的準確率非常接近;但加入BN的網絡要收斂地更快,同樣的,我們來觀察3000次batch的訓練準確率。
當我們把training batch限制到3000以后,可以發(fā)現加入BN后,盡管我們使用較大的學習率,其仍然能夠在大約500個batch以后在validation上達到90%的準確率;但不加入BN的準確率前期在一直大幅度波動,到大約1000個batch以后才達到90%的準確率。
2.5 大權重,小學習率,ReLU當我們使用較大權重時,不加入BN的網絡在一開始就失效;而加入BN的網絡能夠克服如此bad的權重初始化,并達到接近80%的準確率。
2.6 大權重,小學習率,Sigmoid同樣使用較大的權重初始化,當我們激活函數為sigmoid時,不加入BN的網絡在一開始的準確率有所上升,但隨著訓練的進行網絡逐漸失效,最終準確率僅有30%;而加入BN的網絡依舊出色地克服如此bad的權重初始化,并達到接近85%的準確率。
2.7 大權重,大學習率,ReLU當權重與學習率都很大時,BN網絡開始還會訓練一段時間,但隨后就直接停止訓練;而沒有BN的神經網絡開始就失效。
2.8 大權重,大學習率,Sigmoid可以看到,加入BN對較大的權重與較大學習率都具有非常好的魯棒性,最終模型能夠達到93%的準確率;而未加入BN的網絡則經過一段時間震蕩后開始失效。
8個模型的準確率統(tǒng)計如下:
至此,關于Batch Normalization的理論與實戰(zhàn)部分就介紹道這里。總的來說,BN通過將每一層網絡的輸入進行normalization,保證輸入分布的均值與方差固定在一定范圍內,減少了網絡中的Internal Covariate Shift問題,并在一定程度上緩解了梯度消失,加速了模型收斂;并且BN使得網絡對參數、激活函數更加具有魯棒性,降低了神經網絡模型訓練和調參的復雜度;最后BN訓練過程中由于使用mini-batch的mean/variance作為總體樣本統(tǒng)計量估計,引入了隨機噪聲,在一定程度上對模型起到了正則化的效果。
參考資料:
[1] Ioffe S, Szegedy C. Batch normalization: accelerating deep network training by reducing internal covariate shift[C]// International Conference on International Conference on Machine Learning. JMLR.org, 2015:448-456.
[2] 吳恩達Cousera Deep Learning課程
[3] 詳解深度學習中的Normalization,不只是BN
[4] 深度學習中 Batch Normalization為什么效果好?
[5] Udacity Deep Learning Nanodegree
[6] Implementing Batch Normalization in Tensorflow
本文僅做學術分享,如有侵權,請聯系刪文。
*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。