概述:(本文閱讀大概花費5分鐘)
在模型訓練中,#過擬合#是機器學習中最常遇到的問題,在這篇文章中,我們打算從三個方向:
1. 什麼是過擬合?
2. 如何判斷模型是否過擬合?
3. 在模型訓練中如何防止過擬合,或者說有哪些方式可以有效的防止過擬合?
什麼是過度擬合?
#過擬合# 指的是模型對訓練數據進行了過度學習。也就是說模型沒有學習到數據的一般性的分布規律,而只學習了每個數據點的結果(相當於記憶化)。
eg: 下圖中的做數學題,模型只是記住了訓練數據中的答案,並沒有學習到數據規律(也就是乘法公式),因而,這個模型無法去概括,也就是說,對於這個模型而言,如果是在它熟悉的領域【訓練數據中包含這樣的案例】,它表現得非常好,但是如果一旦跳出它熟悉的領域,它就開始不正常了
如上圖,看起來這個小傢伙不知道怎麼做乘法。他只記得他已經看過的問題的答案。
如何判斷模型是否過擬合?
如上所述,過擬合的特徵在於,模型無法去概括數據的分布規律,所以判斷的標準也是建立在這點能力上。為了測試這種能力,一種簡單的方法是將數據集分成兩部分:訓練集(train set)和測試集(test set)。選擇模型時,有時候我們更希望將數據集拆分為三個(訓練集,驗證集,測試集 比例6:2:2),這個原因,我們在以後的文章在來描述.
該訓練集代表約80%的可用數據,用於訓練模型。該測試集由剩餘20%的可用數據,並用於測試模型的準確性上的數據,這部分數據必須是模型之前從未接觸過的,也就是不包含在訓練集中。
有了這種比例分割,我們可以檢查模型的性能,通過觀察模型在測試集和訓練集中的表現,依照下面這種表,來判斷:
需要注意:要使此方法起作用,您需要確保測試和訓練集兩個部分都來自於你的真實情況數據,而且是均勻的。一個好的做法是在拆分之前的數據集的順序進行混洗。如下圖所示:
好的拆分,應該是拆分出的訓練和測試集都能夠表述數據的分布規律.
如何防止過度擬合 - 模型和數據兩個方面
數據上:
第一種方案:收集更多數據
一般來說,機器模型存儲的信息有限,你只能存儲這麼多信息。這也就意味著您餵養的訓練數據越多 ,過擬合的可能性就越小。其原因是,當你添加更多的數據,模型變得無法對過擬合所有樣品,並被迫以推廣(泛化)取得進展。
收集更多樣本數據應該是每個數據科學任務的第一步,因為更多的數據將提高模型的準確性,同時減少過擬合的可能性。
第二種方案:數據增強和噪音
第一種方案-收集更多數據是一個繁瑣而昂貴的過程。如果你不能做到這一點,你應該儘量讓你的數據更加多樣化。為此,請使用數據增強技術,以便每次模型處理樣本時,它與上一次略有不同。這將使模型更難以學習到每個樣本的參數。
另一個好措施是添加噪音:
對於輸入:這種方式和數據增強具有相同的作用,並且使模型在真實的自然環境下具有更好的魯棒性。輸出:再次添加噪音,這將使訓練更加多樣化。註:在這兩種情況下,你需要確保的是:噪聲的幅度不太大。否則,您可能最終分別淹沒噪聲中的輸入信息,或使輸出不正確。兩者都會妨礙訓練過程。
第三種方案-簡化模型
假如你現在擁有足夠多的訓練數據,您的模型仍會會出現過擬合現象,原因在於你的模型可能太強大了【模型參數非常的多,比如#深度學習#網絡層數很多】,雖然樣本非常的多,但是樣本的多樣性有限,模型可以學習到樣本所有到參數。然後,您可以嘗試降低模型的複雜性。
如前所述,模型只能過度填充這麼多數據。通過逐步減少模型的複雜性- 比如#在隨機森林,排名參數在神經網絡等-可以使模型簡單化,來使它不出現過擬合。要做到這一點,這需要平衡好數據集和模型複雜度之間的關係。如下圖:
如上圖,在紅線左側,模型太簡單了。在紅線右側,模型太複雜,紅線處,正好合適。這也具有使模型更輕,訓練更快並且運行更快的優點。
第四種方案-訓練過程
有時候訓練迭代次數過多,會造成模型#過擬合
提前終止:
在大多數情況下,模型從學習正確的數據分布開始,並且在某些時候開始過度擬合數據。通過識別發生這種轉變的時刻,您可以在過擬合發生之前停止學習過程。和以前一樣,這是通過查看一段時間內的訓練誤差來完成的。
如上圖所示,當測試錯誤開始增加時,我們需要停止模型的繼續迭代.
第五種方案-正則化
正則化是對模型學習過程中對一種約束,以降低過擬合。它可以採取許多不同的形式,我們將看到其中的幾個。
L1和L2正則化該L1 懲罰的目的是儘量減少絕對值的權重在L2處罰的目的是儘量減少平方大小的權重。
由於懲罰約束,模型被迫對其權重做出妥協,因為它不能再使它們的權重變得任意大。這使得模型更加通用,這有助於對抗過擬合。
該L1懲罰具有附加的優點,即它強制特徵選擇,這意味著它會將模型中對應訓練數據中特徵效果比較的差參數設置為0,只留下相關度高的特徵對應的有用的模型參數。這有助於找出最相關特徵的數據集。缺點是,不具有L2優點,即實現簡單,優化求解變得穩定很快速,能夠起到正則化的作用。
這是重量矩陣的樣子。注意如何L1矩陣是稀疏了許多零,而L2矩陣具有稍微較小的權重。
另一種可能性是在訓練期間為參數添加噪聲,這有助於模型的泛化。
第六種方案:深度學習:Dropout和Dropconnect
這種非常有效的技術特定於深度學習,因為它依賴於神經網絡將信息從一層處理到下一層的事實。這個想法是在訓練期間隨機停用神經元或連接(dropconnect)。
這迫使網絡成為多餘的,因為它可以不再依賴於特定的神經元或連接到提取特定的功能。訓練完成後,所有神經元和連接都將恢復。已經表明,該技術在某種程度上等同於具有機器學習中對集合方法(有興趣對同學可以,看看這篇論文:Analysis of dropout learning regarded as ensemble learning),其有利於泛化,從而減少過擬合。
好了,看到這兒,關於機器學習的過擬合問題全部說完了~,這篇文章沒有去列舉許多的公式,以一種輕鬆敘述方式來描述,適合對機器學習入門對同學.