Epoch Là Gì?
Epoch trong machine learning là một lần model đi qua toàn bộ tập dữ liệu huấn luyện. Nếu bạn có 1.000 mẫu dữ liệu và model xử lý hết tất cả 1.000 mẫu đó đúng một lần, bạn đã hoàn thành 1 epoch.
Nói cách khác, epoch giống như một vòng ôn tập hoàn chỉnh. Khi ôn thi, bạn đọc qua tất cả bài học một lần thì đó là 1 epoch. Đọc lại từ đầu lần hai thì đó là epoch thứ hai. Cứ thế, model lặp lại quá trình học cho đến khi đạt kết quả tốt.
Tại Sao Cần Nhiều Epoch?
Hiếm khi model học đủ sau chỉ 1 epoch. Dữ liệu thực tế phức tạp, mối quan hệ giữa input và output không rõ ràng ngay từ lần đầu tiên. Mỗi epoch, model điều chỉnh trọng số (weights) một chút, dần dần tiệm cận kết quả tối ưu.
Tư duy giống như học ngoại ngữ. Bạn không thể nhớ từ vựng khi chỉ đọc một lần. Cần lặp đi lặp lại nhiều lần thì não mới ghi sâu được. Model AI cũng vậy, cần nhiều “lượt đọc” để hiểu rõ pattern trong dữ liệu.
Epoch, Batch, Iteration Khác Nhau Thế Nào?
Ba khái niệm này rất hay bị nhầm lẫn, đặc biệt với người mới bắt đầu:
- Epoch: Một lần model đi qua toàn bộ dataset
- Batch: Dataset chia nhỏ thành các nhóm (ví dụ 1.000 mẫu chia thành 10 batch, mỗi batch 100 mẫu)
- Iteration: Mỗi lần model xử lý một batch và cập nhật trọng số
Ví dụ thực tế: 1.000 ảnh, batch size 100 thì mỗi epoch có 10 iterations. Nói cách khác, 1 epoch = 10 iterations trong trường hợp này.
Bao Nhiêu Epoch Là Đủ?
Không có con số cố định cho mọi bài toán. Số epoch phù hợp phụ thuộc vào nhiều yếu tố: kích thước dataset, độ phức tạp của model, learning rate, và bản chất của bài toán.
Thường mình thấy các bài toán thực tế dùng từ 10 đến 100 epoch. Quá ít epoch sẽ dẫn đến underfitting, model chưa học đủ. Quá nhiều epoch sẽ gây overfitting, model học thuộc dữ liệu và mất khả năng tổng quát.
Mình thường bắt đầu với 20-50 epoch, theo dõi loss trên validation set, và dừng khi loss bắt đầu tăng trở lại. Đây cũng chính là tư duy đằng sau kỹ thuật Early Stopping.
Cách Chọn Số Epoch Phù Hợp
Thực tế, thay vì chọn trước một con số epoch cố định, mình khuyên dùng ba kỹ thuật sau:
Early Stopping: Theo dõi validation loss liên tục, tự động dừng training khi loss không giảm sau N epoch liên tiếp. Đây là cách phổ biến nhất và tiết kiệm tài nguyên nhất.
Learning Rate Scheduling: Giảm learning rate theo thời gian. Những epoch đầu học nhanh để tiếp cận nghiệm, epoch sau học chậm để tinh chỉnh chi tiết. Phương pháp này kết hợp với early stopping cho hiệu quả rất tốt.
Model Checkpoint: Lưu lại model tại epoch có kết quả tốt nhất trên validation set, không nhất thiết là epoch cuối cùng. Nhiều khi epoch thứ 30 lại tốt hơn epoch thứ 100.
Dấu Hiệu Nhận Biết Epoch Chưa Đủ Hoặc Quá Nhiều
Bạn có thể nhận biết thông qua hai tình huống phổ biến:
Underfitting (ít epoch quá): Training loss vẫn cao, cả training và validation accuracy đều thấp. Model chưa “hiểu” đủ dữ liệu. Giải pháp: tăng số epoch hoặc kiểm tra learning rate có quá nhỏ không.
Overfitting (nhiều epoch quá): Training loss rất thấp nhưng validation loss lại bắt đầu tăng. Training accuracy cao nhưng validation accuracy giảm. Model đang “học vẹt”, ghi nhớ từng chi tiết thay vì hiểu pattern tổng quát. Đây là lúc nên dừng hoặc áp dụng Dropout để giảm overfitting.
Mẹo Thực Tế Khi Train Model
Đây là một số kinh nghiệm mình tích lũy được khi train model thực tế:
Luôn vẽ đồ thị loss qua từng epoch. Nhìn đồ thị bạn sẽ thấy ngay model đang underfitting, overfitting, hay hội tụ tốt. TensorBoard và Weights & Biases là hai công cụ trực quan hóa phổ biến nhất.
Nếu dataset nhỏ (dưới 10.000 mẫu), cẩn thận với overfitting. Nhiều epoch trên dataset nhỏ rất dễ khiến model ghi nhớ thay vì học. Cân nhắc dùng data augmentation để tăng cường dữ liệu.
Nếu dataset lớn (hàng triệu mẫu), đôi khi 2-3 epoch đã đủ. Với các large model train trên dataset khổng lồ, người ta thường train ít epoch nhưng với batch size rất lớn.
Cuối cùng, luôn chia validation set riêng biệt. Không dùng test set để quyết định khi nào dừng training, nếu không kết quả sẽ bị “lèche” và không phản ánh đúng khả năng thực tế.
Epoch Trong Các Framework Phổ Biến
Trong PyTorch, bạn kiểm soát epoch qua vòng lặp for epoch in range(num_epochs). Trong TensorFlow/Keras, đơn giản hơn, bạn truyền tham số epochs=N vào hàm fit(). Cả hai đều cho phép callback để early stopping, checkpoint, và scheduler.
Một lưu ý: khi dùng pre-trained model và fine-tuning, số epoch thường ít hơn train từ đầu. Model đã có sẵn kiến thức từ pretraining, nên chỉ cần vài epoch để thích nghi với task mới.
Kết Luận
Epoch là khái niệm cơ bản nhưng đóng vai trò then chốt trong quá trình huấn luyện model. Hiểu đúng epoch, biết cách theo dõi và quyết định khi nào dừng sẽ giúp bạn train model hiệu quả hơn, tránh lãng phí GPU và thời gian.
Quan trọng nhất: đừng fix cứng số epoch. Hãy để validation loss cho bạn biết khi nào nên dừng. Đó là cách mà tất cả các research lẫn engineer thực tế đều đang làm.