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的功勞


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章