← 返回笔记列表
深度学习 第 10 / 49 篇

深度学习:梯度下降算法的改进 — BGD、SGD、Mini-batch GD

查看“深度学习”专题目录(10/49)
本文目录 19 个小节

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 是主流

BGDMini-batch GDSGD
更新频率极低(一个 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。上文速度与稳定性的比较是直觉趋势,实际总训练时间、收敛和逃离局部区域均无普遍保证。

继续学习本专题