1. 三种梯度下降一览
之前我们用的梯度下降,每次用全部训练数据计算平均梯度再更新参数——这只是其中一种方式。
| 方法 | 每次更新用的数据量 | 核心特点 |
|---|---|---|
| 批量梯度下降(BGD) | 全部训练数据 | 稳定但慢 |
| 随机梯度下降(SGD) | 1 条数据 | 快但不稳定 |
| 小批量梯度下降(Mini-batch GD) | 一小批数据(如 32、64 条) | 两者的平衡 — 实际中最常用 |
2. 批量梯度下降(Batch Gradient Descent, BGD)
2.1 做法
每一轮迭代,用所有训练样本计算平均 loss → 反向传播 → 计算每个参数的平均梯度 → 更新参数。
2.2 优点
- 梯度是对整个训练集的准确反映,收敛方向最可靠
- 训练稳定,loss 曲线平滑下降
2.3 缺点
- 计算量大:上百万数据时,一次前向传播可能就要数小时
- 梯度方向过于”确定”,不易探索参数空间,可能陷入局部最小值
BGD 的梯度像一位保守的领航员——每一步都稳重精确,但太慢了。
3. 随机梯度下降(Stochastic Gradient Descent, SGD)
3.1 做法
每次只从训练集中随机取 1 条数据 → 计算 loss → 反向传播 → 更新参数 → 再取下一条。
3.2 优点
- 计算极快,一条数据几毫秒就完成一次更新
- 单条数据的随机性很强 → 更新方向不断抖动 → 有机会跳出局部最小值
3.3 缺点
- 训练波动大,loss 曲线剧烈震荡
- 收敛过程不稳定,可能一直在最优点附近打转但就是到不了
SGD 像一位喝了咖啡的探险家——跑得快,到处试探,但脚步踉跄。
4. 小批量梯度下降(Mini-batch Gradient Descent)
4.1 做法
每次从训练集中取**一小批(batch)**数据:
- 这批数据叫一个 batch,大小叫 batch size(如 32、64)
- 用这个 batch 计算平均 loss → 反向传播 → 更新参数
把整个训练集全部过一遍,叫一个 epoch。
4.2 术语关系
一个 epoch = 把训练集中所有 batch 都训练一遍
例如: 10000 条训练数据, batch_size = 256
一个 epoch = ceil(10000 / 256) = 40 个 step
4.3 为什么 Mini-batch 是主流
| BGD | Mini-batch GD | SGD | |
|---|---|---|---|
| 更新频率 | 极低(一个 epoch 一次) | 中等(一个 epoch 多次) | 极高(每个样本一次) |
| 稳定性 | 最稳 | 比较稳 | 最不稳 |
| 速度 | 最慢 | 较快 | 最快(但不见得收敛快) |
| 跳出局部最小值 | 差 | 较好 | 好 |
| 实际使用 | 几乎不用 | 主流 | 几乎不用 |
Mini-batch GD 取了 BGD 的稳定和 SGD 的速度,是深度学习中的默认选择。
5. Batch Size 怎么选
5.1 不必强制选 2 的幂
32、64、128 等是常用的试验起点。实际吞吐取决于张量形状、算子、dtype、硬件和实现;batch 维并不直接等于 CUDA 线程或 warp 数,不能由一个 warp 有 32 个线程推出 batch 必须是 32 的倍数。
5.2 同时考虑吞吐与泛化
更大的 batch 通常降低梯度估计噪声,但不保证训练更快或验证效果更好;每个 epoch 的更新次数也会减少。应一起调整学习率、训练步数和调度,并测量每秒样本数、显存及验证指标。
5.3 实践操作
1. 从一个较常用的 batch size 开始,比如 256
2. 如果显存溢出(Out of Memory)→ 降到 128
3. 如果显存占用不到一半 → 尝试升到 512
4. 比较吞吐与验证结果,选择效果和成本合适的 batch size
5.4 常见推荐值
| 任务类型 | 常用 batch size |
|---|---|
| 小规模数据 / 简单模型 | 32 ~ 128 |
| 中等规模 | 128 ~ 512 |
| 大规模训练(大数据 + 大 GPU) | 512 ~ 4096 |
6. 总结
梯度下降的演进:
BGD(全量数据)
└─ 问题:数据大时太慢
└─ SGD(逐条数据)
└─ 问题:太不稳定
└─ Mini-batch GD(小批量)← 实际中默认使用
Batch Size 选值:
从常用大小起步 → 测吞吐和显存 → 联动学习率与步数 → 按验证结果选择
“SGD”在框架和论文中也常指用小批量估计梯度的优化方法,torch.optim.SGD 并不要求 batch size 为 1。上文速度与稳定性的比较是直觉趋势,实际总训练时间、收敛和逃离局部区域均无普遍保证。