03.02 如何理解深度學習中Batch Normalization的作用?

浪浪的老唐


Batch Normaliaztion算法是Google在2015年提出來的。其旨在解決神經網絡隨著層數越來越深,而無法訓練的問題。

自2012年AlexNet的提出,深度神經網絡特別是卷積神經網絡取得了長足的進步,在ImageNet比賽中大放異彩。人們發現卷積神經網絡的效果依賴與層數的加深,但是這樣卻不可避免的出現訓練困難的問題。

其原因在於訓練卷積神經網絡時,採用mini-batch的隨機梯度下降算法進行訓練,那麼隨著輸入數據的不斷變化,網絡中的參數會不斷調整,導致各層輸入數據的分佈則會不斷變化,而且隨著訓練次數的增加,分佈的差異會越來越大,也就是發生了Internal Covariate Shift。那麼更新每一層參數的過程中就需要不斷的改變以適應這種新的數據分佈,從而大大降低了訓練速度,造成訓練困難,難以擬合的問題。

因此BN實際上就是對每一層的數據都進行了一次歸一化,即均值為0,方差為1,從而使得每一層數據分佈的尺度儘可能的相似,來消除Internal Covariate Shift,加速網絡訓練。但是如果僅僅讓數據分佈在0左右,那麼對於sigmoid激活函數而言,相當於只用到了其線性部分,那麼整個網絡的擬合能力就會大大下降,因此在對數據進行歸一化之後,還需要進行變換重構,即引入新的參數,讓網絡能夠自動的學習恢復出原始網絡所需要學習的特徵分佈。

BN添加的位置具體位於卷積層和激活層之間,BN的實現具體過程如下:

由於BN層優異的特性,不僅極大的加快了訓練速度,也大大的減輕了網絡調參的難度。比如可以直接使用較大的初始學習率進行訓練,因為如果每一層的分佈尺度不同,所需的學習率也是不一樣的。因此需要使用最小的學習率才能保證損失函數的收斂。而Batch Normalization將每層的數據分佈尺度保持一致,就用較高的學習率進行優化。

此外由於BN的引入提升了網絡的泛化能力,從而在設計網絡時可以移除dropout層、降低權重的L2衰減係數。


分享到:


相關文章: