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