basics · Vietnamese · 7 min
🇺🇸 Read in EnglishOverfitting là gì? Khi AI học thuộc lòng thay vì học hiểu
January 5, 2026
Overfitting xảy ra khi model học quá kỹ dữ liệu training đến mức không thể áp dụng cho dữ liệu mới. Đây là vấn đề cốt lõi nhất trong machine learning — và lý do nó xảy ra rất giống với cách học sai của con người.
Hãy tưởng tượng một học sinh chuẩn bị thi. Thay vì học hiểu nội dung, học sinh đó học thuộc từng câu hỏi từng xuất hiện trong đề cương — chính xác từng từ, từng đáp án.
Kết quả? Nếu đề thi giống hệt đề cương, điểm tuyệt đối. Nếu đề thi thay đổi dù chỉ một chút — học sinh đó bị rớt.
Đó chính xác là overfitting trong machine learning.
Học thuộc vs. học hiểu
Khi train một model AI, bạn cho nó học từ một tập dữ liệu mẫu — gọi là training data. Mục tiêu là model học được những quy luật chung để áp dụng cho dữ liệu mới chưa từng thấy.
Nhưng đôi khi model học quá kỹ. Thay vì học quy luật, nó học thuộc cả những chi tiết ngẫu nhiên, nhiễu, và ngoại lệ trong training data.
Kết quả: accuracy trên training data rất cao, nhưng trên dữ liệu mới thì tệ.
Ví dụ bác sĩ
Một bác sĩ AI được train chỉ trên hồ sơ bệnh nhân của một bệnh viện nhỏ ở thành phố. Model học rất kỹ đặc điểm của bệnh nhân ở đó — tuổi, dân tộc, khí hậu địa phương, thói quen ăn uống vùng đó.
Khi model đó được dùng để chẩn đoán bệnh nhân ở tỉnh khác, nó thất bại vì không nhận ra những mẫu khác biệt. Model không học bản chất của bệnh — nó học đặc điểm cụ thể của một nhóm bệnh nhân.
Tại sao overfitting xảy ra?
Có hai nguyên nhân chính:
1. Model quá phức tạp so với dữ liệu. Một model với quá nhiều tham số có đủ "năng lực" để nhớ từng điểm dữ liệu thay vì tìm pattern chung. Tương tự như một bộ não quá mạnh bị dùng để học vẹt.
2. Training data quá ít hoặc không đa dạng. Nếu bạn chỉ có 100 ví dụ để train, model có thể học thuộc 100 ví dụ đó thay vì học quy luật phổ quát.
Dấu hiệu nhận biết
Cách đơn giản nhất để phát hiện overfitting: so sánh performance trên training data và test data.
- Training accuracy: 98%
- Test accuracy: 62%
Khoảng cách lớn = overfitting. Model hoạt động tốt trên dữ liệu nó đã "thấy", nhưng thất bại trên dữ liệu mới.
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# Tạo dữ liệu mẫu
X, y = make_classification(n_samples=300, n_features=10, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# Thử 3 mức độ phức tạp khác nhau
for do_sau in [2, 8, 50]:
model = DecisionTreeClassifier(max_depth=do_sau, random_state=42)
model.fit(X_train, y_train)
train_acc = model.score(X_train, y_train)
test_acc = model.score(X_test, y_test)
trang_thai = "✓ ổn" if abs(train_acc - test_acc) < 0.1 else "✗ overfitting"
print(f"depth={do_sau:2d} | train={train_acc:.2f} | test={test_acc:.2f} | {trang_thai}")
# Output:
# depth= 2 | train=0.84 | test=0.83 | ✓ ổn
# depth= 8 | train=0.96 | test=0.85 | ✓ ổn
# depth=50 | train=1.00 | test=0.74 | ✗ overfitting| Độ phức tạp model | Train accuracy | Test accuracy | Nhận xét |
|---|---|---|---|
| Quá đơn giản | ~80% | ~79% | Underfitting — chưa học đủ |
| Vừa phải | ~92% | ~87% | Tốt — khái quát được |
| Quá phức tạp | 100% | ~74% | Overfitting — học thuộc lòng |
Cách xử lý
Không có viên đạn bạc, nhưng có vài hướng tiếp cận phổ biến:
- Thêm dữ liệu: Dữ liệu đa dạng hơn giúp model học pattern chung thay vì chi tiết cụ thể.
- Regularization: Kỹ thuật "phạt" model nếu nó trở nên quá phức tạp — buộc nó giữ mọi thứ đơn giản.
- Dropout (trong deep learning): Ngẫu nhiên tắt một số neuron trong quá trình training để model không quá phụ thuộc vào bất kỳ đặc điểm nào.
- Cross-validation: Kiểm tra model trên nhiều tập dữ liệu khác nhau để đảm bảo nó học được quy luật chung.
Điều này có nghĩa gì trong thực tế?
Overfitting là lý do tại sao một AI hoạt động cực tốt trong lab nhưng thất bại khi triển khai thực tế. Người dùng thật, dữ liệu thật — luôn khác với dữ liệu training.
Đó cũng là lý do tại sao đánh giá model trên dữ liệu mà nó chưa từng thấy là nguyên tắc cơ bản nhất trong machine learning. Không làm vậy, bạn không biết mình đang đo gì.
Sai Lầm Thường Gặp
- Chỉ nhìn training accuracy. Nếu bạn không theo dõi cả test accuracy song song, overfitting có thể diễn ra trong im lặng. Luôn log cả hai cùng lúc.
- Không tách train/test trước khi làm bất cứ điều gì. Nhiều người tách sau khi đã xử lý dữ liệu hoặc chọn feature — lúc đó thông tin từ test đã "nhiễm" vào quyết định. Tách ngay từ đầu, giữ test set trong hộp kín cho đến khi đánh giá cuối.
- Dùng test set để chọn model. Nếu bạn train 10 model và chọn cái có test accuracy cao nhất, bạn đang "overfit the test set". Dùng validation set để chọn, test set chỉ dùng một lần duy nhất để báo cáo kết quả.
- Nghĩ rằng regularization sẽ tự động giải quyết mọi thứ. Regularization giúp — nhưng không thay thế được việc có đủ dữ liệu đa dạng. Nếu training data có systematic bias, model vẫn overfit theo cách tinh tế hơn.
- Bỏ qua distribution shift. Model không overfit trên test set nhưng vẫn tệ trong production — vì dữ liệu thực tế khác với cả train lẫn test. Đây là "silent overfitting" nguy hiểm nhất và chỉ phát hiện được qua monitoring production.
Tóm tắt:
- Overfitting xảy ra khi model học thuộc chi tiết của training data thay vì học quy luật chung
- Dấu hiệu: training accuracy cao nhưng test accuracy thấp hơn đáng kể
- Nguyên nhân chính: model quá phức tạp hoặc training data quá ít / không đủ đa dạng
- Cách xử lý: thêm dữ liệu, regularization, dropout, early stopping, cross-validation
- Nguyên tắc cốt lõi: luôn đánh giá model trên dữ liệu nó chưa từng thấy — không có exception