iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
AI Engineering

從 Pixel 到 AI:30 天影像辨識入門之路系列 第 19 篇

Day19 Epoch 越多越厲害嗎?模型到底該訓練多久?

  • 分享至 

  • xImage
  •  

上一篇我們認識了 Overfitting 與 Underfitting,其中提到一個很重要的現象 Training Accuracy 持續上升與 Validation Accuracy 上升一段時間後停滯甚至下降,這時候就會出現一個問題:

如果模型繼續訓練下去,Training Accuracy 可能還會繼續變高,那是不是 Epoch 設越多越好?

今天就來看看 Epoch 到底代表什麼,以及怎麼利用 Early Stopping 讓模型知道什麼時候該停止訓練


一、Epoch 到底是什麼?

我們在 Day15 訓練 CNN 時寫過:

history = model.fit(X_train,y_train,validation_data=(X_val,y_val),epochs=10,batch_size=32)

其中 epochs=10,代表模型會將整份 Training Data 完整學習 10 次,模型會在這個過程中反覆計算預測、Loss,並更新 Weight 和 Bias


二、為什麼不能只訓練一次?

模型一開始的 Weight 並不是已經學好的,所以第一次看完所有 Training Data 後,通常還有很多地方需要調整

可以想成我們第一次讀一本新的課本,第一次讀大概知道內容,第二次讀慢慢開始理解一些觀念,第三次變得更熟悉...

模型也是類似的概念,增加 Epoch,可以讓模型有更多機會根據 Training Data 調整參數,因此,如果 Epoch 太少,可能會發生上一篇提到的 Underfitting(欠擬合),模型可能連 Training Data 中的規律都還沒有充分學到


三、那 Epoch 越多越好嗎?

假設我們設定 epochs=100,模型確實可以一直繼續學習 Training Data,可能會看到 Training Accuracy 逐漸變高,但我們真正關心的不只是 Training Data,還要看 Validation Accuracy、Validation Loss ,有可能訓練到某個時間點後 Training Loss 持續下降、Validation Loss 先下降後再開始上升

這表示繼續訓練雖然讓模型更適應 Training Data,卻沒有讓它在 Validation Data 上繼續改善,這時就可能開始出現 Overfitting,所以 Epoch 越多,不代表模型一定越好


四、到底要設定多少 Epoch?

那問題又來了,epochs 到底要設多少呢?其實沒有一個數字適合所有模型,因為不同 Dataset、模型架構、Learning Rate 等設定,都可能影響模型需要訓練多久

如果我們直接設定 epochs=10,模型可能在第 10 個 Epoch 還在進步,但如果設定 epochs=100 又可能第 20 個 Epoch 已經不再改善,所以與其一開始猜一個「最完美的 Epoch」,有沒有辦法讓程式自己觀察模型的表現?


五、什麼是 Early Stopping?

Early Stopping 可以簡單理解成如果模型在 Validation Data 上已經一段時間沒有改善,就提早停止訓練


六、在我們的 CNN 加入 Early Stopping

原本 Day15 是:

history = model.fit(X_train, y_train, validation_data=(X_val, y_val),epochs=10, batch_size=32)

這次可以先建立 Early Stopping:

# 建立 Early Stopping
early_stopping = EarlyStopping(monitor="val_loss",patience=3,restore_best_weights=True)

接著把 Epoch 故意設定大一點,讓 epochs=50


七、patience=3 是什麼意思?

代表監控的指標如果連續 3 個 Epoch 沒有改善,就停止訓練,那麼為什麼不是 Validation Loss 一上升就立刻停止?

因為模型訓練過程本來就可能有一些波動,如果 Epoch 一變差就停止,我們反而可能太早結束訓練,所以 patience 就像是再給模型幾次機會的概念


八、看看模型到底訓練了幾個 Epoch

Early Stopping 加入後,我們用:
https://ithelp.ithome.com.tw/upload/images/20261003/20169251HwJi8WGmJF.png

就代表模型沒有跑完整個 50 Epoch,而是在符合 Early Stopping 條件後提前停止


九、把 Loss 畫出來觀察

我們也可以沿用上一篇的程式:

import matplotlib.pyplot as plt

plt.plot(history.history["accuracy"],label="Training Accuracy")
plt.plot(history.history["val_accuracy"],label="Validation Accuracy")
plt.xlabel("Epoch")
plt.ylabel("Accuracy")
plt.title("CNN Baseline Model Accuracy")

plt.legend()
plt.show()

https://ithelp.ithome.com.tw/upload/images/20261003/20169251MT3ZN5TGOH.png
從結果可以看到,Training Loss 隨著 Epoch 增加持續下降,代表模型在 Training Data 上的預測誤差越來越小,但 Validation Loss 的變化就不太一樣,大約在 Epoch 5 達到最低點,約 0.76,之後雖然 Training Loss 還是不斷下降,但 Validation Loss 已經沒有繼續改善


十、Early Stopping 可以解決 Overfitting 嗎?

Early Stopping 可以降低持續訓練造成過擬合的風險,但不能保證完全解決 Overfitting,因為 Overfitting 還可能和很多因素有關,例如模型複雜度、資料量、資料多樣性、模型參數數量

所以後面我們還會接觸 Data Augmentation、Dropout,從其他角度改善模型的 Generalization


上一篇
Day18 訓練很好、驗證很差?認識 Overfitting 與 Underfitting
下一篇
Day20 Batch Size 要設 16、32 還是 64?實際跑給你看
系列文
從 Pixel 到 AI:30 天影像辨識入門之路 共 20 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言