Page 32 · SimLabs LLM Visual

SGD / AdamW:模型如何决定调整的步子

上一页我们知道了梯度——每个参数该往哪个方向调。但还有一个关键问题没回答:每次调多少?步子太小,训练慢得让人绝望;步子太大,损失会震荡甚至发散。优化器就是负责回答这个问题的组件。这一页会把 SGD、Momentum、Adam、AdamW 四种优化器放在同一个损失曲面上赛跑,让你亲眼看到它们的区别。

看懂 SGD 的震荡 理解 Momentum 的惯性 掌握 Adam 的自适应 明白 AdamW 的解耦

梯度只告诉你方向,不告诉你步子

反向传播算出梯度后,我们只知道“增大这个参数会让损失变大还是变小”。但光有方向还不够——你需要决定沿着这个方向走多远。这个“走多远”就是学习率,而优化器就是一套决定“如何利用梯度来更新参数”的规则。

梯度 g → 优化器 → 参数更新 Δw → w ← w + Δw

① 步子太小

损失下降极慢,训练需要几天甚至几周。在陡峭方向上“蠕动”,浪费大量计算。

② 步子太大

在陡峭方向上反复横跳,损失震荡不降,甚至越来越大导致发散(NaN)。

③ 不同方向差异大

真实损失曲面往往像狭长的山谷:一个方向很陡,另一个方向很平。固定学习率很难同时兼顾。

先抓住一句话: 优化器的核心任务,是在“走得太慢”和“走得太猛”之间找到平衡。不同的优化器用不同的策略来应对这个问题,而 AdamW 因为它的稳定性和自适应能力,成为今天大模型训练的事实标准。

实验台:四种优化器同场竞技

下面是一个二次损失曲面,形状像一个被压扁并旋转过的碗。四个优化器从同一个起点出发,用相同的学习率,看谁先到达谷底。你可以调整学习率和步数,也可以点击图例来隐藏/显示某条轨迹。

起点损失
—
最优优化器(当前步)
—

控实验参数

0.10
30
30
// SGD:最简单的规则
w ← w − η · g

// Momentum:用惯性平滑方向
v ← β · v + g
w ← w − η · v

// Adam:每个参数自适应步长
m ← β₁·m + (1−β₁)·g
v ← β₂·v + (1−β₂)·g²
w ← w − η · m̂ / (√v̂ + ε)

// AdamW:解耦权重衰减
w ← w − η · (m̂/(√v̂+ε) + λ·w)
观察提示: 把学习率调到 0.18 以上,SGD 会在陡峭方向上剧烈震荡,而 Adam/AdamW 依然稳定。这就是自适应学习率的价值。

4损失曲线:谁下降得最快最稳

纵轴是对数尺度的损失。对数尺度让早期的快速下降和后期的小幅收敛都能看清。

训练步数 → —

四种优化器,四种思路

下面把每种优化器的核心思想、优缺点和适用场景讲清楚。你可以对照上面的实验,理解它们为什么表现不同。

🔴 SGD:最简单的规则

核心思想: 沿着梯度的反方向,走固定的一步。

w ← w − η · g

优点: 实现极其简单,内存占用最小,在凸问题上理论保证好。

缺点: 对学习率非常敏感;在狭长山谷中容易震荡;所有参数共享同一个学习率,无法适应不同方向。

适用: 小模型、凸优化、教学演示、需要极低内存的场景。

🟠 Momentum:给梯度加惯性

核心思想: 维护一个“速度”变量,累积历史梯度。方向一致的梯度会加速,方向相反的会被抵消。

v ← β · v + g
w ← w − η · v

优点: 在狭长山谷中能加速沿平坦方向的移动,抑制陡峭方向的震荡。收敛更快更稳。

缺点: 引入额外的速度变量;β 需要调参;仍然对所有参数用同一个学习率。

适用: 计算机视觉(ResNet 等)、需要平滑收敛的卷积网络。

🔵 Adam:每个参数自己的步长

核心思想: 同时维护梯度的一阶矩(均值)和二阶矩(方差),用二阶矩对学习率做归一化。梯度大的参数步子自动变小,梯度小的参数步子自动变大。

m ← β₁·m + (1−β₁)·g
v ← β₂·v + (1−β₂)·g²
m̂ = m/(1−β₁ᵗ) v̂ = v/(1−β₂ᵗ)
w ← w − η · m̂ / (√v̂ + ε)

优点: 对学习率不敏感,默认参数通常就能工作;收敛快;适合稀疏梯度和非平稳目标。

缺点: 内存占用大(每个参数要存 m 和 v);在某些任务上泛化不如 SGD+Momentum;L2 正则化与自适应学习率耦合,导致权重衰减效果不理想。

适用: NLP、Transformer、GAN、强化学习——几乎所有现代深度学习任务。

🟢 AdamW:解耦权重衰减

核心思想: 和 Adam 几乎一样,但把权重衰减从梯度更新中解耦出来,直接作用于参数本身。

w ← w − η · (m̂/(√v̂+ε) + λ·w)

优点: 权重衰减效果更正确、更可控;在大模型训练中泛化更好;是目前 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、扩散模型
为什么大模型用 AdamW 而不是 Adam: 在 Adam 中,权重衰减被加进梯度里,会被自适应学习率“缩放”,导致大梯度的参数衰减少、小梯度的参数衰减多——这不符合正则化的本意。AdamW 把权重衰减独立出来,直接乘在参数上,效果更可控,泛化更好。这个改动虽然小,但在大模型训练中影响显著。

知识点完整总结

下面用六张卡片,把优化器相关的每一个概念完整讲清楚。你可以按顺序读,也可以挑自己最关心的部分看。

📖 标准介绍

优化器(Optimizer)是深度学习训练中根据梯度更新模型参数的算法。它决定了如何利用反向传播算出的梯度,以及每次更新的步长和方向。

SGD(随机梯度下降)是最基础的优化器,沿梯度反方向更新。Momentum引入速度变量累积历史梯度。Adam同时维护梯度的一阶矩和二阶矩,实现每个参数的自适应学习率。AdamW在 Adam 基础上将权重衰减解耦,使正则化效果更正确。

此外还有 RMSProp、Adagrad、LAMB、Lion 等变体,但 AdamW 是目前大模型训练最常用的默认选择。

💡 通俗介绍

想象你在下山,但只有一块模糊的地图。梯度告诉你“哪边是下坡”,优化器则决定你“迈多大步子”。

SGD是老老实实每一步都朝着最陡的下坡方向走固定距离。路好走时没问题,但遇到狭长山谷就会在两边来回撞。

Momentum像给你装了一个惯性轮:一直朝同一个方向走会越来越快,来回震荡的力会被抵消,走得更顺。

Adam像给你配了一个智能导航:它会记住每个方向过去坡度有多大,陡的方向自动迈小步,平的方向自动迈大步。你不用太操心学习率设置。

AdamW在 Adam 基础上加了一个“体重控制”机制:每次更新时同时把参数往零的方向拉一点,防止参数变得过大,提升泛化能力。

🔧 解决了什么问题

它解决了“如何根据梯度高效、稳定地更新参数”这个问题。

  • 学习率难调:SGD 对学习率极其敏感,太大发散、太小太慢。Adam 系列通过自适应归一化大幅降低调参难度。
  • 不同方向尺度差异大:损失曲面往往是狭长山谷,固定学习率无法同时适应陡峭和平坦方向。自适应方法为每个参数单独调整步长。
  • 震荡问题:Momentum 通过累积历史梯度抑制震荡,加速收敛。
  • 正则化与自适应耦合:AdamW 解耦权重衰减,让正则化效果更正确、更可控。
  • 稀疏梯度:Adam 对稀疏梯度有天然优势,适合 NLP 等任务。

⭐ 为什么重要

优化器是训练效率和最终模型质量的关键决定因素之一。同样的模型结构、同样的数据,换一个优化器,收敛速度和最终效果可能天差地别。

在 LLM 时代,AdamW 几乎是所有大模型预训练和微调的默认优化器。GPT、LLaMA、Qwen、DeepSeek 等模型的训练都依赖 AdamW 的稳定性和自适应能力。

优化器的选择还直接影响:

  • 需要多少计算资源才能收敛;
  • 最终模型的泛化能力和鲁棒性;
  • 是否需要复杂的超参数搜索;
  • 训练过程是否稳定(会不会出现 loss spike)。

🚀 应用场景

  • 大语言模型预训练:AdamW 是事实标准,配合 warmup + cosine 学习率调度。
  • LLM 微调:LoRA、QLoRA、全参数微调,通常也用 AdamW。
  • 计算机视觉:CNN 常用 SGD+Momentum;ViT 常用 AdamW。
  • 生成模型:GAN 常用 Adam;扩散模型常用 AdamW。
  • 强化学习:策略梯度方法常用 Adam 或 RMSProp。
  • 推荐系统:大规模稀疏特征常用 Adagrad 或 Adam。
  • 科学计算:物理模拟、分子动力学中常用 L-BFGS 等二阶方法。

⚠️ 缺陷与局限

  • 内存开销:Adam/AdamW 每个参数需要额外存一阶矩 m 和二阶矩 v,内存是参数量的 3 倍。大模型训练需要 ZeRO、FSDP 等分布式技术来分摊。
  • 泛化差距:在某些任务上,精调后的 SGD+Momentum 泛化能力优于 Adam。Adam 容易收敛到尖锐的极小值,影响泛化。
  • 超参数敏感:β₁、β₂、ε、λ 等超参数需要调优。虽然默认值通常可用,但最优值依赖任务。
  • 学习率仍需调度:即使 Adam 对学习率不敏感,warmup 和 decay 调度仍然重要,尤其在大模型训练中。
  • 权重衰减实现差异:不同框架对 weight decay 的实现不同,容易踩坑。AdamW 解耦后更清晰,但仍需注意与学习率的相对尺度。
  • 不适合所有问题:凸优化、小规模问题可能更适合 L-BFGS 或闭式解。强化学习中 Adam 有时不如 RMSProp 稳定。
一句话理解优化器: 梯度告诉你“该往哪走”,优化器决定“走多远、怎么走”。从 SGD 的直来直去,到 Momentum 的惯性滑行,再到 Adam 的自适应步长,最后到 AdamW 的解耦正则化——每一次改进都在回答同一个问题:怎样在复杂地形中既快又稳地走到谷底。

学完这一页,最好记住三件事

SGD 简单但挑学习率

固定步长在狭长山谷中容易震荡。学习率稍微大一点就发散,小一点就慢如蜗牛。

Adam 自适应但耗内存

每个参数有自己的步长,对学习率不敏感,收敛快。代价是每个参数要多存两个状态变量。

AdamW 是大模型标配

解耦权重衰减让正则化更正确、泛化更好。GPT、LLaMA、Qwen 等几乎都用它。