第03堂課:機器學習任務攻略 (Overfitting & Optimization)

NOTE

講師:李宏毅 (Hung-yi Lee) 本筆記由 AI 助手根據課程逐字稿自動整理生成。

當我們把模型設定好,卻發現在 Kaggle 或實際場域上的測試結果不如預期時,我們不應該盲目猜測,而是要遵循一套標準的「攻略」來找出問題。

1. 檢查訓練資料的 Loss ()

當結果不好時,第一步永遠是先檢查你的 。 許多新手只關注 ,這是錯誤的。如果你的模型連在訓練資料上都考不好,根本不用管測試資料的結果。

如果 很大,有兩種可能:

可能性 A: (模型偏差)

  • 原因:你的模型太過簡單,彈性(Flexibility)不夠大。就像「大海撈針,但針根本不在海裡」。
  • 解法:重新設計模型,賦予它更大的彈性。
    • 增加更多的特徵(Features),例如從看過去 1 天的資料改成看過去 56 天的資料。
    • 使用更深、更廣的神經網路(Deep Learning)。

可能性 B:Optimization Issue (最佳化失敗)

Gradient Descent Trajectory
  • 原因:模型的彈性其實已經夠大了(針在海裡),但是你的 演算法不給力,卡在 ,沒辦法把那根針撈出來。
  • 如何判斷是 A 還是 B?
    • 比較「淺層模型」與「深層模型」的
    • 理論上,深層模型(例如 56 層)的彈性絕對大於淺層模型(例如 20 層)。如果深層的 反而比淺層還要,那就絕對不是 (因為 56 層大可複製 20 層的參數,剩下 36 層什麼都不做),而是你的 Optimization 壞掉了!

2. 檢查測試資料的 Loss ()

如果經過努力,你的 已經變得很小了,但一放到測試資料上, 卻很大,這個時候才叫做 Overfitting (過度擬合)

為什麼會 Overfitting?

當模型的彈性(自由度)非常大,而你的訓練資料(資料點)又太少時,模型為了讓 降到最低,會產生非常崎嶇扭曲的曲線來穿過所有訓練資料點。但在沒有資料限制的空白區域,模型就會開始「Freestyle」,導致預測未知資料時產生極大的誤差。

解決 Overfitting 的兩大方向:

方向一:增加資料量 (最有效的方法)

  • 蒐集更多真實資料:這是王道,當資料點夠密,模型就無法隨便 Freestyle。
  • (資料擴增):不花額外力氣蒐集,而是用現有資料「變出」新資料。例如將圖片左右翻轉、裁切。但必須注意擴增要有合理性(例如人臉可以左右翻,但不能上下顛倒)。

方向二:給模型加上限制 (Constrain)

不要讓模型有太大的自由度,迫使它只能選出合理的函數。

  • 減少參數數量:使用較少的神經元或較淺的網路。
  • 共用參數 (Weight Sharing):例如 (卷積神經網路) 就是針對影像特性,給予極大限制的特化模型,因此在影像辨識上特別強大。
  • (提早停止訓練)
  • (正規化)

WARNING

不能給太多限制 如果給模型的限制過大(例如強迫一定要是一條直線),你會重新掉回 的陷阱中!機器學習就是在「模型彈性」與「資料量」之間尋求完美的平衡。


🧠 知識圖譜 (Knowledge Graph)

graph TD
    Start["結果不理想Node1["] --> CheckTrain["]步驟一:檢查 Training Loss"]
    
    CheckTrain -->|Loss 很大| TrainFail["訓練失敗"]
    TrainFail --> Bias["Model Bias (模型太弱)"]
    TrainFail --> Opt["Optimization 失敗 (找不到最佳解)"]
    Bias -.->|解法| ModelUp["增加特徵、加深網路"]
    
    CheckTrain -->|Loss 很小| CheckTest["步驟二:檢查 Testing Loss"]
    CheckTest -->|Loss 很小| Success["完美收工"]
    CheckTest -->|Loss 很大| Overfit["Overfitting (過度擬合)"]
    
    Overfit --> Fix1["方向一:增加資料"]
    Fix1 --> Aug["Data Augmentation"]
    
    Overfit --> Fix2["方向二:限制模型"]
    Fix2 --> Constrain["CNN, Early Stopping, Dropout, 正規化"]
    
    Constrain -.->|限制過度| Bias

📝 課後測驗

Q1:訓練一個 50 層的神經網路,發現其 比 5 層的網路還要高,最可能的原因是什麼?

點擊查看答案 這通常是 Optimization 失敗(例如卡在 $\text{Local Minima}$ 或梯度消失),因為 50 層的網路理論上包含了 5 層網路的解,彈性一定夠大,所以不是 $\text{Model Bias}$。

Q2:下列哪一種方法「不適合」用來解決 Overfitting? (A) 增加訓練資料 (B) 增加神經網路的層數與神經元數量 (C) 使用 (D) 加入 機制

點擊查看答案 (B)。增加網路層數與神經元會讓模型變得更複雜、彈性更大,這反而會加劇 Overfitting 的情況。