核心要点

  • 大 batch:梯度估计更准、训练更稳、并行吞吐高,但易收敛到尖锐极小、泛化可能变差,且显存占用大

  • 小 batch:梯度噪声大、带来隐式正则化、易逃离不良极小,但收敛慢、训练不稳

  • BGD 用全量样本(慢、占内存),SGD 单样本(噪声大),MBGD 小批量是工业主流折中

  • 调大 batch 通常需按线性 / 平方根法则放大学习率,并配合 warmup

标准回答

三种梯度下降

按每步用多少样本估计梯度区分:BGD(全量,方向最准但每步慢、占内存、难处理大数据),SGD(单样本,更新快、噪声大、不稳但有跳出局部极小的能力),MBGD(小批量,兼顾稳定性与效率,是深度学习实际使用的范式)。

Batch Size 的权衡

大 batch 让梯度估计更接近真实梯度,训练曲线平滑、GPU 并行利用率高、单 epoch 步数少;但它倾向收敛到「尖锐极小(sharp minima)」,泛化往往不如小 batch,且显存随 batch 线性增长。小 batch 的梯度噪声相当于一种正则化,常带来更好的泛化与更平坦的极小,代价是收敛慢、波动大。

学习率联动

batch 增大后单步梯度方差下降,需同步放大学习率(常用线性法则 \(lr \propto B\) 或平方根法则)并加 warmup,否则大 batch 反而欠拟合。实践中先在显存允许范围内选 batch,再调学习率与 warmup。

常见误区

⚠️ 常见踩坑

认为 batch 越大越好——大 batch 常损害泛化且需重调学习率;以及增大 batch 后不调学习率,导致训练欠拟合或不收敛。

追问

追问 1为什么大 batch 容易泛化变差?

大 batch 梯度噪声小,优化器更易滑入损失曲面上「尖锐」的极小点,这类极小对参数扰动敏感、对测试分布鲁棒性差;小 batch 的噪声则倾向于把解推向更「平坦」的极小,泛化更好。可用 LARS/LAMB、增大学习率与 warmup 等手段缓解。

追问 2显存不够但想用大 batch 怎么办?

用梯度累积(gradient accumulation):多个小 batch 的梯度累加后再更新一次,等效于大 batch;也可用混合精度、激活重计算降低显存,或数据并行把 batch 切到多卡上。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。