在我們機器學習和深度學習的訓練過程中覆积,經(jīng)常會出現(xiàn)過擬合和欠擬合的現(xiàn)象听皿。訓練一開始,模型通常會欠擬合宽档,所以會對模型進行優(yōu)化尉姨,然而等到訓練到一定程度的時候,就需要解決過擬合的問題了吗冤。
如何判斷過擬合呢又厉?我們在訓練過程中會定義訓練誤差,驗證集誤差椎瘟,測試集誤差(泛化誤差)覆致。訓練誤差總是減少的,而泛化誤差一開始會減少肺蔚,但到一定程序后不減反而增加煌妈,這時候便出現(xiàn)了過擬合的現(xiàn)象。
如下圖所示,從直觀上理解璧诵,欠擬合就是還沒有學習到數(shù)據(jù)的特征汰蜘,還有待繼續(xù)學習,而過擬合則是學習進行的太徹底腮猖,以至于把數(shù)據(jù)的一些局部特征或者噪聲帶來的特征都給學到了鉴扫,所以在進行測試的時候泛化誤差也不佳赞枕。
如何處理欠擬合
欠擬合是由于學習不足澈缺,可以考慮添加特征,從數(shù)據(jù)中挖掘出更多的特征炕婶,有時候還需要對特征進行變換姐赡,使用組合特征和高次特征。
模型簡單也會導(dǎo)致欠擬合柠掂,例如線性模型只能擬合一次函數(shù)的數(shù)據(jù)项滑。嘗試使用更高級的模型有助于解決欠擬合,如使用SVM涯贞,神經(jīng)網(wǎng)絡(luò)等枪狂。
正則化參數(shù)是用來防止過擬合的,出現(xiàn)欠擬合的情況就要考慮減少正則化參數(shù)宋渔。
如何處理過擬合
過擬合是由于學習的太徹底州疾,這可能是由于訓練數(shù)據(jù)量太少的緣故』始穑可以增大數(shù)據(jù)的訓練量严蓖,訓練數(shù)據(jù)要足夠大才能使得數(shù)據(jù)中的特征被模型學習到。還需要清洗數(shù)據(jù)氧急,盡量減少數(shù)據(jù)中的噪聲颗胡,以防止這些噪聲被模型學習到。
正則化方法也常用來處理過擬合吩坝,正則化包括L1正則化和L2正則化毒姨,正則項通常是一個范數(shù)。L1范數(shù)是指向量中各個元素絕對值之和钉寝,也叫“稀疏規(guī)則算子”手素,通常可以用來做特征選擇瘩蚪,在嵌入式特征選擇使用的就是L1范數(shù)泉懦。L2范數(shù)是指向量各元素的平方和然后求平方根,通常的結(jié)果會使權(quán)重參數(shù)變小疹瘦,使得模型的復(fù)雜度變低崩哩,符合奧卡姆剃刀原則,以防止過擬合。
在神經(jīng)網(wǎng)絡(luò)中經(jīng)常使用Dropout方法邓嘹,或者稱之為隨機失活酣栈,每次訓練的時候隨機去掉一部分隱藏層的神經(jīng)元,可以理解為每個神經(jīng)元隨機參與汹押,相當于多個模型集成矿筝。
提前終止(early stoppping)也是神經(jīng)網(wǎng)絡(luò)常使用的方法,可以防止模型復(fù)雜度過于增加棚贾,從而防止過擬合窖维。采用交叉驗證提前終止,當交叉驗證錯誤率最小時認為泛化性能最好妙痹,這時即使訓練集錯誤率仍然下降铸史,也終止訓練。
逐層歸一化(batch normalization)怯伊,給每層的輸出做歸一化(相當于加了一個線性變換層)琳轿,這樣使得下一層的輸入相當于高斯分布(正態(tài)分布),這個方法相當于下一層的權(quán)重參數(shù)訓練時避免了其輸入以偏概全, 因而泛化效果也比較好耿芹。
不過崭篡,數(shù)據(jù)在訓練過程中始終是最重要的,有時候往往擁有更多的數(shù)據(jù)勝過一個好的模型吧秕,這要求得到更多獨立同分布的數(shù)據(jù)來進行訓練琉闪。
歡迎大家關(guān)注公眾號“計算機視覺與機器學習”