① 步子太小
损失下降极慢,训练需要几天甚至几周。在陡峭方向上“蠕动”,浪费大量计算。
上一页我们知道了梯度——每个参数该往哪个方向调。但还有一个关键问题没回答:每次调多少?步子太小,训练慢得让人绝望;步子太大,损失会震荡甚至发散。优化器就是负责回答这个问题的组件。这一页会把 SGD、Momentum、Adam、AdamW 四种优化器放在同一个损失曲面上赛跑,让你亲眼看到它们的区别。
反向传播算出梯度后,我们只知道“增大这个参数会让损失变大还是变小”。但光有方向还不够——你需要决定沿着这个方向走多远。这个“走多远”就是学习率,而优化器就是一套决定“如何利用梯度来更新参数”的规则。
损失下降极慢,训练需要几天甚至几周。在陡峭方向上“蠕动”,浪费大量计算。
在陡峭方向上反复横跳,损失震荡不降,甚至越来越大导致发散(NaN)。
真实损失曲面往往像狭长的山谷:一个方向很陡,另一个方向很平。固定学习率很难同时兼顾。
下面是一个二次损失曲面,形状像一个被压扁并旋转过的碗。四个优化器从同一个起点出发,用相同的学习率,看谁先到达谷底。你可以调整学习率和步数,也可以点击图例来隐藏/显示某条轨迹。
纵轴是对数尺度的损失。对数尺度让早期的快速下降和后期的小幅收敛都能看清。
下面把每种优化器的核心思想、优缺点和适用场景讲清楚。你可以对照上面的实验,理解它们为什么表现不同。
核心思想: 沿着梯度的反方向,走固定的一步。
优点: 实现极其简单,内存占用最小,在凸问题上理论保证好。
缺点: 对学习率非常敏感;在狭长山谷中容易震荡;所有参数共享同一个学习率,无法适应不同方向。
适用: 小模型、凸优化、教学演示、需要极低内存的场景。
核心思想: 维护一个“速度”变量,累积历史梯度。方向一致的梯度会加速,方向相反的会被抵消。
优点: 在狭长山谷中能加速沿平坦方向的移动,抑制陡峭方向的震荡。收敛更快更稳。
缺点: 引入额外的速度变量;β 需要调参;仍然对所有参数用同一个学习率。
适用: 计算机视觉(ResNet 等)、需要平滑收敛的卷积网络。
核心思想: 同时维护梯度的一阶矩(均值)和二阶矩(方差),用二阶矩对学习率做归一化。梯度大的参数步子自动变小,梯度小的参数步子自动变大。
优点: 对学习率不敏感,默认参数通常就能工作;收敛快;适合稀疏梯度和非平稳目标。
缺点: 内存占用大(每个参数要存 m 和 v);在某些任务上泛化不如 SGD+Momentum;L2 正则化与自适应学习率耦合,导致权重衰减效果不理想。
适用: NLP、Transformer、GAN、强化学习——几乎所有现代深度学习任务。
核心思想: 和 Adam 几乎一样,但把权重衰减从梯度更新中解耦出来,直接作用于参数本身。
优点: 权重衰减效果更正确、更可控;在大模型训练中泛化更好;是目前 LLM 训练的事实标准。
缺点: 多了一个超参数 λ;仍然需要存 m 和 v,内存开销与 Adam 相同。
适用: 大语言模型(GPT、LLaMA、Qwen)、Vision Transformer、扩散模型。
| 优化器 | 核心机制 | 额外内存 | 对学习率敏感度 | 典型场景 |
|---|---|---|---|---|
| SGD | 沿梯度反方向走固定步长 | 0 | 非常高 | 小模型、凸优化、教学 |
| Momentum | 累积历史梯度形成惯性 | 1×参数 | 高 | CNN、ResNet、目标检测 |
| Adam | 一阶矩 + 二阶矩自适应归一化 | 2×参数 | 低 | NLP、Transformer、GAN |
| AdamW | Adam + 解耦权重衰减 | 2×参数 | 低 | LLM、ViT、扩散模型 |
下面用六张卡片,把优化器相关的每一个概念完整讲清楚。你可以按顺序读,也可以挑自己最关心的部分看。
优化器(Optimizer)是深度学习训练中根据梯度更新模型参数的算法。它决定了如何利用反向传播算出的梯度,以及每次更新的步长和方向。
SGD(随机梯度下降)是最基础的优化器,沿梯度反方向更新。Momentum引入速度变量累积历史梯度。Adam同时维护梯度的一阶矩和二阶矩,实现每个参数的自适应学习率。AdamW在 Adam 基础上将权重衰减解耦,使正则化效果更正确。
此外还有 RMSProp、Adagrad、LAMB、Lion 等变体,但 AdamW 是目前大模型训练最常用的默认选择。
想象你在下山,但只有一块模糊的地图。梯度告诉你“哪边是下坡”,优化器则决定你“迈多大步子”。
SGD是老老实实每一步都朝着最陡的下坡方向走固定距离。路好走时没问题,但遇到狭长山谷就会在两边来回撞。
Momentum像给你装了一个惯性轮:一直朝同一个方向走会越来越快,来回震荡的力会被抵消,走得更顺。
Adam像给你配了一个智能导航:它会记住每个方向过去坡度有多大,陡的方向自动迈小步,平的方向自动迈大步。你不用太操心学习率设置。
AdamW在 Adam 基础上加了一个“体重控制”机制:每次更新时同时把参数往零的方向拉一点,防止参数变得过大,提升泛化能力。
它解决了“如何根据梯度高效、稳定地更新参数”这个问题。
优化器是训练效率和最终模型质量的关键决定因素之一。同样的模型结构、同样的数据,换一个优化器,收敛速度和最终效果可能天差地别。
在 LLM 时代,AdamW 几乎是所有大模型预训练和微调的默认优化器。GPT、LLaMA、Qwen、DeepSeek 等模型的训练都依赖 AdamW 的稳定性和自适应能力。
优化器的选择还直接影响:
固定步长在狭长山谷中容易震荡。学习率稍微大一点就发散,小一点就慢如蜗牛。
每个参数有自己的步长,对学习率不敏感,收敛快。代价是每个参数要多存两个状态变量。
解耦权重衰减让正则化更正确、泛化更好。GPT、LLaMA、Qwen 等几乎都用它。