4.6 CNN 過擬合處理
CNN 在圖片資料量不足時,很容易把訓練圖片的細節記下來,造成 training accuracy 很高,但 validation accuracy 停滯或下降。本篇使用一份程式產生的方向圖形資料集,示範如何從 learning curve 判斷過擬合,並用 data augmentation、dropout、L2 regularization 與 EarlyStopping 改善。
1. 學習目標
本篇聚焦 CNN 訓練時常見的泛化落差。模型在訓練集表現很好,不代表它真的學會影像任務;如果 validation loss 持續上升,代表模型可能正在記住訓練資料中的雜訊或偶然特徵。
2. 範例資料
Notebook 會產生三類 32x32 RGB 圖片:
- vertical:垂直線條。
- horizontal:水平線條。
- diagonal:斜線條。
訓練集刻意只保留少量樣本,validation/test 則使用較多樣本與較大的影像變化。這個設計可以讓讀者更容易觀察小資料集上 CNN 過擬合的現象。
3. 如何判斷過擬合?
最常見的訊號是 training accuracy 持續上升,但 validation accuracy 沒有跟上;或者 training loss 持續下降,但 validation loss 開始上升。這時只看最後的 accuracy 不夠,應該把 learning curve 畫出來。
4. 改善方向
本篇示範四個常用做法:
| 方法 | 作用 |
|---|---|
| Data augmentation | 讓模型在訓練時看到合理變化,降低死背圖片細節的機會 |
| Dropout | 隨機關閉部分神經元,降低模型對單一路徑的依賴 |
| L2 regularization | 限制權重過大,讓模型較不容易記住雜訊 |
| EarlyStopping | validation loss 不再改善時停止訓練,並回復最佳權重 |
這些方法不是互斥的。實務上常會先加入資料增強,再搭配適度 dropout、weight decay 或 callback。
5. 實作流程
Notebook 會先建立一個容易過擬合的 baseline CNN,觀察 train/validation learning curve。接著建立 regularized CNN,加入 augmentation、Dropout、L2 regularization 與 EarlyStopping,再比較兩個模型在 train、validation、test 的表現差異。
6. 如何套用自己的資料?
換成自己的圖片資料時,可以照以下順序處理:
- 先建立不含複雜技巧的 baseline CNN 或 transfer learning baseline。
- 畫出 training/validation accuracy 與 loss。
- 若 train 表現明顯高於 validation,先加入符合資料語意的 augmentation。
- 若仍過擬合,再調整 dropout、L2 regularization、模型大小與 EarlyStopping。
- 最後保留 test set,只在模型選擇完成後做一次最終評估。
資料增強必須符合任務語意。例如一般物體分類可以小角度旋轉或水平翻轉;但文字、醫療影像、方向性瑕疵或儀表讀值,不一定能任意翻轉。
7. 常見調整方向
若模型仍然過擬合,可以縮小模型、增加資料、提高 dropout、加強 augmentation 或使用 transfer learning。若模型連訓練集都學不好,問題可能不是過擬合,而是模型容量不足、learning rate 不合適或資料標註品質有問題。
8. 小結
CNN 過擬合不是只靠單一 API 解決,而是先用 learning curve 診斷,再依序調整資料、模型與訓練流程。正式影像專案中,train/validation/test 的分工、augmentation 的合理性與 callback 設定,會直接影響模型是否能泛化到新圖片。