Batch Normalization

出自論文:

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

  1. Introduction
    隨機梯度下降法(SGD)在很多模型上都取得了很不錯的效果,尤其是結合了mini-batch之後,一方面計算效率更高,另一方面梯度估計的更加準確。然而,SGD對模型的超參數十分敏感,尤其是學習率。
    此外,還有一個問題,也就是模型的不同層的輸入會隨着網絡的遞進而變化

The change in the distributions of layers’ input presents a problem because the layers need to continuously adapt to the new distribution

這也就是我們傳說中的covariate shift
2. batch-normalization
直接上公式:
這裏寫圖片描述
這裏寫圖片描述
算法構架
從公式來看,整個BN相當於對一個batch中的數據做白化處理,然後再加上一個縮放係數和偏置。至於爲什麼要加這個,後面會講,這裏只要明白,這樣,我們就把原本的數據縮放到了(-1,1)之間,然後通過一個縮放和平移的係數進行調整。這裏的γβ 和深度學習裏面的參數θ 一樣,是一個不斷調整的參數。
3. 爲什麼管用
3.1 爲什麼白化管用
從下圖的一個二維分佈來看,最主要的原因是我們不知道原有神經網絡的偏置b應該如何初始化,這個很關鍵
這裏寫圖片描述
當我們的樣本分佈在第一象限,可是大部分情況下,我們初始化的x都是在零點,所以,如果要區分這一堆點,b的修改就會相當費勁。那麼,當我們對樣本做一個白化處理之後,整個樣本的分佈就在座標零點周圍,這樣我們權值的修改就會輕鬆很多。這也就是這篇文章中,accelerating的來源。

3.2 爲什麼要縮放和平移
首先,我們通過白化獲得了一個(-1,1)之間分佈的樣本,通過激活函數之後,就可以得到新的中間層。然而在激活函數中,尤其是sigmoid
這裏寫圖片描述
我們可以很明顯的看到,在(-1,1)之間,整個函數都處於線性狀態,這就失去了激活函數本身的意義。因此,這裏文章中加入了縮放係數γ 和平移係數β 來讓樣本點的分佈更加靠近非線性區域,並遠離最終的飽和區域。(飽和了以後,權值調整就會dead)

4.總結
batch-normalization是一個非常好用的東西

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