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