Batch Normalization的算法本質是在網絡每一層的輸入前增加一層BN層(也即歸一化層),對數據進行歸一化處理,然后再進入網絡下一層,但是BN並不是簡單的對數據進行求歸一化,而是引入了兩個參數λ和β去進行數據重構


Batch Normalization

Batch Normalization是深度學習領域在2015年非常熱門的一個算法,許多網絡應用該方法進行訓練,並且取得了非常好的效果。

眾所周知,深度學習是應用隨機梯度下降法對網絡進行訓練,盡管隨機梯度下降訓練神經網絡非常有效,但是它有一個缺點,就是需要人為的設定很多參數,比如學習率,權重衰減系數,Dropout比例等。這些參數的選擇對訓練結果至關重要,以至於訓練的大多數精力都耗費在了調參上面。BN算法就可以完美的解決這些問題。

當我們使用了BN算法,我們可以去選擇比較大的初始學習率,這樣就會加快學習的速度;我們還可以不必去理會過擬合中的dropout、正則項約束問題等,因為BN算法可以提高網絡的泛化能力;我們再也不需要使用局部響應歸一化層,因為BN本身就是歸一化的網絡;還可以打亂訓練數據,防止每批訓練的時候,某一個樣本經常被選到。

通常在訓練神經網絡之前,我們都會對數據進行歸一化處理,為什么呢?因為神經網絡訓練實際是為了學習數據的分布情況,一旦訓練數據與測試數據分布不同,那么網絡的泛化能力也會大大降低。另外,如果每一批的訓練數據都不同,那么神經網絡就會去適應不同訓練數據的分布,這樣就會大大降低網絡訓練的速度。

深度學習的訓練是一個復雜的過程,如果前幾層的數據分布發生了變化,那么后面就會積累下去,不斷放大,這樣就會導致神經網絡在訓練過程中不斷適應新的數據分布,影響網絡訓練的速度。

但是在網絡訓練的過程中,參數會不斷的調整,除了輸入層數據之外,后面網絡每一層的輸入分布在不斷變化的(因為后面層的輸入時前面層的輸出,前面層的參數調整了,后面層的輸入數據分布就會發生變化)。這樣就會降低網絡訓練的速度。因此,BN算法就被提出。

BN的算法本質是在網絡每一層的輸入前增加一層BN層(也即歸一化層),對數據進行歸一化處理,然后再進入網絡下一層,但是BN並不是簡單的對數據進行求歸一化,而是引入了兩個參數λβ去進行數據重構,具體公式如下: 
BN

那么為什么要引入這兩個參數呢?因為網絡中某一層學習到的特征本來就在S型函數兩端,如果強行進行歸一化處理,那么就會破壞這一層中學到的特征。而加入了這兩個參數,可以將學到的特征重新映射回原來的網絡所學習到的特征分布,因此不會破壞原來學到的特征。

實驗表明,Batch Normalization效果驚人的好,訓練速度可以達到原來的十倍以上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM