Batch Size

定义:每次参数更新时,用多少个样本计算梯度。

  • Batch = 1:随机梯度下降(SGD),每次用一个样本;
  • Batch = 全量:批量梯度下降,每次用全部数据;
  • Mini-batch:介于两者之间,最常用(如 32、64、128、256)。

大 Batch 的权衡

优点:

  • 梯度估计更准确(噪声小),训练更稳定;
  • 能充分利用 GPU 的并行能力,硬件效率高。

缺点:

  • 需要更多显存;
  • 泛化可能变差:研究表明,过大的 batch 容易收敛到"尖锐"的极小值(对参数扰动敏感),泛化性能下降;
  • 每次更新的计算量更大,但更新次数更少(在固定 epoch 数下)。

小 Batch 的权衡

优点:

  • 梯度噪声大,这种噪声有一定的正则化效果,可能改善泛化;
  • 显存占用小;
  • 更新次数多,在数据少时收敛可能更快。

缺点:

  • 训练不稳定(梯度方向抖动);
  • 硬件利用率低。

学习率

定义:每次参数更新的步长。

太小:收敛慢,可能陷入局部最优或鞍点。

太大:损失函数震荡甚至发散(在最优值附近来回跳,或者直接越过)。

两者的关联

一个经验规律:Batch Size 增大时,可以(也应该)相应增大学习率。

线性缩放规则:Batch Size 乘以 k,学习率也乘以 k。

直观理解:大 batch 的梯度估计更准,可以更放心地走大步。

但线性缩放有上限——batch 非常大时,学习率不能无限增大,否则训练不稳定。

学习率调度

固定学习率通常不是最优的。常见策略:

一、分步衰减:训练到某个轮次时,把学习率乘以一个衰减系数(如 0.1)。

二、余弦退火(Cosine Annealing):学习率按余弦函数从初始值平滑降到接近 0。

三、Warmup:训练初期先用一个很小的学习率,逐步升到设定值,然后再按调度衰减。

为什么需要 warmup:训练初期,模型参数是随机的,梯度方向不稳定。如果一上来就用大学习率,可能导致训练崩溃。

在大 batch 训练和大模型预训练中,warmup 几乎是必需的。

四、自适应优化器:Adam、AdamW 等优化器会为每个参数维护独立的学习率(基于梯度的一阶和二阶矩估计)。

这降低了对学习率手调的依赖,但学习率的量级仍然重要(如 1e-3、1e-4、1e-5 的选择对结果影响很大)。

AdamW:Adam 的改进版,修正了权重衰减的实现方式,是目前训练 Transformer 类模型的主流选择。

实用建议

  • 先用一个较大的学习率试跑,找到"训练损失开始下降"的量级,然后往下调;
  • 观察训练曲线:损失下降太快可能学习率过大,太慢可能过小;
  • 用学习率扫描(Learning Rate Finder):逐步增大学习率,找到损失下降最快的区间;
  • 大模型训练优先选择 AdamW + cosine 调度 + warmup。

说明:本文为深度学习训练技巧的知识整理。