梯度累积(Gradient Accumulation) 和 批次大小(Batch Size) 的关系可以一句话概括:
梯度累积是用“多个小批次”模拟“一个大批次”的训练效果。
下面分层说明。
一次前向+反向传播中使用的样本数量。
若:
则等效批次大小为:
[
B_{text{eff}} = b times k
]
例如:
大模型 + 大批次 → 显存爆炸
梯度累积允许:
在理想情况下(学习率不变、梯度取平均):
[
g = frac{1}{k} sum_{i=1}^{k} g_i
]
[
eta_{text{new}} = eta_{text{base}} times frac{B_{text{eff}}}{B_{text{base}}}
]
| 对比项 | 大批次 | 梯度累积 |
|---|---|---|
| 显存占用 | 高 | 低 |
| 并行效率 | 高 | 较低 |
| BN 统计 | 大 | 小 |
| 收敛行为 | 更接近理论 | 近似 |
梯度累积是“时间换空间”的手段,用多次小批次计算,等效实现一个大批次的训练效果。
如果你愿意,我也可以结合 PyTorch 示例代码 或 LLM 训练中的实际应用 来讲。