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