Lecture 21 — Overfitting và Regularization

Chương D** · tổng quát hóa — và domain gap không phải overfit cổ điển

Lecture 21 — Overfitting và Regularization

Chương D · tổng quát hóa — và domain gap không phải overfit cổ điển


Khung 6 câu hỏi

# Câu hỏi Trả lời ngắn
1 Tại sao cần? Policy/mạng khớp train (1 map, 1 gió) rồi chết ở test — paper không đứng.
2 So với cái khác? Vs chỉ tăng model size: cần regularize/đa dạng data. Vs domain gap: lệch phân phối sim–real / gió / khối lượng, không chỉ “thuộc lòng nhiễu train”.
3 Giải quyết gì & thế nào? Early stop, weight decay, aug, domain rand, held-out eval bắt buộc.
4 Kết quả ra sao? Protocol đánh giá trung thực; metric train vs test; claim hẹp đúng chỗ.
5 Nên dùng khi nào? Mọi thí nghiệm RL–UAV; trước khi claim generalize.
6 Không nên khi nào? Aug ảnh tưởng chữa gap dynamics; randomize quá mạnh làm task không học được.

🖼️ Hình nhanh: Train xuống / val lên = overfit; sim≠real = domain gap (khác bệnh).
```
Loss / error Phân phối
│ train ╲ │
│ ╲__ │ P_sim P_real
│ val ╲ ╱ ★ overfit │ ██ ░░██
│ ╲___╱ │ ██ ░░██
└───────┼──────► epoch └────┴────────┴──► x
early stop ★ gap: lệch hỗ trợ, không chỉ nhiễu

Overfit: thuộc lòng D_train Domain gap: D_test từ thế giới khác
```

🇻🇳 Chuyện thật (sân A): Policy “thuộc” một thửa chè phẳng, lặng gió — success train đẹp. Đưa sang thửa dốc + gió sườn buổi chiều thì chết: đó thường là domain gap, không chỉ overfit cổ điển.
Overfit = thuộc lòng nhiễu / map trong \(D_{\text{train}}\); gap = \(D_{\text{test}}\) đến từ thế giới khác (địa hình, gió, khối lượng).
Chốt: chữa đúng bệnh — held-out map/gió bắt buộc; aug ảnh không thay domain randomization động lực. ../00C.

Hình minh họa (seminar-ready)

Hình gốc hoặc minh họa cho ebook — không cắt từ slide Princeton. Dùng Present: bật Slide · F toàn màn.

Overfit cổ điển ≠ domain gap.
Overfit cổ điển ≠ domain gap.HiếuTC · gốc
Thuộc thửa phẳng → chết thửa dốc+gió.
Thuộc thửa phẳng → chết thửa dốc+gió.Generated for ebook · seminar OK

0. Mục tiêu học

  1. Nhận dấu hiệu overfit trên đường cong train/val (và trên success RL).
  2. Liệt kê kỹ thuật regularization cổ điển + công cụ robotics (domain randomization, fine-tune).
  3. Phân biệt rõ overfitting vs domain gap — chữa đúng thuốc.
  4. Viết được protocol held-out cho map / gió / khối lượng trước khi train lớn.
  5. Biết vì sao “success 95% trên env train” chưa đủ cho nghiên cứu đa mục tiêu.

1. Trực giác

Học thuộc 50 câu quiz ≠ hiểu bài. Gặp đề lạ (gió mạnh, ánh sáng khác, map khác, khối lượng pin đổi) là toang.

Overfit = khớp cả nhiễu / đặc thù tập train.
Regularization = ép mô hình đơn giản hơn, mượt hơn, hoặc bất biến hơn với thay đổi không liên quan nhiệm vụ.
Domain gap = ngay cả mô hình “không overfit” trên \(P_{\text{sim}}\) vẫn có thể kém trên \(P_{\text{real}}\) vì hai phân phối khác nhau.

Bay khảo sát đồi chè trong sim với gió 0 rồi claim “robust” — đó không phải overfit theo nghĩa train-loss/val-loss; đó là gap điều kiện vận hành. Học thuộc đáp án đề năm ngoái (overfit) khác với học trong phòng rồi thi ngoài mưa gió (domain gap).

Paper cần metric riêng cho cả hai — và với đa mục tiêu (năng lượng · phủ · quỹ đạo · gió) còn phải held-out trên từng trục.


2. Cốt lõi + sơ đồ

2.1. Dấu hiệu

Bối cảnh Dấu hiệu overfit / kém tổng quát
Supervised Train loss↓, val loss↑
RL maps Success train maps cao, held-out maps đổ
RL gió / mass Một mức gió đẹp, mức khác crash
Vision mAP trên ảnh train domain cao, bay thật tối/nghiêng kém
Đa mục tiêu Pareto đẹp trên train λ, vỡ khi đổi gió/layout

2.2. Công cụ

Công cụ Chữa chủ yếu Ghi chú UAV
Weight decay \(L_2\), dropout Overfit tham số Vẫn cần nếu mạng lớn
Early stopping Overfit theo thời gian train Stop theo held-out, không theo train return
Data augmentation ảnh Gap cảm biến ảnh nhẹ Không chữa mass/latency
Domain randomization Domain gap động lực / cảm biến Lịch rand có kiểm soát
Fine-tune thật / vài flight Gap sim–real còn lại Đắt nhưng trung thực
Invariance / chứng minh (PAC-Bayes…) Claim generalize Gần tinh thần nghiên cứu IRoM
        ┌──────────── overfit cổ điển ────────────┐
 dữ liệu│ train ──► model phức ──► nhớ nhiễu      │
        └───────────────┬─────────────────────────┘
                        │ regularization / early stop
                        ▼
                 model trên P_train ổn
                        │
                        ★ vẫn có thể gãy nếu P_test ≠ P_train
                        │
        ┌──────────── domain gap ─────────────────┐
        │ sim↔real · gió · mass · latency · ánh sáng │
        └───────────────┬─────────────────────────┘
                        │ domain rand + fine-tune + held-out
                        ▼
                 claim hẹp, metric tách train/test

3. Demo — polynomial overfitting toy + domain shift

"""
Demo Lec21 (toy overfitting):
Hàm thật y = sin(x); fit đa thức trên ít điểm nhiễu.
So sánh lỗi train vs lỗi test — bậc cao → train tốt, test xấu.
Thêm: cùng bậc 3, test dịch phân phối → domain gap ≠ overfit thêm.
"""
import numpy as np

rng = np.random.default_rng(0)
x_train = np.linspace(0, 2 * np.pi, 6)
y_train = np.sin(x_train) + 0.35 * rng.normal(size=6)
x_test = np.linspace(0, 2 * np.pi, 200)
y_test = np.sin(x_test)

def fit_and_errors(deg):
    coef = np.polyfit(x_train, y_train, deg)
    pred_tr = np.polyval(coef, x_train)
    pred_te = np.polyval(coef, x_test)
    mse_tr = float(np.mean((pred_tr - y_train) ** 2))
    mse_te = float(np.mean((pred_te - y_test) ** 2))
    return mse_tr, mse_te

print(f"{'bậc':>4}  {'MSE_train':>10}  {'MSE_test':>10}  ghi chú")
for deg in (1, 3, 5):
    tr, te = fit_and_errors(deg)
    tag = "underfit" if deg == 1 else ("★ overfit" if deg == 5 else "vừa")
    print(f"{deg:>4}  {tr:10.4f}  {te:10.4f}  {tag}")

# Minh họa domain gap ≠ overfit: cùng bậc 3, test dịch phân phối
coef3 = np.polyfit(x_train, y_train, 3)
x_shift = x_test + 0.8                    # "domain" khác: hỗ trợ lệch
y_shift = np.sin(x_shift)
mse_shift = float(np.mean((np.polyval(coef3, x_shift) - y_shift) ** 2))
_, mse_in = fit_and_errors(3)
print("MSE test in-domain (bậc 3):", round(mse_in, 4))
print("MSE test shifted-domain:   ", round(mse_shift, 4))
print("→ Shift domain làm lỗi tăng dù không 'over-fit thêm' trên train.")

🧪 Kỳ vọng demo:
- Bậc 1: train và test đều khá cao (underfit).
- Bậc 3: cân bằng hơn.
- Bậc 5 (ít điểm + nhiễu): MSE_train gần 0, MSE_test tăng rõ (overfit).
- shifted-domain lỗi tăng so với in-domain — tinh thần domain gap khác việc thuộc lòng điểm train.


4. Gắn RL–UAV

  • Policy overfit một seed gió / một layout map là thất bại kinh điển.
  • Eval bắt buộc: held-out maps, nhiều mức gió, nhiễu cảm biến, (nếu được) thay đổi khối lượng.
  • Báo cáo chỉ “success 95% trên env train” mà không có held-out → chưa đủ cho nghiên cứu.
  • Augmentation ảnh (flip màu) không giải quyết gap động lực học (mass, latency, gió).
  • Đa mục tiêu: một policy có thể “overfit” trọng số reward bạn chọn trên train (tối ưu phủ quên năng lượng) — ablate λ và held-out conditions.
  • Với đồi chè / đô thị: train một thửa phẳng, test thửa dốc + gió sườn = gap — phải nằm trong protocol.
Axis held-out Ví dụ mức test
Map / layout cột / hàng chè Layout chưa thấy khi train
Gió \(\|w\|\) lớn hơn dải train
Mass / pin ±10–20%
Vision Ánh sáng / blur / độ cao khác (GSD đổi — Lec 17)
Trọng số đa mục tiêu λ năng lượng / phủ khác lúc train

5. Ưu / nhược

✅ Nên ❌ Không nên
Early stop + val Mọi train dài Stop theo train return đẹp
Domain randomization Sim→điều kiện đa dạng Rand quá mạnh → task không học được
Aug ảnh Gap外观 nhẹ Tưởng chữa được gió / mass
Claim paper Tách overfit vs gap; mean±std nhiều seed “Generalize” khi chỉ 1 map train=test
Nghĩa năng lượng / gió / phủ Held-out trên từng trục đa mục tiêu Chỉ tối ưu một trục trên train rồi im

6. Lỗi thường gặp

  1. Data augmentation ảnh không giải quyết gap động lực học.
  2. Randomize quá mạnh khiến task không còn học được — cần lịch randomization có kiểm soát.
  3. Dùng cùng maps cho tune siêu tham số và báo cáo cuối (data leakage).
  4. Kết luận “PPO overfit” khi thật ra reward scale / lr vỡ (Lec 20).
  5. Coi domain gap = overfit rồi chỉ thêm dropout — sai thuốc.
  6. Chỉ plot reward train; không có đường val / held-out.

7. Checklist

  1. Ba dấu hiệu overfit trong RL–UAV?
  2. Ba kỹ thuật chống overfit / gap?
  3. Domain gap khác overfitting cổ điển ra sao? (1–2 câu)
  4. Liệt kê held-out axes bạn sẽ báo trong paper (map / gió / mass / vision).
  5. Aug nào không giúp bay thật khi mass/latency lệch?
  6. Pareto đa mục tiêu của bạn đo trên train maps hay held-out?

Nhớ một câu: Train đẹp chưa đủ — overfit là thuộc lòng đề cũ; domain gap là thi sang trường khác.

🔗 Sang bài sau mang theo: Khi obs là ảnh, kiến trúc mặc định không phải MLP phẳng — Lec 22 về CNN và receptive field.


Trước: Lec20 — SGD · Sau: Lec22 — CNN