欠擬合與過擬合問題是機器學習中的經典問題,儘管相關的討論和預防方法非常多,但目前在許多任務中仍經常會出現過擬合等問題,還沒有找到乙個十分通用、有效的解決方法。不過總體上看,現在人們常用的一些很簡潔的方法基本上能夠較好地解決欠擬合與過擬合問題,總結如下。
欠擬合與過擬合的概念的成因比較簡單,觀點統一,這裡不再介紹。現在常用的判斷方法是從訓練集中隨機選一部分作為乙個驗證集,採用k折交叉驗證的方式,用訓練集訓練的同時在驗證集上測試演算法效果。在缺少有效預防欠擬合和過擬合措施的情況下,隨著模型擬合能力的增強,錯誤率在訓練集上逐漸減小,而在驗證集上先減小後增大;當兩者的誤差率都較大時,處於欠擬合狀態(high bias, low variance);當驗證集誤差率達到最低點時,說明擬合效果最好,由最低點增大時,處與過擬合狀態(high variance, low bias)。下圖的橫座標用擬合函式多項式的階數籠統地表徵模型擬合能力:
下面詳細介紹預防解決模型欠擬合與過擬合的常用方法及原理:
欠擬合
因為對於給定資料集,欠擬合的成因大多是模型不夠複雜、擬合函式的能力不夠。
為此可以增加迭代次數繼續訓練、嘗試換用其他演算法、增加模型的引數數量和複雜程度,或者採用boosting等整合方法。
過擬合
過擬合成因是給定的資料集相對過於簡單,使得模型在擬合函式時過分地考慮了雜訊等不必要的資料間的關聯。或者說相對於給定資料集,模型過於複雜、擬合能力過強。方法如下:
1.資料擴增:
人為增加資料量,可以用重取樣、上取樣、增加隨機雜訊、gan、影象資料的空間變換(平移旋轉映象)、尺度變換(縮放裁剪)、顏色變換、增加雜訊、改變解析度、對比度、亮度等。其中增加雜訊,可以在原始資料上直接加入隨機雜訊(更接近真實環境),也可以在權重上增加雜訊。
2.直接降低模型複雜度:
即減少模型引數數量。例如:對於lr,減少目標函式的因子數;對於dt,減少樹的深度、剪枝等;對於dnn,減少層數和每層權向量長度。
3.針對神經網路,採用dropout方法:
間接減少引數數量,也相當於進行了資料擴增。弱化了各個引數(特徵)之間的單一聯絡,使起作用的特徵有更多組合,使從而模型不過分依賴某個特徵。
4.提前停止訓練:
也就是減少訓練的迭代次數。從上面的誤差率曲線圖可以看出,理論上能夠找到乙個訓練程度,此時驗證集誤差率最低,視為擬合效果最好的點。
5.多模型投票方法:
類似整合學習方法的思想,不同模型可能會從不同角度去擬合,互相之間取長補短,即使單獨使用某個模型已出現過擬合,但綜合起來卻有可能減低過擬合程度,起到正則作用,提高了泛化效果。特別是使用多個非常簡單的模型,更不容易產生過擬合。
以下是一系列常用的正則化方法:
從貝葉斯理論角度看,加入正則項相當於引入了乙個引數的先驗資訊,即人為給引數的選擇增加了一些規則(先驗),把人們的知識數學化告訴給模型的損失函式,從而縮小了解空間傾向於產生唯一解,使擬合出錯的概率變小,同時解決了逆問題的不適定性(多解問題)。不同的正則化項具有不同先驗分布,具體介紹如下。
6.l0正則化:
損失函式後面加上在加入l0範數 λ||w||0,也就是權向量中非零引數的個數。
它的特點是可以實現引數的稀疏性,使盡可能多的引數值為0,這與稀疏編碼的思想吻合。但它的缺點是在優化時是np難問題,很難優化。因此實際任務中更常用l1範數。
7.l1正則化:
損失函式l0後面加上引數(權向量w)的l1範數項:λ||w||1=λ∑ni=1||wi||1 , 其中 n 是權向量 w 的長度(引數數量),λ 是正則化引數,用來調和l0 與正則項,此時損失函式如下:
l=l0+λ||w||1
l1正則項等價於先驗概率服從拉普拉斯分布;此時若針對線性回歸就是lasso regression。l1範數是l0範數的最優凸近似,比l0範數容易優化,而且也可以很好地實現引數稀疏性,常別稱作「稀疏規則運算元」,因此相對l0正則化更常用。同時l1和l0因為具有使引數稀疏的特點,常用於特徵選擇。
8.l2正則化:
損失函式l0後面加上引數l2範數的平方項:λ2n||w||22=λ2n∑ni=1w2i ,其大小由引數weight-decay(權值衰減)調節,此時損失函式如下:
l=l0+λ2n||w||22
其中分母有無n均可,l2正則項等價於先驗概率服從高斯分布;此時針對線性回歸就是ridge regression,即常說的「嶺回歸」。與l0,l1不同的是,l2很難使某些引數達到0,它只能使引數接近0。如今在許多問題中,更常用l2正則是因為:一方面我們通常想考慮更多的引數對問題的影響(因此不能讓引數稀疏),另一方面在優化時,l2範數有利於解決condition number: k(a)=||a||||a−1|| 太大(遠大於1)的情況下(此時存在某些引數,對結果有過大的影響)矩陣求逆很困難的問題,這使得優化求解變得更快更穩定。
現在有些任務中會同時使用l1和l2正則項,用各自的兩個正則化引數去權衡「部分稀疏」與「整體接近0」這一對trade-off問題。
上圖可以看出,服從拉普拉斯分布的l1正則項更傾向於產生稀疏引數,而服從高斯分布的l2正則項在0處相對比較平滑,在引數絕對值較大處抑制效果更好,使整體資料的分布更接近0。
9.(針對dnn)batch normalization:即bn,既能夠提高泛化能力,又大大提高訓練速度,現在被廣泛應用在dnn中的啟用層之前。bn的提出最初是針對dnn在訓練過程中會出現資料內部的協方差偏移現象,導致輸出資料分布發生額外的改變,並隨著層數的增加偏移加劇,使得模型不得不根據輸出分布的改變重新學習,這又導致訓練速度減慢。
公式如下:
具體過程:首先對某層的輸入樣本做白化處理,等價於零均值化處理(均值為0,方差為1),使輸入樣本之間互不相關,且每層的輸入服從相同分布,克服了內部協方差偏移的影響。採用分批處理資料的方式,減少了計算量。
主要優勢:減小了梯度對引數大小和初始值的依賴,將引數值(特徵)縮放在[0,1]區間(若針對relu還限制了輸出的範圍),這樣反向傳播時梯度控制在1左右,使網路即使在較高學習率下也不易發生梯度**或瀰散(也預防了在使用sigmoid作為啟用函式時訓練容易陷入梯度極小飽和或極大的極端情況)。
欠擬合與過擬合
在用機器學習搭建模型時,經常會碰到這樣一種情況,你的模型演算法在樣本資料中匹配的非常完美。但用新資料測試,發現模型結果和實際差距非常大。那麼恭喜你!你掉進了機器學習中常見的乙個大坑 過擬合。什麼是過擬合呢?機器學習本質上是通過建立資料模型,使其和現有資料相吻合,從而找到資料中內在的規律。如下面三張圖...
欠擬合與過擬合
一 1.欠擬合 訓練集上表現很差 這種情況在測試集上也不會好 高偏差 bias 解決辦法 選擇更複雜的網路 有正則項就減小正則項引數等。2.過擬合 訓練集上表現很好,但測試集上表現很差,高方差 variance 解決辦法 採用更多資料 如果有正則化就增加正則化引數,沒有就加上正則化 dropout等...
過擬合與欠擬合
過擬合與欠擬合 欠擬合 個人理解就是由於資料少 正則化太厲害 模型複雜度太簡單等原因,導致模型沒有學習到足夠的規律,準確率與模型可達到的準確率差距較大。但是模型在訓練集和測試集的曲線趨勢是正常收斂的。解決方法為有 增加特徵,尋找與標籤相關性較大的特徵,在保證特徵沒有共線性的前提下,增加特徵的數量 減...