Skip to content

out-of-distribution 泛化 —— 領域偏移、虛假相關、與三條實務對策|MIT 6.7960 第 17 堂

2026年8月30日1 分鐘
TL;DROOD 失敗不是 bug,是 i.i.d. 假設破掉:covariate shift(影像風格變了)、label shift(類別比例變了)、concept shift(同一個詞意思變了)各有對應的應對方式;最常見的原因是模型抓了『虛假相關』(用草原當牛的存在訊號),IRM 與 domain randomization 想從訓練資料結構本身把這件事修掉,test-time adaptation 在推論時即時修正。

🌏 English version

影片狀態:已附影片。 影片來源與說明

教材版本:基於 MIT 6.7960 Fall 2024 OCW(對應 OCW Lec 17)。影片、投影片、作業全公開於 MIT OCW。


i.i.d. 假設與真實世界的落差

幾乎所有 ML 教科書都假設訓練與測試是 i.i.d.(independent and identically distributed)抽自同一個分布。但真實部署從來不是這樣:相機換了型號、醫院換了城市、語料從英文變成法律條文。模型在 in-distribution 拿到 95% 準確率,一上線掉到 60% — 這不是 bug,是假設破掉。

三類 shift

常見文獻把 shift 拆成三類,對應不同的應對方式(這個分類來自一般文獻,不是 Lec 17 影片的結構):

類型什麼變了典型例子
Covariate shiftP(X) 變,P(Y|X) 不變白天照的 model 拿到夜景;sketch vs photo
Label shiftP(Y) 變,P(X|Y) 不變醫院 A 病人多是老人、醫院 B 病人多是運動員
Concept shiftP(Y|X) 變「健康」這個詞在不同年代的定義;spam 標準會隨攻防演化

判斷是哪一類很重要:covariate shift 可以重加權訓練、label shift 可以校正預測、concept shift 通常得重標資料。

虛假相關與捷徑學習

OOD 失敗最常見、也最狡猾的原因:模型抓了虛假相關(spurious correlation)。經典例子:在 ImageNet 上訓練的牛羊分類器,學會用「背景有沒有草原」當牛的存在訊號;一到沙漠或沙灘就全錯。

這不是訓練沒收斂、也不是容量不夠。ERM(empirical risk minimization)+ 有限容量在訓練資料夠 i.i.d. 的前提下,最有效率的解就是把「最會浮上來的捷徑」學起來。要避免,必須改變訓練分布結構,而不是換更大的模型。

三條對策

影片對照:IRM、domain randomization、test-time adaptation 這三條對策不在 Lec 17 字幕中;影片談的是對抗樣本(約 13%–36%)、虛假相關(約 49%)、相機等 shift 造成 F1 下降(約 72%)、最壞情況/分佈穩健最佳化(約 77%–85%)與用生成模型產生反事實資料來診斷(約 90%)。以下三條是本站依一般文獻補充。

1. Invariant Risk Minimization(IRM, Arjovsky 2019)

想法:跨多個訓練環境(environments)學表示 Φ,使得「最佳分類器 w」在所有環境下相同 — 也就是學到跨環境不變的特徵。實作上在每個環境加一個懲罰項,鼓勵「環境內最佳分類器」一致。

實務上 IRM 在 DomainBed benchmark 上跟普通 ERM 差不多(後者更新一些做法反而更強),所以被批「概念漂亮但效果有限」。但它點出了一個核心:真正的泛化必須從訓練資料的環境結構著手。

2. Domain randomization / data augmentation

既然無法列舉所有測試環境,就在訓練時把環境變異最大化:顏色 jitter、cutout、mixup、CutMix、RandAugment、風格轉換、合成資料。ImageNet-C / -R / -A 等 benchmark 就是用 augmentation 模擬 shift。

便宜的對策,效果通常比 IRM 還好。代價是訓練時間略增,且 augmentation 不能太離譜(會讓訓練分布偏掉)。

3. Test-time adaptation(TTA)

在推論時,用未標註的測試資料即時調整模型。典型做法 TENT(Wang 2021):把 batch-norm 統計量與 entropy minimization 結合,幾行梯度下降就讓模型適應當下資料分布。

TTA 不需要任何標註,部署階段零成本,但假設「測試環境連續變化、模型適應得了」,不是萬靈丹。

誠實評估:benchmark 本身就有偏差

Recht et al.(2019)做了一件很扎實的事:用同樣的方法重新蒐集 ImageNet 的測試集(ImageNet-V2),結果 SOTA 模型掉了 11–14%。Bechtel et al.(也有類似結論)提醒:別把單一 benchmark 的數字當真理。

實務上:能 cross-check 至少一個獨立分布(不同時段 / 不同地理 / 不同人口)的表現,再決定上線。

最小實驗:test-time entropy minimization

model.train()                              # enable BN stats update
for x_unlabeled, _ in test_loader:
    logits = model(x_unlabeled)
    loss = -(logits.softmax(1) * logits.log_softmax(1)).sum(1).mean()  # entropy min
    loss.backward(); opt.step(); opt.zero_grad()

跑 1–2 個 epoch,模型就會「往測試分布的特徵移動」,covariate shift 常能補回幾個百分點。

什麼時候用哪一招

  • Shift 小:加 augmentation + 多資料就夠。
  • Shift 中:test-time adaptation(無標註)或自訓練。
  • Shift 大:domain adaptation(用目標域少量資料)甚至重訓。
  • Concept shift:幾乎只能重標資料,模型層救不回。

課程影片來源

2026-10-10 已即時回 MIT OCW Fall 2024 官方錄影列表核對講次,影片公開且允許嵌入;講次與主題以 OCW 的標示為準。

YouTube:MIT 6.7960 Fall 2024 — Lec 17. Generalization: Out-of-Distribution (OOD)

原始影片:MIT 6.7960 Fall 2024 — Lec 17. Generalization: Out-of-Distribution (OOD)

課程與錄影入口:

查核日期:2026-10-10。

內容核對:已依字幕核對(2026-10-10):讀了 Lec 17 字幕(Sara Beery,1:04:41):主題確實是 OOD 泛化,但影片內容是對抗樣本、虛假相關、相機等 shift 造成的效能下降、分佈穩健最佳化與反事實診斷;字幕沒有 covariate/label/concept shift 三分法、IRM、domain randomization、test-time adaptation,原「講次把 shift 拆成三類」的說法不成立,已改為「一般文獻」並在三條對策加註為本站補充。

更新紀錄

  • 2026-10-10:標註影片狀態,核對錄影來源與取得方式。
  • 2026-10-10:重查影片狀態。即時核對官方課程頁,講次與影片連結一致且影片公開,狀態改為「已附影片」。
  • 2026-10-10:依字幕核對影片內容。更正「講次把 shift 拆成三類」的說法並在三條對策加註:這些不在影片中。

參考資料

  • MIT 6.7960 OCW(Fall 2024):課程首頁
  • Arjovsky et al., Invariant Risk Minimization(2019):arXiv:1907.02893
  • Gulrajani & Lopez-Paz, In Search of Lost Domain Generalization(DomainBed, 2021):arXiv:2107.00641
  • Recht et al., Do ImageNet Classifiers Generalize to ImageNet?(2019):arXiv:1902.10811