對過擬合和欠擬合的理解以及解決辦法

前言

  不管是在深度學習還是在機器學習中訓練的模型存在着過擬合和欠擬合的現象,而且這種現象或多或少可能都是難以避免的。在介紹擬合和欠擬合之前我們先來了解一下其他幾個概念。“誤差”(偏差):訓練得到的模型實際預測輸出和樣本的真實輸出之間的差異叫做誤差。方差:描述的是模型實際的預測輸出的變化範圍,離散程度,也就是離其期望值的距離。方差越大,數據的分佈越分散;“泛化誤差”:模型在訓練集上得到的誤差叫做"訓練誤差",在新的樣本或者說測試集上的誤差叫做"泛化誤差"。

1.過擬合和欠擬合

在瞭解了上面的概念之後我們就來詳細講講到底什麼是過擬合和欠擬合

  當訓練的模型在訓練集“學得”過好時,很有可能會把訓練集中樣本的一些特點(特徵)作爲所有潛在(未知)樣本的共有的特點(特徵),這就產生了我們熟知的——過擬合。反之有些模型在訓練集上本身就"學的"不夠好,就連訓練樣本中的一般的特性都沒有"學到",那麼我們就稱之爲——欠擬合,簡單來說就是過擬合學得太過於好了,“錙銖必較”;而欠擬合就學得不夠好。下面我們就舉例來說明:

圖1
圖1是來自周志華的《機器學習》的一個例子。假設我們的數據集是葉子,在左邊的我們所用到的訓練集,右邊的是我們的測試集。在訓練集中我們的葉子都是有鋸齒的,通過模型的迭代學習,模型可能就學得很好把每一個細節都學習到了,認爲是綠色的且帶有鋸齒邊緣的都是樹葉,那麼訓練誤差的就比較小,但是給定一個不帶鋸齒形狀的樹葉的測試樣本,那麼模型就可能認爲這不是樹葉,這就是過擬合,也可以說泛化誤差較大(泛化性能不好)。相反欠擬合是在訓練的過程中模型學習的不好,葉子的形狀、鋸齒邊緣之類的都沒學到,就學到了葉子的顏色是綠色的就認爲是葉子,那麼訓練誤差較大(泛化誤差更大、性能更不好),如圖在給定一棵樹的的情況下(由於顏色是綠色)那麼模型就以爲是葉子,這就是欠擬合
  同時我們知道高偏差對應着欠擬合、而高方差對應着過擬合。偏差(Bias)和方差(Variance)是機器學習領域非常重要的兩個概念和j急需需要解決的問題。在傳統的機器學習算法中,偏差和方差是對立的,低方差意味着高偏差,而低偏差意味着高方差,我們常常需要在偏差和方差之間進行權衡。而在深度學習中,我們可以同時減小偏差和方差,構建最佳神經網絡模型。

2.解決過擬合和欠擬合的方法

在得知了產生過擬合和欠擬合的原理之後,我們就提出一些解決方法。

2.1過擬合的解決辦法

①.獲取更多數據:擴充數據集可以有效的減小過擬合。

②.數據增強,複製現有數據並加隨機噪聲(數據佔比不能太高)、重採樣等,在圖像領域我們可以進行不同角度旋轉、平移變換、隨機裁剪、中心裁剪、模糊等;如圖2所示

圖2 數據增強
③.參數正則化(權值衰減)在損失和模型複雜度間進行折中,可以使用L1或L2,其中L1正則採用的是拉普拉斯先驗,傾向於聚集網絡的權值在相對少量的高重要連接上,而其他權重就會被趨向於0;而L2正則採用的是高斯先驗;
④.選擇合適的網絡結構,這個比較好理解,就是通過減少網絡層數、神經元個數、全連接層數等降低網絡容量;
⑤.Early stopping,因爲在初始化網絡的時候一般都是初始爲較小的權值,訓練時間越長,部分網絡權值可能越大。如果我們在合適時間停止訓練,就可以將網絡的能力限制在一定範圍內;大概步驟分爲:1.將數據分爲訓練集和驗證集;2.每個epoch結束後(或每N個epoch後): 在驗證集上獲取測試結果,隨着epoch的增加,如果在驗證集上發現測試誤差上升,則停止訓練;3將停止之後的權重作爲網絡的最終參數。
圖3 Early stopping
⑥.Dropout,一種相當激進的技術,和正則化不同的是它不改變網絡本身,而是會隨機地刪除網絡中的一般隱藏的神經元,並且讓輸入層和輸出層的神經元保持不變; 通常的 建議是把靠近輸⼊層的丟棄概率設得小⼀點。結構如圖4
圖4 Dropout
Dropout tricks:1.使用 0.8 作爲輸入層的保留概率,0.5 作爲隱層的保留概率。
2.dropout 會需要更大的網絡和更長的迭代。
3.如果數據集足夠大,dropout 沒有太大幫助。另外,在很小(<5000)的訓練樣本上dropout的作用很有限。
⑦.模型組合,Baggging &Boosting,將l兩個弱分類器融合之後形成一個強分類器,而且融合之後的效果會比最好的弱分類器更好;
⑧. Batch-Normalization(BN),一種非常有用的正則化方法,可以讓大型的卷積網絡訓練速度加快很多倍,同時收斂後分類的準確率也可以大幅度的提高。BN在訓練某層時,會對每一個mini-batch數據進行標準化(normalization)處理,使輸出規範到N(0,1)的正太分佈,減少了Internal convariate shift(內部神經元分佈的改變),傳統的深度神經網絡在訓練是,每一層的輸入的分佈都在改變,因此訓練困難,只能選擇用一個很小的學習速率,但是每一層用了BN後,可以有效的解決這個問題,學習速率可以增大很多倍。
⑨.通過特徵選擇減少加入特徵的種類和數量;根具誤差分析結果修改輸入特徵。
⑩.減少迭代次數;
⑪增大學習率;
⑫如果是在樹結構中,可以對樹進行剪枝。
2.2欠擬合的解決辦法

①.增加網絡規模(增加層/神經元數目增加神經網絡的大小;

②.更具誤差分析結果修改輸入特徵。

③.減少或去除正則。4修改模型結構:增加網絡層數、神經元個數和全連接層數等降低網絡容量。

④.加入更多的數據量(幾乎不起作用)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章