跳轉到

4.6 CNN 過擬合處理

範例程式:Open In Colab

CNN 在圖片資料量不足時,很容易把訓練圖片的細節記下來,造成 training accuracy 很高,但 validation accuracy 停滯或下降。本篇使用一份程式產生的方向圖形資料集,示範如何從 learning curve 判斷過擬合,並用 data augmentation、dropout、L2 regularization 與 EarlyStopping 改善。

1. 學習目標

本篇聚焦 CNN 訓練時常見的泛化落差。模型在訓練集表現很好,不代表它真的學會影像任務;如果 validation loss 持續上升,代表模型可能正在記住訓練資料中的雜訊或偶然特徵。

2. 範例資料

Notebook 會產生三類 32x32 RGB 圖片:

  1. vertical:垂直線條。
  2. horizontal:水平線條。
  3. 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. 如何套用自己的資料?

換成自己的圖片資料時,可以照以下順序處理:

  1. 先建立不含複雜技巧的 baseline CNN 或 transfer learning baseline。
  2. 畫出 training/validation accuracy 與 loss。
  3. 若 train 表現明顯高於 validation,先加入符合資料語意的 augmentation。
  4. 若仍過擬合,再調整 dropout、L2 regularization、模型大小與 EarlyStopping。
  5. 最後保留 test set,只在模型選擇完成後做一次最終評估。

資料增強必須符合任務語意。例如一般物體分類可以小角度旋轉或水平翻轉;但文字、醫療影像、方向性瑕疵或儀表讀值,不一定能任意翻轉。

7. 常見調整方向

若模型仍然過擬合,可以縮小模型、增加資料、提高 dropout、加強 augmentation 或使用 transfer learning。若模型連訓練集都學不好,問題可能不是過擬合,而是模型容量不足、learning rate 不合適或資料標註品質有問題。

8. 小結

CNN 過擬合不是只靠單一 API 解決,而是先用 learning curve 診斷,再依序調整資料、模型與訓練流程。正式影像專案中,train/validation/test 的分工、augmentation 的合理性與 callback 設定,會直接影響模型是否能泛化到新圖片。