caffe中的batchNorm层(caffe 中为什么bn层要和scale层一起使用)
caffe中的batchNorm層
?
鏈接:?http://blog.csdn.net/wfei101/article/details/78449680
caffe 中為什么bn層要和scale層一起使用
這個問題首先你要理解batchnormal是做什么的。它其實做了兩件事。
1) 輸入歸一化 x_norm = (x-u)/std, 其中u和std是個累計計算的均值和方差。
2)y=alpha×x_norm + beta,對歸一化后的x進行比例縮放和位移。其中alpha和beta是通過迭代學習的。
那么caffe中的bn層其實只做了第一件事。scale層做了第二件事。
這樣你也就理解了scale層里為什么要設置bias_term=True,這個偏置就對應2)件事里的beta:
BatchNorm層優點:
caffe master branch采用的是分離式寫法,conv層扔掉bias,接一個BN層,再接一個帶bias的Scale層。(相當于數據標準化,減均值然后除標準差)
使用:在cnn 后增加,位于神經元非線性變換(relu)前,基本上大多數網絡結構都能很自然地融合進去。
論文中將Batch Normalization的作用說得突破天際,好似一下解決了所有問題,下面就來列舉一下:
(1) 可以使用更高的學習率。如果每層的scale不一致,實際上每層需要的學習率是不一樣的,同一層不同維度的scale往往也需要不同大小的學習率,通常需要使用最小的那個學習率才能保證損失函數有效下降,Batch Normalization將每層、每維的scale保持一致,那么我們就可以直接使用較高的學習率進行優化。
(2) 移除或使用較低的dropout。 dropout是常用的防止overfitting的方法,而導致overfit的位置往往在數據邊界處,如果初始化權重就已經落在數據內部,overfit現象就可以得到一定的緩解。論文中最后的模型分別使用10%、5%和0%的dropout訓練模型,與之前的40%-50%相比,可以大大提高訓練速度。
(3) 降低L2權重衰減系數。 還是一樣的問題,邊界處的局部最優往往有幾維的權重(斜率)較大,使用L2衰減可以緩解這一問題,現在用了Batch Normalization,就可以把這個值降低了,論文中降低為原來的5倍。
(4) 取消Local Response Normalization層。 由于使用了一種Normalization,再使用LRN就顯得沒那么必要了。而且LRN實際上也沒那么work。
(5) 減少圖像扭曲的使用。 由于現在訓練epoch數降低,所以要對輸入數據少做一些扭曲,讓神經網絡多看看真實的數據。
總結;
優點:
1.加速訓練
2.減小權重的值的尺度的影響
3.歸一化所帶來的噪聲也有模型正則化的作用
缺點:
1.那就是在訓練時,因為要對數據進行scale,所以有很多矩陣乘法,導致訓練時間過長。
貌似所有的帶來效果收益的操作都是噪聲所帶來的正則化的功勞,正則化是個啥概念?從幾何上可以這樣理解,NN其實就是在一個高維空間上構建了分類面,數據不變的情況下,這個分類面恰好貼合數據,完美fit訓練集,而添加噪聲后,相當于一些數據的位置不停的在變化,使得分類面發生了可包納的數據量增加了,從而增加的泛化能力。說來說去好像是Data Augmentation的功勞
總結
以上是生活随笔為你收集整理的caffe中的batchNorm层(caffe 中为什么bn层要和scale层一起使用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正负样本不平衡处理方法总结
- 下一篇: 模型优化:BatchNorm合并到卷积中