什么是梯度累积训练方法

GPU
小华
2026-10-15

梯度累积(Gradient Accumulation)是一种在深度学习训练中,用来“用更小的 batch size 模拟更大 batch size”的训练技巧。

一、为什么需要梯度累积?

在训练神经网络时:

  • Batch Size 越大:梯度估计越稳定,收敛更好,但显存占用高
  • 显存有限:很多时候无法直接用很大的 batch size

梯度累积的核心思想:

把多个小 batch 的梯度加起来,等价于在一个大 batch 上算梯度

二、普通训练 vs 梯度累积

1️⃣ 普通训练(无累积)

for each batch:
前向
计算 loss
反向(算梯度)
更新参数

2️⃣ 梯度累积训练

假设:

  • 实际 batch size = 4
  • 累积步数 accumulation steps = 4

→ 等效 batch size = 16

for i in range(accumulation_steps):
前向
计算 loss
loss = loss / accumulation_steps
反向(梯度累加,不更新)
更新参数(每 accumulation_steps 次)
清空梯度

三、代码示例(PyTorch)

accumulation_steps = 4
optimizer.zero_grad()
for i, (x, y) in enumerate(dataloader):
pred = model(x)
loss = criterion(pred, y)
loss = loss / accumulation_steps
loss.backward()
if (i + 1) % accumulation_steps == 0:
optimizer.step()
optimizer.zero_grad()

⚠️ 注意:

  • loss / accumulation_steps 是为了保持梯度尺度一致
  • 只在累积结束后 step()

四、梯度累积等价于大 Batch 吗?

✅ 数学上近似等价

  • 梯度 = 多个小 batch 梯度的平均
  • 学习率通常需要相应调整

⚠️ 不完全一样

  • BatchNorm / LayerNorm 仍按小 batch 计算
  • 随机性顺序可能不同

五、适用场景

✅ 显存不足但想用大 batch
✅ 大模型(LLM)微调
✅ 多卡训练补充手段

❌ 实时在线学习(不适合)

六、一句话总结

梯度累积 = 把多次前向反向的梯度攒起来再更新参数,用时间换显存。
如果你愿意,我也可以讲:
  • 梯度累积 + 混合精度
  • 和 gradient checkpointing 的区别
  • LLM 微调中的实际配置
亿速云提供售前/售后服务

售前业务咨询

售后技术保障

400-100-2938

7*24小时售后电话

官方微信小程序