Lời mở đầu
Khi mới bắt đầu bước vào thế giới của ML/DL chúng ta sẽ bắt gặp các thuật ngữ Epoch - Batch size và Iterations. Và sẽ cảm thấy bối rối vì chúng khá giống nhau, nhưng thực tế là chúng khác xa nhau.
Để cho dễ hình dung, mình lấy ví dụ về việc ăn cơm. Chúng ta không thể ăn một lần hết một chén cơm được, mà phải mỗi lần ăn phải xúc từng muỗn ăn. Xúc lần lượt khi hết bát thứ nhất, chúng ta lại ăn tiếp bát thứ 2, bát thứ 3 … đến khi no, kết thúc bữa ăn.
Liên tưởng giữa việt ăn cơm và các thuật ngữ epoch, batch size, iteration như sau:
-
batch size: Số hạt cơm trong 1 lần xúc.
-
Iteration : Số lần xúc cơm hết 1 bát.
-
epoch : Số bát cơm bạn ăn trong 1 bữa ăn.
Hết phần diễn giải bằng ví dụ. Đến phần viết hàn lâm bên dưới, nếu bạn nào đã hiểu rồi thì có thể bỏ qua, bạn nào muốn đào sâu thêm lý do thì xem mình diễn giải bên dưới.
Để hiểu rõ sự khác biệt giữa chúng, các bạn cần tìm hiểu một khái niệm vô cùng quan trọng trong machine learning - Gradient Descent.
Định nghĩa ngắn gọn của Gradient Descent:
Gradient Descent là thuật toán lặp tối ưu (iteractive optimization algorithm) được sử dụng trong machine learning để tìm kết quả tốt nhất (minima of a curve).
Trong đó:
..* Gradient có nghĩa là tỷ lệ của độ nghiêng của đường dốc.
..* Descent là từ viết tắt của decending - nghĩa là giảm.
Thuật toán sẽ lặp đi lặp lại nhiều lần để tìm ra được cực tiểu.
https://medium.com/onfido-tech/machine-learning-101-be2e0a86c96a Nguồn ảnh
Các bạn quan sát hình phía trên bên trái, ban đầu, bước nhảy khá lớn, nghĩa là giá trị cost lớn, và sau một vài lần lặp, điểm chấm đen đi xuống dần, và giá trị cost nhỏ dần theo. Mô hình hội tụ dần dần đến khi cost <= epselon
Chúng ta sử dụng thuật ngữ epochs, batch size, iterations khi chúng ta cần phải trainning mô hình machine learning, mà tập trainset của chúng ta quá (rất) lớn (vd 10 triệu mẫu, ví dụ train mô hình nhận dạng khuôn mặt với tập ms-celeb-1m). Lúc này các khái niệm trên mới trở nên rõ ràng, còn với trường hợp dữ liệu nhỏ thì chúng khá tương tự nhau.
Khái niện Epoch
Một Epoch được tính là khi chúng ta đưa tất cả dữ liệu trong tập train vào mạng neural network 1 lần. Ví dụ, bạn có 10 bức hình trong tập train, bạn đem hết toàn bộ 10 bức hình đó cho mô hình học ở lần thứ nhất, bạn đã train được một epoch. Sau đó, bạn lại quay lại vị trí hình ban đầu rồi cho toàn bộ 10 bức hình đó học, bạn có thêm 1 epoch nữa, vậy là bạn đã train 2 epoch, bạn lặp lại việc này 100 lần , suy ra bạn đã train 100 epoch.
Khi dữ liệu quá lớn, chúng ta không thể đưa hết tất cả tập dữ liệu vào để huấn luyện trong 1 lần train được, vì bạn cần một siêu máy tính có lượng RAM và GPU RAM cực lớn để lưu trữ toàn bộ hình ảnh trên, điều này là bất khả thi đối với người dùng bình thường, phòng lab nhỏ, hoặc các hệ thống máy tính hiện tại. Buộc lòng chúng ta phải chia nhỏ tập dữ liệu ra, và khái niệm batch hình thành.
Batch Size
Batch size là số lượng mẫu dữ liệu trong một lần train. Ví dụ, trong bài toán phân loại chó mèo, chọn batch size =32, nghĩa là 1 lần train ta sẽ cho ngẫu nhiên 32 bức nhìn chó hoặc mèo chạy lan truyền tiến trong mạng neural network. Tiếp theo bạn quăng tiếp 32 hình ngẫu nhiên, không lặp với các hình trước đó, vào mạng, quăng đến khi nào không còn hình nào có thể quăng vào nữa -> bạn hoàn thành 1 epoch.
Iterations
Iterations là số lượng batchs cần để hoàn thành 1 epoch.
$$Iterations = data size / batch size$$
Ví dụ chúng ta có tập dữ liệu có 20,000 mẫu, batch size là 500, vậy chúng ta cần 40 lần lặp (iteration) để hoàn thành 1 epoch.
Tại sao phải dùng hơn 1 Epoch.
Câu trả lời ở đây là tại vì chúng ta đang dùng thuật toán tối ưu là Gradient Descent. Thuật toán này đòi hỏi chúng ta phải đem toàn bộ dữ liệu qua mạng một vài lần để tìm được kết quả tối ưu. Vì vậy, dùng 1 epoch thật sự không đủ để tìm được kết quả tốt nhất.
Với việc chỉ sử dụng 1 lần lặp, xác suất rất cao là dữ liệu sẽ bị underfitting(như hình mô tả bên dưới).
Khi số lần lặp tăng dần, trạng thái của mô hình sẽ chuyển dần từ underfitting sang optimal và sau đó là overfitting (thông thường là vậy, trừ khi mô hình huấn luyện của bạn đang sử dụng quá đơn giản, quá ít trọng số thì chúng không thể nào overfitting nổi).
Chúng ta có thể dùng 1 epoch để huấn luyện mô hình, với điều kiện là ta sử dụng thuật toán tối ưu không phải là gradient descent.
Số lần lặp tối ưu là bao nhiêu?
Tiếc rằng không có câu trả lời cho câu hỏi này. Phụ thuộc hoàn toàn vào nhiều yếu tố. Mục tiêu chung là ta sẽ lặp đến khi nào hội tụ. Có một số phương pháp giúp chúng ta xác định mô hình đã đứng ở ngưỡng cực tiểu cục bộ rồi, không thể xuống hơn được nữa.
Các bạn có thể tìm hiểu với từ khóa early stopping.
Repeat
update 13/01/2025
Gần đây, với sự phát triển của stable diffusion và flux, chúng ta có thêm tham số Repeat, được hiểu là số lần 1 hình sẽ được lặp lại trong quá trình train.
Hiểu đơn giản là khi train lora, trong 1 batch, 1 hình trong batch đó sẽ Repeat x lần
Mục tiêu của Repeat trong stable diffusion
-
Balance the number of training images to the regularization images. The number of regularization images is larger than the training, so it is required to repeat training images for using all regularization images in the epoch.
-
Control ‘weight’ over folders. If you have high quality images and low quality images, you can set higher number of repeats for high quality images, and lower for low quality.
Regularization Images
Hình ảnh điều chỉnh (Regularization images) là các hình ảnh được sử dụng như một phần của quá trình điều chỉnh nhằm cải thiện sự ổn định và hiệu suất của các mô hình học sâu (deep learning).
Quá trình này giúp ngăn mô hình học quá mức từ dữ liệu huấn luyện, duy trì sự cân bằng giữa các lớp, và bảo toàn tính linh hoạt trong việc tạo ra hình ảnh mới.
Regularization giúp giải quyết hai vấn đề chính: quá khớp (overfitting) và bảo toàn lớp (class preservation).
-
Bảo Toàn Lớp (Class Preservation):
- Khi tạo ra các hình ảnh điều chỉnh, bạn đang định nghĩa một “lớp” của những gì bạn muốn nghịch đảo. Ví dụ, nếu bạn đang cố nghịch đảo một chiếc máy bay mới, bạn có thể tạo một loạt hình ảnh về máy bay để làm hình ảnh điều chỉnh.
- Điều này giúp đảm bảo rằng quá trình huấn luyện không bị lệch sang một lớp khác, chẳng hạn như “ô tô” hoặc “xe đạp”.
- Thậm chí, nó còn giúp ngăn việc mô hình bị nghiêng về hướng “máy bay đồ chơi” nếu bạn sử dụng các tham chiếu thực tế thay vì các diễn giải trừu tượng.
-
Chống Quá Khớp (Overfitting):
- Những hình ảnh điều chỉnh này cũng được sử dụng trong quá trình huấn luyện để đảm bảo rằng các hình ảnh bạn đang cố nghịch đảo không bị quá khớp.
- Nếu quá khớp xảy ra, các hình ảnh được tạo ra có thể giống hệt với tập huấn luyện, làm mất khả năng chỉnh sửa của chúng.
- Một trong những vấn đề của nghịch đảo văn bản (textual inversion) là bạn có thể mất khả năng chỉnh sửa hình ảnh trong quá trình nghịch đảo, đặc biệt khi huấn luyện quá lâu. Việc thêm hình ảnh điều chỉnh vào quá trình huấn luyện giúp ngăn chặn vấn đề này.
-
Hiện Trạng Của Dreambooth:
- Với cách triển khai hiện tại của Dreambooth, một số hiện tượng lệch hướng (drifting) vẫn có thể xảy ra. Ví dụ: nếu bạn nghịch đảo hình ảnh một con ếch, các thế hệ mới có thể có đặc điểm giống ếch.
- Tuy nhiên, mô hình vẫn hoạt động khá tốt miễn là bạn giữ mọi thứ hợp lý với dữ liệu đã huấn luyện.
Tóm lại, hình ảnh điều chỉnh không chỉ giúp duy trì tính nguyên bản của lớp mà bạn đang làm việc, mà còn giảm nguy cơ quá khớp, cải thiện khả năng chỉnh sửa và tính linh hoạt của các hình ảnh được tạo ra.
Nguồn của phần Regularization Images https://www.reddit.com/r/StableDiffusion/comments/xu1ill/comment/iqu81m7/
Cảm ơn các bạn đã theo dõi bài viết.
Nguồn: https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9
Comments