在我們機器學習或者訓練深度神經網路的時候經常會出現欠擬合和過擬合這兩個問題,但是,一開始我們的模型往往是欠擬合的,也正是因為如此才有了優化的空間,我們需要不斷的調整演算法來使得模型的表達能拿更強。但是優化到了一定程度就需要解決過擬合的問題了,這個問題也在學術界討論的比較多。
首先就是我們在進行模型訓練的時候會出現模型不能夠很好地擬合資料的情況,這個時候就需要我們來判斷究竟現在的模型是欠擬合還是過擬合,那麼怎麼來判斷這兩者的情況呢?有兩種方法:
首先看一下三種誤差:
學習曲線就是比較 j_train 和 j_cv。如下圖所示,為一般的學習曲線,藍色的線表示訓練集上的誤差 j_train, 粉色的線表示驗證集上的誤差 j_cv,橫軸表示訓練集合的大小。
剛開始處於 「a」 點,表示當訓練資料很小時,很容易時訓練集上的誤差非常小,此時處於過擬合狀態。隨著訓練資料的增加,訓練資料上的誤差 j_train 越來越大,而驗證集上的誤差 j_cv 越來越小,j_train 和 j_cv 越來越接近但始終保持 j_cv > j_train.
這裡首先解釋一下bias和variance的概念。模型的error = bias + variance,error反映的是整個模型的準確度,bias反映的是模型在樣本上的輸出與真實值之間的誤差,即模型本身的精準度,variance反映的是模型每一次輸出結果與模型輸出期望之間的誤差,即模型的穩定性。
我們可以根據j_cv 與 j_train兩個來判斷是處於欠擬合還是過擬合。
當觀察到 j_cv 很大時,可能處在途中藍色圓圈中的兩個位置,雖然觀察到的現象很相似(j_cv都很大),但這兩個位置的狀態是非常不同的,處理方法也完全不同。
首先欠擬合就是模型沒有很好地捕捉到資料特徵,不能夠很好地擬合資料,例如下面的例子:
左圖表示size與prize關係的資料,中間的圖就是出現欠擬合的模型,不能夠很好地擬合資料,如果在中間的圖的模型後面再加乙個二次項,就可以很好地擬合圖中的資料了,如右面的圖所示。
解決方法:
1)新增其他特徵項,有時候我們模型出現欠擬合的時候是因為特徵項不夠導致的,可以新增其他特徵項來很好地解決。例如,「組合」、「泛化」、「相關性」三類特徵是特徵新增的重要手段,無論在什麼場景,都可以照葫蘆畫瓢,總會得到意想不到的效果。除上面的特徵之外,「上下文特徵」、「平台特徵」等等,都可以作為特徵新增的首選項。
2)新增多項式特徵,這個在機器學習演算法裡面用的很普遍,例如將線性模型通過新增二次項或者三次項使模型泛化能力更強。例如上面的的例子。
3)減少正則化引數,正則化的目的是用來防止過擬合的,但是現在模型出現了欠擬合,則需要減少正則化引數。
通俗一點地來說過擬合就是模型把資料學習的太徹底,以至於把雜訊資料的特徵也學習到了,這樣就會導致在後期測試的時候不能夠很好地識別資料,即不能正確的分類,模型泛化能力太差。例如下面的例子。
上面左圖表示size和prize的關係,我們學習到的模型曲線如右圖所示,雖然在訓練的時候模型可以很好地匹配資料,但是很顯然過度扭曲了曲線,不是真實的size與prize曲線。
解決方法:
1)重新清洗資料,導致過擬合的乙個原因也有可能是資料不純導致的,如果出現了過擬合就需要我們重新清洗資料。
2)增大資料的訓練量,還有乙個原因就是我們用於訓練的資料量太小導致的,訓練資料佔總資料的比例過小。
3)採用正則化方法。正則化方法包括l0正則、l1正則和l2正則,而正則一般是在目標函式之後加上對於的範數。但是在機器學習中一般使用l2正則,下面看具體的原因。
l0範數是指向量中非0的元素的個數。l1範數是指向量中各個元素絕對值之和,也叫「稀疏規則運算元」(lasso regularization)。兩者都可以實現稀疏性,既然l0可以實現稀疏,為什麼不用l0,而要用l1呢?個人理解一是因為l0範數很難優化求解(np難問題),二是l1範數是l0範數的最優凸近似,而且它比l0範數要容易優化求解。所以大家才把目光和萬千寵愛轉於l1範數。
l2範數是指向量各元素的平方和然後求平方根。可以使得w的每個元素都很小,都接近於0,但與l1範數不同,它不會讓它等於0,而是接近於0。l2正則項起到使得引數w變小加劇的效果,但是為什麼可以防止過擬合呢?乙個通俗的理解便是:更小的引數值w意味著模型的複雜度更低,對訓練資料的擬合剛剛好(奧卡姆剃刀),不會過分擬合訓練資料,從而使得不會過擬合,以提高模型的泛化能力。還有就是看到有人說l2範數有助於處理 condition number不好的情況下矩陣求逆很困難的問題(具體這兒我也不是太理解)。
4)採用dropout方法。這個方法在神經網路裡面很常用。dropout方法是imagenet中提出的一種方法,通俗一點講就是dropout方法在訓練的時候讓神經元以一定的概率不工作。具體看下圖:
如上圖所示,左邊a圖是沒用用dropout方法的標準神經網路,右邊b圖是在訓練過程中使用了dropout方法的神經網路,即在訓練時候以一定的概率p來跳過一定的神經元。
欠擬合 過擬合及其解決方法
在我們機器學習或者訓練深度神經網路的時候經常會出現欠擬合和過擬合這兩個問題,但是,一開始我們的模型往往是欠擬合的,也正是因為如此才有了優化的空間,我們需要不斷的調整演算法來使得模型的表達能拿更強。但是優化到了一定程度就需要解決過擬合的問題了,這個問題也在學術界討論的比較多。之前搜了很多有的部落格,講...
過擬合 欠擬合及其解決辦法
1.什麼是過擬合?過擬合 overfitting 是指在模型引數擬合過程中的問題,由於訓練資料報含抽樣誤差,訓練時,複雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。具體表現就是最終模型在訓練集上效果好 在測試集上效果差。模型泛化能力弱。2 產生過擬合根本原因 1 觀察值與真實值存在偏差...
過擬合欠擬合
一篇文章,帶你明白什麼是過擬合,欠擬合以及交叉驗證 在本文中也許你會掌握機器學習中最核心的概念 偏差 方差權衡.其主要想法是,你想建立盡可能 準確並且仍能適用於新資料的模型 這是泛化 危險的是,你可以輕鬆的在你制定的資料中建立過度擬合本地噪音的模型,這樣的模型是無用的,並且導致弱泛化能力,因為雜訊是...