過度擬合是什麼?正則化、Dropout、提前停止 3 招解決

過度擬合是什麼?就是模型把訓練資料背得太熟,練習題考滿分、遇到新資料就失準,常用正則化、Dropout、提前停止解決。

這篇繼續用手搖飲料店的銷售紀錄當例子,先教你怎麼一眼看出模型在「死背」,再把 3 個解法一個一個算給你看:正則化怎麼扣分、Dropout 怎麼隨機關掉神經元、提前停止要停在第幾輪。

過度擬合是什麼:三個模型的訓練誤差與驗證誤差,太簡單 30/32 杯,剛剛好 12/14 杯,死背 1/25 杯

為什麼你需要知道

  • 訓練分數越高,不代表模型越好:一個在練習資料上幾乎零誤差的模型,上線後可能錯得一塌糊塗。不懂過度擬合,你會把最會死背的模型當成最好的
  • 這是機器學習最常見的問題:Google 機器學習速成課程特別提醒,過度擬合是實務上天天遇到的事,不是課本裡的假設
  • 解法很多,方向卻常常搞反:模型死背時,有人反而加更多層、訓練更久,越修越糟
  • 證照必考:PMLE 考題很愛描述「訓練準確率 99%、驗證只有 75%」,問你下一步該做什麼

先複習:我們的飲料店資料

第 3 篇〈特徵、標籤、超參數是什麼?〉和第 4 篇〈訓練集、驗證集、測試集怎麼切?〉用的例子是這樣的:

  • 店長有 1,000 天的銷售紀錄(教學用的假設數字)
  • 每天記錄氣溫、是不是假日(特徵),以及賣出幾杯(標籤,也就是要預測的答案)
  • 照時間切成 800 天訓練集、100 天驗證集、100 天測試集

這篇的重點,就是比較模型在訓練集(練習題)和驗證集(模擬考)上的表現差多少。


過度擬合(Overfitting):練習題滿分,考試不及格

白話是什麼

過度擬合:模型把訓練資料背得太熟,連裡面的雜訊和巧合都當成規律記下來,所以遇到沒看過的新資料就失準。

比喻

就像只背考古題答案的學生。考古題每一題都答得出來,但正式考試題目換個數字,他就不會了,因為他背的是「答案」,不是「觀念」。

Google 速成課程的比喻是:過度擬合的模型,像一個在實驗室表現很好、拿到真實世界卻毫無用處的發明。

來龍去脈

擬合(fit)原本是「合身」的意思,像量身訂做衣服。模型訓練就是讓一條規則去「貼合」資料。

衣服做得合身是好事,但如果做得跟你今天的姿勢一模一樣,連手肘彎的角度都照抄,明天你換個姿勢就穿不下了。這就是「過度」擬合:貼得太緊,貼到只適合這一批資料。

依照 Google 速成課程,過度擬合的原因大致有兩個:

  1. 訓練資料不夠有代表性:跟真實世界的資料長得不一樣
  2. 模型太複雜:複雜到有能力把每一筆資料都背下來

為什麼要學

模型上線後面對的永遠是「沒看過的資料」。能不能在新資料上表現好,叫做泛化能力(Generalization),這才是模型真正的價值。過度擬合,就是泛化能力的頭號敵人。


欠擬合(Underfitting):連練習題都考不好

白話是什麼

欠擬合:模型太簡單,連訓練資料裡的規律都沒學到,練習題和考試都考不好。

比喻

像一個學生只讀了目錄就去考試,什麼題目都只會回答「看情況」。

來龍去脈

「欠」就是不夠。依照 Google 機器學習詞彙表,常見原因有:特徵選錯、訓練輪數太少或學習率太低、正則化太強、神經網路層數太少。

注意「正則化太強」這一項:等一下要介紹的解法用過頭,就會從過度擬合掉到欠擬合。

為什麼要學

過度擬合和欠擬合的解法方向剛好相反。先判斷是哪一種,才不會越修越糟。


算一次給你看:三個模型,一眼看出誰在死背

假設(教學用的數字)店長請三個人各做一個模型,都用同樣 800 天訓練、100 天驗證。誤差的意思是「平均每天猜錯幾杯」,越小越好:

模型用了什麼訓練誤差驗證誤差差距診斷
A 太簡單只看是不是假日30 杯32 杯2 杯❌ 欠擬合
B 剛剛好氣溫+假日12 杯14 杯2 杯✅ 剛好
C 死背50 個欄位(包括哪個店員上班、隔壁有沒有施工)、非常複雜的模型1 杯25 杯24 杯❌ 過度擬合

數字怎麼看

  • 只看訓練誤差:C 只差 1 杯,看起來最強
  • 看驗證誤差:C 差 25 杯,比 B 的 14 杯爛很多
  • 看兩者的差距:C 差了 24 杯,這就是過度擬合最明顯的訊號

判斷口訣:

訓練誤差驗證誤差診斷
高高(差不多)欠擬合:模型太簡單
低低(差不多)剛剛好
低高(差很多)過度擬合:模型在死背

C 為什麼會這樣?因為它記住了「上個月 15 號小美上班、隔壁施工,那天賣了 83 杯」這種巧合。這些巧合在訓練資料裡剛好成立,但明天不會再發生。


用曲線抓出過度擬合

白話是什麼

損失曲線(Loss Curve):橫軸是訓練了幾輪,縱軸是誤差(損失)。訓練集一條、驗證集一條,兩條畫在一起,Google 速成課程叫它泛化曲線(Generalization Curve)。

訓練輪數(Epoch):整份訓練資料從頭到尾看完一遍,叫做一輪。第 3 篇介紹超參數時講過。

算一次給你看:訓練 10 輪的紀錄

假設(教學用的數字)用一個比較複雜的模型訓練 10 輪,每一輪結束都記錄兩個誤差:

第幾輪12345678910
訓練誤差382517129753.52.52
驗證誤差402820161515.517192226

數字怎麼看

  • 第 1~5 輪:兩條一起往下降,模型在學「真正的規律」
  • 第 5 輪:驗證誤差最低,只差 15 杯
  • 第 6 輪以後:訓練誤差繼續降到 2,驗證誤差卻一路往上爬到 26。模型開始背巧合了

Google 速成課程的說法是:兩條線一開始走勢相似,之後分岔,訓練的繼續下降,驗證的開始上升,就是過度擬合的訊號。

損失曲線怎麼看:訓練誤差一路下降,驗證誤差在第 5 輪最低後開始上升,提前停止就停在這裡

解法 1:正則化(Regularization),對「太複雜」額外扣分

白話是什麼

正則化:訓練時除了看猜錯多少,再對「模型太複雜」額外扣分,逼模型選比較簡單的規則。

比喻

像老師規定:寫作文超過 800 字,每多 100 字扣 1 分。學生就不會把所有想到的東西全塞進去,只留最重要的論點。

來龍去脈

Regular 是「規則、規律」的意思,正則化就是讓模型變得比較有規律、比較單純。

這個想法可以追溯到 14 世紀的一位修士奧坎(William of Occam)提出的奧坎剃刀(Occam’s razor):能用簡單的解釋,就不要用複雜的。Google 速成課程也引用這個原則:簡單的模型,在新資料上通常表現比較好。

模型的「複雜」,用權重來衡量。第 3 篇講過,權重(Weight)就是模型對每個特徵的「重視程度」,是模型自己學出來的參數。權重越大,代表模型越依賴那個特徵。

公式

依照 Google 速成課程,訓練的目標從「讓誤差最小」,變成:

讓(誤差 + λ × 複雜度)最小

L2 正則化的複雜度 = w₁² + w₂² + … + wₙ²(每個權重平方後加起來)
  • w 是權重,λ(希臘字母 lambda,念「藍達」)是正則化強度,也叫正則化率
  • λ 是超參數,要你自己設定(第 3 篇講過,超參數是訓練前人設定的旋鈕)

算一次給你看

假設(教學用的數字)訓練完有兩個候選模型,都用 4 個特徵:

特徵死背版的權重樸實版的權重
氣溫5.04.0
是不是假日3020
隔壁有沒有施工−40−2
小美有沒有上班251
訓練誤差49

死背版很重視「隔壁施工」和「小美上班」這種巧合,訓練誤差比較低。

先算兩個模型的複雜度(L2):

死背版 = 5² + 30² + (−40)² + 25² = 25 + 900 + 1,600 + 625 = 3,150
樸實版 = 4² + 20² + (−2)² + 1²   = 16 + 400 + 4 + 1       = 421

再用不同的 λ 算總分(越低越好):

λ死背版:4 + λ × 3,150樸實版:9 + λ × 421會選誰
0(不正則化)49死背版 ❌
0.014 + 31.5 = 35.59 + 4.21 = 13.21樸實版 ✅

數字怎麼看

  • λ = 0:只看訓練誤差,死背版贏,模型會過度擬合
  • λ = 0.01:死背版的大權重被重罰(31.5 分),樸實版只被扣 4.21 分,樸實版贏
  • λ 調太大也不行:假設 λ = 1,死背版 3,154、樸實版 430。這時一個「所有權重都是 0、每天都猜平均值」的模型,訓練誤差 100、複雜度 0,總分只有 100,反而贏了。模型什麼都不學,就變成欠擬合

Google 速成課程的整理:λ 高,正則化強,過度擬合的機會降低;λ 低,過度擬合的機會升高。λ 要靠驗證集一個一個試(第 3 篇講的超參數調整)。

正則化怎麼算:L2 複雜度死背版 3,150、樸實版 421;λ = 0.01 時總分 35.5 對 13.21,樸實版勝出

L1 和 L2 差在哪

L2 是把權重平方加起來;L1 是把權重的絕對值(去掉負號)加起來:

樸實版的 L1 複雜度 = |4| + |20| + |−2| + |1| = 4 + 20 + 2 + 1 = 27

兩者的差別在「怎麼對待小權重」:

  • L2:權重 20 平方是 400,權重 1 平方只有 1。L2 主要在壓大權重,小權重幾乎不管,所以權重會變小,但不會剛好變成 0
  • L1:每一單位的權重扣一樣多。依照 Google 機器學習詞彙表,L1 會把不重要的特徵權重壓到剛好 0,等於自動把那個特徵刪掉
L1 正則化L2 正則化
複雜度怎麼算權重絕對值加總權重平方加總
樸實版算出來27421
效果沒用的特徵權重變成 0(自動挑特徵)大權重被壓小,但不會變 0
常見別名Lasso 迴歸Ridge 迴歸
什麼時候用特徵很多,懷疑很多是雜訊特徵都有點用,只是不想讓某幾個太霸道
BigQuery ML 參數L1_REGL2_REG

為什麼要學

正則化幾乎是每個模型都有的設定。不設的話,在 BigQuery ML 裡,線性模型的 L1_REG、L2_REG 預設都是 0,也就是完全不正則化。


解法 2:Dropout,訓練時隨機關掉一些神經元

白話是什麼

先認識兩個名詞:

  • 神經網路(Neural Network):一層一層排起來的小計算單元,前一層的輸出傳給下一層,最後算出答案。深度學習用的就是它
  • 神經元(Neuron):神經網路裡的每一個小計算單元

Dropout:訓練的每一步,隨機讓一部分神經元暫時不工作,逼剩下的神經元自己學會把事情做好。

比喻

像籃球隊練習時,每次隨機讓 2 個人坐板凳。球隊就不能永遠只靠某一個明星球員,每個人都得會傳球、會防守。到了正式比賽,全員上場,整隊的實力反而更平均、更穩。

來龍去脈

Drop out 是「退出、中途離開」的意思。這個方法出自 2014 年一篇論文〈Dropout: A Simple Way to Prevent Neural Networks from Overfitting〉,標題就寫明了它是為了解決過度擬合。

依照 Google 機器學習詞彙表:Dropout 是一種用在神經網路的正則化,每次訓練步驟隨機拿掉一層裡固定比例的神經元,拿掉越多,正則化越強。它的效果,類似同時訓練了一大群比較小的網路再綜合起來。

算一次給你看

假設某一層有 10 個神經元,每個都輸出 1,加起來是 10。設定 Dropout 比例 0.2(20%):

每一步大約關掉:10 × 0.2 = 2 個
剩下工作的:10 − 2 = 8 個

少了 2 個,總和會從 10 掉到 8,下一層收到的訊號就變弱了。所以常見的做法(例如 Keras 這個深度學習工具)會把剩下的輸出放大:

放大倍數 = 1 ÷ (1 − 0.2) = 1 ÷ 0.8 = 1.25
放大後的總和 = 8 × 1.25 = 10

這樣下一層收到的訊號大小,跟沒有 Dropout 時差不多。

Dropout 怎麼運作:10 個神經元隨機關掉 2 個,剩下 8 個輸出放大 1.25 倍,總和維持 10;預測時全部上場

數字怎麼看

  • Dropout 比例越大(例如 0.5):每次關掉一半,正則化越強,但太大模型會學不起來(欠擬合)
  • 比例越小(例如 0.1):效果比較溫和
  • 0 就是不用 Dropout。BigQuery ML 深度神經網路模型的 DROPOUT 預設就是 0
  • 預測時不會關掉任何神經元:Dropout 只在訓練時作用,正式上線時全員上場

為什麼要學

Dropout 只用在神經網路。考題看到「深度神經網路(DNN)過度擬合」,Dropout 幾乎一定是選項之一。


解法 3:提前停止(Early Stopping),驗證分數不進步就停

白話是什麼

提前停止:訓練過程中一直盯著驗證誤差,它不再變好,就停止訓練,不要等到模型把訓練資料完全背熟。

比喻

像煮麵。麵熟了就要撈起來,你不會因為「再煮久一點,麵會更軟」就一直煮下去,煮過頭就爛了。

來龍去脈

模型訓練越久,訓練誤差幾乎一定越來越低;但前面的損失曲線已經看到,過了某一輪,驗證誤差反而會變差。提前停止就是在「變差」的那一刻踩煞車。

Google 速成課程把它歸類為正則化的一種,特色是不用計算複雜度,直接在驗證誤差開始上升時結束訓練。速成課程也提醒:提前停止快速,但很少是最好的做法,效果通常不如認真調好 λ 的正則化。

算一次給你看:耐心值設 2,會停在哪

實務上不會「驗證誤差一變差就停」,因為誤差可能只是小抖一下。常見做法是設一個耐心值(Patience):連續幾輪沒有比最好的成績更好,才停。

用前面那 10 輪的紀錄,耐心值設 2:

第 5 輪:驗證誤差 15,目前最好的成績 → 記住這一輪的模型
第 6 輪:15.5,沒比 15 好 → 沒進步 1 次
第 7 輪:17,還是沒比 15 好 → 沒進步 2 次,達到耐心值,停止
最後:退回第 5 輪的模型(驗證誤差 15)

數字怎麼看

  • 原本要跑 10 輪,第 7 輪就停,省下 3 輪的時間和費用
  • 最後拿到的模型驗證誤差是 15,比跑滿 10 輪的 26 好很多
  • 耐心值太小(例如 0):誤差稍微抖一下就停,可能停太早
  • 耐心值太大(例如 10):等於沒有提前停止

為什麼要學

提前停止是最便宜的防過度擬合方法:不用改模型、不用多算,還能省訓練時間。雲端上訓練是照時間計費的,早點停就是省錢。


3 招一張表比完

正則化(L1/L2)Dropout提前停止
白話對太複雜額外扣分訓練時隨機關掉神經元驗證不進步就停
比喻作文字數上限練球隨機讓人坐板凳麵熟了就撈起來
適用模型幾乎所有模型只用在神經網路會一輪一輪訓練的模型
要調的超參數λ(正則化強度)Dropout 比例耐心值
用過頭會怎樣λ 太大 → 欠擬合比例太大 → 欠擬合停太早 → 欠擬合
BigQuery ML 參數L1_REG、L2_REGDROPOUT(DNN 模型)EARLY_STOP、MIN_REL_PROGRESS

其他常見的方法:

  • 收集更多、更有代表性的資料:資料越多,巧合越難被當成規律
  • 簡化模型、刪掉沒用的特徵:例如拿掉「哪個店員上班」
  • 資料增強(Data Augmentation):把現有資料稍微變化(例如圖片翻轉),變出更多訓練資料,第 11 篇會講

在 GCP 上怎麼做

GCP(Google Cloud Platform) 是 Google 的雲端服務,白話說就是租用 Google 機房裡的電腦和工具。

1. BigQuery ML:三招都是一行設定

下面用飲料店的資料,訓練一個深度神經網路(DNN)的迴歸模型,三招一起開(教學用的範例):

CREATE MODEL `shop.daily_cups_dnn`
OPTIONS(model_type='DNN_REGRESSOR',
        input_label_cols=['cups_sold'],
        hidden_units=[32, 16],
        dropout=0.2,
        l2_reg=0.01,
        early_stop=TRUE,
        min_rel_progress=0.01,
        max_iterations=50) AS
SELECT temperature, is_holiday, cups_sold
FROM `shop.daily_sales`;

翻成白話:

  • hidden_units=[32, 16]:神經網路有兩層,第一層 32 個神經元、第二層 16 個
  • dropout=0.2:每一步隨機關掉 20% 的神經元(DNN 模型官方文件:預設 0)
  • l2_reg=0.01:L2 正則化,λ = 0.01
  • early_stop=TRUE、min_rel_progress=0.01:每一輪的損失至少要改善 1%,否則就停止(官方預設就是開啟、1%)
  • max_iterations=50:最多訓練 50 輪(預設 20)

看損失曲線,用 ML.TRAINING_INFO:

SELECT iteration, loss, eval_loss
FROM ML.TRAINING_INFO(MODEL `shop.daily_cups_dnn`)
ORDER BY iteration;
  • loss:這一輪在訓練資料上的損失
  • eval_loss:這一輪在保留下來的評估資料上的損失

把兩欄畫成兩條線,就是上面那張泛化曲線。eval_loss 一路往上爬、loss 一路往下掉,就是過度擬合。依照官方文件,如果訓練時設定 DATA_SPLIT_METHOD='NO_SPLIT'(不切資料),eval_loss 會整欄是空的,也就看不出有沒有過度擬合。

依照線性與邏輯迴歸的官方文件,幾個要注意的預設值:

設定預設白話
L1_REG、L2_REG0預設不正則化
EARLY_STOPTRUE預設有提前停止
MIN_REL_PROGRESS0.01損失改善不到 1% 就停
MAX_ITERATIONS20最多跑 20 輪

λ 和 Dropout 比例設多少才好?可以交給 BigQuery ML 的超參數調整,用 HPARAM_RANGE 或 HPARAM_CANDIDATES 讓它自動試,第 3 篇有完整範例。

2. Agent Platform 自訂訓練(原 Vertex AI Training)

如果模型是自己用 Python 寫的,可以放到 Google Cloud 的機器學習平台上訓練。這個平台名字最近改了:

舊題庫可能還會看到 Vertex AI Training,現在叫 Gemini Enterprise Agent Platform Managed Training。
Google Cloud 在 2026 年 4 月 22 日把 Vertex AI 改名為 Gemini Enterprise Agent Platform(簡稱 Agent Platform),底下功能跟著改名(官方對照表)。功能本身是延續的。

以常見的深度學習工具 Keras 為例,三招都寫在程式裡:

model = keras.Sequential([
    keras.layers.Dense(32, activation="relu",
                       kernel_regularizer=keras.regularizers.l2(0.01)),  # L2 正則化
    keras.layers.Dropout(0.2),                                           # Dropout 20%
    keras.layers.Dense(1),
])

early_stop = keras.callbacks.EarlyStopping(
    monitor="val_loss",          # 盯著驗證誤差
    patience=2,                  # 耐心值 2
    restore_best_weights=True)   # 停下來後退回最好的那一輪

model.fit(x_train, y_train,
          validation_data=(x_val, y_val),
          epochs=50, callbacks=[early_stop])

patience=2 和 restore_best_weights=True,就是前面「耐心值 2、退回第 5 輪」的算法。各參數的說明可以看 Keras 官方文件的 EarlyStopping、Dropout 與 Regularizers。

λ、Dropout 比例要試很多組時,可以用 Agent Platform 的超參數調整服務自動搜尋;訓練過程的損失曲線,可以用 TensorBoard(一個畫訓練曲線的工具)來看,第 22 篇會講。

舊名稱現在的名稱
Vertex AIGemini Enterprise Agent Platform(Agent Platform)
Vertex AI TrainingGemini Enterprise Agent Platform Managed Training
Vertex AI ExperimentsExperiments on Agent Platform

考試會怎麼考

Google Cloud Professional Machine Learning Engineer(PMLE,專業機器學習工程師) 證照,2026 年 6 月 1 日起的官方考試指南裡,這篇的內容對應到:

考試區塊跟這篇有關的項目
第 1 區:用低程式碼方式打造 AI 方案(約 13%)用 BigQuery ML 建立模型
第 2 區:跨團隊管理資料與模型(約 16%)評估模型(看訓練與驗證的差距)
第 3 區:把原型擴展成正式模型(約 21%)排除模型訓練失敗的問題、超參數調整

考題通常給你一組「訓練分數 vs 驗證分數」或一條損失曲線,問你是哪種問題、下一步該做什麼。

PMLE 考試關鍵字:訓練準驗證差是過度擬合,兩個都差是欠擬合,驗證損失先降後升用提前停止,想讓權重變 0 用 L1,神經網路用 Dropout

看到這些字,就想到這個

題目出現的關鍵字想到
「訓練準確率很高,驗證/測試很低」過度擬合 → 正則化、Dropout、提前停止、更多資料、簡化模型
「訓練和驗證都很差」欠擬合 → 更複雜的模型、加特徵、降低正則化、訓練久一點
「驗證損失先降後升」提前停止
「想讓不重要特徵的權重變成 0」「特徵選擇」L1 正則化
「權重太大」「想整體壓小權重」L2 正則化
「深度神經網路過度擬合」Dropout
「加了正則化後,訓練和驗證都變差」λ 太大 → 調小正則化強度
「BigQuery ML 線性模型要加正則化」L1_REG/L2_REG(預設 0)

三個常見陷阱

  1. 過度擬合時「加層數、加神經元」:這是讓模型更複雜,方向剛好相反
  2. 過度擬合時「訓練更多輪」:損失曲線已經在分岔了,越訓練越糟
  3. 以為 Dropout 預測時也會關神經元:Dropout 只在訓練時作用,上線預測時全部神經元都會工作

練習情境(自己出的練習,不是真實考題)

一個團隊在 Agent Platform 上用自訂訓練跑深度神經網路,判斷商品圖片有沒有瑕疵。訓練 30 輪後,訓練準確率 99%,驗證準確率只有 76%;從損失曲線看,驗證損失在第 8 輪最低,之後一路上升。在不增加資料的前提下,最適合的兩個做法是什麼?

判斷過程:

  • 「訓練 99%、驗證 76%」→ 差距很大,過度擬合
  • 「驗證損失第 8 輪最低之後上升」→ 加上提前停止,盯 val_loss,退回最好的那一輪
  • 「深度神經網路」→ 加 Dropout(或 L2 正則化)
  • 錯誤選項通常是:增加層數、訓練更多輪、拿掉正則化

常見問答

過度擬合是什麼?

過度擬合是模型把訓練資料背得太熟,連雜訊和巧合都當成規律,所以訓練誤差很低,但遇到新資料誤差很高。就像只背考古題答案的學生,題目換個數字就不會了。

過度擬合和欠擬合差在哪?

過度擬合是模型太複雜、在死背:訓練表現很好、驗證表現差很多。欠擬合是模型太簡單、沒學到規律:訓練和驗證表現都不好。兩者的解法方向相反,前者要簡化或加正則化,後者要加特徵或讓模型更複雜。

怎麼判斷模型有沒有過度擬合?

比較訓練誤差和驗證誤差。訓練誤差低、驗證誤差高、兩者差距很大,就是過度擬合。也可以畫損失曲線:訓練損失持續下降,驗證損失卻開始上升,兩條線分岔的地方就是開始過度擬合的時候。

正則化是什麼?L1 和 L2 差在哪?

正則化是在訓練時對「模型太複雜」額外扣分,逼模型選簡單的規則。L2 把權重平方加總,會把大權重壓小但不會變成 0;L1 把權重絕對值加總,會把不重要特徵的權重壓到剛好 0,等於自動挑特徵。

Dropout 是什麼?預測時也會隨機關掉神經元嗎?

Dropout 是用在神經網路的正則化方法,訓練的每一步隨機讓一部分神經元暫時不工作,逼網路不要只依賴少數神經元。預測時不會關掉任何神經元,Dropout 只在訓練時作用。

提前停止要怎麼設?

常見做法是盯著驗證損失,設定一個耐心值,例如連續 2 輪沒有比最好的成績更好就停止,並退回驗證損失最低的那一輪。Keras 的 EarlyStopping 用 patience 和 restore_best_weights 設定;BigQuery ML 用 EARLY_STOP 和 MIN_REL_PROGRESS。

正則化強度 λ 要設多少?

沒有固定答案,要用驗證集試。λ 太小,正則化沒效果,還是會過度擬合;λ 太大,模型被罰到什麼都不敢學,會變成欠擬合。可以用 BigQuery ML 或 Agent Platform 的超參數調整自動搜尋。

BigQuery ML 怎麼防止過度擬合?

線性和邏輯迴歸可以設 L1_REG、L2_REG(預設都是 0),並使用 EARLY_STOP(預設開啟);深度神經網路模型還可以設 DROPOUT。訓練完用 ML.TRAINING_INFO 比較 loss 和 eval_loss,看兩條曲線有沒有分岔。


重點整理

  • 過度擬合=背太熟:訓練誤差低、驗證誤差高、差距大;欠擬合=學太少:兩個都高。解法方向相反
  • 正則化對太複雜扣分:L2 壓小大權重,L1 把沒用特徵的權重變 0;λ 太大會欠擬合
  • Dropout 訓練時隨機關掉神經元(只用在神經網路),預測時全員上場
  • 提前停止盯驗證損失,設耐心值,退回最好的那一輪;最便宜但不一定最好
  • BigQuery ML:L1_REG、L2_REG 預設 0,EARLY_STOP 預設開啟,DNN 有 DROPOUT;用 ML.TRAINING_INFO 看 loss 和 eval_loss

延伸閱讀

本系列

站上相關文章


過度擬合看懂了,你就知道為什麼模型評估一定要看「沒看過的資料」。下一篇要講的資料洩漏,是另一種讓分數看起來很漂亮、上線卻翻車的陷阱。如果你想有系統地從雲端基礎一路學到在 GCP 上動手做機器學習,可以看看東東的 GCP 課程,或加 LINE 聊聊你現在的狀況,一起找出最適合你的學習順序。

返回頂端