神經(jīng)網(wǎng)絡中避免過擬合5種方法介紹
本文介紹了5種在訓練神經(jīng)網(wǎng)絡中避免過擬合的技術。
最近一年我一直致力于深度學習領域。這段時間里,我使用過很多神經(jīng)網(wǎng)絡,比如卷積神經(jīng)網(wǎng)絡、循環(huán)神經(jīng)網(wǎng)絡、自編碼器等等。我遇到的最常見的一個問題就是在訓練時,深度神經(jīng)網(wǎng)絡會過擬合。
當模型試著預測噪聲較多的數(shù)據(jù)的趨勢時,由于模型參數(shù)過多、過于復雜,就會導致過擬合。過擬合的模型通常是不精確的,因為這樣的預測趨勢并不會反映數(shù)據(jù)的真實情況。我們可以通過模型在已知的數(shù)據(jù)(訓練集)中有好的預測結(jié)果,但在未知的數(shù)據(jù)(測試集)中較差的表現(xiàn)來判斷是否存在過擬合。機器學習模型的目的是從訓練集到該問題領域的任何數(shù)據(jù)集上均有泛化的較好表現(xiàn),因為我們希望模型能夠預測未知的數(shù)據(jù)。
在本文中,我將展示5種在訓練神經(jīng)網(wǎng)絡時避免過擬合的技術。
一、簡化模型
處理過擬合的第一步就是降低模型復雜度。為了降低復雜度,我們可以簡單地移除層或者減少神經(jīng)元的數(shù)量使得網(wǎng)絡規(guī)模變小。與此同時,計算神經(jīng)網(wǎng)絡中不同層的輸入和輸出維度也十分重要。雖然移除層的數(shù)量或神經(jīng)網(wǎng)絡的規(guī)模并無通用的規(guī)定,但如果你的神經(jīng)網(wǎng)絡發(fā)生了過擬合,就嘗試縮小它的規(guī)模。
二、早停
在使用迭代的方法(例如梯度下降)來訓練模型時,早停是一種正則化的形式。因為所有的神經(jīng)網(wǎng)絡都是通過梯度下降的方法來學習的,所以早停是一種適用于所有問題的通用技術。使用這種方法來更新模型以便其在每次迭代時能更好地適應訓練集。在一定程度上,這種方法可以改善模型在測試集上的表現(xiàn)。但是除此之外,改善模型對訓練集的擬合會增加泛化誤差。早停規(guī)則指定了模型在過擬合之前可以迭代的次數(shù)。
早停
上圖展示了這種技術。正如我們看到的,在幾次迭代后,即使訓練誤差仍然在減少,但測驗誤差已經(jīng)開始增加了。
三、使用數(shù)據(jù)增強
在神經(jīng)網(wǎng)絡中,數(shù)據(jù)增強只意味著增加數(shù)據(jù)規(guī)模,也就是增加數(shù)據(jù)集里中圖像的數(shù)量。一些熱門的圖像增強技術有翻轉(zhuǎn)、平移、旋轉(zhuǎn)、縮放、改變亮度、添加噪聲等等。獲取更全面的參考,可訪問:
Albumentations:
https://github.com/albumentaTIons-team/albumentaTIons
Imgaug:
https://github.com/aleju/imgaug
數(shù)據(jù)增強
如上圖所示,使用數(shù)據(jù)增強可以生成多幅相似圖像。這可以幫助我們增加數(shù)據(jù)集規(guī)模從而減少過擬合。因為隨著數(shù)據(jù)量的增加,模型無法過擬合所有樣本,因此不得不進行泛化。
四、使用正則化
正則化是一種降低模型復雜度的方式。它是通過在損失函數(shù)中添加一個懲罰項來實現(xiàn)正則化。最常見的技術是L1和L2正則化:
L1懲罰項的目的是使權重絕對值最小化。公式如下:
L1正則化
L2懲罰項的目的是使權重的平方最小化。公式如下:
L2正則化
以下表格對兩種正則化方法進行了對比。
L1正則化
L2正則化
1. L1懲罰權重絕對值的總和
1. L2懲罰權重平方和的總和
2. L1生成簡單、可解釋的模型
2. L2正則化能夠?qū)W習復雜數(shù)據(jù)模式
3. L1受極端值影響較小
3. L2受極端值影響較大
L1正則化vs L2正則化
那么哪一種方式更有利于避免過擬合呢?答案是——看情況。如果數(shù)據(jù)過于復雜以至于無法準確地建模,那么L2是更好的選擇,因為它能夠?qū)W習數(shù)據(jù)中呈現(xiàn)的內(nèi)在模式。而當數(shù)據(jù)足夠簡單,可以精確建模的話,L1更合適。對于我遇到的大多數(shù)計算機視覺問題,L2正則化幾乎總是可以給出更好的結(jié)果。然而L1不容易受到離群值的影響。所以正確的正則化選項取決于我們想要解決的問題。
五、使用丟棄法(Dropouts)
丟棄法是一種避免神經(jīng)網(wǎng)絡過擬合的正則化技術。像L1和L2這樣的正則化技術通過修改代價函數(shù)來減少過擬合。而丟棄法修改神經(jīng)網(wǎng)絡本身。它在訓練的每一次迭代過程中隨機地丟棄神經(jīng)網(wǎng)絡中的神經(jīng)元。當我們丟棄不同神經(jīng)元集合的時候,就等同于訓練不同的神經(jīng)網(wǎng)絡。不同的神經(jīng)網(wǎng)絡會以不同的方式發(fā)生過擬合,所以丟棄的凈效應將會減少過擬合的發(fā)生。
使用丟棄法
如上圖所示,丟棄法被用于在訓練神經(jīng)網(wǎng)絡的過程中隨機丟棄神經(jīng)網(wǎng)絡中的神經(jīng)元。這種技術被證明可以減少很多問題的過擬合,這些問題包括圖像分類、圖像切割、詞嵌入、語義匹配等問題。
結(jié)論
簡單回顧下上述內(nèi)容,我解釋了什么是過擬合以及為什么它是神經(jīng)網(wǎng)絡當中常見的問題。接下來我又給出了五種最常見的在訓練神經(jīng)網(wǎng)絡過程中避免過擬合的方法——簡化模型、早停、數(shù)據(jù)增強、正則化以及丟棄法。