过拟合的原因和解决方法
過擬合的原因
1、數(shù)據(jù)量太小
這個是很容易產(chǎn)生過擬合的一個原因。設(shè)想,我們有一組數(shù)據(jù)很好的吻合3次函數(shù)的規(guī)律,現(xiàn)在我們局部的拿出了很小一部分?jǐn)?shù)據(jù),用機器學(xué)習(xí)或者深度學(xué)習(xí)擬合出來的模型很大的可能性就是一個線性函數(shù),在把這個線性函數(shù)用在測試集上,效果可想而知肯定很差了。2、訓(xùn)練集和驗證集分布不一致
訓(xùn)練集訓(xùn)練出一個適合訓(xùn)練集那樣分布的數(shù)據(jù)集,當(dāng)你把模型運用到一個不一樣分布的數(shù)據(jù)集上,效果肯定大打折扣。這個是顯而易見的。
3、模型復(fù)雜度太大
在選擇模型算法的時候,首先就選定了一個復(fù)雜度很高的模型,然后數(shù)據(jù)的規(guī)律是很簡單的,復(fù)雜的模型反而就不適用了。
4、數(shù)據(jù)質(zhì)量很差
數(shù)據(jù)還有很多噪聲,模型在學(xué)習(xí)的時候,肯定也會把噪聲規(guī)律學(xué)習(xí)到,從而減小了具有一般性的規(guī)律。這個時候模型用來預(yù)測肯定效果也不好。
5、過度訓(xùn)練
這個是同第4個是相聯(lián)系的,只要訓(xùn)練時間足夠長,那么模型肯定就會吧一些噪聲隱含的規(guī)律學(xué)習(xí)到,這個時候降低模型的性能是顯而易見的。
過擬合的解決方法
針對過擬合的原因我們可以有針對性的來使用一些方法和技巧來減少過擬合。
1、模型層面
這里主要是減小模型的復(fù)雜度,主要是從模型包含的參數(shù)個數(shù)和參數(shù)值。
a、正則化
這里包含L1和L2范數(shù),具體的區(qū)別去看相關(guān)的理論去了解,這里一般使用L1范數(shù),使得模型擬合的參數(shù)大部分都為0,這樣就可以說從參數(shù)值和參數(shù)個數(shù)的角度減少了模型的復(fù)雜度,從而降低了過擬合。
b、權(quán)值共享
這個方法常用于深度學(xué)習(xí)中,一般在網(wǎng)絡(luò)中,某些層可能會使用同樣的參數(shù),那么這樣就在參數(shù)個數(shù)上減小了——模型復(fù)雜度也隨之降低
c、dropout
這個方法也很常見,在神經(jīng)網(wǎng)絡(luò)中以一定的概率使得神經(jīng)元不工作。這種方法的本質(zhì)上是沒一個step中,使用的模型都是不一樣的,并且模型參數(shù)在一定程度上也是減少了。
torch.nn.Dropout(0.5)
在pytorch中,這里的0.5的意思就是神經(jīng)元不保留的概率,這個與tf框架不同。
d、Batch Normalization
這個批歸一化處理層,是一個作用非常大的。我自己在寫網(wǎng)絡(luò)中也嘗試在使用這個BN層,其作用是:使得每一層的數(shù)據(jù)分布不變,做歸一化處理,加快了模型的收斂速度,避免梯度消失、提高準(zhǔn)確率。反正就是優(yōu)點很多!
e、權(quán)值衰減
權(quán)值衰減——weight_decay,簡單的理解就是乘在正則項的前面的系數(shù),目的是為了使得權(quán)值衰減到很小的值,接近如0。一般在深度學(xué)習(xí)好中,pytorch的提供的優(yōu)化器都可以設(shè)置的:
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9,weight_decay=1e-5)
2、數(shù)據(jù)層面
a、保證數(shù)據(jù)集分布一致性
在切分?jǐn)?shù)據(jù)集的時候要保證分布一致性。可以使用sklearn包中,model_selection相關(guān)train_text_split來實現(xiàn)數(shù)據(jù)集切割后分布的一致性。
b、增加數(shù)據(jù)集的規(guī)模
最好的是人工標(biāo)注高質(zhì)量的數(shù)據(jù),但是成本非常高;可以采用一定的數(shù)據(jù)增強策略,來實現(xiàn)數(shù)據(jù)集的擴充。注意的是這里可能會引入一定的噪聲,噪聲也會影響模型的性能的,要注意利弊的取舍。另外CV和NLP的數(shù)據(jù)增強是不一樣的,NLP數(shù)據(jù)增強更難。
3、訓(xùn)練層面
這個訓(xùn)練就要看經(jīng)驗了,模型需要到達什么樣的一個基線標(biāo)準(zhǔn)。然后參考這個標(biāo)準(zhǔn)對模型實施early-stopping。神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程中我們會初始化一組較小的權(quán)值參數(shù),隨著模型的訓(xùn)練,這些權(quán)值也變得越來越大了。為了減小過擬合的影響,就有可能需要早停止了。我本人沒有使用過early-stopping,一般都是設(shè)置10個epoch然后看效果來考慮時候增加epochs的次數(shù)。
4、其他
集成學(xué)習(xí)——也就是一個均值的思想,通過集成的思想來減弱過擬合的影響。
總結(jié)
以上是生活随笔為你收集整理的过拟合的原因和解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络请求分析实战篇(01)—— 爬取am
- 下一篇: 论文翻译《Salient object