Optimizer
Optimizer
- SGD (基础更新)
- Momentum (加入惯性,解决震荡)
- RMSProp (加入自适应,解决步长问题)
- Adam (惯性 + 自适应,两项全能)
- AdamW (修复正则化 Bug,成为大模型标配)
对于初学者和大多数项目: 建议首选 AdamW。如果发现模型在训练集表现好但测试集差(过拟合),且调参时间充裕,可以尝试切换回 SGD + Momentum 压榨最后一点性能。
基础梯度下降
1. SGD (Stochastic Gradient Descent)
- 演进逻辑:最早是全量梯度下降(BGD),但数据量大时算不动。改为每次只取一个样本(SGD)或一小批样本(Mini-batch SGD)来更新。
- 核心痛点:更新方向震荡剧烈,容易陷入鞍点或局部最优。
- 适用场景:现在几乎不单独使用纯 SGD,通常指 Mini-batch SGD。
引入动量(惯性辅助时期)
为了解决 SGD 震荡和速度慢的问题,物理学中的“动量”概念被引入。
2. SGD with Momentum
- 演进逻辑:模拟小球下山。它不仅看当前的梯度,还累积之前的梯度方向(惯性)。
- 优点:在梯度方向一致的维度加速,在震荡的维度减速,收敛更快。
- 适用场景:计算机视觉 (CV) 领域的标配(如 ResNet, VGG)。
3. NAG (Nesterov Accelerated Gradient)
- 演进逻辑:在动量的基础上增加“预测”功能。先按惯性往前走一步,再看那里的梯度怎么走。
- 适用场景:对收敛稳定性要求极高的精细调优。
自适应学习率(半自动档时期)
这是优化器历史上的重大飞跃。之前的优化器对所有参数使用相同的学习率,而这一阶段开始为每个参数量身定制学习率。
4. Adagrad
- 演进逻辑:给经常更新的参数较小的学习率,给罕见更新的参数较大的学习率。
- 核心痛点:后期分母累计过大,导致学习率消失(提前停止训练)。
- 适用场景:处理稀疏数据(如推荐系统中的 ID 类特征)。
5. RMSProp / Adadelta
- 演进逻辑:为了解决 Adagrad 学习率消失的问题,改用“指数移动平均”只计算最近一段时间的梯度,不累加全局梯度。
- 适用场景:RNN(循环神经网络) 训练。
FTRL (Follow-the-Regularized-Leader)
在推荐系统(尤其是 CTR 预估)领域,数据具有高维、极度稀疏的特点(特征维度动辄上亿,但每个样本非零特征极少)。在这种场景下,普通的 SGD 或 Adam 往往难以满足在线学习(Online Learning)**和**特征稀疏性的要求。
FTRL 是由 Google 开发的一种优化算法,它并不是一种全新的深度学习架构,而是一种在线优化算法。它结合了 L1 正则化的稀疏性和 L2 正则化的稳定性。
为什么 CTR 领域需要它?
- 稀疏性(Sparsity):在在线广告系统中,显存/内存是极其宝贵的。如果优化器能让不重要的特征权重直接变为 0(即产生稀疏解),就可以省去海量的存储空间。
- 在线预测:模型需要实时处理流式数据,FTRL 的设计使其非常适合在分布式环境下进行增量更新。
FTRL 的核心公式逻辑
FTRL 的更新规则看起来比 SGD 复杂,因为它不是简单地在当前权重上加梯度,而是维护两个中间变量:
- (累积梯度):记录历史梯度的累积。
- (梯度平方和):类似 Adagrad,为每个特征自适应调整步长。
第四阶段:集大成者(全自动档时期)
6. Adam (Adaptive Moment Estimation)
- 演进逻辑:Momentum + RMSProp 的结合体。它既保留了动量的惯性(一阶矩),又保留了自适应学习率(二阶矩)。
- 地位:深度学习中最著名的“万金油”,目前应用最广的优化器。
- 核心痛点: 正则化在 Adam 下会失效;在某些任务上泛化能力不如 SGD。
- 适用场景:快速原型开发、复杂的深度神经网络。
7. AdamW (Adam with Weight Decay)
- 演进逻辑:修复了 Adam 中权重衰减(Weight Decay)与梯度更新耦合的问题。
- 适用场景:Transformer、BERT、GPT 等大语言模型 (LLM) 的绝对标准。
8. 其他前沿优化器 (Lion, Lookahead, RAdam)
- Lion (Google 2023):通过符号函数(Sign)只保留方向,计算更省内存,速度更快。
- Lookahead:两个优化器互相追逐(快权重与慢权重),防止陷入局部最优。
总结与选择指南
| 优化器 | 核心优势 | 缺点 | 推荐适用场景 |
|---|---|---|---|
| SGD+Momentum | 泛化性能最好,模型最稳 | 调参极难(学习率敏感),收敛慢 | 计算机视觉 (CV)、成熟算法微调 |
| Adagrad | 适合稀疏特征 | 后期训练不动 | 推荐系统、点击率预测 (CTR) |
| RMSProp | 适合非平稳目标 | 仍需手动设置全局学习率 | RNN、强化学习 |
| Adam | 收敛极快,几乎不用调参 | 泛化能力略差,权重衰减有问题 | 通用任务、快速实验 |
| AdamW | 解决了 Adam 的泛化问题 | 计算量比 SGD 略大 | NLP、Transformer、大模型训练 |
SGD (Stochastic Gradient Descent)
SGD 是最基础、最经典的优化算法。
原理:每次迭代只使用一个样本(或一小批样本/Mini-batch)来计算梯度并更新参数。
数学表达:
其中 是学习率, 是梯度。
改进版(带动量 Momentum):为了解决训练时的震荡问题,通常会引入“动量”,模拟物体运动的惯性,使更新方向更平滑。
优点:
- 计算简单,内存占用极低。
- 泛化能力强:研究表明,SGD 往往能找到更“平滑”的局部最小值,使得模型在测试集上的表现通常优于 Adam。
缺点:
- 收敛速度慢。
- 容易陷入鞍点(Saddle points)或在沟壑中震荡。
- 学习率(Learning Rate)非常难调。
Adam (Adaptive Moment Estimation)
自适应矩估计
Adam 是目前工业界应用最广的优化器之一,它结合了 Momentum(动量) 和 RMSProp(自适应频率) 的优点。
- 核心思想:
- 一阶动量(Mean):记录梯度的平均值(像 SGD Momentum 一样平滑路径)。
- 二阶动量(Uncentered Variance):记录梯度平方的平均值(用来衡量梯度的稀疏性或波动程度)。
- 特点:
- 自适应学习率:它会为每个参数动态调整学习率。经常更新的参数,步长会变小;不常更新的参数,步长会变大。
- 优点:
- 收敛极快,对超参数(如初始学习率)不太敏感。
- 适合处理大规模数据和参数,以及处理稀疏梯度。
- 缺点:
- 可能无法收敛到全局最优解。
- L2 正则化失效:在 Adam 中使用传统的 正则化效果很差(这直接引出了 AdamW)。
AdamW (Adam with Weight Decay)
权重衰减优化版
AdamW 是目前训练大语言模型(如 GPT、BERT)的标准配置。
为什么需要它?
在 Adam 中,如果你加入 正则化,正则项会和梯度一起被代入“一阶/二阶矩”的计算中。这导致正则化的效果被“自适应学习率”抵消了,模型容易过拟合。
核心改进:
AdamW 将**权重衰减(Weight Decay)**从梯度更新中分离出来,直接作用在权重上,而不是混合在梯度中。
数学表达对比:
- Adam:
- AdamW:
优点:
- 保留了 Adam 收敛快的特性。
- 显著提升了泛化性能,使得训练出的模型在测试集上更稳健。
