Early Stopping
Dừng sớm kết thúc quá trình huấn luyện khi hiệu suất trên tập validation không còn cải thiện, giúp giảm lãng phí tài nguyên tính toán và hiện tượng overfitting, đồng thời giữ lại checkpoint tốt nhất của model.
Dừng sớm là một kỹ thuật huấn luyện kết thúc quá trình chạy machine learning lặp khi một thước đo hiệu suất được theo dõi ngừng cải thiện. Kỹ thuật này dùng hiệu suất trên tập validation để quyết định thời gian tiếp tục học, nhờ đó giảm tính toán không cần thiết và hạn chế overfitting. Có thể hiểu đơn giản là quá trình huấn luyện dừng lại khi việc luyện tập thêm không còn cải thiện khả năng xử lý các ví dụ chưa được đưa vào huấn luyện của model. Ngoài machine learning, “dừng sớm” đơn giản có nghĩa là kết thúc một hoạt động trước thời điểm dự kiến.
Cách thức hoạt động của dừng sớm#
Trong quá trình huấn luyện, optimizer cập nhật model bằng dữ liệu huấn luyện. Theo các khoảng thời gian đều đặn, model được đánh giá trên dữ liệu validation riêng biệt. Loss huấn luyện có thể tiếp tục giảm trong khi hiệu suất validation suy giảm: đây là dấu hiệu của overfitting, khi model ngày càng khớp với các chi tiết riêng của những ví dụ huấn luyện. Dừng sớm hạn chế quá trình này bằng cách chọn thời điểm dừng dựa trên hiệu suất trên dữ liệu chưa dùng để huấn luyện.
Một cách triển khai phổ biến là theo dõi điểm validation tốt nhất, lưu trọng số model tương ứng và đếm số lần kiểm tra liên tiếp không có cải thiện đủ mức. Khi có cải thiện, bộ đếm được đặt lại; khi đạt đến patience đã cấu hình, quá trình huấn luyện kết thúc. Khôi phục checkpoint tốt nhất giúp giữ lại kết quả validation mạnh nhất đã quan sát được, vốn có thể xuất hiện trước bước huấn luyện cuối cùng.
Nelson Morgan và Hervé Bourlard đã giới thiệu phương pháp dừng dựa trên validation cho mạng neural truyền thẳng trong công trình năm 1989 về khả năng tổng quát hóa và ước lượng tham số. Các thử nghiệm của họ bao gồm phân loại tiếng nói và chứng minh rằng có thể chọn thời lượng huấn luyện bằng cách theo dõi dữ liệu độc lập.
Metric, patience và trọng số tốt nhất#
Quy tắc dừng phụ thuộc vào một số cài đặt:
- Metric được theo dõi: Loss validation đo lỗi dự đoán và được tối thiểu hóa; accuracy validation đo tỷ lệ dự đoán đúng và được tối đa hóa.
- Patience và thời lượng huấn luyện: Patience chỉ định số lần kiểm tra không thành công mà quá trình huấn luyện có thể chịu đựng. Một epoch là một lượt hoàn chỉnh đi qua tập dữ liệu huấn luyện.
- Ngưỡng cải thiện: Keras gọi giá trị này là
min_delta, tức mức thay đổi tuyệt đối tối thiểu được tính là tiến triển. Cài đặtrestore_best_weights=Truesẽ khôi phục các trọng số tương ứng với giá trị được theo dõi tốt nhất. - Tần suất kiểm tra validation: PyTorch Lightning tính patience theo số lần kiểm tra validation. Nếu kiểm tra sau mỗi mười epoch và đặt patience là ba, quá trình huấn luyện có thể có ba lần kiểm tra không thành công trong ba mươi epoch sau lần kiểm tra tốt nhất.
Patience và ngưỡng cải thiện là các siêu tham số: những cài đặt được chọn bên ngoài quy trình cập nhật trọng số. Patience thấp hơn giúp kết thúc các lượt huấn luyện chững lại sớm hơn; patience cao hơn cho phép các giai đoạn tạm thời không tiến triển kéo dài hơn. Giai đoạn khởi động trì hoãn việc theo dõi để quá trình học ban đầu ổn định. Các cài đặt này tương tác với learning rate, yếu tố kiểm soát kích thước của các bước cập nhật trong quá trình tối ưu hóa.
Ứng dụng và ví dụ có thể chạy#
Dừng sớm áp dụng được cho cả mạng neural lẫn cây tăng cường gradient. Trong tăng cường gradient với scikit-learn, mỗi giai đoạn bổ sung một cây và việc dừng dựa trên validation kiểm soát số lượng giai đoạn. Ví dụ California Housing sử dụng validation_fraction để dành riêng dữ liệu và n_iter_no_change để dừng khi tiến triển trên validation chững lại.
Ví dụ sau sử dụng bộ dữ liệu diabetes đi kèm scikit-learn và in ra số giai đoạn tăng cường thực sự được fit:
from sklearn.datasets import load_diabetes
from sklearn.ensemble import GradientBoostingRegressor
X, y = load_diabetes(return_X_y=True)
# Reserve an internal validation split and monitor progress.
model = GradientBoostingRegressor(
n_estimators=1000,
validation_fraction=0.2,
n_iter_no_change=10,
random_state=42,
)
model.fit(X, y)
print(f"Boosting stages fitted: {model.n_estimators_}/1000")Số giai đoạn đã fit cho biết tiêu chí dừng kết thúc quá trình xây dựng cây ở đâu so với giới hạn 1.000 giai đoạn.
Ultralytics YOLO áp dụng dừng sớm trong quá trình huấn luyện model, bao gồm cả YOLO26, thông qua tham số patience, dùng để đếm số epoch không có cải thiện về fitness trên validation. Với tác vụ phát hiện, fitness sử dụng mAP50–95, và trainer lưu checkpoint tốt nhất dưới tên best.pt.
Dừng sớm và các khái niệm liên quan#
Dừng sớm là một dạng regularization giúp kiểm soát thời lượng huấn luyện. Weight decay phạt các trọng số lớn, trong khi dropout ngẫu nhiên vô hiệu hóa các unit trong quá trình huấn luyện. Các cơ chế này có thể hoạt động đồng thời. Dừng quá sớm dẫn đến underfitting, khiến model không học được các mẫu hữu ích.
Checkpointing lưu các trạng thái của model; dừng sớm quyết định thời điểm kết thúc quá trình tối ưu hóa. Cross-validation luân phiên các phân vùng được giữ lại để đánh giá lựa chọn model, trong khi dữ liệu kiểm thử riêng biệt hỗ trợ đánh giá cuối cùng. Vì quyết định dừng chọn model dựa trên kết quả validation, điểm validation của checkpoint được chọn là một phần của quá trình chọn model.
Trong Keras, restore_best_weights mặc định là False, vì vậy chỉ bật dừng sớm sẽ khiến model giữ nguyên trọng số ở bước cuối cùng.










