Tinh chỉnh Batch Size trong Deep Learning

 

Tinh chỉnh Batch Size trong Deep Learning: Dựa trên Kiến trúc Mô hình, Dữ liệu, Số Epoch và Thuật toán Tối ưu

Batch size là siêu tham số quan trọng ảnh hưởng đến tốc độ học và khả năng tổng quát hóa của mô hình học sâu. Việc lựa chọn batch size phù hợp cần xem xét nhiều yếu tố, từ kiến trúc mô hình (đặc biệt là số lượng tham số), độ lớn của tập dữ liệu, số lượng epoch huấn luyện, cho đến thuật toán tối ưu sử dụng (ví dụ: SGD hay Adam). Dưới đây, chúng ta sẽ phân tích cách điều chỉnh batch size dựa trên những yếu tố này, dựa trên kết quả nghiên cứu đã công bố.

Ảnh hưởng của Kiến trúc Mô hình (số lượng tham số) đến Batch Size

Kiến trúc mô hình, đặc biệt là số lượng tham số, quyết định phần nào giới hạn và hiệu quả của batch size. Mô hình có nhiều tham số thường đòi hỏi bộ nhớ lớn hơn, do đó batch size tối đa có thể bị giới hạn bởi dung lượng GPU. Ví dụ, mô hình ngôn ngữ lớn như BERT với hàng trăm triệu tham số thường chỉ cho phép batch size nhỏ (vd. 16 hoặc 32) khi fine-tune do hạn chế bộ nhớ – để bù lại, người ta phải dùng gradient accumulation (tích lũy gradient) để mô phỏng batch lớn hơn từ nhiều batch nhỏ[1]. Ngược lại, với mô hình nhỏ hơn, ta có thể tăng batch size để tận dụng tối đa khả năng tính toán song song của phần cứng, miễn là vẫn nằm trong giới hạn bộ nhớ.

Tuy nhiên, số lượng tham số lớn cũng ảnh hưởng đến động học học tập. Các nghiên cứu cho thấy mô hình càng sâu và phức tạp thì càng nhạy cảm với việc chọn batch size. Sử dụng batch size quá lớn trên mô hình nhiều tham số có thể gây khó khăn cho tối ưu hóa, dẫn đến không hội tụ hoặc hội tụ kém. Thực nghiệm trên ResNet (nhiều lớp hơn tương ứng nhiều tham số hơn) cho thấy việc giảm batch size giúp quá trình huấn luyện ổn định hơn cho mô hình sâu – ví dụ ResNet-32 (không dùng BatchNorm) chỉ huấn luyện thành công trên CIFAR-10 khi batch size rất nhỏ (2, 4 hoặc 8), trong khi các batch lớn hơn khiến mô hình không học được[2]. So sánh ResNet-8 và ResNet-20 cũng cho thấy batch size nhỏ giảm bớt khó khăn tối ưu hóa ở mô hình sâu hơn[3]. Nói cách khác, với mô hình có nhiều tham số (độ phức tạp cao), batch size nhỏ đóng vai trò như một dạng regularization (nhờ nhiễu trong gradient) giúp mô hình không rơi vào cực tiểu “sắc nhọn”[4], từ đó cải thiện khả năng tổng quát. Ngược lại, mô hình đơn giản hơn (ít tham số) có thể không cần lượng nhiễu cao từ batch nhỏ, và có thể tận dụng batch lớn để tăng tốc huấn luyện.

Ví dụ thực tiễn: Trong bài toán thị giác máy tính ImageNet với mô hình ResNet-50 (~25 triệu tham số), người ta thường chọn batch size khoảng 256 trên mỗi GPU như một thỏa hiệp giữa tốc độ và tổng quát hóa. Với mô hình lớn hơn nhiều (ví dụ Vision Transformer hàng trăm triệu tham số) trên cùng dữ liệu, batch size khả dụng thường phải nhỏ hơn do giới hạn bộ nhớ, và người ta nhận thấy batch nhỏ kết hợp với tối ưu hóa tốt có thể đạt hiệu quả tương đương batch lớn sau khi tinh chỉnh siêu tham số. Nghiên cứu của Masters & Luschi (2018) chỉ ra hiệu năng tốt nhất nhất quán đạt được với batch size nhỏ (thường trong khoảng 2–32), trái ngược với xu hướng dùng batch rất lớn hàng nghìn[5]. Điều này được xác nhận trên nhiều bộ dữ liệu: với CIFAR-10, batch size 2 hoặc 4 cho kết quả tốt nhất; với CIFAR-100, batch 2–16 là tối ưu; và ngay cả trên ImageNet lớn, độ chính xác cao nhất cũng đạt được khi batch size ở mức hàng chục thay vì hàng trăm[6]. Tóm lại, mô hình càng lớn/càng sâu, việc thử batch size nhỏ để tăng tính ổn định và tổng quát hóa là rất cần thiết, mặc dù phải đánh đổi bằng thời gian huấn luyện lâu hơn.

Độ lớn của Dữ liệu (số lượng mẫu) và Batch Size

Quy mô tập dữ liệu ảnh hưởng mạnh đến việc chọn batch size. Tập dữ liệu nhỏ (ít mẫu) thường đòi hỏi batch size nhỏ hơn để mô hình có nhiều bước cập nhật hơn trên mỗi epoch, giúp tận dụng dữ liệu hiệu quả. Với dữ liệu ít, nếu dùng batch quá lớn, mô hình sẽ thấy toàn bộ dữ liệu (hoặc phần lớn) trong một vài bước cập nhật, dễ dẫn đến overfit và giảm khả năng tổng quát. Batch nhỏ tạo ra nhiễu ngẫu nhiên trong gradient như một dạng regularization, giúp mô hình tránh fit nhiễu của tập huấn luyện[4]. Chẳng hạn, với tập CIFAR-10 chỉ 50k ảnh, nghiên cứu cho thấy batch size nhỏ (~16 hoặc 32 trở xuống) cho kết quả tốt hơn hẳn batch lớn[6]. Điều này do batch nhỏ tạo ra nhiều bước cập nhật hơn (mỗi mẫu được “nhìn thấy” nhiều lần hơn) và gradient nhiều nhiễu hơn giúp tránh hiện tượng mô hình nhớ máy (memorization).

Ngược lại, với tập dữ liệu rất lớn, ta có thể tận dụng batch size lớn hơn để tăng tốc độ huấn luyện mà không làm giảm chất lượng mô hình (đến một giới hạn nào đó). Khi dữ liệu phong phú, mỗi batch lớn vẫn chứa nhiều thông tin mới mẻ, gradient ít nhiễu hơn nên mỗi bước cập nhật “tin cậy” hơn. Nghiên cứu từ OpenAI chỉ ra rằng nhiệm vụ càng phức tạp và dữ liệu càng lớn thì batch size tối ưu (gọi là critical batch size) càng tăng – ví dụ: bài toán đơn giản như MNIST đạt hiệu quả tối đa ở batch nhỏ, trong khi với ImageNet phức tạp hơn, batch size có thể tăng lên hàng nghìn mẫu mà vẫn hưởng lợi, và trong học tăng cường, bài toán Dota 5v5 phức tạp cho phép batch tối ưu lớn hơn bài toán Atari Pong cả hơn 10,000 lần[7]. Điều này nghĩa là khi dữ liệu rất lớn/đa dạng, ta có thể tăng batch size để tận dụng tính song song mà không bị giảm nhiều chất lượng cho đến khi đạt “điểm bão hòa” (diminishing returns).

Tuy vậy, ngay cả với dữ liệu lớn, lợi ích của việc tăng batch size không tăng mãi tuyến tính. Các nghiên cứu thực nghiệm (Shallue et al. 2019) cho thấy ban đầu, tăng batch size có thể giảm số bước cần thiết để đạt độ lỗi mục tiêu gần như tỷ lệ thuận (batch gấp đôi -> số bước giảm một nửa), nhưng tới một ngưỡng batch “tới hạn”, hiệu quả thu được giảm dần[8][9]. Vượt quá batch size tới hạn này, mô hình không thể giảm tương ứng số bước và có thể cần nhiều epoch hơn để đạt cùng mức lỗi. Điểm tới hạn này phụ thuộc vào bản chất dữ liệu: dữ liệu càng phức tạp, điểm tới hạn càng cao. Chẳng hạn, với ImageNet (~1.28 triệu ảnh), người ta đã huấn luyện ResNet-50 với batch size 8192 (phân phối trên 256 GPU) mà không giảm độ chính xác nhờ điều chỉnh học phù hợp[10]. Để làm được như vậy, họ áp dụng quy tắc tăng learning rate tuyến tính theo batch size và khởi động dần (warmup) để vượt qua giai đoạn đầu không ổn định[11]. Kết quả cho thấy mô hình đạt độ chính xác tương đương batch nhỏ, chứng tỏ với dữ liệu lớn, batch lớn có thể hoạt động tốt nếu được tinh chỉnh. Tuy nhiên, cái giá phải trả là tổng số mẫu xử lý tăng lên rất nhiều – nhóm này vẫn phải huấn luyện số epoch tương đương (hoặc nhiều hơn) so với batch nhỏ, chỉ là họ hoàn thành trong 1 giờ bằng cách huy động nhiều tài nguyên song song[12]. Nghiên cứu khác cũng khẳng định nếu điều chỉnh đúng và tăng đủ số bước huấn luyện, batch size lớn không làm giảm chất lượng tổng quát hóa so với batch nhỏ[13][14]. Do đó, với tập dữ liệu khổng lồ (ví dụ hàng trăm triệu mẫu), ta nên chọn batch size lớn tới mức phần cứng cho phép để đẩy nhanh huấn luyện, nhưng luôn nhớ đánh giá “điểm bão hòa” – vượt quá mức đó sẽ không rút ngắn thêm thời gian do phải tăng epoch để bù đắp[15].

Ví dụ thực tế: Một mô hình thị giác huấn luyện trên tập dữ liệu nhỏ như MIT-67 (chỉ vài nghìn ảnh) thường sử dụng batch rất nhỏ (8–16) để tăng số lần lặp và tránh overfitting. Trong khi đó, mô hình ResNet huấn luyện trên ImageNet (1.2 triệu ảnh) thường dùng batch ~256–512 hình/gpu; các hệ thống phân tán thậm chí thử batch tới 8k–32k ảnh (bằng cách cộng gộp nhiều GPU) để tăng tốc huấn luyện. Các thử nghiệm cho thấy batch 32k vẫn có thể đạt cùng accuracy như batch 256 nếu learning rate và số epoch được tăng tương ứng[15][14]. Nhưng nếu đẩy batch lên 64k–128k, hiệu quả bắt đầu bão hòa – thời gian huấn luyện không giảm thêm do phải huấn luyện lâu hơn để đạt kết quả tương đương (dấu hiệu của batch size tới hạn).

Số lượng Epoch và Mối quan hệ với Batch Size

Số epoch huấn luyện (số lượt duyệt qua toàn bộ dữ liệu) có mối quan hệ chặt chẽ với batch size. Khi thay đổi batch size, ta cần điều chỉnh số epoch (hoặc tổng số bước cập nhật) để đảm bảo mô hình được tối ưu đủ. Một epoch chứa số bước cập nhật bằng (kích thước dữ liệu / batch size). Vì vậy, nếu batch size tăng, số bước mỗi epoch giảm tương ứng. Nếu ta giữ nguyên số epoch, batch lớn sẽ thực hiện ít bước cập nhật hơn so với batch nhỏ, dẫn đến mô hình “đi ít bước” hơn trong không gian tham số. Nghiên cứu đã chỉ ra rằng tiến độ học của mạng phụ thuộc vào số lần cập nhật tham số hơn là số mẫu đã xem[16]. Do đó, trong nhiều trường hợp, batch size lớn bị thua thiệt vì số bước giảm, chứ bản thân batch lớn không xấu. Keskar et al. (2017) quan sát thấy việc huấn luyện batch lớn thường dừng ở các điểm cực tiểu sắc (sharp minima) kém tổng quát chỉ vì mô hình chưa được “di chuyển” đủ xa do quá ít bước – nếu cho chạy thêm nhiều bước, sự khác biệt thu hẹp lại[17].

Điều này gợi ý một nguyên tắc: Khi tăng batch size, thường cần tăng số epoch (tổng số bước huấn luyện) để bù lại số lần cập nhật giảm đi. Hoffer et al. (2017) đã thử nghiệm và thấy rằng nếu giữ nguyên tổng số cập nhật khi dùng batch lớn (tức là tăng số epoch tương ứng), thì mô hình đạt kết quả tổng quát hóa tương đương như khi dùng batch nhỏ[18][19]. Nói cách khác, không có “vấn đề nền tảng” nào ngăn batch lớn tổng quát hóa tốt, miễn là bạn cho mô hình đủ số bước học[17]. Tuy nhiên, đánh đổi là bạn phải huấn luyện lâu hơn (xét theo số mẫu duyệt qua). Ví dụ, nếu batch tăng gấp 4 lần mà bạn cũng tăng số epoch gấp 4, thì tổng số mẫu xử lý tăng gấp 4 – tức tổng chi phí tính toán không giảm, dù bạn có thể tận dụng song song để giảm thời gian thực tế.

Nghiên cứu của Shallue et al. (2019) khẳng định thêm: Sau một batch size tới hạn, muốn đạt cùng độ lỗi, số epoch phải tăng lên (vì số bước không thể giảm tỉ lệ thuận nữa)[15]. Họ đề xuất khi tăng batch size, ta có thể tăng learning rate tương ứng (ví dụ tăng tuyến tính theo batch size – “linear scaling”) để tận dụng việc gradient ít nhiễu hơn[20][15], đồng thời xem xét tăng số epoch hoặc sử dụng kỹ thuật warmup để mô hình thích nghi với bước nhảy lớn ban đầu[11]. Ghost Batch Normalization cũng là một mẹo được đề xuất cho batch lớn: tính toán BatchNorm trên các mini-batch nhỏ bên trong batch lớn để giữ nguyên độ nhiễu ước lượng thống kê, giúp regularize tương tự batch nhỏ[21].

Ví dụ: Giả sử bạn có 10,000 mẫu và huấn luyện 10 epoch. Với batch size 50, mỗi epoch ~200 bước, tổng cộng ~2000 bước cập nhật sau 10 epoch. Nếu tăng batch size lên 500 (gấp 10 lần) mà vẫn 10 epoch, mỗi epoch chỉ 20 bước, tổng cộng 200 bước – chỉ bằng 1/10 số cập nhật trước đó. Mô hình có thể chưa “đi đủ xa”, dễ dẫn đến underfit hoặc dừng ở minimum kém. Để bù lại, ta có thể huấn luyện 100 epoch với batch 500 để có cùng ~2000 bước. Thực tế, Goyal et al. (2017) khi huấn luyện ResNet-50 với batch 8192 đã phải tinh chỉnh tăng learning rate gấp 32 lần (theo tỷ lệ batch) và dùng 90 epoch kèm 5 epoch warmup để đạt accuracy 76.3% như batch 256 truyền thống[10]. Tương tự, khi Google thử batch 32k cho BERT pre-training, họ cũng cần ~2x số bước so với batch 16k để đạt cùng điểm số F1, nhưng tổng thời gian thực giảm do tận dụng nhiều TPU song song[22][23]. Kết luận ở đây là: nếu bạn tăng batch size để tăng tốc, hãy xem xét tăng số epoch hoặc điều chỉnh lịch học (learning rate schedule) để mô hình vẫn nhận đủ số lần cập nhật cần thiết.

Batch Size và Thuật toán Tối ưu (Minh họa với Adam)

Thuật toán tối ưu ảnh hưởng đến cách batch size tác động đến quá trình học. Ở đây, ta xét kỹ thuật tối ưu phổ biến là Adam (với momentum và adaptive learning rate) để hiểu mối liên quan.

1. Momentum và batch size: Thuật toán SGD với momentum (cũng như Adam với momentum b1) về bản chất thực hiện trung bình có trọng số các gradient của nhiều bước liên tiếp. Điều này có nghĩa là momentum có thể làm mượt bớt nhiễu của gradient khi batch size nhỏ bằng cách cộng dồn thông tin từ nhiều batch nhỏ liên tiếp. Kết quả là hiệu ứng tương tự việc dùng batch lớn hơn: gradient update ổn định hơn so với SGD thuần không có momentum[24]. Nhờ momentum, mô hình dùng batch nhỏ vẫn có thể tiến những bước tương đối “ổn định” thay vì dao động quá mức, bởi vì nhiễu được tích lũy và trung bình hóa qua các bước. Nghiên cứu dựa trên mô hình lý thuyết (noisy quadratic model) dự đoán rằng SGD có momentum có thể đạt “perfect scaling” tới batch size lớn hơn so với SGD thuần (tức là momentum giúp mở rộng giới hạn batch hiệu quả)[25][24]. Thật vậy, Shallue et al. (2018) ghi nhận batch size tới hạn phụ thuộc vào thuật toán tối ưu: dùng momentum cho phép batch tới hạn cao hơn một chút so với SGD thường[8]. Ngoài ra, momentum ít cần thiết hơn khi batch size nhỏ: với batch rất nhỏ, nhiễu cao khiến mỗi bước SGD đã như một “tìm kiếm ngẫu nhiên” hiệu quả, do đó đã có nghiên cứu cho thấy thậm chí SGD không momentum vẫn có thể huấn luyện ổn định ở batch size cực nhỏ nếu điều chỉnh tốt[26]. Nói cách khác, ở regime batch nhỏ, vai trò của momentum giảm (vì tự bản thân nhiễu đã giúp thoát bẫy cực tiểu và tránh các vũng minima không tốt), trong khi ở batch lớn, momentum quan trọng để tạo ra động lượng vượt qua các điểm yên ngựa và tăng tốc hội tụ.

2. Adaptive learning rate (điều chỉnh theo phương sai gradient) trong Adam: Adam không chỉ có momentum b1 (trung bình cấp 1 của gradient) mà còn có cơ chế điều chỉnh tốc độ học theo hướng gradient thông qua trung bình cấp 2 (v = EMA của bình phương gradient). Nhờ đó, Adam tự động điều chỉnh bước cập nhật phù hợp với độ lớn và phương sai của gradient. Khi batch size nhỏ, gradient có phương sai lớn; Adam sẽ ghi nhận điều này qua $v_t$ cao hơn, dẫn đến bước nhảy $ \Delta w = -\eta \frac{m_t}{\sqrt{v_t}+ \epsilon}$ nhỏ lại (vì $\sqrt{v_t}$ lớn) – giúp tránh cập nhật quá mức do nhiễu[27][28]. Ngược lại, nếu batch size lớn, gradient gần với giá trị kỳ vọng hơn (phương sai thấp), $v_t$ sẽ nhỏ hơn, khiến Adam thực hiện bước cập nhật “mạnh” hơn cho cùng $\eta$. Nói cách khác, Adam phần nào tự “thích nghi” với kích thước batch: batch nhỏ -> bước đi chậm lại, batch lớn -> bước đi nhanh hơn, nếu ta giữ nguyên learning rate. Nhờ đặc tính này, Adam thường ổn định trên khoảng rộng batch size hơn so với SGD thuần, và khi tăng batch size, ta không nhất thiết phải tăng learning rate theo tỷ lệ mạnh như SGD[29][30]. Tuy nhiên, adaptive LR của Adam không hoàn toàn bù được ảnh hưởng batch size trong mọi trường hợp. Nghiên cứu gần đây chỉ ra Adam không bất biến theo batch size – nếu giữ cố định hyperparameter, thay đổi batch vẫn dẫn đến quỹ đạo học khác nhau do cách tính trung bình $v_t$ khác nhau[29]. Người ta thậm chí phải đề xuất phiên bản “AdamW bất biến batch size” bằng cách tinh chỉnh cách tính $v_t$ (sử dụng micro-batches) để đảm bảo cùng trajectory bất kể batch lớn hay nhỏ[31][32]. Điều này cho thấy dù Adam thích nghi tốt hơn, ta vẫn cần điều chỉnh các hyperparameter (như learning rate, $\beta_1, \beta_2$) khi đổi batch size để có kết quả tối ưu.

3. Batch size và hiệu quả của các thuật toán tối ưu: Ở batch size rất lớn, do số bước cập nhật ít đi, thuật toán tối ưu cần đủ “mạnh” để vẫn đào tạo nhanh và tổng quát tốt. Điều này thường đòi hỏi learning rate lớn hơnoptimizer tinh vi hơn. Ví dụ, khi batch tăng, ta hay tăng learning rate (linear scaling hoặc $\sqrt{B}$ scaling) để mỗi bước nhảy xa hơn bù cho việc bước ít hơn[30][26]. Nhưng learning rate lớn lại dễ gây mất ổn định, do đó optimizer cần khả năng dự báo tốt quỹ đạo. Adam với momentum và adaptive LR thường tỏa sáng ở đây: nó giúp ổn định các bước nhảy lớn thông qua momentum và giảm bước theo từng chiều qua $v_t$. Trong huấn luyện BERT với batch cực lớn (lên tới 32k–64k), các nhà nghiên cứu ban đầu phải thiết kế optimizer LAMB (Layer-wise Adaptive Moments, một biến thể của Adam) để đạt được hiệu năng cao[33][34]. LAMB thực chất kết hợp Adam với chuẩn hóa layer-wise để tương thích batch lớn. Tuy nhiên, kết quả mới nhất cho thấy Adam chuẩn, nếu được điều chỉnh đúng, có thể sánh hoặc vượt LAMB ở batch rất lớn – ví dụ, Adam đạt điểm F1 cao hơn LAMB khi pre-train BERT ở batch 65k, đồng thời rút ngắn thời gian huấn luyện[35][23]. Điều này khẳng định rằng các thuật toán tối ưu truyền thống (Adam, SGD+momentum) vẫn hoạt động tốt ở batch lớn nếu ta tinh chỉnh siêu tham số phù hợp[14][36]. Thậm chí, nghiên cứu của Nado et al. (2021) cho thấy Nesterov momentum và Adam có thể đạt kết quả ngang LARS/LAMB trên batch cực lớn sau khi tuning, thiết lập cột mốc mới về tốc độ huấn luyện ResNet-50 và BERT mà không cần optimizer đặc biệt[37][35].

Ở chiều ngược lại, với batch size rất nhỏ, lợi thế của Adam so với SGD thuần cũng thu hẹp. Nhiễu cao ở batch nhỏ vô tình đóng vai trò tương tự một số chức năng của Adam: nó giúp khám phá không gian tham số và tránh minima sắc nhờ tính ngẫu nhiên. Một nghiên cứu năm 2023 (Marek et al.) gây chú ý khi cho thấy huấn luyện mô hình ngôn ngữ với batch size = 1 vẫn ổn địnhSGD thuần (không momentum) có thể cạnh tranh với Adam ở batch nhỏ nếu hyperparameter được chọn hợp lý[38][26]. Họ nhận thấy batch nhỏ làm cho quá trình huấn luyện ít nhạy cảm với các siêu tham số hơn – mô hình vẫn hội tụ tốt trên khoảng LR rộng, trong khi batch lớn đòi hỏi chọn LR rất chuẩn[39][26]. Nguyên nhân là batch nhỏ thực hiện nhiều bước, mỗi bước là một “thử nghiệm” ngẫu nhiên, do đó một optimizer đơn giản cũng đủ dần dần tìm ra minima. Trái lại, batch lớn thực hiện ít bước “nhảy dài”, đòi hỏi optimizer phải “thông minh” (dự đoán đúng hướng xa) và hyperparameter phải tinh chỉnh kỹ[26]. Vì thế, khi tài nguyên cho phép, dùng batch nhỏ nhất có thể mà vẫn tận dụng hết throughput phần cứng có thể là chiến lược tốt – ta đạt được nhiều bước cập nhật hơn và bớt phụ thuộc vào các điều chỉnh tinh vi của optimizer[40].

Tóm lại: Batch size tác động đến cả tốc độ lẫn kết quả huấn luyện, và sự tương tác với thuật toán tối ưu rất quan trọng. Adam và các optimizer adaptive khác giúp giảm bớt độ nhạy cảm khi thay đổi batch (do có momentum và tự điều chỉnh bước học), nhưng không phải “thuốc chữa bách bệnh” – bạn vẫn cần điều chỉnh learning rate, lịch học phù hợp cho từng batch size. Với batch nhỏ, mô hình hưởng lợi từ nhiều bước cập nhật và nhiễu cao – cần ít tinh chỉnh hơn và thậm chí optimizer đơn giản cũng có thể hoạt động[38][26]. Với batch lớn, để thu được lợi ích tốc độ mà không mất độ chính xác, bạn nên dùng momentum/Adam, tăng learning rate tương ứng và thường phải huấn luyện lâu hơn (nhiều epoch) hoặc áp dụng kỹ thuật đặc biệt (như warmup, gradient clipping, etc.). Việc hiểu rõ đặc điểm mô hình và dữ liệu của bạn sẽ giúp quyết định batch size hợp lý: không có một con số cố định, mà là sự cân bằng giữa tài nguyên tính toán, thời gian huấn luyện và chất lượng mô hình. Các nghiên cứu hiện đại khuyến nghị một cách thực dụng rằng: “Hãy dùng batch size nhỏ nhất mà vẫn giữ GPU/TPU bận rộn tối đa”, nhờ vậy mô hình được nhiều bước cập nhật nhất trong ngân sách FLOPs cho phép[40]. Sau đó, tinh chỉnh các siêu tham số (learning rate, momentum, hệ số Adam $\beta$) dựa trên batch size đó dựa vào hướng dẫn từ các bài báo và kinh nghiệm thực tiễn để đạt kết quả tối ưu nhất.

Tài liệu tham khảo: Các nội dung trên có trích dẫn từ những nghiên cứu và bài báo uy tín, như Keskar et al. 2017 về batch lớn và minima sắc bén[41], Hoffer et al. 2017 về việc “train longer, generalize better”, Goyal et al. 2018 với batch 8192[10], Shallue et al. 2019 về batch size tới hạn[13], Masters & Luschi 2018 về lợi ích batch nhỏ[5], OpenAI 2018 về gradient noise scale[42], cùng nhiều nghiên cứu gần đây về tối ưu hóa (LARS/LAMB vs Adam[35], batch size nhỏ trong huấn luyện ngôn ngữ[38]...). Những nguồn này cung cấp bằng chứng thực nghiệm và hướng dẫn giúp chúng ta hiểu rõ hơn cách tinh chỉnh batch size một cách khoa học thay vì chỉ dựa vào thử-sai. Với cách tiếp cận dựa trên hiểu biết này, người làm machine learning có thể tự tin chọn batch size phù hợp cho từng bài toán cụ thể, đạt được cả tốc độ huấn luyện cao lẫn mô hình có chất lượng tốt.[5][6]


[1] What is Gradient Accumulation - Hopsworks

https://www.hopsworks.ai/dictionary/gradient-accumulation

[2] [3] [4] [5] [6] [18] [19] [1804.07612] Revisiting Small Batch Training for Deep Neural Networks

https://ar5iv.labs.arxiv.org/html/1804.07612

[7] [42] How AI training scales | OpenAI

https://openai.com/index/how-ai-training-scales/

[8] [9] [24] [25] Which Algorithmic Choices Matter at Which Batch Sizes? Insights From a Noisy Quadratic Model

http://papers.neurips.cc/paper/9030-which-algorithmic-choices-matter-at-which-batch-sizes-insights-from-a-noisy-quadratic-model.pdf

[10] [11] [12] [1706.02677] Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour

https://arxiv.org/abs/1706.02677

[13] [1811.03600] Measuring the Effects of Data Parallelism on Neural Network Training

https://arxiv.org/abs/1811.03600

[14] [15] [22] [23] [33] [34] [35] [36] [37] arxiv.org

https://arxiv.org/pdf/2102.06356

[16] [17] [20] [21] Reviews: Train longer, generalize better: closing the generalization gap in large batch training of neural networks

https://papers.nips.cc/paper/2017/file/a5e0ff62be0b08456fc7f1e88812af3d-Reviews.html

[26] [38] [39] [40] Small Batch Size Training for Language Models: When Vanilla SGD Works, and Why Gradient Accumulation Is Wasteful

https://arxiv.org/html/2507.07101v1

[27] [28] [29] [31] [32] opt-ml.org

https://opt-ml.org/papers/2024/paper4.pdf

[30] Adjusting learning rate when increasing batch size - fastai - fast.ai Course Forums

https://forums.fast.ai/t/adjusting-learning-rate-when-increasing-batch-size/38862

[41] [PDF] ON LARGE-BATCH TRAINING FOR DEEP LEARNING - OpenReview

https://openreview.net/pdf?id=H1oyRlYgg

Nhận xét

Bài đăng phổ biến từ blog này

Kết Nối MongoDB Với VSCode: Hướng Dẫn Tận Tình Cho Người Mới Bắt Đầu - 1

Statistics 02: Correlation, Covariance & Correlation Coefficient

Tư Duy Logic và Giải Quyết Vấn Đề trong AI/Data Science