跳到主内容

batch size 大了好还是小了好?两头的代价

2026-10-18 发布 来源:我告诉你AI导航 阅读

训练大模型时,一批喂多少样本是个绕不开的选择。batch size 调大,单步梯度更稳;调小,同样数据能走更多步。两边各有代价,没有绝对的好坏。本文按机制层思路,把两头的账算清楚,再给出常见的搭配逻辑。

训练大模型时,一批喂多少样本是个绕不开的选择。batch size 调大,单步梯度更稳;调小,同样数据能走更多步。两边各有代价,没有绝对的好坏。本文按机制层思路,把两头的账算清楚,再给出常见的搭配逻辑。

大批次:稳的代价

先看大批次的好处与代价。好处是梯度估计准:batch 越大,采样噪声被平均得越彻底,单步方向更可靠,loss 曲线更平滑。代价首先是显存,激活值按 batch 线性增长,大 batch 常常是显存先爆;其次是同样数据下的步数变少,一个 epoch 的更新机会缩水,总训练时间未必缩短。这类似把一堆问题一次性丢给腾讯元宝:它答得稳,但你要等它全部答完;一条条问豆包,响应快却容易前后不一致。

小批次:快的代价

再看小批次。小 batch 的梯度噪声大,单步方向左右摇摆,但摇摆本身有逃出尖锐极小值的作用,实践中泛化有时反而略好。代价是 GPU 算不满——并行度上不去,算力闲置;以及相邻两步的梯度可能互相抵消,有效进度打折。极端情况下,batch 小到每卡只有几条样本,梯度方向基本是随机游走,训练变成碰运气。

有效步长与学习率联动

机制上两者通过「有效步长」联动。梯度噪声随 batch 增大而减小,此时可以配更大的学习率补偿步数变少,这就是常见的大 batch 配大学习率、小 batch 配小学习率的经验。反过来在小 batch 上硬用大学习率,噪声加震荡,模型直接发散。学习率和训练阶段的匹配逻辑,在微调篇里有专门展开,这里记住一条就够:动 batch,就要重审学习率。

梯度累积:折中办法

想大 batch 的稳又不想吃显存,梯度累积是标准折中:连续累积多个小 batch 的梯度再统一更新,数学效果接近大 batch,显存只按小 batch 算。代价是更新频率降低,同样步数下墙上时间变长。实践里的常见动线是:先按显存上限设单卡 batch,不够再上梯度累积,最后按总样本量和步数预算反推 global batch。多卡场景下 global batch 是各卡之和,切分逻辑见数据并行是怎么分工的;单卡放不下时的分层处理见流水线并行和ZeRO 分片。

最后说一个常见误配:batch 调大后忘记动学习率,loss 下降变慢就盲目加步数,其实换个大一点的学习率就解决了。batch 大小还会影响相邻样本的相关性,样本顺序的讲究见训练数据的顺序有影响吗;训练不稳导致旧能力掉落时,灾难性遗忘怎么防里的回放思路也常被用上。

症状可能的原因处理方向
loss 下降变慢batch 调大后学习率没跟着动先重审学习率,再谈加步数
显存爆掉激活值随 batch 线性增长降单卡 batch,改用梯度累积
算力闲置batch 太小,并行度上不去适当加大 batch
训练发散小 batch 上硬用大学习率学习率随 batch 一起降
  • 大批次:梯度稳、曲线平滑,但显存贵、步数少
  • 小批次:步进快、偶有泛化好处,但噪声大、算力易闲置
  • 联动:batch 大学率可大,batch 小学率要小
  • 折中:梯度累积模拟大 batch,显存只按小 batch 算
  • 动线:先定单卡 batch,再累积,最后反推 global batch

关于 batch size 的三个常问问题

  • batch 越大收敛一定越快吗?:不一定,步数少了以后单 epoch 更新机会也少,总时间常按「每样本计算量」折算才公平。
  • 梯度累积和大 batch 完全等价吗?:梯度层面接近,但按小 batch 做统计归一化的层会看出差别,严格说不等价。
  • 调 batch 要重新调学习率吗?:通常要,batch 翻倍而学习率不变,相当于有效步长减半,收敛会明显变慢。

反馈页面信息

请描述需要更正的地方,页面标题和网址会自动附上。

也可以发邮件至 [email protected]