线性模型中批量、随机和小批量梯度下降如何选择?
简化版
全批量梯度精确但每步扫描全部数据,SGD 每步便宜但噪声大,小批量利用向量化并以可控噪声加速,是大规模训练的常见选择。
回答时应把“梯度估计方差与计算吞吐折中”讲清,再说明如何验证和落地;关键边界是:batch 越大不一定越快达到同等泛化;在线数据有时间相关性时不能无脑随机打乱。
详细版
全批量梯度每步精确却必须扫描全部数据,单样本 SGD 更新频繁但方差大,Mini-batch 在硬件吞吐和梯度噪声间折中。比较方法不能只看迭代次数,应同时画 Loss 对更新步数和墙钟时间。
特征尺度、学习率和 Batch Size 要联合调整;Loss 高频震荡先排查尺度与步长。海量稀疏数据可用 SGD/FTRL,小型凸问题可用闭式解或 L-BFGS;流式数据还要保留时间顺序和优化器状态。
完整版教学
一、问题本质与使用动机
三种方法的差别在于每次用多少样本估计全梯度,由此改变单步成本、估计方差、更新频率和硬件利用率。
mini-batch 梯度是全梯度的无偏估计,方差随 batch 增大通常下降。每步更准不代表单位时间更优,关键是硬件吞吐与达到目标误差的总成本。
小数据凸问题可用闭式解、LBFGS 或全批量;海量稀疏数据用 SGD/FTRL。batch 与学习率要联合调整。
二、机制与数学表达
对一个大小为 |B| 的随机批次,平均梯度与参数更新为:
g_B=(1/|B|)Σ_i∈B ∇L_i; β←β-ηg_B
增大 batch 通常降低单步梯度噪声,但不保证更快达到同等验证质量。
三、带数字的推演
100 万样本、batch=1000 且保留所有样本时,一个 epoch 有 1000 次更新;全批量只有 1 次,单样本 SGD 则有 100 万次。三者每轮读取的样本量接近,优化器更新次数却相差很大。
比较时要同时画 loss 对更新步数、已处理样本数和墙钟时间的曲线,并记录梯度范数。若 loss 高频震荡,应先检查学习率、特征尺度、样本顺序和异常批次,而不是直接断言 batch 太小。
四、从数据到上线的执行流程
工程调参可沿下面的链路展开:
缩放特征 → 选 Batch/学习率 → 同看步数与时间 → 验证早停 → 保存完整状态
先按内存和硬件吞吐选择候选 batch,再分别调学习率和训练步数;对可交换样本进行打乱,同时监控梯度范数与验证曲线。
在线训练还需记录样本游标、尾批策略、随机状态、优化器和学习率调度状态。中断恢复若只加载模型参数,后续轨迹不会与未中断训练一致。
五、方案对比与选择边界
| 方法 | 每步成本 | 梯度方差 |
|---|---|---|
| Batch GD | 扫描全量 | 最低 |
| SGD | 单样本 | 最高 |
| Mini-batch | 向量化小批 | 可控折中 |
不存在普遍更先进的一种:数据规模、稀疏性、时序约束和目标硬件共同决定选择。
六、收敛与实现边界
mini-batch 梯度在均匀随机采样且样本独立等条件下才是全梯度的无偏估计。时间序列、按用户聚簇或难例采样会改变这一性质,需要分组采样、重要性权重或按时间评估。稀疏线性模型还要避免把输入意外 densify;此时单步 FLOPs、内存带宽与优化器状态往往比理论迭代数更重要。
固定 epoch 比较不同 batch 并不公平,因为参数更新次数随 batch 改变。应统一样本访问量或墙钟预算,分别调学习率和调度,再报告达到目标验证误差的时间。全批量在凸问题上可配 L-BFGS、共轭梯度等二阶/准二阶方法;SGD/FTRL 更适合海量流式或高维稀疏场景。
断点恢复要保存参数、优化器、调度器、随机状态与数据游标;只恢复系数不能复现后续训练轨迹。
七、常见误区与追问
- 误区:全批量梯度精确,所以一定最快收敛。 单步准确不等于墙钟时间最短,每步扫描全量可能非常昂贵。
- 误区:batch 越大,梯度方差就按
1/B永远下降。 样本相关性和有限总体会改变缩放关系,超过临界 batch 后收益也会饱和。 - 追问:SGD 为何要打乱数据? 它减少顺序相关导致的系统偏差;时间因果任务则不能破坏必要顺序。
- 追问:batch 改大后学习率如何调? 线性或平方根缩放只能作起点,需结合 warmup、总更新数和验证集重调。
- 追问:如何比较三种方法? 同时报训练损失对 step、样本数和墙钟时间,并在同一验证协议下比较最终泛化。
- 追问:什么时候不该用梯度下降? 低维小数据线性回归可用稳定线性代数求解,不能只因模型叫“机器学习”就强行迭代。
八、加强记忆
Batch 越大,单步梯度越稳但步数越少、扫描越贵;真正指标是达到同等验证质量的墙钟时间。先缩放特征,再联调 Batch 与学习率,中断恢复要保存优化器和数据游标。