在我們拿到一個(gè)數(shù)據(jù)集,高高興興準(zhǔn)備訓(xùn)練一個(gè)模型時(shí),會(huì)遇到欠擬合或過擬合的問題,業(yè)內(nèi)也喜歡用偏差和方差這兩指標(biāo)去定義它們,那這些詞什么意思呢?有什么方法能避免/解決 欠擬合和過擬合呢?
這其實(shí)是非常非?;A(chǔ)的概念,但是其實(shí)即使是業(yè)內(nèi)人士很難一下子把它們完全講明白,并列出全面的解決方法,本文為你最通俗地解答。
欠擬合(Underfit)& 過擬合 (Overfit)
先解釋一下模型欠擬合和過擬合。假設(shè)大家已經(jīng)知道訓(xùn)練集,驗(yàn)證集,測試集這個(gè)概念,不清楚的童鞋可以去康康我之前的博客哦 《無廢話的機(jī)器學(xué)習(xí)筆記》
下面兩個(gè)圖(來自吳恩達(dá)機(jī)器學(xué)習(xí)課的PPT)解釋得其實(shí)很清楚。
欠擬合:模型在訓(xùn)練集上沒有得到足夠好的擬合
過擬合:模型在訓(xùn)練集上得到過分好的擬合。
過分好有什么壞處呢,就比如訓(xùn)練集數(shù)據(jù)里都是白天的熊貓,模型把白天也作為特征學(xué)習(xí)了(對(duì)訓(xùn)練數(shù)據(jù)中的每個(gè)小細(xì)節(jié)都進(jìn)行了學(xué)習(xí),包括噪聲和異常值),那么給一張黑夜的熊貓圖,模型判斷這不是熊貓。所以模型在訓(xùn)練集上表現(xiàn)完美,一到測試集就拉胯。(訓(xùn)練集上猛如虎,測試集上很離譜)
下面圖的最靠右情況就是過擬合,這時(shí)模型往往變得非常復(fù)雜(有高次項(xiàng),如x三次方和四次方)
偏差(bias)& 方差(variance)
偏差和方差數(shù)學(xué)里就是描述數(shù)據(jù)的特征嘛,大家覺得這有什么需要解釋的,但機(jī)器學(xué)習(xí)里面,我們不是要求出一堆數(shù)據(jù)的偏差和方差,而是把它們當(dāng)作一種指標(biāo)來衡量模型的性能。
很多教程一上來給出這個(gè)圖來理解偏差/方差,很直觀,但其實(shí)這圖很容易迷惑初學(xué)者,比如這里面的藍(lán)點(diǎn),到底是模型基于訓(xùn)練集還是驗(yàn)證集的預(yù)測,還是都有?如果都有,右下角那個(gè)圖,落在紅心附近的藍(lán)點(diǎn)如果是基于訓(xùn)練集,那么這個(gè)模型應(yīng)該是low bias。如果都是訓(xùn)練集,那么是及說明不了方差的,因?yàn)榉讲钍呛饬磕P驮诓煌谋憩F(xiàn)波動(dòng),所以有點(diǎn)亂,我自己當(dāng)時(shí)也是理解得模模糊糊。也可能是我理解有誤,歡迎大家留言指教。
我個(gè)人理解它們?cè)跈C(jī)器學(xué)習(xí)里的含義應(yīng)該是這樣:
偏差:訓(xùn)練集/驗(yàn)證集數(shù)據(jù)(模型預(yù)測)與紅心(真實(shí)結(jié)果)的差距。重點(diǎn)在模型對(duì)訓(xùn)練集的損失函數(shù)。
(偏差衡量模型的預(yù)測結(jié)果與真實(shí)結(jié)果之間的差距,即模型的準(zhǔn)確性。高偏差意味著模型的預(yù)測結(jié)果通常偏離正確值)
方差:模型對(duì)訓(xùn)練集與測試集的性能差別。重點(diǎn)在模型對(duì)訓(xùn)練集和測試集的損失函數(shù)之間的差別。若訓(xùn)練集和測試集的損失函數(shù)都很大,也叫低方差。
總的來說,方差衡量模型對(duì)于給定數(shù)據(jù)的小波動(dòng)的敏感度,即模型在訓(xùn)練集和驗(yàn)證集上的表現(xiàn)波動(dòng)。
下面這圖將 欠擬合/過擬合 與 偏差/方差 的關(guān)系解釋得完美。
λ是正則化項(xiàng),它越大模型越被限制,變得越簡單。后面會(huì)解釋??偟脕碚f,
欠擬合時(shí),高偏差,低方差,模型較簡單。(因?yàn)槟P蛯?duì)于訓(xùn)練集和驗(yàn)證集誤差都很大,所以低方差;如果模型在訓(xùn)練集上已經(jīng)偏差很大,在驗(yàn)證集上更加離譜,偏差更大,那么這時(shí)可以說模型是高方差,不過這種情況極少發(fā)生。)
過擬合時(shí),低偏差,高方差,模型較復(fù)雜。
理想的模型應(yīng)該在偏差和方差之間找到良好的平衡。這就是所謂的偏差-方差權(quán)衡(Bias-Variance Tradeoff),追求偏差和方差都比較低!
下面這圖解釋得也不錯(cuò),靠左邊就是模型較簡單時(shí),模型對(duì)于訓(xùn)練集和驗(yàn)證集誤差都很大,所以低方差;靠右邊就是模型較復(fù)雜時(shí),低偏差,高方差。
避免欠擬合/過擬合的技術(shù)!
欠擬合
- 增加模型復(fù)雜度
- 改進(jìn)數(shù)據(jù)質(zhì)量(增加數(shù)據(jù)量,數(shù)據(jù)清洗)
- 特征選擇(選擇更有代表性和信息量的特征)
- 增加訓(xùn)練時(shí)間
- 減少正則化(減小λ)
- 集成學(xué)習(xí)(結(jié)合多個(gè)模型的預(yù)測來提高整體的性能)
過擬合
- 減少模型復(fù)雜度
- 數(shù)據(jù)增強(qiáng)(Data Augmentation),對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行變換,如旋轉(zhuǎn)、縮放、裁剪或顏色變化,白天和黑夜的熊貓圖都要有,以增加數(shù)據(jù)多樣性。
- 減少輸入的特征(人為去除一些冗余的特征)
- 正則化?。ㄕ`差函數(shù)中加入權(quán)重的L1或L2范數(shù))(L1/L2正則可以去康康這篇 正則)
- 批量歸一化(Batch Normalization):對(duì)每一層的輸入進(jìn)行歸一化處理,穩(wěn)定訓(xùn)練過程。(減少輸入間變化對(duì)模型產(chǎn)生的影響,讓每個(gè)隱藏層輸出值均值與方差穩(wěn)定在0和1,后面層的訓(xùn)練會(huì)更加穩(wěn)定)(不過這招對(duì)緩解過擬合來說作用比較輕微)
- 提前停止(Early Stopping):如上面那圖,在中間就停止,就完美,繼續(xù)訓(xùn)練,方差會(huì)變大。
- 集成學(xué)習(xí):結(jié)合多個(gè)模型的預(yù)測結(jié)果,如通過投票或平均,可以降低過擬合風(fēng)險(xiǎn)
- Dropout(在訓(xùn)練過程中隨機(jī)丟棄一部分神經(jīng)元,防止模型過于依賴訓(xùn)練數(shù)據(jù)中的特定樣本)(Dropout可以理解為將集成學(xué)習(xí)效果通過一個(gè)網(wǎng)絡(luò)模擬地實(shí)現(xiàn),測試時(shí)神經(jīng)元輸出乘以刪除比例,達(dá)到平均/集成的效果)其實(shí)Dropout也算正則化的一招,這里分開來講。