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

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

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

緣由

訓練數據集過小,過擬合出現的緣由:函數

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

解決方案

一、下降模型複雜度學習

  處理過擬合的第一步就是下降模型複雜度。爲了下降複雜度,咱們能夠簡單地移除層或者減小神經元的數量使得網絡規模變小。與此同時,計算神經網絡中不一樣層的輸入和輸出維度也十分重要。雖然移除層的數量或神經網絡的規模並沒有通用的規定,但若是你的神經網絡發生了過擬合,就嘗試縮小它的規模。測試

二、增長更多數據大數據

  使用大數據集訓練模型ui

三、數據加強spa

  使用數據加強能夠生成多幅類似圖像。這能夠幫助咱們增長數據集規模從而減小過擬合。由於隨着數據量的增長,模型沒法過擬合全部樣本,所以不得不進行泛化。計算機視覺領域一般的作法有:翻轉、平移、旋轉、縮放、改變亮度、添加噪聲等等.net

四、正則化3d

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

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不容易受到離羣值的影響。因此正確的正則化選項取決於咱們想要解決的問題。

五、dropout

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

  如上圖所示,丟棄法被用於在訓練神經網絡的過程當中隨機丟棄神經網絡中的神經元。這種技術被證實能夠減小不少問題的過擬合,這些問題包括圖像分類、圖像切割、詞嵌入、語義匹配等問題。

六、早停

  如上圖所示,在幾回迭代後,即便訓練偏差仍然在減小,但測驗偏差已經開始增長了。

七、從新清洗數據

  把明顯異常的數據剔除

八、使用集成學習方法

  把多個模型集成在一塊兒,下降單個模型的過擬合風險

相關文章
相關標籤/搜索