Courses
Bạn có biết vì sao mô hình đạt độ chính xác 99% trên dữ liệu huấn luyện nhưng lại chẳng thể dự đoán đúng khi đưa vào sản xuất?
Có sự khác biệt giữa một mô hình chỉ ghi nhớ và một mô hình thực sự học. Khả năng khái quát hóa là mục tiêu cốt lõi của học máy — bạn muốn dự đoán vẫn đúng trên dữ liệu mô hình chưa từng thấy, không chỉ trên dữ liệu dùng để huấn luyện. Khi điều đó không xảy ra, vấn đề hầu như luôn rơi vào một trong hai hướng.
Hai hướng đó là overfitting và underfitting. Bạn cần biết mình đang gặp trường hợp nào trước khi có thể khắc phục.
Trong bài viết này, tôi sẽ hướng dẫn bạn cách nhận diện overfitting và underfitting, vì sao chúng xảy ra, và các bước thực hành giúp bạn đạt được sự cân bằng.
Underfitting là gì?
Underfitting xảy ra khi mô hình quá đơn giản để biểu diễn những gì thực sự diễn ra trong dữ liệu.
Hãy tưởng tượng bạn dự đoán giá nhà bằng một quy tắc duy nhất: "mọi căn nhà đều có giá 300.000 đô la." Quy tắc đó sẽ sai gần như ở mọi nơi. Nó không thấy được khu vực, diện tích sàn, số phòng ngủ, chỗ để xe hay năm xây dựng. Mô hình hoàn toàn thiếu linh hoạt để bám theo quy luật.
Bạn có thể nhận ra underfitting theo cùng một cách mỗi lần. Độ chính xác huấn luyện thấp, và độ chính xác kiểm thử cũng thấp. Cả hai đều tệ, nhưng điểm mấu chốt là chúng tệ đồng thời.
Một ví dụ kinh điển là khớp một đường thẳng cho dữ liệu có dạng cong. Đường thẳng cắt qua giữa và bỏ lỡ hình dạng. Dù có thêm bao nhiêu dữ liệu huấn luyện cũng không cứu được, vì bản thân mô hình không thể biểu diễn mối quan hệ.

Ví dụ underfitting
Overfitting là gì?
Overfitting là vấn đề ngược lại. Mô hình quá phức tạp.
Thay vì học quy luật tổng quát, nó ghi nhớ tập huấn luyện. Mọi điểm nhiễu, ngoại lệ kỳ lạ, mọi đỉnh và đáy, mọi trùng hợp trong dữ liệu đều được chú ý như thể là quy luật thật. Mô hình trở nên gần như hoàn hảo đối với dữ liệu đã được huấn luyện.
Điểm tốt của overfitting là bạn có thể dễ dàng nhận ra nó. Độ chính xác huấn luyện trông rất đẹp, nhưng độ chính xác kiểm thử lại tệ hại.
Hãy nghĩ về một học sinh học vẹt đáp án bài thi từng chữ nhưng không nắm được bản chất môn học. Các em đạt điểm cao ở bài luyện tập và có khả năng trượt bài thi thật.

Ví dụ overfitting
Overfitting vs Underfitting: Khác biệt chính
Giờ bạn đã thấy cả hai, khác biệt sẽ dễ nhận ra hơn. Mô hình underfitting không hoạt động tốt ngay cả trên dữ liệu đã thấy. Mô hình overfitting không hoạt động tốt trên dữ liệu chưa thấy.
Hai trường hợp trông khác nhau trong quá trình huấn luyện:
- Underfitting thể hiện bằng hiệu năng phẳng, ở mức trung bình kém trên toàn bộ — mô hình chẳng học được bao nhiêu từ bất cứ thứ gì
- Overfitting thể hiện bằng một khoảng cách, khi điểm huấn luyện tiếp tục tăng trong khi điểm kiểm thử dậm chân tại chỗ hoặc tệ đi theo thời gian
Nguyên nhân của chúng cũng phản chiếu nhau. Underfitting đến từ việc làm quá ít: mô hình đơn giản và thiếu đặc trưng. Overfitting đến từ việc làm quá nhiều: mô hình phức tạp và quá nhiều đặc trưng.
Dưới đây là tóm tắt về hai trường hợp:

So sánh underfitting và overfitting
Cách nhận diện Overfitting và Underfitting
Biết underfitting và overfitting trông như thế nào về mặt lý thuyết là một chuyện, phát hiện chúng trong mô hình của bạn lại là chuyện khác.
Cách dễ nhất là so sánh lỗi huấn luyện với lỗi kiểm thử, và xem các đường cong học tập.
Lỗi huấn luyện so với lỗi kiểm thử
Bước kiểm tra nhanh nhất là chia dữ liệu thành tập huấn luyện và tập kiểm thử, huấn luyện mô hình, rồi xem lỗi trên mỗi tập.
Với underfitting, cả hai lỗi đều cao. Mô hình không học tốt dữ liệu huấn luyện, và cũng sẽ không hoạt động tốt hơn trên dữ liệu chưa từng thấy. Bạn có cùng kết quả kém ở cả hai phía.
Với overfitting, lỗi huấn luyện sẽ rất thấp trong khi lỗi kiểm thử vẫn cao. Mô hình đã ghi nhớ dữ liệu huấn luyện, nhưng kiến thức đó không chuyển giao được.

Hình minh họa lỗi huấn luyện vs lỗi kiểm thử
Bạn muốn phân tích khoảng cách giữa hai con số này. Khoảng cách nhỏ nhưng lỗi đều cao cho thấy underfitting. Khoảng cách lớn với lỗi huấn luyện thấp và lỗi kiểm thử cao cho thấy overfitting. Khoảng cách nhỏ với lỗi thấp ở cả hai là mục tiêu, vì điều đó nghĩa là mô hình đã học được biểu diễn thực của dữ liệu.
Đường cong học tập
Đường cong học tập biểu diễn lỗi huấn luyện và lỗi xác thực theo kích thước tập huấn luyện, hoặc theo số vòng lặp huấn luyện. Chúng cho thấy điều gì xảy ra khi mô hình học.
Với mô hình underfit, cả hai đường cong nhanh chóng phẳng lại ở mức lỗi cao. Thêm dữ liệu không giúp ích vì mô hình vốn dĩ không thể biểu diễn quy luật. Cả hai đường đều duy trì ở mức cao.

Đường cong mô hình underfit
Với mô hình overfit, đường huấn luyện giảm gần về 0 trong khi đường xác thực vẫn cao. Khoảng cách giữa chúng rộng ra khi huấn luyện tiếp tục. Khoảng cách ngày càng tăng đó chính là hình ảnh overfitting trên biểu đồ.

Đường cong mô hình overfit
Một mô hình khỏe mạnh cho thấy cả hai đường cùng giảm và gặp nhau ở mức lỗi thấp, với khoảng cách nhỏ giữa chúng.
Vì sao Overfitting và Underfitting xảy ra
Khi đã biết cách nhận diện, câu hỏi tiếp theo là vì sao chúng xuất hiện. Cả hai đều bắt nguồn từ sự lệch pha giữa mô hình và bài toán, nhưng theo hai hướng đối nghịch.
Nguyên nhân của underfitting
Underfitting gần như luôn quay lại một trong ba nguyên nhân.
- Mô hình quá đơn giản: Mô hình tuyến tính không thể biểu diễn mối quan hệ cong. Mô hình không có năng lực phù hợp với nhu cầu của bài toán.
- Đặc trưng không đủ: Ngay cả một mô hình đủ mạnh cũng sẽ underfit nếu bạn đưa vào các đầu vào sai. Dự đoán giá nhà chỉ từ mã bưu điện là vô lý, và bỏ qua diện tích, số phòng ngủ, tình trạng, tuổi nhà, diện tích đất. Mô hình không có gì hữu ích để khai thác.
- Huấn luyện chưa đủ: Mô hình chưa có đủ độ sâu, đủ số vòng lặp, đủ epoch, hoặc điều chỉnh tốc độ học để đạt nghiệm tốt. Quá trình huấn luyện dừng quá sớm.
Nguyên nhân của overfitting
Overfitting xuất phát từ việc cho mô hình nhiều tự do hơn mức dữ liệu cần.
- Mô hình quá phức tạp: Một mạng nơ-ron sâu với hàng triệu tham số được huấn luyện trên tập dữ liệu nhỏ có thừa chỗ để ghi nhớ. Năng lực vượt quá nhu cầu bài toán.
- Quá nhiều đặc trưng: Khi bạn có nhiều đặc trưng hơn số quy luật ý nghĩa trong dữ liệu, mô hình sẽ học các tương quan chỉ tình cờ xuất hiện trong mẫu huấn luyện mà không khái quát hóa được.
- Tập dữ liệu quá nhỏ: Với dữ liệu huấn luyện hạn chế, ngay cả độ phức tạp vừa phải cũng có thể ghi nhớ toàn bộ tập. Không có đủ ví dụ để mô hình khái quát.
- Huấn luyện quá lâu: Mô hình tiếp tục điều chỉnh trọng số sau khi đã học được quy luật thực, và bắt đầu khớp với nhiễu. Từ điểm đó, huấn luyện thêm chỉ làm mọi thứ tệ hơn.
Đánh đổi bias-variance
Đánh đổi bias-variance giải thích vì sao hiệu năng mô hình là tìm điểm ngọt nơi mô hình khái quát hóa tốt với dữ liệu chưa thấy mà không đơn giản hóa quá mức bài toán hoặc overfit vào tập huấn luyện.
Bias cao
Bias là sai số đến từ giả định của mô hình về dữ liệu. Mô hình có bias cao mang những giả định mạnh, đơn giản. Nó không thể biểu diễn độ phức tạp thực sự đang diễn ra trong dữ liệu.
Đó chính xác là underfitting. Mô hình quá cứng nhắc để khớp các quy luật, nên luôn cho dự đoán lệch, dù bạn đưa vào bao nhiêu dữ liệu.
Nếu bạn huấn luyện một mô hình có bias cao 100 lần trên các mẫu khác nhau, cả 100 phiên bản sẽ mắc các sai lầm tương tự. Dự đoán của chúng cụm lại quanh câu trả lời sai.
Variance cao
Variance là sai số đến từ việc mô hình quá nhạy với dữ liệu cụ thể mà nó được huấn luyện. Mô hình có variance cao nhặt lên mọi mẫu nhỏ, thường là nhiễu.
Đó là overfitting. Mô hình khớp rất sát tập huấn luyện, nhưng chỉ cần thay đổi nhỏ trong dữ liệu huấn luyện cũng dẫn đến dự đoán rất khác.
Nếu bạn huấn luyện một mô hình variance cao 100 lần trên các mẫu khác nhau, bạn sẽ nhận được 100 mô hình rất khác nhau. Dự đoán của chúng tản mạn khắp nơi, ngay cả trên cùng một đầu vào.
Sự đánh đổi
Bạn không thể loại bỏ hoàn toàn bias hay variance, bạn chỉ có thể dịch chuyển giữa chúng.
Giảm bias bằng cách làm mô hình phức tạp hơn thì variance tăng. Giảm variance bằng cách đơn giản hóa mô hình thì bias tăng. Mục tiêu là tìm điểm ở giữa, nơi tổng lỗi thấp nhất.

Ví dụ đánh đổi bias-variance
Cách khắc phục Underfitting
Khi đã chẩn đoán underfitting, bạn có vài cách để khắc phục. Tất cả đều nhằm tăng năng lực của mô hình để biểu diễn các quy luật trong dữ liệu.
- Tăng độ phức tạp mô hình: Chuyển sang mô hình linh hoạt hơn. Từ hồi quy tuyến tính sang hồi quy đa thức, hoặc từ cây nông sang cây sâu hơn.
- Bổ sung thêm đặc trưng: thêm các đầu vào thực sự có giá trị. Tạo các tương tác, đặc trưng đa thức, hoặc đặc trưng theo miền mà mô hình chưa có.
- Huấn luyện lâu hơn: Có thể mô hình chưa đủ thời gian để hội tụ. Cho thêm epoch hoặc thay đổi lịch trình tốc độ học.
- Giảm regularization: Regularization giữ mô hình đơn giản, trái ngược với nhu cầu của underfitting. Hạ cường độ regularization hoặc loại bỏ hoàn toàn, để cho mô hình thêm tự do.
Một vài đặc trưng tốt thường tạo tác động lớn hơn so với việc đổi kiến trúc. Hãy bắt đầu từ đó trước khi thay đổi chính mô hình.
Cách khắc phục Overfitting
Khắc phục overfitting đi theo hướng ngược lại. Bạn muốn ràng buộc mô hình để nó ngừng ghi nhớ dữ liệu huấn luyện.
- Thu thập thêm dữ liệu: Tập dữ liệu lớn hơn khiến mô hình khó ghi nhớ hơn nhiều. Nhiều ví dụ buộc nó phải tìm các quy luật đúng trên toàn bộ tập, không chỉ vài dòng.
- Áp dụng regularization: Regularization L1 và L2 thêm hình phạt cho trọng số lớn, giúp mô hình không phụ thuộc quá mức vào bất kỳ đặc trưng đơn lẻ nào. Đây là một trong những cách khắc phục đáng tin cậy nhất.
- Giảm độ phức tạp mô hình: Nếu mô hình quá lớn so với dữ liệu, hãy thu nhỏ nó. Dùng ít tham số hơn, cây nông hơn, hoặc mạng nhỏ hơn.
- Dùng cross-validation: Cross-validation cho bạn cái nhìn trung thực hơn về cách mô hình sẽ hoạt động trên dữ liệu chưa thấy. Nó tạo thêm nhiều lần chia huấn luyện–kiểm thử từ một tập dữ liệu.
- Áp dụng dropout cho mạng nơ-ron: Dropout vô hiệu hóa ngẫu nhiên một tỷ lệ neuron trong khi huấn luyện. Điều này buộc mạng học các biểu diễn dư thừa, giảm sự phụ thuộc vào bất kỳ neuron đơn lẻ nào.
- Dừng sớm quá trình huấn luyện: Theo dõi lỗi xác thực và dừng khi nó bắt đầu tăng, ngay cả khi lỗi huấn luyện vẫn giảm. Đây gọi là early stopping, và là một trong những thay đổi dễ triển khai nhất.
Regularization và early stopping thường là những thứ nên thử đầu tiên. Chúng không tốn chi phí và gần như luôn hữu ích.
Overfitting và Underfitting trong các mô hình khác nhau
Các họ mô hình khác nhau thể hiện underfitting và overfitting theo cách riêng. Dưới đây là cách ba nhóm phổ biến có thể thất bại theo cả hai hướng.
Mô hình tuyến tính
- Underfit: Mô hình tuyến tính giả định quan hệ đường thẳng. Khi quy luật thực tế là cong, mô hình không thể theo, dù bạn có bao nhiêu dữ liệu.
- Overfit: Khi bạn thêm đủ các hạng đa thức hoặc tương tác, ngay cả hồi quy tuyến tính cũng có thể ghi nhớ nhiễu. Các phương pháp regularization như Ridge và Lasso tồn tại chủ yếu để xử lý điều này.
Cây quyết định
- Underfit: Một cây nông chỉ có thể thực hiện vài lần chia tách. Với hai hoặc ba quyết định, nó không thể biểu diễn các quy luật cần nhiều sắc thái hơn.
- Overfit: Cây sâu có xu hướng overfit. Một cây tiếp tục chia tách cho đến khi mỗi lá chứa đúng một điểm huấn luyện sẽ đạt độ chính xác huấn luyện hoàn hảo nhưng độ chính xác kiểm thử kém. Đó là lý do tồn tại các tham số như
max_depth,min_samples_splitvà tỉa cây (pruning).
Mạng nơ-ron
- Underfit: Các mạng quá nhỏ so với bài toán sẽ underfit. Mạng dừng huấn luyện quá sớm, hoặc bộ tối ưu kẹt ở nghiệm kém cũng vậy.
- Overfit: Điều này phổ biến hơn trong học sâu. Một mạng với hàng triệu tham số có thể ghi nhớ ngay cả tập dữ liệu lớn nếu có đủ epoch. Dropout, weight decay, tăng cường dữ liệu và dừng sớm đều tồn tại để ngăn điều đó.
Ví dụ bổ sung về Overfitting vs Underfitting
Giờ tôi sẽ hướng dẫn bạn qua hai ví dụ kinh điển kèm mã giúp các mẫu hình này trở nên dễ thấy.
Hồi quy đa thức
Một sóng sin nhiễu là trường hợp thử nghiệm tốt. Khi bạn khớp các đa thức với bậc khác nhau, bạn có thể thấy hành vi mô hình thay đổi.
import numpy as np
# Data
np.random.seed(7)
X = np.linspace(0, 1, 30)
y_true = np.sin(2 * np.pi * X)
y = y_true + np.random.normal(0, 0.2, X.shape)
# Fit polynomials of three degrees
X_smooth = np.linspace(0, 1, 300)
degrees = [1, 3, 15]
for degree in degrees:
coefs = np.polyfit(X, y, deg=degree)
y_pred = np.polyval(coefs, X_smooth)

Ví dụ hồi quy đa thức
Bậc 1 là đường thẳng nên underfit. Nó không theo được đường cong. Bậc 3 biểu diễn đúng hình dạng thực. Nó hấp thụ một chút nhiễu nhưng vẫn sát sự thật. Bậc 15 overfit khi lượn lách qua mọi điểm huấn luyện và tạo ra dao động lớn giữa chúng.
Cây quyết định với độ sâu thay đổi
Cùng câu chuyện lặp lại với cây quyết định. Bạn có thể huấn luyện các cây với độ sâu tăng dần trên cùng dữ liệu và đo lỗi trên cả tập huấn luyện lẫn kiểm thử.
import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# Data
np.random.seed(11)
X = np.linspace(0, 10, 250).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.3, 250)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=0
)
depths = range(1, 21)
train_errors = []
test_errors = []
for depth in depths:
tree = DecisionTreeRegressor(max_depth=depth, random_state=0)
tree.fit(X_train, y_train)
train_errors.append(mean_squared_error(y_train, tree.predict(X_train)))
test_errors.append(mean_squared_error(y_test, tree.predict(X_test)))

Ví dụ cây quyết định
Lỗi huấn luyện giảm khi cây sâu hơn, cuối cùng tiến gần về 0 khi mỗi lá chỉ chứa một điểm huấn luyện. Lỗi kiểm thử ban đầu giảm khi cây nắm bắt các mối quan hệ thực trong dữ liệu, rồi tăng trở lại khi các phép chia sâu hơn bắt đầu khớp với nhiễu. Điểm cực tiểu nằm ở độ sâu cân bằng được hai yếu tố.
Những sai lầm thường gặp khi chẩn đoán hiệu năng mô hình
Ngay cả khi bạn chọn đúng chỉ số, vẫn dễ rút ra kết luận sai. Dưới đây là những điều bạn không nên làm khi đánh giá hiệu năng mô hình:
- Chỉ đánh giá độ chính xác huấn luyện: Độ chính xác huấn luyện cho biết mô hình khớp dữ liệu đã thấy tốt đến đâu. Nó không nói gì về hiệu năng trên đầu vào mới. Luôn đo trên một tập tách biệt trước khi kết luận.
- Bỏ qua dữ liệu xác thực: Dữ liệu xác thực dùng để tinh chỉnh các lựa chọn như kiến trúc, siêu tham số và điểm dừng. Mô hình sẽ overfit cả tập huấn luyện lẫn tập kiểm thử nếu bạn dùng chúng quá nhiều lần.
- Cho rằng phức tạp hơn luôn tốt hơn: Mô hình lớn hơn không tự động đồng nghĩa với mô hình giỏi hơn. Nếu dữ liệu nhỏ hoặc quan hệ trong dữ liệu đơn giản, độ phức tạp chỉ làm giảm hiệu năng. Bắt đầu từ mô hình đơn giản và chỉ tăng năng lực khi chẩn đoán cho thấy cần thiết.
- Nhầm lẫn giữa nhiễu và tín hiệu: Không phải mọi mẫu trong dữ liệu huấn luyện đều đáng để học. Dao động ngẫu nhiên, thiên lệch chọn mẫu, ngoại lệ và lỗi thu thập có thể trông có ý nghĩa với một mô hình linh hoạt. Nếu bạn không thể giải thích vì sao một mối quan hệ nên tồn tại, hãy thận trọng với nó.
Bạn nên luôn kiểm tra cả bốn điều trên trước khi chốt mô hình. Hầu hết lỗi sản xuất đều liên quan đến một (hoặc nhiều) trong số chúng.
Kết luận
Underfitting và overfitting là hai cách mà mô hình thất bại trong việc khái quát hóa. Một bên quá đơn giản để học quy luật. Bên kia cố học từng điểm trong tập dữ liệu của bạn.
Mục tiêu thực sự của huấn luyện là đạt được điểm ở giữa, nơi bias và variance cân bằng và tổng lỗi thấp nhất.
Hiệu năng xác thực là chỉ số cho biết bạn đang ở đâu. Theo dõi nó trong quá trình huấn luyện và để chênh lệch giữa lỗi huấn luyện và lỗi xác thực dẫn dắt quyết định của bạn. Nếu lỗi xác thực ngừng cải thiện trong khi lỗi huấn luyện tiếp tục giảm, bạn đã đi quá điểm ngọt. Nếu cả hai đều cao, bạn vẫn chưa tới đó.
Muốn học thêm các khái niệm khoa học dữ liệu nâng cao và sẵn sàng cho công việc vào năm 2026? Hãy đăng ký lộ trình Machine Learning Engineer để đi từ nền tảng đến MLOps.
FAQs
Sự khác nhau giữa overfitting và underfitting là gì?
Underfitting xảy ra khi mô hình quá đơn giản để biểu diễn các quy luật trong dữ liệu, nên hoạt động kém cả trên tập huấn luyện lẫn kiểm thử. Overfitting thì ngược lại: mô hình học quá kỹ dữ liệu huấn luyện, kể cả nhiễu, nên đạt kết quả rất tốt khi huấn luyện nhưng thất bại trên dữ liệu mới. Cả hai đều tạo ra dự đoán yếu, nhưng vì những lý do khác nhau.
Làm sao biết mô hình của tôi bị overfitting hay underfitting?
So sánh lỗi huấn luyện với lỗi kiểm thử. Nếu cả hai đều cao, bạn đang underfitting. Nếu lỗi huấn luyện rất thấp nhưng lỗi kiểm thử cao, bạn đang overfitting. Đường cong học tập cũng hữu ích, vì lỗi huấn luyện và xác thực tách xa nhau ở mô hình overfit và phẳng ở mức cao trong mô hình underfit.
Đánh đổi bias-variance là gì?
Bias là sai số do mô hình quá đơn giản, còn variance là sai số do mô hình quá nhạy với dữ liệu huấn luyện. Giảm cái này thường làm cái kia tăng, nên mục tiêu là tìm sự cân bằng nơi tổng lỗi thấp nhất. Những mô hình cân bằng tốt sẽ khái quát hóa tốt nhất sang dữ liệu mới.
Thu thập thêm dữ liệu có khắc phục overfitting không?
Thường là có ích, nhưng không phải giải pháp đảm bảo. Nhiều dữ liệu hơn khiến mô hình khó ghi nhớ, buộc nó phải tìm quy luật đúng trên toàn bộ tập. Nhưng nếu mô hình quá phức tạp so với bài toán, hoặc đặc trưng chủ yếu là nhiễu, thêm dữ liệu sẽ không giải quyết triệt để. Regularization và mô hình đơn giản hơn thường hiệu quả hơn trong các trường hợp đó.
Tôi có thể dùng dừng sớm để ngăn overfitting trong mạng nơ-ron không?
Có, và đây là một trong những cách khắc phục dễ triển khai nhất. Theo dõi lỗi xác thực trong khi huấn luyện và dừng khi nó đi ngang hoặc bắt đầu tăng, ngay cả khi lỗi huấn luyện vẫn giảm. Cách này bắt được thời điểm mô hình đã học quy luật thực và đang bắt đầu khớp nhiễu. Hầu hết các framework học sâu đều có sẵn callback dừng sớm.
