Overfitting: vì sao khớp dữ liệu cũ chưa đủ?
Một mô hình đạt điểm rất đẹp trên dữ liệu đã học có thể khiến ta yên tâm quá sớm. Điều cần biết là nó còn làm đúng trên những trường hợp chưa thấy hay không. Overfitting, thường gọi là học quá khớp, giúp giải thích khoảng cách đó.
🧠 1. Học quá khớp nghĩa là gì?
Khi mô hình bám quá sát đặc điểm riêng hoặc nhiễu của tập huấn luyện, nó có thể khớp dữ liệu cũ rất tốt nhưng tổng quát hóa kém. Ví dụ đa thức trong tài liệu scikit-learn minh họa rằng tăng độ phức tạp có thể làm đường cong học cả nhiễu. Minh họa underfitting và overfitting.
Điều này không có nghĩa “học càng nhiều càng tệ”. Câu hỏi là mô hình đang nắm được quy luật hữu ích hay đang thích nghi quá mức với bộ ví dụ dùng để xây dựng nó.
🧮 2. Hai công thức cùng khớp, kết quả mới khác nhau
Giả sử quy luật thật trong ví dụ tự tạo này là y = x. Ta biết bốn điểm tại x = -2, -1, 1, 2. Cả hai hàm dưới đây đều khớp hoàn toàn bốn điểm đó:
def simple(x):
return x
def wiggly(x):
return x + (x + 2) * (x + 1) * (x - 1) * (x - 2)
def mse(fn, xs):
return sum((fn(x) - x) ** 2 for x in xs) / len(xs)
train = [-2, -1, 1, 2]
test = [0, 0.5, 1.5]
for fn in (simple, wiggly):
print(fn.__name__, round(mse(fn, train), 4),
round(mse(fn, test), 4))
Kết quả:
simple 0.0 0.0 wiggly 0.0 9.5651
Hai cột số lần lượt là sai số bình phương trung bình trên tập cũ và tập kiểm tra. Tại x = 0, hàm đơn giản trả về 0, còn hàm uốn lượn trả về 4.
Đây là minh họa toán học về nhiều hàm cùng khớp một tập điểm, không phải kết quả huấn luyện một mô hình AI thực tế. Nó cho thấy điểm huấn luyện bằng không chưa đủ để chọn hàm dự đoán.
🗂️ 3. Dành dữ liệu riêng cho từng quyết định
Một cách tổ chức là dùng train để học tham số, validation để chọn cấu hình và test để đánh giá cuối. Nếu liên tục sửa mô hình theo điểm test, bạn đã dùng tập đó để lựa chọn. Cross-validation hỗ trợ so sánh cấu hình, nhưng vẫn cần đánh giá cuối độc lập. Tài liệu cross-validation.
Với dự án của mình, hãy viết rõ ngay trong nhật ký: “Tập này được phép dùng để quyết định điều gì?”. Quy tắc đơn giản đó giúp người mới không vô tình mở đáp án cuối ở mỗi lần thử.
🔍 4. Đừng gọi mọi lỗi là overfitting
Rò rỉ dữ liệu là một vấn đề khác: thông tin không nên có khi học hoặc chọn mô hình đã lọt vào quy trình. Ví dụ, chọn đặc trưng bằng toàn bộ dữ liệu trước khi chia tập có thể làm đánh giá quá lạc quan. scikit-learn khuyến nghị chia tập trước, chỉ học phép biến đổi trên phần huấn luyện và dùng pipeline phù hợp. Các lỗi thường gặp.
Dữ liệu vận hành thay đổi cũng có thể làm chất lượng giảm: định dạng đầu vào hoặc phân bố dữ liệu mới khác lúc huấn luyện. Cần theo dõi cả dữ liệu phục vụ thực tế và chất lượng đầu ra. Hướng dẫn giám sát của Google.
Vì vậy, một khoảng cách điểm số là tín hiệu để điều tra, chưa phải bản chẩn đoán hoàn chỉnh.
💬 5. Dùng AI rà soát thiết kế đánh giá
Tôi đang đánh giá một mô hình dự đoán. Đây là nguồn dữ liệu, cách chia tập, bước tiền xử lý, cách chọn cấu hình và kết quả từng tập: [dán mô tả]. Hãy tìm câu hỏi cần kiểm tra về: 1. Dữ liệu trùng giữa các tập. 2. Bước nào đã nhìn thấy dữ liệu test. 3. Thông tin chỉ có sau thời điểm dự đoán. 4. Khác biệt giữa dữ liệu cũ và dữ liệu vận hành. Phân biệt bằng chứng có sẵn với giả thuyết. Không kết luận overfitting chỉ từ một điểm số.
✅ 6. Giữ một hồ sơ có thể kiểm lại
Lưu phiên bản dữ liệu, cách chia, cấu hình và từng kết quả thử. Khi sửa quy trình, so với phương án đơn giản làm mốc và ghi lại điều đã thay đổi.
Nếu kết quả bất ngờ tốt, kiểm tra dữ liệu và cách chấm trước khi ăn mừng. Nếu kết quả giảm khi vận hành, kiểm tra những ca mới đang thất bại. Mục tiêu là dự đoán có ích trên dữ liệu phù hợp với thực tế, không phải làm đẹp điểm trên những ví dụ đã biết.