是什么
過擬合(overfitting)是指在模型參數(shù)擬合過程中的問題,由于訓(xùn)練數(shù)據(jù)包含抽樣誤差酷窥,訓(xùn)練時(shí),復(fù)雜的模型將抽樣誤差也考慮在內(nèi)伴网,將抽樣誤差也進(jìn)行了很好的擬合蓬推。
具體表現(xiàn)就是最終模型在訓(xùn)練集上效果好;在測(cè)試集上效果差澡腾。模型泛化能力弱拳氢。
為什么
為什么要解決過擬合現(xiàn)象?這是因?yàn)槲覀償M合的模型一般是用來預(yù)測(cè)未知的結(jié)果(不在訓(xùn)練集內(nèi))蛋铆,過擬合雖然在訓(xùn)練集上效果好馋评,但是在實(shí)際使用時(shí)(測(cè)試集)效果差。同時(shí)刺啦,在很多問題上留特,我們無法窮盡所有狀態(tài),不可能將所有情況都包含在訓(xùn)練集上。所以蜕青,必須要解決過擬合問題苟蹈。
為什么在機(jī)器學(xué)習(xí)中比較常見?這是因?yàn)闄C(jī)器學(xué)習(xí)算法為了滿足盡可能復(fù)雜的任務(wù)右核,其模型的擬合能力一般遠(yuǎn)遠(yuǎn)高于問題復(fù)雜度慧脱,也就是說,機(jī)器學(xué)習(xí)算法有「擬合出正確規(guī)則的前提下贺喝,進(jìn)一步擬合噪聲」的能力菱鸥。
而傳統(tǒng)的函數(shù)擬合問題(如機(jī)器人系統(tǒng)辨識(shí)),一般都是通過經(jīng)驗(yàn)躏鱼、物理氮采、數(shù)學(xué)等推導(dǎo)出一個(gè)含參模型,模型復(fù)雜度確定了染苛,只需要調(diào)整個(gè)別參數(shù)即可鹊漠。模型「無多余能力」擬合噪聲。
怎么樣
如何防止過擬合:
主要是以下4點(diǎn)
1. 獲取更多數(shù)據(jù)
這是解決過擬合最有效的方法茶行,只要給足夠多的數(shù)據(jù)躯概,讓模型「看見」盡可能多的「例外情況」,它就會(huì)不斷修正自己畔师,從而得到更好的結(jié)果:
如何獲取更多數(shù)據(jù)楞陷,可以有以下幾個(gè)方法:
從數(shù)據(jù)源頭獲取更多數(shù)據(jù):這個(gè)是容易想到的,例如物體分類茉唉,我就再多拍幾張照片好了固蛾;但是,在很多情況下度陆,大幅增加數(shù)據(jù)本身就不容易艾凯;另外,我們不清楚獲取多少數(shù)據(jù)才算夠懂傀;
根據(jù)當(dāng)前數(shù)據(jù)集估計(jì)數(shù)據(jù)分布參數(shù)趾诗,使用該分布產(chǎn)生更多數(shù)據(jù):這個(gè)一般不用,因?yàn)楣烙?jì)分布參數(shù)的過程也會(huì)代入抽樣誤差蹬蚁。
數(shù)據(jù)增強(qiáng)(Data Augmentation):通過一定規(guī)則擴(kuò)充數(shù)據(jù)恃泪。如在物體分類問題里,物體在圖像中的位置犀斋、姿態(tài)贝乎、尺度,整體圖片明暗度等都不會(huì)影響分類結(jié)果叽粹。我們就可以通過圖像平移览效、翻轉(zhuǎn)却舀、縮放、切割等手段將數(shù)據(jù)庫成倍擴(kuò)充锤灿;
2. 使用合適的模型
前面說了挽拔,過擬合主要是有兩個(gè)原因造成的:數(shù)據(jù)太少 + 模型太復(fù)雜。所以但校,我們可以通過使用合適復(fù)雜度的模型來防止過擬合問題螃诅,讓其足夠擬合真正的規(guī)則,同時(shí)又不至于擬合太多抽樣誤差状囱。
(PS:如果能通過物理术裸、數(shù)學(xué)建模,確定模型復(fù)雜度浪箭,這是最好的方法,這也就是為什么深度學(xué)習(xí)這么火的現(xiàn)在辨绊,我還堅(jiān)持說初學(xué)者要學(xué)掌握傳統(tǒng)的建模方法奶栖。)
對(duì)于神經(jīng)網(wǎng)絡(luò)而言,我們可以從以下四個(gè)方面來限制網(wǎng)絡(luò)能力:
2.1 網(wǎng)絡(luò)結(jié)構(gòu) Architecture
這個(gè)很好理解门坷,減少網(wǎng)絡(luò)的層數(shù)宣鄙、神經(jīng)元個(gè)數(shù)等均可以限制網(wǎng)絡(luò)的擬合能力;
2.2 訓(xùn)練時(shí)間 Early stopping
對(duì)于每個(gè)神經(jīng)元而言默蚌,其激活函數(shù)在不同區(qū)間的性能是不同的:
當(dāng)網(wǎng)絡(luò)權(quán)值較小時(shí)冻晤,神經(jīng)元的激活函數(shù)工作在線性區(qū),此時(shí)神經(jīng)元的擬合能力較弱(類似線性神經(jīng)元)绸吸。
有了上述共識(shí)之后鼻弧,我們就可以解釋為什么限制訓(xùn)練時(shí)間(early stopping)有用:因?yàn)槲覀冊(cè)诔跏蓟W(wǎng)絡(luò)的時(shí)候一般都是初始為較小的權(quán)值。訓(xùn)練時(shí)間越長(zhǎng)锦茁,部分網(wǎng)絡(luò)權(quán)值可能越大攘轩。如果我們?cè)诤线m時(shí)間停止訓(xùn)練,就可以將網(wǎng)絡(luò)的能力限制在一定范圍內(nèi)码俩。
2.3 限制權(quán)值 Weight-decay度帮,也叫正則化(regularization)
原理同上,但是這類方法直接將權(quán)值的大小加入到 Cost 里稿存,在訓(xùn)練的時(shí)候限制權(quán)值變大笨篷。以 L2 regularization 為例:
訓(xùn)練過程需要降低整體的 Cost,這時(shí)候瓣履,一方面能降低實(shí)際輸出與樣本之間的誤差C0率翅,也能降低權(quán)值大小。
2.4 增加噪聲 Noise
給網(wǎng)絡(luò)加噪聲也有很多方法:
2.4.1 在輸入中加噪聲:
噪聲會(huì)隨著網(wǎng)絡(luò)傳播袖迎,按照權(quán)值的平方放大安聘,并傳播到輸出層痰洒,對(duì)誤差 Cost 產(chǎn)生影響。推導(dǎo)直接看 Hinton 的 PPT 吧:
在輸入中加高斯噪聲浴韭,會(huì)在輸出中生成\Sigma_i\sigma^2_i\cdot w^2_i的干擾項(xiàng)丘喻。訓(xùn)練時(shí),減小誤差念颈,同時(shí)也會(huì)對(duì)噪聲產(chǎn)生的干擾項(xiàng)進(jìn)行懲罰泉粉,達(dá)到減小權(quán)值的平方的目的,達(dá)到與 L2 regularization 類似的效果(對(duì)比公式)榴芳。
2.4.2 在權(quán)值上加噪聲
在初始化網(wǎng)絡(luò)的時(shí)候嗡靡,用 0 均值的高斯分布作為初始化。Alex Graves 的手寫識(shí)別 RNN 就是用了這個(gè)方法
Graves, Alex, et al. "A novel connectionist system for unconstrained handwriting recognition." IEEE transactions on pattern analysis and machine intelligence 31.5 (2009): 855-868.
- It may work better, especially in recurrent networks (Hinton)
2.4.3 對(duì)網(wǎng)絡(luò)的響應(yīng)加噪聲
如在前向傳播過程中窟感,讓默寫神經(jīng)元的輸出變?yōu)?binary 或 random讨彼。顯然,這種有點(diǎn)亂來的做法會(huì)打亂網(wǎng)絡(luò)的訓(xùn)練過程柿祈,讓訓(xùn)練更慢哈误,但據(jù) Hinton 說,在測(cè)試集上效果會(huì)有顯著提升 (But it does significantly better on the test set!)躏嚎。
3. 結(jié)合多種模型
簡(jiǎn)而言之蜜自,訓(xùn)練多個(gè)模型,以每個(gè)模型的平均輸出作為結(jié)果卢佣。
從 N 個(gè)模型里隨機(jī)選擇一個(gè)作為輸出的期望誤差<[t-y_i]^2>重荠,會(huì)比所有模型的平均輸出的誤差<[t-\bar{y}]^2>大(我不知道公式里的圓括號(hào)為什么顯示不了):
大概基于這個(gè)原理,就可以有很多方法了:
3.1 Bagging
簡(jiǎn)單理解虚茶,就是分段函數(shù)的概念:用不同的模型擬合不同部分的訓(xùn)練集戈鲁。以隨機(jī)森林(Rand Forests)為例,就是訓(xùn)練了一堆互不關(guān)聯(lián)的決策樹嘹叫。但由于訓(xùn)練神經(jīng)網(wǎng)絡(luò)本身就需要耗費(fèi)較多自由荞彼,所以一般不單獨(dú)使用神經(jīng)網(wǎng)絡(luò)做 Bagging。
3.2 Boosting
既然訓(xùn)練復(fù)雜神經(jīng)網(wǎng)絡(luò)比較慢待笑,那我們就可以只使用簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)(層數(shù)鸣皂、神經(jīng)元數(shù)限制等)。通過訓(xùn)練一系列簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)暮蹂,加權(quán)平均其輸出寞缝。
3.3 Dropout
這是一個(gè)很高效的方法。
在訓(xùn)練時(shí)仰泻,每次隨機(jī)(如 50% 概率)忽略隱層的某些節(jié)點(diǎn)荆陆;這樣,我們相當(dāng)于隨機(jī)從 2^H 個(gè)模型中采樣選擇模型集侯;同時(shí)被啼,由于每個(gè)網(wǎng)絡(luò)只見過一個(gè)訓(xùn)練數(shù)據(jù)(每次都是隨機(jī)的新網(wǎng)絡(luò))帜消,所以類似 bagging 的做法,這就是我為什么將它分類到「結(jié)合多種模型」中浓体;
此外泡挺,而不同模型之間權(quán)值共享(共同使用這 H 個(gè)神經(jīng)元的連接權(quán)值),相當(dāng)于一種權(quán)值正則方法命浴,實(shí)際效果比 L2 regularization 更好娄猫。
4. 貝葉斯方法
這部分我還沒有想好怎么才能講得清楚,為了不誤導(dǎo)初學(xué)者生闲,我就先空著媳溺,以后如果想清楚了再更新。當(dāng)然碍讯,這也是防止過擬合的一類重要方法悬蔽。