Batch Normalization原理與優點總結
1. 引言
隨著深度學習的發展,神經網路的模型的深度越來越大,雖然可以提取到資料中更加深層的特徵資訊,但是,也容易引起梯度消失或梯度爆炸等問題。當使用SGD優化函式時,我們經常會遇到以下兩個問題:
- 模型對引數初始化方式、學習率的設定特別敏感。
- 隨著網路深度的加深,引數的微小變動都會不斷被放大。
為了解決這兩個問題,Sergey Ioffe等人在《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》 一文提出了Batch Normalization,本文將基於該文章,對Batch Normalization的原理進行解析,並對其優點進行總結和歸納。
2. Batch Normalization
2.1 mini-batch Normalization
在介紹Batch Normalization的思想之前,先明確一個概念,即作者在文中提出的Internal Covariate Shift,其意思是:在訓練過程中,深層網路內部節點分佈的變化稱為Internal Covariate Shift。
假設某一層的輸入為,其中d表示輸入的維度,則對每一維進行標準化,有:
其中,和都是在整個訓練集上計算得到的期望和方差。但是這種簡單的標準化會存在一個問題,即可能會使得啟用函式的非線效能力失效,導致整個網路的表現能力降低,因此,為例克服這個問題,作者對每一個維度的標準化引入了一對引數,對標準化後的值進行變換和移動,即:
特別地,當,時,則模型的表現能力與不採用Batch Normalization相同。
由於在全部訓練集上進行Batch Normalization是不實際的,因此,作者提出了在mini-batch上進行Batch Normalization。記為一個batch大小為m的資料集,為了便於表示,將k進行省略,即第k個維度一個batch資料的表示為:
記Batch Normalization轉換為:
其中,表示對每一維進行Batch Normalization後的結果,則Batch Normalization的演算法步驟如下:
其中,為一個常數,主要為了確保計算的穩定。
2.2 推理階段
由於在訓練時,Batch Normalization是基於每一個mini-batch計算的,所以在預測或推理階段,怎麼對單個數據進行標準化呢?因為這時沒法計算資料的均值和方差。針對這個問題,作者提出了演算法2,即將訓練時每個batch資料對應的均值和方差記錄下來,利用他們來推算整個訓練集的均值和方差,公式如下:
其中,、分別對應每個mini-batch的均值和方差。這樣就可以對預測資料進行Batch Normalization,具體的演算法過程如下:
2.3 對於卷積神經網路的Batch Normalization
對於卷積神經網路,為了保持卷積的特性,標準化是對每個feature-map進行,即每個feature-map不同位置的標準化採取同樣的操作,令是大小為m的mini-batch對應的某個feature-map的所有資料的集合,假設feature-map的大小為,則對該feature-map的Batch Normalization則相當於對大小為的特徵的標準化。
2.4 為什麼Batch Normalization可以使用更高的學習率
當使用Batch Normalization後,假設引數變化為,則容易得到:
即引數的更新對每一層的輸出不影響,另外,在反向傳播時,有:
即當設定不同大小的學習率時,在反向傳播時,都會被抵消掉,使得引數的更新相對穩定,因此,可以使用較大的學習率。
3.Batch Normalization的優點
最後,對Batch Normalization的優點進行總結,大概有以下幾個方面:
- 可以採用更高的學習率,提高模型訓練的速度,並且可以有效避免梯度的消失和爆炸
- 起到正則化的作用,類似dropout的功能
- 不用太在意引數的初始化