Overfitting
What?
過擬合( Overfitting )是指在模型訓練時,模型過度學習了訓練資料中的細節和噪音,導致在新資料(測試集或實際應用場景)上的表現不佳。 簡單來說,模型「記住」了訓練資料,而非「理解」其背後的普遍規則。
舉例來說,就像準備考試只死背範例題,但無法靈活應對考卷上的變化題型一樣。過擬合會讓機器學習模型在測試集上出現偏低的準確率,甚至完全沒辦法泛化到真實世界中的資料。
Who?
過擬合主要影響以下兩類人:
- 機器學習工程師:在開發模型時,過擬合是需要注意並避免的重要問題。
- 使用模型的人:如果模型因過擬合而預測不準,他們的業務決策可能受到負面影響,例如錯誤的銷售預測或不精準的推薦系統。
When?
以下情境容易出現過擬合:
- 訓練資料量不足:當訓練集太小時,模型容易直接記住每一筆資料。
- 模型複雜度太高:例如深層神經網絡中有太多層或節點,導致其過度適配訓練資料。
- 缺乏正則化( Regularization )技術:未使用 L1 正則化、 L2 正則化等方法控制模型參數。
- 訓練時間過長:當 Epoch 數設得太多,也可能造成模型反覆學習噪音。
Where?
在架構中,過擬合通常出現在以下部分:
- 訓練階段:當執行模型訓練時,如果未妥善處理,就會發生。
- 評估階段:檢查 Test set 的結果時,如果測試表現與訓練表現差距很大,就可能是因為過擬合。
例如,在深度學習架構中,如 CNN 或 RNN ,如果沒有足夠監控 Validation Loss ,可能導致模組潛藏著過擬合問題。
Why?
避免過擬合非常重要,因為它解決了以下問題:
- 泛化能力不足:如果模型只能對特定的訓練資料有效,那就無法解決真實世界中的問題。
- 資源浪費:花費大量時間和計算資源得到不能泛用的結果,是極大的效率損失。
- 錯誤預測風險提高:例如用來診斷疾病的 AI 模型,如果因為過擬合而誤判,那後果可能非常嚴重。
How?
🛠️ 建立階段
避免過擬合的方法可以分以下幾步:
- 增加 Training Data:
- 蒐集更多樣本或進行 Data Augmentation (如旋轉影像、加入隨機噪音)。
- 降低 Model Complexity:
- 減少網絡層數、節點數或限制參數自由度。
- 使用正則化技術:
- 加入 $$L_1$$ 或 $$L_2$$ Regularization ,限制權重大小以降低自由度。
- 提早停止( Early Stopping )
- 設定 Validation Loss 為監控指標,一旦停止下降就終止訓練。
- 使用 Dropout 技術:
- 在人工神經網絡中隨機關閉部分神經元,以降低依賴性並提升泛化能力。
🔍 查詢階段
檢查是否存在過擬合,可以採用以下流程:
- 將 Train set 和 Test set 的 Loss 曲線繪製出來:
- 如果 Train Loss 持續下降但 Test Loss 開始上升,就有明顯的 Overfitting 問題。
- 評估 Test Accuracy 與 Train Accuracy 差距:
- 若差距持續拉大,就代表泛化能力不足。
- 使用交叉驗證( Cross Validation )
- 利用 K-fold Cross Validation 減少偏差並評估穩定性。
補充說明
📌 範例比較
| 方法 | 過擬合防治效果 | 資料需求量 |
|---|---|---|
| Data Augmentation | 高 | 中等 |
| Regularization | 中 | 無需額外資料 |
| Early Stopping | 高 | 無需額外資料 |
🧠 延伸/常見誤解
- 誤解一:「增加層數一定能提升準確率。」 事實上,更多層會增加運算成本且更容易造成 Overfitting 。
- 誤解二:「只要 Test Accuracy 很高就沒問題。」 要注意 Test Accuracy 是否穩定,以及是否依照不同批次進行評估才能確保泛用性。