深度學習之正則化方法


神經網絡的擬合能力非常強,通過不斷迭代,在訓練數據上的誤差率往往可以降到非常低,從而導致過擬合(從偏差-方差的角度來看,就是高方差)。因此必須運用正則化方法來提高模型的泛化能力,避免過擬合。

在傳統機器學習算法中,主要通過限制模型的復雜度來提高泛化能力,比如在損失函數中加入L1范數或者L2范數。這一招在神經網絡算法中也會運用到,但是在深層神經網絡中,特別是模型參數的數量遠大於訓練數據的數量的情況下,L1和L2正則化的效果往往不如在淺層機器學習模型中顯著。

於是,在訓練深層神經網絡時,還需要用到其他正則化方法,比如dropout、早停、數據增強和標簽平滑等。

一、L1和L2正則化

L1和L2正則化在神經網絡中的運用和其他機器學習方法一樣,通過約束權重的L1范數或者L2范數,對模型的復雜度進行懲罰,來減小模型在訓練數據集上的過擬合問題。

在損失函數中加入L1和L2正則化項,則結構風險最小化問題可以寫為:

N為訓練樣本數量,f(•)為待學習的神經網絡模型,θ是權重,lp(θ)表示范數函數,p∈{0,1},λ是正則化參數。

這里有三個問題:

1、為什么只正則化權重θ(通常用W表示),而不正則化偏置b呢?

其實也可以正則化偏置值,但是對於某一隱含層上的神經元來說,權重θ是一個高維的參數矩陣,已經可以表達高方差問題,而偏置b僅僅是單個數字,對模型的復雜度影響不大,因此一般選擇忽略不計。

2、選擇L1正則化還是L2正則化呢?

答案是一般選擇L2正則化,或者同時加入L1正則化和L2正則化。從上圖可以看到,L1正則化通常會使得最優解在y坐標軸上,從而使得最終的參數θ是稀疏向量,也就是說θ中很多值為0。此外,L1范數在取得最小值處是不可導的,這會給后續的求梯度帶來麻煩。

3、神經網絡中的L2正則化有什么特殊之處呢?

在神經網絡中,加入的L2范數一般用Frobenius范數

注意在Logistic回歸中,參數W是一個向量,而在神經網絡中,參數W是一個矩陣!上式中l表示第l層,m(l)表示第l層的神經元個數,因此W是一個m(l)  × m(l-1)維的多維矩陣。於是神經網絡中的L2范數是矩陣中所有元素的平方和,稱為Frobenius范數。

此時結構風險函數為:

而且L2正則化在神經網絡中等價於通過權重衰減的方式來實現正則化。原因是,在損失函數中加入L2正則化,然后用反向傳播算法進行梯度下降更新參數時,會得到如下的形式:

也就是權重θt-1會乘以一個比1小的數,也就實現了權重衰減。

二、dropout

在深層神經網絡的學習過程中,通過隨機丟棄一部分神經元(同時丟棄其對應的連接邊)來避免過擬合的做法,稱為dropout(丟棄法,李宏毅老師稱之為抓爆)。

dropout一般是在神經網絡的隱含層中使用,實現dropout的方式可以是設置一個固定的概率p,對於每一個神經元都以一個概率p來判斷要不要保留。同時,dropout在訓練階段和測試階段的做法不一樣。

1、訓練階段和測試階段的dropout

我們通過定義一個公式來描述訓練階段和測試階段的dropout實現過程,以及二者之間的區別。

對於一個神經網絡層y=f(Wx+b),引入一個丟棄函數d(•),使得y=f(Wd(x)+b)。丟棄函數定義為:

在訓練階段中,m∈{0,1}d是丟棄掩碼,通過概率為p的0-1分布(伯努利分布)來隨機生成。p值一般設置為0.5就能產生比較好的效果,復雜點也可以通過驗證集來選取一個最優值,那么訓練時激活神經元的平均數量是原來的p倍。舉個例子就是神經元有5個,p=0.6,然后隨機生成m=[1, 0, 1, 1, 0],於是訓練過程中這一層中的第2和第5個神經元就會被丟棄,也就是神經元的數量變成了原理的0.6倍。

部分隱含層神經元被丟棄的結果就是,在反向傳播時,和被丟棄神經元相關的權重的梯度為0。而在訓練中每個隱含層神經元都有可能被以p的概率丟棄,這樣就減少了神經元之間的依賴性,輸出層的計算也無法過度依賴任何一個隱含層神經元,從而減少過擬合。

而在測試階段,為了得到更確定的結果,一般不丟棄神經元。所有神經元都可以激活,這會造成訓練和測試時的網絡輸出不一致,因此在測試時將每一個神經元的輸出都乘以概率p,相當於把不同的神經網絡做平均,從而在網絡輸出上和訓練階段保持一致。

以下是一個神經網絡使用dropout后的圖示:

2、為什么dropout的效果特別好?

dropout不僅能減少過擬合,而且能提高預測的准確性,這可以從集成學習的角度來解釋。在迭代過程中,每做一次丟棄,就相當於從原始網絡中采樣一個不同的子網絡,並進行訓練。那么通過dropout,相當於在結構多樣性的多個神經網絡模型上進行訓練,最終的神經網絡可以看做是不同結構的神經網絡的集成模型。

3、循環神經網絡中的dropout的特殊性

在循環神經網絡上使用dropout時,不能直接對每個時刻的隱狀態進行隨機丟棄,這樣會損害循環神經網絡在時間上的記憶能力,而是應該在非時間維度的連接上進行隨機丟棄。

如下圖,虛線的前饋連接表示非時間循環的連接,而實線的連接表示時間維度上的循環,即隱狀態(粗實線表示典型的LSTM中的信息流路徑)。如果dropout設置在隱狀態上,也就是從左往右的實線位置上,那么每經過一次循環,剩下的信息就會被丟棄一次,如果是長序列,那么循環到最后信息會丟失殆盡。

而把dropout設置在非時間循環的連接上,也就是從下到上的虛線位置,那么對信息進行丟棄就不會影響到對信息的記憶能力。

三、數據增強

減少過擬合的一種思路是增加訓練集中的樣本數量,尤其在訓練深層神經網絡的過程中,需要大量的訓練數據才能得到比較理想的結果。但是增加樣本是需要花費較多資源去搜集和標注更多的樣本,因此可以基於現有的有限樣本,可以通過數據增強(Data Augmentation)來增強數據,避免過擬合。

目前數據增強主要應用在圖像數據上,在文本等其他類型的數據上還沒有比較好的應用。

圖形數據的增強主要是通過對圖像進行轉變、引入噪聲等方法來增加數據的多樣性,生成的假訓練數據雖然無法包含像全新數據那么多的信息,但是代價幾乎為零。增強的方法有:

(1)旋轉:將圖像按順時針或者逆時針方向隨機旋轉一定角度;

(2)翻轉:將圖像沿水平或垂直方向隨機翻轉一定角度;

(3)縮放:將圖像沿水平或垂直方向平移一定步長;

(4)加噪聲:加入隨機噪聲。

四、早停

早停(early stopping)就是在訓練誤差下降到一定程度之前,提早停止神經網絡的訓練。那么在觀察到什么信號時停止呢?答案是迭代了多輪之后,驗證集上的錯誤率仍然沒有下降時,就停止迭代。

也就是說,在使用梯度下降法進行優化時,可以使用一個和訓練集獨立的樣本集合,稱為驗證集,在每次迭代時,把新學習到的模型f(x, θ)在驗證集上進行測試,並計算錯誤率,用驗證集上的錯誤來代替期望錯誤。驗證集上的誤差率通常會先下降后上升,而在拐點處就預示着開始過擬合了。

當驗證集的錯誤率在經過多輪迭代后不再下降時(甚至還升高),就停止迭代。因此在使用早停來解決過擬合時,訓練和驗證要同時進行,或者交叉進行。

五、標簽平滑

在數據增強中,是通過給樣本特征加入隨機噪聲來避免過擬合的,而標簽平滑是通過給樣本的標簽(輸出)引入噪聲來避免過擬合。

假設訓練數據集中,有些樣本的標簽是被錯誤標注的,那么最小化這些樣本上的損失函數會導致權重往錯誤的方向去學習,從而導致過擬合。例如,在多分類問題中,一個樣本的標簽一般用one-hot向量表示,y=[0, ..., 0,1, 0, ...,0]T,這種目標可以作為硬目標。如果使用softmax分類器並采用交叉熵損失函數,那么最小化損失函數會使得正確類和其他類之間的權重差異變得非常大。一方面使用softmax分類器和硬目標的最大似然學習可能永遠不會收斂,因為softmax函數永遠無法真正預測0概率或者1概率,而只能通過學習越來越大的權重,來不斷趨近於0或1。另一方面要使得正確類的輸出概率接近於1,那么未歸一化之前的得分要遠大於其他類的得分,這就得到其權重越來越大。權重越大,模型的復雜度越高,也就是產生過擬合問題。

因此使用硬目標來進行最大似然學習的問題在於,模型無法真正擬合到硬目標上,在不斷逼近硬目標的過程中會過擬合。

標簽平滑的做法是,假設樣本為其他類的概率為ε,為正確類的概率為(1-ε),那么把標簽表示為:

其中K為標簽的數量,這種標簽可以看做是軟目標。標簽平滑之后,模型不會追求確切的概率(0或者1),而且不影響模型學習正確分類。

 

參考資料:

1、邱錫鵬:《神經網絡與深度學習》

2、《Deep Learning》(花書)

3、吳恩達:《深度學習》


免責聲明!

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



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