把大Batch拆开后如何保证梯度等效

前言

大 Batch 放不进显存时,最常见的做法是拆成几个 micro-batch,分别 forward/backward,最后只执行一次 optimizer step。

听起来就是“多调几次 backward”,但如果 micro-batch 大小不同、每个样本有效 token 数不同,或者 loss 本身按 token 归一化,直接累加得到的梯度并不一定等于完整 Batch。

阅读更多