過擬合和欠擬合是在網絡訓練中常常碰到的問題
- 過擬合(overfit):訓練誤差小,但是對於測試集上的誤差很大。可能模型過於復雜,訓練中只”記住”了訓練樣本,然而其泛化誤差卻很高。
- 欠擬合(underfit):訓練誤差很大,無法找到合適的函數描述數據集
下面介紹這兩種情況下常用的一些trick方法
- 如何防止過擬合
過擬合的原因基本是特征維度太多,模型過復雜,參數太多,訓練數據太少,噪聲過多等,導致擬合的函數在訓練集上效果好而測試集效果差。從它出現的原因出發,我們可以考慮的方法有以下幾種:
-
- 數據增強Data Augmentation & 增加噪聲數據,將源數據數量變多
-
- 使用合適的網絡模型,減少網絡的層數、神經元個數等均可以限制網絡的擬合能力
-
Dropout(把網絡某層的輸出節點隨機丟棄掉一部分,從而創造新的樣本)
-
weight正則化 (就是在損失函數中增加范L1范數/L2范數,而weight decay是正則化的系數)
i. L1范數 所有參數的絕對值之合
L1范數可以使得某些參數為0,也就實現特征稀疏,也可認為是特征選擇
ii. L2范數 所有參數的平方和再求平方根
L2范數使得參數較小且接近於0,參數越小,模型就越小,就越不容易出現過擬合
L1趨向於產生少量特征,而其他特征都為0,而L2趨向於選擇更多特征,這些特征趨向於0
- 提前終止(early stopping)過擬合出現之前停止模型的學習過程
2. 如何防止欠擬合
模型沒有很好捕捉到數據特征,不能很好的擬合數據
-
- 添加更多特征
- 減少正則化參數