Mỗi lần bạn bắt đầu học Machine Learning/Deep Learning, bạn sẽ gặp những thuật ngữ như Epoch - Batch Size và Iterations. Rất dễ để hiểu lầm chúng vì chúng có vẻ giống nhau, nhưng thực sự thì chúng khác nhau.
Hãy tưởng tượng bạn đang ăn cơm. Không thể ăn hết một chén cơm chỉ trong một lần, bạn phải ăn từng muỗng một. Bắt đầu từ muỗng đầu tiên, sau đó ăn muỗng thứ hai, muỗng thứ ba... cho đến khi bạn no và kết thúc bữa ăn đó.
Ứng dụng ý tưởng này vào các thuật ngữ epoch, batch size và iterations như sau:
- Batch size: Số muỗng cơm trong một lần ăn.
- Iterations: Số lần ăn để hết một chén.
- Epoch: Số chén cơm bạn ăn trong một bữa ăn.
Đến đây, bạn đã hiểu sơ qua sự khác biệt giữa chúng. Bạn có thể bỏ qua phần giải thích này nếu đã hiểu, nhưng nếu bạn muốn tìm hiểu thêm, hãy tiếp tục đọc.
Để hiểu rõ sự khác biệt giữa chúng, trước tiên, bạn cần tìm hiểu một khái niệm quan trọng trong Machine Learning - Gradient Descent.
Gradient Descent là một thuật toán tối ưu sử dụng trong Machine Learning để tìm kết quả tốt nhất. Nói một cách đơn giản, Gradient Descent là việc điều chỉnh độ dốc của đường cong để tìm giá trị tối thiểu.
Thuật toán này lặp đi lặp lại nhiều lần để tiến đến giá trị tối thiểu.
Bạn có thể thấy trên hình ảnh, ban đầu, giá trị cost lớn và điểm chấm đen di chuyển từ trên xuống dưới sau mỗi lần lặp. Mô hình hội tụ dần cho đến khi giá trị cost nhỏ hơn hoặc bằng một giá trị nhất định.
Các thuật ngữ epoch, batch size và iterations được sử dụng khi chúng ta cần huấn luyện mô hình Machine Learning với tập dữ liệu lớn (ví dụ như 10 triệu mẫu). Trong trường hợp này, các khái niệm này trở nên rõ ràng hơn, trong khi với tập dữ liệu nhỏ, chúng tương đương.
Một epoch được tính là khi chúng ta đưa toàn bộ dữ liệu trong tập train vào neural network một lần. Ví dụ, bạn có 10 triệu hình ảnh trong tập train, bạn đưa toàn bộ hình ảnh đó vào mô hình 3 lần, điều này có nghĩa là bạn đã huấn luyện mô hình qua 3 epoch.
Khi dữ liệu quá lớn, chúng ta không thể đưa toàn bộ vào mô hình một lần để huấn luyện được. Chúng ta cần chia nhỏ dữ liệu ra thành các batch.
Batch size là số lượng mẫu dữ liệu trong một lần huấn luyện. Ví dụ, trong bài toán phân loại chó mèo, chọn batch size là 32 có nghĩa là mỗi lần lặp, chúng ta đưa ngẫu nhiên 32 hình ảnh chó hoặc mèo vào mạng neural network. Tiếp theo, chúng ta thay bằng 32 hình ảnh khác và lặp lại quá trình cho đến khi không còn hình ảnh nào để huấn luyện - là khi chúng ta đã hoàn thành một epoch.
Iterations là số lượng batchs cần để hoàn thành một epoch. Ví dụ, nếu tập dữ liệu của bạn có 20,000 mẫu và batch size là 500, bạn cần 40 lần lặp (iterations) để hoàn thành một epoch.
Tại sao phải dùng hơn 1 epoch?
Vì chúng ta sử dụng thuật toán tối ưu là Gradient Descent. Thuật toán này yêu cầu chúng ta phải đưa toàn bộ dữ liệu qua mạng neural network một vài lần để tìm kết quả tối ưu. Vì vậy, chỉ sử dụng 1 epoch không đủ để tìm kết quả tốt nhất.
Nếu chỉ sử dụng 1 lần lặp, rất có thể dữ liệu sẽ bị underfitting (như hình mô tả bên dưới).
Khi số lần lặp tăng, trạng thái của mô hình chuyển từ underfitting sang optimal và sau đó là overfitting. Điều này thường xảy ra trừ khi mô hình của bạn quá đơn giản hoặc thiếu trọng số để có khả năng overfitting.
Mặc dù bạn có thể sử dụng 1 epoch để huấn luyện mô hình, điều kiện là bạn sử dụng thuật toán tối ưu khác ngoài gradient descent.
Số lần lặp tối ưu là bao nhiêu?
Không có câu trả lời chính xác cho câu hỏi này, nó phụ thuộc hoàn toàn vào nhiều yếu tố. Mục tiêu chung là tiếp tục lặp cho đến khi mô hình hội tụ. Có một số phương pháp giúp xác định khi mô hình đã đạt đến cực tiểu cục bộ và không thể tiến xa hơn.
Hãy tìm hiểu thêm về early stopping để có thêm thông tin về phương pháp này.
Cảm ơn bạn đã đọc bài viết này. Hy vọng nó giúp bạn hiểu rõ hơn về sự khác biệt giữa epoch, batch size và iterations.
Nguồn: https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9