日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

机器学习中防止过拟合的方法总结

發(fā)布時(shí)間:2024/7/23 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习中防止过拟合的方法总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

來(lái)自機(jī)器學(xué)習(xí)成長(zhǎng)之路公眾號(hào)

在對(duì)模型進(jìn)行訓(xùn)練時(shí),有可能遇到訓(xùn)練數(shù)據(jù)不夠,即訓(xùn)練數(shù)據(jù)無(wú)法對(duì)整個(gè)數(shù)據(jù)的分布進(jìn)行估計(jì)的時(shí)候,或者在對(duì)模型進(jìn)行過(guò)度訓(xùn)練(overtraining)時(shí),常常會(huì)導(dǎo)致模型的過(guò)擬合(overfitting)。如下圖所示:

通過(guò)上圖可以看出,隨著模型訓(xùn)練的進(jìn)行,模型的復(fù)雜度會(huì)增加,此時(shí)模型在訓(xùn)練數(shù)據(jù)集上的訓(xùn)練誤差會(huì)逐漸減小,但是在模型的復(fù)雜度達(dá)到一定程度時(shí),模型在驗(yàn)證集上的誤差反而隨著模型的復(fù)雜度增加而增大。此時(shí)便發(fā)生了過(guò)擬合,即模型的復(fù)雜度升高,但是該模型在除訓(xùn)練集之外的數(shù)據(jù)集上卻不work。?
?

為了防止過(guò)擬合,我們需要用到一些方法,如:early stopping、數(shù)據(jù)集擴(kuò)增(Data augmentation)、正則化(Regularization)、Dropout

Early stopping:

對(duì)模型進(jìn)行訓(xùn)練的過(guò)程即是對(duì)模型的參數(shù)進(jìn)行學(xué)習(xí)更新的過(guò)程,這個(gè)參數(shù)學(xué)習(xí)的過(guò)程往往會(huì)用到一些迭代方法,如梯度下降(Gradient descent)學(xué)習(xí)算法。Early stopping便是一種迭代次數(shù)截?cái)嗟姆椒▉?lái)防止過(guò)擬合的方法,即在模型對(duì)訓(xùn)練數(shù)據(jù)集迭代收斂之前停止迭代來(lái)防止過(guò)擬合。?

Early stopping方法的具體做法是,在每一個(gè)Epoch結(jié)束時(shí)(一個(gè)Epoch集為對(duì)所有的訓(xùn)練數(shù)據(jù)的一輪遍歷)計(jì)算validation data的accuracy,當(dāng)accuracy不再提高時(shí),就停止訓(xùn)練。這種做法很符合直觀感受,因?yàn)閍ccurary都不再提高了,在繼續(xù)訓(xùn)練也是無(wú)益的,只會(huì)提高訓(xùn)練的時(shí)間。

那么該做法的一個(gè)重點(diǎn)便是怎樣才認(rèn)為validation accurary不再提高了呢?并不是說(shuō)validation accuracy一降下來(lái)便認(rèn)為不再提高了,因?yàn)榭赡芙?jīng)過(guò)這個(gè)Epoch后,accuracy降低了,但是隨后的Epoch又讓accuracy又上去了,所以不能根據(jù)一兩次的連續(xù)降低就判斷不再提高。

一般的做法是,在訓(xùn)練的過(guò)程中,記錄到目前為止最好的validation accuracy,當(dāng)連續(xù)10次Epoch(或者更多次)沒(méi)達(dá)到最佳a(bǔ)ccuracy時(shí),則可以認(rèn)為accuracy不再提高了。此時(shí)便可以停止迭代了(Early Stopping)。這種策略也稱為“No-improvement-in-n”,n即Epoch的次數(shù),可以根據(jù)實(shí)際情況取,如10、20、30……

數(shù)據(jù)集擴(kuò)增:

在數(shù)據(jù)挖掘領(lǐng)域流行著這樣的一句話,“有時(shí)候往往擁有更多的數(shù)據(jù)勝過(guò)一個(gè)好的模型”。因?yàn)槲覀冊(cè)谑褂糜?xùn)練數(shù)據(jù)訓(xùn)練模型,通過(guò)這個(gè)模型對(duì)將來(lái)的數(shù)據(jù)進(jìn)行擬合,而在這之間又一個(gè)假設(shè)便是,訓(xùn)練數(shù)據(jù)與將來(lái)的數(shù)據(jù)是獨(dú)立同分布的。即使用當(dāng)前的訓(xùn)練數(shù)據(jù)來(lái)對(duì)將來(lái)的數(shù)據(jù)進(jìn)行估計(jì)與模擬,而更多的數(shù)據(jù)往往估計(jì)與模擬地更準(zhǔn)確。

因此,更多的數(shù)據(jù)有時(shí)候更優(yōu)秀。但是往往條件有限,如人力物力財(cái)力的不足,而不能收集到更多的數(shù)據(jù),如在進(jìn)行分類的任務(wù)中,需要對(duì)數(shù)據(jù)進(jìn)行打標(biāo),并且很多情況下都是人工得進(jìn)行打標(biāo),因此一旦需要打標(biāo)的數(shù)據(jù)量過(guò)多,就會(huì)導(dǎo)致效率低下以及可能出錯(cuò)的情況。所以,往往在這時(shí)候,需要采取一些計(jì)算的方式與策略在已有的數(shù)據(jù)集上進(jìn)行手腳,以得到更多的數(shù)據(jù)。?

通俗得講,數(shù)據(jù)機(jī)擴(kuò)增即需要得到更多的符合要求的數(shù)據(jù),即和已有的數(shù)據(jù)是獨(dú)立同分布的,或者近似獨(dú)立同分布的。一般有以下方法:

? 從數(shù)據(jù)源頭采集更多數(shù)據(jù)

??復(fù)制原有數(shù)據(jù)并加上隨機(jī)噪聲

??重采樣

??根據(jù)當(dāng)前數(shù)據(jù)集估計(jì)數(shù)據(jù)分布參數(shù),使用 該分布產(chǎn)生更多數(shù)據(jù)等

正則化方法:

正則化方法是指在進(jìn)行目標(biāo)函數(shù)或代價(jià)函數(shù)優(yōu)化時(shí),在目標(biāo)函數(shù)或代價(jià)函數(shù)后面加上一個(gè)正則項(xiàng),一般有L1正則與L2正則等。

?L1正則?
L1正則是基于L1范數(shù),即在目標(biāo)函數(shù)后面加上參數(shù)的L1范數(shù)和項(xiàng),即參數(shù)絕對(duì)值和與參數(shù)的積項(xiàng),即:?

其中C0代表原始的代價(jià)函數(shù),n是樣本的個(gè)數(shù),λ就是正則項(xiàng)系數(shù),權(quán)衡正則項(xiàng)與C0項(xiàng)的比重。后面那一項(xiàng)即為L(zhǎng)1正則項(xiàng)。?
在計(jì)算梯度時(shí),w的梯度變?yōu)?#xff1a;?

其中,sgn是符號(hào)函數(shù),那么便使用下式對(duì)參數(shù)進(jìn)行更新:?

對(duì)于有些模型,如線性回歸中(L1正則線性回歸即為L(zhǎng)asso回歸),常數(shù)項(xiàng)b的更新方程不包括正則項(xiàng),即:?

其中,梯度下降算法中,α<0,β<0α<0,β<0,而在梯度上升算法中則相反。?

從上式可以看出,當(dāng)w為正時(shí),更新后w會(huì)變小;當(dāng)w為負(fù)時(shí),更新后w會(huì)變大;因此L1正則項(xiàng)是為了使得那些原先處于零(即|w|≈0|w|≈0)附近的參數(shù)w往零移動(dòng),使得部分參數(shù)為零,從而降低模型的復(fù)雜度(模型的復(fù)雜度由參數(shù)決定),從而防止過(guò)擬合,提高模型的泛化能力。?

其中,L1正則中有個(gè)問(wèn)題,便是L1范數(shù)在0處不可導(dǎo),即|w||w|在0處不可導(dǎo),因此在ww為0時(shí),使用原來(lái)的未經(jīng)正則化的更新方程來(lái)對(duì)ww進(jìn)行更新,即令sgn(0)=0,這樣即:?

L2正則?
L2正則是基于L2范數(shù),即在目標(biāo)函數(shù)后面加上參數(shù)的L2范數(shù)和項(xiàng),即參數(shù)的平方和與參數(shù)的積項(xiàng),即:

其中C0代表原始的代價(jià)函數(shù),n是樣本的個(gè)數(shù),與L1正則化項(xiàng)前面的參數(shù)不同的是,L2項(xiàng)的參數(shù)乘了二分之一,是為了便于計(jì)算以及公式的美感性,因?yàn)槠椒巾?xiàng)求導(dǎo)有個(gè)2,λ就是正則項(xiàng)系數(shù),權(quán)衡正則項(xiàng)與C0項(xiàng)的比重。后面那一項(xiàng)即為L(zhǎng)2正則項(xiàng)。?

L2正則化中則使用下式對(duì)模型參數(shù)進(jìn)行更新:?

對(duì)于有些模型,如線性回歸中(L2正則線性回歸即為Ridge回歸,嶺回歸),常數(shù)項(xiàng)b的更新方程不包括正則項(xiàng),即:

其中,梯度下降算法中,α<0,β<0α<0,β<0,而在梯度上升算法中則相反。?

從上式可以看出,L2正則項(xiàng)起到使得參數(shù)w變小加劇的效果,但是為什么可以防止過(guò)擬合呢?一個(gè)通俗的理解便是:更小的參數(shù)值w意味著模型的復(fù)雜度更低,對(duì)訓(xùn)練數(shù)據(jù)的擬合剛剛好(奧卡姆剃刀),不會(huì)過(guò)分?jǐn)M合訓(xùn)練數(shù)據(jù),從而使得不會(huì)過(guò)擬合,以提高模型的泛化能力。?

在這里需要提到的是,在對(duì)模型參數(shù)進(jìn)行更新學(xué)習(xí)的時(shí)候,有兩種更新方式,mini-batch (部分增量更新)與 full-batch(全增量更新),即在每一次更新學(xué)習(xí)的過(guò)程中(一次迭代,即一次epoch),在mini-batch中進(jìn)行分批處理,先使用一部分樣本進(jìn)行更新,然后再使用一部分樣本進(jìn)行更新。直到所有樣本都使用了,這次epoch的損失函數(shù)值則為所有mini batch的平均損失值。設(shè)每次mini batch中樣本個(gè)數(shù)為m,那么參數(shù)的更新方程中的正則項(xiàng)要改成:?

而full-batch即每一次epoch中,使用全部的訓(xùn)練樣本進(jìn)行更新,那么每次的損失函數(shù)值即為全部樣本的誤差之和。更新方程不變。

總結(jié)?

正則項(xiàng)是為了降低模型的復(fù)雜度,從而避免模型區(qū)過(guò)分?jǐn)M合訓(xùn)練數(shù)據(jù),包括噪聲與異常點(diǎn)(outliers)。從另一個(gè)角度上來(lái)講,正則化即是假設(shè)模型參數(shù)服從先驗(yàn)概率,即為模型參數(shù)添加先驗(yàn),只是不同的正則化方式的先驗(yàn)分布是不一樣的。這樣就規(guī)定了參數(shù)的分布,使得模型的復(fù)雜度降低(試想一下,限定條件多了,是不是模型的復(fù)雜度降低了呢),這樣模型對(duì)于噪聲與異常點(diǎn)的抗干擾性的能力增強(qiáng),從而提高模型的泛化能力。

還有個(gè)解釋便是,從貝葉斯學(xué)派來(lái)看:加了先驗(yàn),在數(shù)據(jù)少的時(shí)候,先驗(yàn)知識(shí)可以防止過(guò)擬合;從頻率學(xué)派來(lái)看:正則項(xiàng)限定了參數(shù)的取值,從而提高了模型的穩(wěn)定性,而穩(wěn)定性強(qiáng)的模型不會(huì)過(guò)擬合,即控制模型空間。?

另外一個(gè)角度,過(guò)擬合從直觀上理解便是,在對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行擬合時(shí),需要照顧到每個(gè)點(diǎn),從而使得擬合函數(shù)波動(dòng)性非常大,即方差大。在某些小區(qū)間里,函數(shù)值的變化性很劇烈,意味著函數(shù)在某些小區(qū)間里的導(dǎo)數(shù)值的絕對(duì)值非常大,由于自變量的值在給定的訓(xùn)練數(shù)據(jù)集中的一定的,因此只有系數(shù)足夠大,才能保證導(dǎo)數(shù)的絕對(duì)值足夠大。如下圖(引用知乎):

另外一個(gè)解釋,規(guī)則化項(xiàng)的引入,在訓(xùn)練(最小化cost)的過(guò)程中,當(dāng)某一維的特征所對(duì)應(yīng)的權(quán)重過(guò)大時(shí),而此時(shí)模型的預(yù)測(cè)和真實(shí)數(shù)據(jù)之間距離很小,通過(guò)規(guī)則化項(xiàng)就可以使整體的cost取較大的值,從而,在訓(xùn)練的過(guò)程中避免了去選擇那些某一維(或幾維)特征的權(quán)重過(guò)大的情況,即過(guò)分依賴某一維(或幾維)的特征(引用知乎)。?

L2與L1的區(qū)別在于,L1正則是拉普拉斯先驗(yàn),而L2正則則是高斯先驗(yàn)。它們都是服從均值為0,協(xié)方差為λ分之一。當(dāng)λ=0時(shí),即沒(méi)有先驗(yàn))沒(méi)有正則項(xiàng),則相當(dāng)于先驗(yàn)分布具有無(wú)窮大的協(xié)方差,那么這個(gè)先驗(yàn)約束則會(huì)非常弱,模型為了擬合所有的訓(xùn)練集數(shù)據(jù), 參數(shù)w可以變得任意大從而使得模型不穩(wěn)定,即方差大而偏差小。λλ越大,標(biāo)明先驗(yàn)分布協(xié)方差越小,偏差越大,模型越穩(wěn)定。即,加入正則項(xiàng)是在偏差bias與方差variance之間做平衡tradeoff(來(lái)自知乎)。

下圖即為L(zhǎng)2與L1正則的區(qū)別:

上圖中的模型是線性回歸,有兩個(gè)特征,要優(yōu)化的參數(shù)分別是w1和w2,左圖的正則化是L2,右圖是L1。藍(lán)色線就是優(yōu)化過(guò)程中遇到的等高線,一圈代表一個(gè)目標(biāo)函數(shù)值,圓心就是樣本觀測(cè)值(假設(shè)一個(gè)樣本),半徑就是誤差值,受限條件就是紅色邊界(就是正則化那部分),二者相交處,才是最優(yōu)參數(shù)。可見(jiàn)右邊的最優(yōu)參數(shù)只可能在坐標(biāo)軸上,所以就會(huì)出現(xiàn)0權(quán)重參數(shù),使得模型稀疏。?

其實(shí)拉普拉斯分布與高斯分布是數(shù)學(xué)家從實(shí)驗(yàn)中誤差服從什么分布研究中得來(lái)的。一般直觀上的認(rèn)識(shí)是服從應(yīng)該服從均值為0的對(duì)稱分布,并且誤差大的頻率低,誤差小的頻率高,因此拉普拉斯使用拉普拉斯分布對(duì)誤差的分布進(jìn)行擬合,如下圖:?

而拉普拉斯在最高點(diǎn),即自變量為0處不可導(dǎo),因?yàn)椴槐阌谟?jì)算,于是高斯在這基礎(chǔ)上使用高斯分布對(duì)其進(jìn)行擬合,如下圖:?

Dropout:

正則是通過(guò)在代價(jià)函數(shù)后面加上正則項(xiàng)來(lái)防止模型過(guò)擬合的。而在神經(jīng)網(wǎng)絡(luò)中,有一種方法是通過(guò)修改神經(jīng)網(wǎng)絡(luò)本身結(jié)構(gòu)來(lái)實(shí)現(xiàn)的,其名為Dropout。該方法是在對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練時(shí)用一種技巧(trick),對(duì)于如下所示的三層人工神經(jīng)網(wǎng)絡(luò):

對(duì)于上圖所示的網(wǎng)絡(luò),在訓(xùn)練開(kāi)始時(shí),隨機(jī)得刪除一些(可以設(shè)定為一半,也可以為1/3,1/4等)隱藏層神經(jīng)元,即認(rèn)為這些神經(jīng)元不存在,同時(shí)保持輸入層與輸出層神經(jīng)元的個(gè)數(shù)不變,這樣便得到如下的ANN:?

然后按照BP學(xué)習(xí)算法對(duì)ANN中的參數(shù)進(jìn)行學(xué)習(xí)更新(虛線連接的單元不更新,因?yàn)檎J(rèn)為這些神經(jīng)元被臨時(shí)刪除了)。這樣一次迭代更新便完成了。下一次迭代中,同樣隨機(jī)刪除一些神經(jīng)元,與上次不一樣,做隨機(jī)選擇。這樣一直進(jìn)行瑕疵,直至訓(xùn)練結(jié)束。?

Dropout方法是通過(guò)修改ANN中隱藏層的神經(jīng)元個(gè)數(shù)來(lái)防止ANN的過(guò)擬合。

?

總結(jié)

以上是生活随笔為你收集整理的机器学习中防止过拟合的方法总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。