深度學習中“過擬合”的產生原因和解決方法
過擬合定義:模型在訓練集上的表現很好,但在測試集和新資料上的表現很差。
訓練集上的表現 | 測試集上的表現 | 結論 |
不好 | 不好 | 欠擬合 |
好 | 不好 | 過擬合 |
好 | 好 | 適度擬合 |
原因
訓練資料集太小,過擬合出現的原因:
- 模型複雜度過高,引數過多
- 數量資料比較小
- 訓練集和測試集分佈不一致
- 樣本里面的噪聲資料干擾過大,導致模型過分記住了噪聲特徵,反而忽略了真實的輸入輸出特徵
- 訓練集和測試集特徵分佈不一樣(如果訓練集和測試集使用了不同型別的資料集會出現這種情況)
解決方案
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、使用整合學習方法
把多個模型整合在一起,降低單個模型的過擬合風險
&n