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ơn và optimizer 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 định và SGD
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
[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
Nhận xét
Đăng nhận xét