深度學習中「過擬合」的產生原因和解決方法

  • 2020 年 9 月 30 日
  • 筆記

過擬合定義:模型在訓練集上的表現很好,但在測試集和新數據上的表現很差。

訓練集上的表現 測試集上的表現 結論
不好 不好 欠擬合
不好 過擬合
適度擬合

原因

訓練數據集太小,過擬合出現的原因:

  1. 模型複雜度過高,參數過多
  2. 數量數據比較小
  3. 訓練集和測試集分布不一致
    1. 樣本裡面的雜訊數據干擾過大,導致模型過分記住了雜訊特徵,反而忽略了真實的輸入輸出特徵
    2. 訓練集和測試集特徵分布不一樣(如果訓練集和測試集使用了不同類型的數據集會出現這種情況)

解決方案

1、降低模型複雜度

  處理過擬合的第一步就是降低模型複雜度。為了降低複雜度,我們可以簡單地移除層或者減少神經元的數量使得網路規模變小。與此同時,計算神經網路中不同層的輸入和輸出維度也十分重要。雖然移除層的數量或神經網路的規模並無通用的規定,但如果你的神經網路發生了過擬合,就嘗試縮小它的規模。

2、增加更多數據

  使用大數據集訓練模型

3、數據增強

  使用數據增強可以生成多幅相似影像。這可以幫助我們增加數據集規模從而減少過擬合。因為隨著數據量的增加,模型無法過擬合所有樣本,因此不得不進行泛化。電腦視覺領域通常的做法有:翻轉、平移、旋轉、縮放、改變亮度、添加雜訊等等

4、正則化

  在損失函數後面加一個正則化項,常見的有L1正則化和L2正則化

L1懲罰項的目的是使權重絕對值最小化。公式如下:

$$L(x, y) \equiv \sum_{i=1}^{n}\left(y_{i}-h_{\theta}\left(x_{i}\right)\right)^{2}+\lambda \sum_{i=1}^{n}\left|\theta_{i}\right|$$

L2懲罰項的目的是使權重的平方最小化。公式如下:

$$L(x, y) \equiv \sum_{i=1}^{n}\left(y_{i}-h_{\theta}\left(x_{i}\right)\right)^{2}+\lambda \sum_{i=1}^{n} \theta_{i}^{2}$$

以下表格對兩種正則化方法進行了對比:

L1正則化 L2正則化
1. L1懲罰權重絕對值的總和 1. L2懲罰權重平方和的總和
2. L1生成簡單、可解釋的模型 2. L2正則化能夠學習複雜數據模式
3. L1受極端值影響較小 3. L2受極端值影響較大

  如果數據過於複雜以至於無法準確地建模,那麼L2是更好的選擇,因為它能夠學習數據中呈現的內在模式。而當數據足夠簡單,可以精確建模的話,L1更合適。對於我遇到的大多數電腦視覺問題,L2正則化幾乎總是可以給出更好的結果。然而L1不容易受到離群值的影響。所以正確的正則化選項取決於我們想要解決的問題。

5、dropout

  dropout 是一種避免神經網路過擬合的正則化技術。像L1和L2這樣的正則化技術通過修改代價函數來減少過擬合。而丟棄法修改神經網路本身。它在訓練的每一次迭代過程中隨機地丟棄神經網路中的神經元。當我們丟棄不同神經元集合的時候,就等同於訓練不同的神經網路。不同的神經網路會以不同的方式發生過擬合,所以丟棄的凈效應將會減少過擬合的發生。

  如上圖所示,丟棄法被用於在訓練神經網路的過程中隨機丟棄神經網路中的神經元。這種技術被證明可以減少很多問題的過擬合,這些問題包括影像分類、影像切割、詞嵌入、語義匹配等問題。

6、早停

  如上圖所示,在幾次迭代後,即使訓練誤差仍然在減少,但測驗誤差已經開始增加了。

7、重新清洗數據

  把明顯異常的數據剔除

8、使用集成學習方法

  把多個模型集成在一起,降低單個模型的過擬合風險