梯度下降变体:SGD/Adam/RMSProp
模型靠梯度下降最小化损失。最朴素的批量梯度下降每次用全量数据算梯度,准确但慢;于是有了各种用更小批量、带动量、自适应学习率的变体。
基础:SGD 与 Mini-batch
随机梯度下降(SGD)每次用一个小批量估计梯度并更新,速度快、有噪声但有助于逃离尖锐极小点。Mini-batch 是对内存与稳定性的折中,是深度学习的默认训练方式。
Momentum 与 RMSProp
Momentum 把历史梯度做指数滑动平均,沿一致方向加速、抑制震荡。RMSProp 则对每维梯度做平方的指数平均,用其倒数缩放学习率,让不同参数有各自的有效步长,适合非平稳目标。
Adam:动量加自适应
Adam 同时结合了 Momentum(一阶矩)与 RMSProp(二阶矩)的思想,对梯度做偏差校正后用自适应步长更新。它收敛快、对超参较鲁棒,是很多任务的默认选择。
import torch
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3, betas=(0.9, 0.999))
for x, y in loader:
optimizer.zero_grad()
loss = criterion(model(x), y)
loss.backward()
optimizer.step()
怎么选
数据稀疏或参数尺度差异大时,自适应方法(Adam/RMSProp)通常更稳。若追求最终泛化与理论清晰,调好的 SGD+Momentum 在很多视觉任务上仍具竞争力。学习率与 batch size 往往比选哪个优化器更关键。
小结
SGD 简单通用,Momentum 加速收敛,RMSProp 与 Adam 引入自适应步长使训练更稳更快。落地时优先 Adam 起步,再用学习率调度与 batch size 调优;追求极致泛化可回到 SGD。
参考与延伸阅读
- 原始 Adam 论文(Kingma 与 Ba, 2015, ICLR)。已核验。https://arxiv.org/abs/1412.6980
- 原始 RMSProp 与优化课程见 Hinton 的 Coursera 讲座笔记。待核实。https://www.cs.toronto.edu/~hinton/coursera_lectures.html
- PyTorch 优化器文档汇总各算法参数。已核验。https://pytorch.org/docs/stable/optim.html
本文累计阅读 — 次