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。
说明:本文为深度学习训练技巧的知识整理。