推薦一個神級工具:能緩解梯度消失問題&提升訓練速度
- 2019 年 10 月 5 日
- 筆記
推薦閱讀:
深度學習的一個本質問題
- Internal Covariate Shift
- 什麼是BN
深度學習的一個本質問題
深度神經網路一直以來就有一個特點:隨著網路加深,模型會越來越難以訓練。所以深度學習有一個非常本質性的問題:為什麼隨著網路加深,訓練會越來越困難?為了解決這個問題,學界業界也一直在嘗試各種方法。
sigmoid作為激活函數一個最大的問題會引起梯度消失現象,這使得神經網路難以更新權重。使用ReLu激活函數可以有效的緩解這一問題。

對神經網路使用正則化方法也能對這個問題有所幫助,使用dropout來對神經網路進行簡化,可以有效緩解神經網路的過擬合問題,對於深度網路的訓練也有一定的幫助。ResNet使用殘差塊和skip connection來解決這個問題,使得深度加深時網路仍有較好的表現力。

BN本質上也是一種解決深度神經網路難以訓練問題的方法。
Internal Covariate Shift
機器學習的一個重要假設就是IID(Independent Identically Distributed)假設,即獨立同分布假設。所謂獨立同分布,就是指訓練數據和測試數據是近似於同分布的,如若不然,機器學習模型就會很難有較好的泛化性能。
一個重要的觀點就是深度神經網路在訓練過程中每一層的輸入並不滿足獨立同分布假設,當疊加的網路層每一層的輸入分布都發生變化時,這使得神經網路訓練難以收斂。這種神經網路隱藏層輸入分布的不斷變化的現象就叫Internal Covariate Shift(ICS)。ICS問題正是導致深度神經網路難以訓練的重要原因之一。
什麼是BN
一直在做鋪墊,還沒說到底什麼是BN。Batch Normalization,簡稱BN,翻譯過來就是批標準化,因為這個Normalization是建立在Mini-Batch SGD的基礎之上的。BN是針對ICS問題而提出的一種解決方案。一句話來說,BN就是使得深度神經網路訓練過程中每一層網路輸入都保持相同分布。
既然ICS問題表明神經網路隱藏層輸入分布老是不斷變化,我們能否讓每個隱藏層輸入分布穩定下來?通常來說,數據標準化是將數據餵給機器學習模型之前一項重要的數據預處理技術,數據標準化也即將數據分布變換成均值為0,方差為1的標準正態分布,所以也叫0-1標準化。影像處理領域的數據標準化也叫白化(whiten),當然,白化方法除了0-1標準化之外,還包括極大極小標準化方法。

所以一個很關鍵的聯想就是能否將這種白化操作推廣到神經網路的每一個隱藏層?答案當然是可以的。
ICS問題導致深度神經網路訓練難以收斂,隱藏層輸入分布逐漸向非線性激活函數取值區間的兩端靠近,比如說sigmoid函數的兩端就是最大正值或者最小負值。這裡說一下梯度飽和和梯度敏感的概念。當取值位於sigmoid函數的兩端時,即sigmoid取值接近0或1時,梯度接近於0,這時候就位於梯度飽和區,也就是容易產生梯度消失的區域,相應的梯度敏感就是梯度計算遠大於0,神經網路反向傳播時每次都能使權重得到很好的更新。

當梯度逐漸向這兩個區域靠近時,就會產生梯度爆炸或者梯度消失問題,這也是深度神經網路難以訓練的根本原因。BN將白化操作應用到每一個隱藏層,對每個隱藏層輸入分布進行標準化變換,把每層的輸入分布都強行拉回到均值為0方差為1的標準正態分布。這樣一來,上一層的激活輸出值(即當前層的激活輸入值)就會落在非線性函數對輸入的梯度敏感區,遠離了原先的梯度飽和區,神經網路權重易於更新,訓練速度相應加快。
那麼具體到實際應用時,BN操作應該放在哪裡?以一個全連接網路為例:

可以看到,BN操作是對每一個隱藏層的激活輸出做標準化,即BN層位於隱藏層之後。對於Mini-Batch SGD來說,一次訓練包含了m個樣本,具體的BN變換就是執行以下公式的過程:

這裡有個問題,就是在標準化之後為什麼又做了個scale and shift的變換。從作者在論文中的表述看,認為每一層都做BN之後可能會導致網路的表徵能力下降,所以這裡增加兩個調節參數(scale和shift),對變換之後的結果進行反變換,彌補網路的表徵能力。
BN不僅原理上說的通,但關鍵還是效果好。BN大大緩解了梯度消失問題,提升了訓練速度,模型準確率也得到提升,另外BN還有輕微的正則化效果。
