假设你是一位旅行团领队,要带团从山顶出发,穿过浓雾,找到山脚那片最低最平坦的谷地——那里就是“损失最小”的地方。整支队伍怎么走、步子迈多大、遇到小坑要不要冲过去、几百人上千人又该怎么协调……这些都不是靠蛮力,而是靠一套“下山策略”。在深度学习里,这套策略就叫优化器。 市面上有 SGD、Momentum、Adam、AdamW、LAMB 五花八门的名字,它们其实都是帮你下山的代步工具。徒步、骑自行车、自驾巡航、包高铁,各有各的脾气和适用地形。本文用这个“旅行团下山”的故事,带你从小白视角看懂每种优化器做什么、擅长什么、什么时候该换,最终学会在实战中做出靠谱的选择。

岗位关联

学完这份指南,你能在面试和实战中秒答“优化器怎么选”,成为团队里那个能稳住训练曲线、排查训练事故的靠谱工程师。

目录
  1. 可视化演示
  2. 优化器基础——先看懂下山这件事
  3. SGD原理——徒步部队,稳扎稳打
  4. 动量方法——给徒步者装个惯性轮
  5. Adam原理——自驾巡航,省心但别托大
  6. AdamW改进——给自驾车装上清醒导航
  7. LAMB拓展——千人大团,步调一致
  8. 选型指南——看场景选交通工具
  9. 实战注意——出发前检查清单
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

在二维损失曲面上直观对比SGD、Momentum、Adam和AdamW四种优化器的收敛路径与速度,通过按钮切换和滑块调参理解各优化器特性。

本节配有交互动效(进入视口后自动加载,约 3KB)。

SGD随机梯度下降 每次沿负梯度方向更新,步长均匀 收敛慢但稳定,对学习率敏感 θ = θ - η·∇L 适合小数据集和需要精细调参的场景

优化器基础——先看懂下山这件事

你站在山顶往下看,浓雾笼罩,看不到谷底。怎样才能最快到达最低处?最简单的办法是:每走一步,感觉一下脚下哪边更低,就朝哪个方向迈一步。在神经网络训练里,这片“地形”叫损失函数,脚下最陡的方向就是梯度的负方向,而你迈出的步幅叫学习率。

把参数想象成旅行团每个人的位置坐标,损失函数则是一张“海拔图”,海拔越高代表模型错得越离谱。训练的过程,就是不断沿着梯度下降的方向修改参数,让“海拔”越来越低。优化器做的正是“决定朝哪走、走多远”这件事,它是下山策略的总指挥。

梯度下降是这一切的基础规则。每次迭代,我们都沿着负梯度方向更新参数:

有了这张“海拔图”和“梯度指南针”,我们才能理解后面每一种优化器对下山策略的改进。徒步也好、自驾也罢,目标始终是同一个谷底。

θt+1=θt−η∇L(θt)\theta_{t+1} = \theta_t - \eta \nabla L(\theta_t)
公式说的是:新位置等于旧位置,沿着最陡下坡方向走一步,步长由学习率控制。
  1. 当前参数\theta_t 表示第 t 步时模型参数,也就是旅行团当前所在位置。
    θt\theta_t
  2. 梯度方向\nabla L(\theta_t) 是损失函数在当前位置的梯度,指向海拔上升最快的方向,取负号才是下坡。
    ∇L(θt)\nabla L(\theta_t)
  3. 学习率\eta 控制每一步的幅度,它决定你是一小步一小步试探,还是大步流星赶路。
    η\eta
  4. 更新动作整体表示“沿负梯度方向走一步”,这是几乎所有优化器的地基动作。
    θt+1=θt−η∇L(θt)\theta_{t+1} = \theta_t - \eta \nabla L(\theta_t)

SGD原理——徒步部队,稳扎稳打

最朴素的优化器 SGD(随机梯度下降)就像一支徒步部队:全员靠双脚走,每一步都通过观察脚下的一小块地面来决定方向。它不需要任何高科技,却是一切复杂优化器的起点。

纯梯度下降每次要看完整座山的地形图(全量数据)才走一步,太慢了。SGD 的聪明之处在于随机抽一小块区域(一个小批量样本)来估计坡度,虽然估计有噪声、方向会左右摇摆,但大部队方向的平均值是可靠的。这就是为什么它叫“随机”梯度下降。

SGD 的更新规则可以写成:

徒步虽然慢,但每一步都走得踏实。SGD 加上精心调好的学习率,在中小数据集上往往能取得比花哨优化器更好的泛化效果,这也是许多研究团队仍然偏爱它的原因。

gt=1m∑i=1m∇Li(θt)g_t = \frac{1}{m}\sum_{i=1}^{m}\nabla L_i(\theta_t)
θt+1=θt−ηgt\theta_{t+1} = \theta_t - \eta g_t
小批量梯度 g_t 是 m 个样本梯度的平均估计,用它代替全量梯度。
  1. 小批量梯度g_t 是从 m 个样本上算出的平均梯度,相当于只看了脚下这一片地就判断坡度。
    gt=1m∑i=1m∇Li(θt)g_t = \frac{1}{m}\sum_{i=1}^{m}\nabla L_i(\theta_t)
  2. 随机采样m 是批量大小,数据随机抽取,所以每次估计都带一点噪声,反而有助于跳出小坑。
    mm
  3. 参数更新用估计出的梯度方向走一步,和学习率相乘控制步幅。
    θt+1=θt−ηgt\theta_{t+1} = \theta_t - \eta g_t

动量方法——给徒步者装个惯性轮

徒步走山路最累的是什么?是每走一步都要重新发力,方向还容易来回晃。现在给这支队伍每人发一辆自行车,踩起来之后就有了惯性:速度会累积,下坡自动加速,遇到小石块也能借着速度冲过去。这就是动量(Momentum)的思想。

在数学上,动量维护一个“速度变量” v_t,它像一团记忆,把过去所有梯度的方向累积起来,同时乘一个衰减系数 \beta 让旧记忆逐渐淡忘。这样一来,前后方向一致的步伐会被放大,来回震荡的成分会被抵消,下山过程又快又稳。

有了惯性的队伍,不再被局部小坑轻易困住,下坡越来越流畅。这也是为什么“小数据研究推荐 SGD 加 Momentum”——它保留了徒步的稳健,又多了几分效率。

vt=βvt−1+gtv_t = \beta v_{t-1} + g_t
θt+1=θt−ηvt\theta_{t+1} = \theta_t - \eta v_t
速度变量 v_t 是历史梯度的加权累积,β 越大,惯性越强。
  1. 惯性累积v_t 是当前速度,它由上一次速度 v_{t-1} 和当前梯度 g_t 共同决定,像自行车越蹬越快。
    vt=βvt−1+gtv_t = \beta v_{t-1} + g_t
  2. 速度衰减\beta 是动量系数,通常取 0.9,表示每步保留 90% 的旧速度,遗忘 10%。
    β\beta
  3. 参数更新最终沿着速度方向走,而不是沿着单次梯度方向走,从而减少锯齿状震荡。
    θt+1=θt−ηvt\theta_{t+1} = \theta_t - \eta v_t

Adam原理——自驾巡航,省心但别托大

当你不想费心控制每一步时,可以坐上带自动巡航的车:它根据当前路面情况自动调整油门和刹车。Adam 就是这么一款“自动驾驶”优化器:它同时记录梯度的均值(一阶矩,相当于方向盘偏好)和方差(二阶矩,相当于路面颠簸程度),然后为每个参数自动调节学习率。

Adam 之所以流行,是因为它对学习率不那么敏感,很多场景直接套默认参数就能收敛。它的更新由一阶矩 m_t 和二阶矩 v_t 两条流水线组成:

自动驾驶确实省心,但过度自信会让人忘记看路:Adam 在训练末期往往停在“平坦的草地”上,泛化能力不如徒步的 SGD。因此在大模型场景,人们更喜欢给 Adam 加一道保险——这就是下一节的 AdamW。

mt=β1mt−1+(1−β1)gtm_t = \beta_1 m_{t-1} + (1-\beta_1)g_t
vt=β2vt−1+(1−β2)gt2v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2
m^t=mt1−β1t,v^t=vt1−β2t\hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t}
θt+1=θt−ηv^t+ϵm^t\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t}+\epsilon}\hat{m}_t
一阶矩估计方向,二阶矩估计坡度陡缓,两者结合得到每个参数独立的自适应步长。
  1. 一阶矩m_t 是梯度的指数移动平均,相当于记录“整体往哪个方向走”的惯性。
    mt=β1mt−1+(1−β1)gtm_t = \beta_1 m_{t-1} + (1-\beta_1)g_t
  2. 二阶矩v_t 是梯度平方的移动平均,反映梯度波动大小,波动大说明路面颠簸,步幅应减小。
    vt=β2vt−1+(1−β2)gt2v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2
  3. 偏差修正训练初期 m_t、v_t 被初始化为 0 导致估计偏小,除以 1-\beta^t 可以校正。
    m^t=mt1−β1t,v^t=vt1−β2t\hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t}
  4. 自适应更新每个参数的学习率被 \sqrt{\hat{v}_t} 归一化,陡峭方向自动放慢,平缓方向自动加快。
    θt+1=θt−ηv^t+ϵm^t\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t}+\epsilon}\hat{m}_t

AdamW改进——给自驾车装上清醒导航

自驾车开久了容易飘,尤其在一个平坦开阔的缓坡上,油门踩得太大,方向就失控了。于是工程师想到:把“定期保养”从日常驾驶中单独拆出来。AdamW 的核心改进正在于此——将权重衰减从梯度更新中解耦,独立控制,防止模型参数变得过大。

普通 Adam 做权重衰减时,是把衰减项混在梯度里一起处理,相当于“边开车边保养”,两者互相干扰。AdamW 则像导航系统单独规划一条保养路线:梯度更新走一条道,权重衰减走另一条道,互不干扰,最终泛化更稳。

θt+1=θt−ηt(λθt+m^tv^t+ϵ)\theta_{t+1} = \theta_t - \eta_t\left(\lambda\theta_t + \frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}\right)

1. 解耦项:\lambda\theta_t 是权重衰减,每次更新时直接把参数往零方向拉一点,像给参数“减重”。

λθt\lambda\theta_t

2. 自适应项:\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon} 是 Adam 自带的自适应更新方向,与衰减项并列相加。

m^tv^t+ϵ\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}

3. 整体更新:两路信号合并后乘学习率再更新参数,衰减与自适应解耦,训练更稳。

θt+1=θt−ηt(λθt+m^tv^t+ϵ)\theta_{t+1} = \theta_t - \eta_t\left(\lambda\theta_t + \frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}\right)

有了清醒的导航和定期的保养,AdamW 成了大模型训练的事实标准:它保留了 Adam 的省心,又补回了 SGD 的泛化能力。从 BERT 到 GPT,无数大模型都是在 AdamW 的陪伴下完成训练的。

LAMB拓展——千人大团,步调一致

当旅行团规模从几十人变成几千人,再让大家各走各的就会乱套。LAMB(Layer-wise Adaptive Moments Batch)像是包下一列高铁:每一节车厢(每一层网络)按自己的长度和速度前进,但整列火车朝着同一个方向、以同一个节奏前进。

LAMB 专为大 batch 分布式训练设计。它像 Adam 一样维护一阶二阶矩,但额外引入按层缩放:每一层的参数更新幅度,会参照该层参数的模长自动调节。这就像车长根据每节车厢的载重调整牵引力,防止某一层步子太大而另一层跟不上。

θt+1,i=θt,i−ηt⋅∥θt,i∥∥m^t,i∥+ϵ m^t,i\theta_{t+1,i} = \theta_{t,i} - \eta_t \cdot \frac{\left\lVert \theta_{t,i}\right\rVert}{\left\lVert \hat{m}_{t,i}\right\rVert + \epsilon}\, \hat{m}_{t,i}

1. 分层参数:\theta_{t,i} 表示第 i 层的参数,不同层的参数尺度可能天差地别。

θt,i\theta_{t,i}

2. 层模长:\lVert \theta_{t,i}\rVert 是该层参数的模长,代表了这层“车厢”的固有尺度。

∥θt,i∥\lVert \theta_{t,i}\rVert

3. 自适应缩放:用 \frac{\lVert \theta_{t,i}\rVert}{\lVert \hat{m}_{t,i}\rVert + \epsilon} 作为比例因子,让每层步幅与该层尺度匹配。

∥θt,i∥∥m^t,i∥+ϵ\frac{\left\lVert \theta_{t,i}\right\rVert}{\left\lVert \hat{m}_{t,i}\right\rVert + \epsilon}

4. 参数更新:乘以层缩放因子后更新,使得上万规模的 batch 也能稳定大步前进,通信轮次大幅减少。

θt+1,i=θt,i−ηt⋅∥θt,i∥∥m^t,i∥+ϵ m^t,i\theta_{t+1,i} = \theta_{t,i} - \eta_t \cdot \frac{\left\lVert \theta_{t,i}\right\rVert}{\left\lVert \hat{m}_{t,i}\right\rVert + \epsilon}\, \hat{m}_{t,i}

LAMB 让 “千人团” 分布式预训练成为现实:BERT 预训练时间从数天压缩到几十分钟,靠的就是这种按层协调、大步前进的策略。

选型指南——看场景选交通工具

下山的目的地都一样,但团队规模、预算、时间要求不同,选用的交通工具就该不同。优化器选择也是同样的逻辑:没有绝对最好的优化器,只有最适合当前场景的策略。

小数据研究场景:预算有限、地形简单,徒步部队(SGD+Momentum)稳扎稳打,还容易调出好效果。大模型训练场景:参数动辄上亿,AdamW 的自适应能力加上解耦权重衰减,能稳稳压住训练。超大规模分布式场景:几千块显卡并行训练,LAMB 的分层机制让大 batch 也能大步前进。

选型不是追新,而是看清自己的场景和预算。下次别人问你“用哪个优化器”,先反问一句:你的团队有多少人、走什么地形、赶不赶时间?

推荐(s)={SGD+Momentum,s=小数据研究AdamW,s=大模型训练LAMB,s=分布式预训练\text{推荐}(s) = \begin{cases} \text{SGD}+\text{Momentum}, & s=\text{小数据研究} \\ \text{AdamW}, & s=\text{大模型训练} \\ \text{LAMB}, & s=\text{分布式预训练} \end{cases}
这是一个按场景分类的推荐规则:先判断你的场景属于哪一类,再套用对应组合。
  1. 场景变量s 代表当前任务的场景标签,它决定了后续走哪条分支。
    ss
  2. 小数据场景当 s 等于“小数据研究”时,推荐 SGD 加 Momentum,像徒步队一样稳健可控。
    SGD+Momentum,s=小数据研究\text{SGD}+\text{Momentum}, \quad s=\text{小数据研究}
  3. 大模型场景当 s 等于“大模型训练”时,推荐 AdamW,兼顾自适应与泛化。
    AdamW,s=大模型训练\text{AdamW}, \quad s=\text{大模型训练}
  4. 分布场景当 s 等于“分布式预训练”时,推荐 LAMB,让千人大团步调一致。
    LAMB,s=分布式预训练\text{LAMB}, \quad s=\text{分布式预训练}

实战注意——出发前检查清单

选好交通工具只是开始,出发前还得检查轮胎、校准导航。实战中,优化器的使用有一堆“老司机才知道”的细节,处理不好会让模型训不动甚至炸掉。

切换技巧:从 SGD 切到 Adam 时,学习率通常要减小一个量级,因为 Adam 的自适应机制本身会放大步幅。超参调整:Adam 的默认学习率常有 1e-3,但换到 AdamW 后最好把权重衰减设在 0.01 到 0.1 之间再细调。学习率调度:大模型训练几乎必备 warmup 预热加余弦退火,前几步小步试探,再逐步进入状态。

warmup 加 cosine 调度的公式如下:

最后,监控诊断不能省:盯着 loss 曲线看,如果 loss 震荡剧烈就降学习率,如果长时间不动就检查是否卡在局部极小或梯度消失。下山路上,领队要随时看表看天气,训练也是一样。

ηt=ηmin⁡+12(ηmax⁡−ηmin⁡)(1+cos⁡(πtT))\eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max}-\eta_{\min})\left(1+\cos\left(\frac{\pi t}{T}\right)\right)
训练初期学习率从最小值线性爬到最大值,后期按余弦曲线平滑降到最小值。
  1. 当前学习率\eta_t 是第 t 步实际使用的学习率,随训练阶段动态变化。
    ηt\eta_t
  2. 上下界\eta_{\min} 和 \eta_{\max} 是学习率的最小值和最大值,分别对应退火终点和预热峰值。
    ηmin⁡,ηmax⁡\eta_{\min}, \quad \eta_{\max}
  3. 余弦衰减\cos(\pi t / T) 在训练过程中从 1 平滑滑向 -1,让学习率先慢降再快降再慢降。
    cos⁡(πtT)\cos\left(\frac{\pi t}{T}\right)
  4. 整体缩放整体式子在上下界之间做余弦插值,保证学习率曲线平滑连续。
    ηmin⁡+12(ηmax⁡−ηmin⁡)(1+cos⁡(πtT))\eta_{\min} + \frac{1}{2}(\eta_{\max}-\eta_{\min})\left(1+\cos\left(\frac{\pi t}{T}\right)\right)

AI 应用场景

大模型预训练中的 LAMB 与 AdamW 接力

阶段:模型训练与优化

解决的问题:传统 Adam 在大 batch、多卡并行时学习率难以放大,训练效率低。LAMB 通过按层缩放学习率让大规模并行稳定收敛,AdamW 则负责后续微调的泛化质量。

具体案例:在 MLPerf 基准中,团队使用 LAMB 在 1024 块 TPU 上预训练 BERT,将训练时间压到 47 分钟内;之后切换到 AdamW 在下游任务上微调,得到更优的 GLUE 分数。

图像分类基准中的 SGD+Momentum

阶段:模型训练与超参调优

解决的问题:学术界发布新模型时需要一个可信、可复现的基线效果,Adam 虽然省心但泛化略差。SGD+Momentum 配合余弦退火能跑出更高的准确率。

具体案例:ResNet-50 在 ImageNet 上的标准训练配方就是 SGD(动量 0.9,batch 256,学习率 0.1 按 epoch 衰减),这个“徒步配方”至今仍是视觉模型评测的黄金基准。

大 Batch 微调中的优化器切换

阶段:模型微调与部署

解决的问题:团队在大 batch 微调大语言模型时,AdamW 在大 batch 下收敛不稳,直接换 LAMB 又需要重新调参。通过先减小学习率、再逐步切换到 LAMB 的策略,兼顾稳定与效率。

具体案例:某推荐系统团队在 4096 batch 微调 CTR 预估模型,从 AdamW(lr 1e-4)切换到 LAMB(lr 1e-3 预热 1000 步)后,训练时间缩短 60%,离线 AUC 持平。

Python 演示

python44 行
import numpy as np class SimpleOptimizer:    def __init__(self, name, lr=0.1):        self.name = name        self.lr = lr        self.m = 0.0        self.v = 0.0        self.t = 0        self.beta1 = 0.9        self.beta2 = 0.999        self.eps = 1e-8        self.lam = 0.01     def step(self, x, grad):        if self.name == "SGD":            return x - self.lr * grad        if self.name == "Momentum":            self.m = 0.9 * self.m + grad            return x - self.lr * self.m        if self.name in ("Adam", "AdamW"):            self.t += 1            self.m = self.beta1 * self.m + (1 - self.beta1) * grad            self.v = self.beta2 * self.v + (1 - self.beta2) * grad * grad            m_hat = self.m / (1 - self.beta1 ** self.t)            v_hat = self.v / (1 - self.beta2 ** self.t)            step = m_hat / (np.sqrt(v_hat) + self.eps)            if self.name == "AdamW":                step = step + self.lam * x            return x - self.lr * step def loss_and_grad(x):    return x * x, 2 * x def run(name, epochs=30):    x = 1.5    opt = SimpleOptimizer(name, lr=0.1)    for _ in range(epochs):        _, grad = loss_and_grad(x)        x = opt.step(x, grad)    return x for name in ["SGD", "Momentum", "Adam", "AdamW"]:    print(name, "收敛值:", round(run(name), 4))
目的:在简单的抛物线损失函数上对比四种优化器的收敛结果,直观展示不同优化器的收敛轨迹。
  1. self.m = self.beta1 * self.m + (1 - self.beta1) * grad更新一阶动量,记录历史梯度方向。
  2. self.v = self.beta2 * self.v + (1 - self.beta2) * grad * grad更新二阶动量,记录梯度波动幅度。
  3. m_hat = self.m / (1 - self.beta1 ** self.t)对一阶动量做偏差修正,抵消初始化带来的偏差。
  4. v_hat = self.v / (1 - self.beta2 ** self.t)对二阶动量做偏差修正。
  5. step = m_hat / (np.sqrt(v_hat) + self.eps)计算自适应步长,梯度波动大时步长自动变小。
  6. step = step + self.lam * xAdamW 把权重衰减单独加到更新项中,这是它与 Adam 的关键区别。
  7. return x - self.lr * step用学习率缩放步长并更新参数。

常见误区

误区Adam 收敛快、参数不敏感,我以后所有模型都用 Adam,效果肯定比 SGD 好。

正解收敛快不等于泛化好。Adam 容易停在损失面平坦的“宽谷”边缘,而 SGD 更倾向于找到尖锐但泛化强的极小值。就像自驾车虽然开得快,但徒步者反而记得住山路细节。小数据和视觉任务上用 SGD+Momentum 往往能拿到更高准确率。

为何常见:入门时看到 Adam 在 NLP 任务上“一把梭哈”就能用,误以为它是万能最优解,忽略了评测指标是泛化而非训练收敛速度。

误区只要不爆 loss,学习率设大一点,迭代次数少一点,训练时间就短了。

正解学习率过大,参数会在谷底两侧来回弹跳甚至发散;过小则迟迟走不到谷底。最优学习率通常需要在小范围内搜索,且配合 warmup 和 decay 调度。这就像下山时步子太大容易滚下山坡,步子太小太阳落山也到不了营地。

为何常见:因为训练初期 loss 确实快速下降,让人误以为“快就是好”,忽略了后期震荡和发散风险。

误区L2 正则就是在梯度里加一个衰减项,AdamW 的权重衰减跟它没区别。

正解在 SGD 中二者近似等价,但在 Adam 中,L2 正则混入梯度后会被二阶矩归一化,导致不同参数的衰减幅度不一致。AdamW 把权重衰减单独拿出来,绕开自适应归一化,行为更可控。好比“边开车边保养”和“到站统一保养”,结果差别很大。

为何常见:教科书常从 L2 正则推导出权重衰减,很多人只记住了结论,没注意 Adam 的自适应机制会改变这个等价关系。

误区把代码里的 `optim.Adam` 改成 `optim.AdamW` 或 `optim.LAMB` 就完事了,超参不用动。

正解切换优化器必须重调学习率和正则项。从 SGD 换到 Adam 时学习率通常要缩小约 10 倍;从 Adam 换到 LAMB 时需要重新设定 warmup 步数和大 batch 下的缩放。直接硬切很可能 loss 飞升,就像徒步换自驾后还按走路的速度踩油门。

为何常见:框架里优化器都是“一行代码”的事,给人造成它们可以无缝替换的错觉,忽视了各自对超参的敏感度差异。

面试题

Q1. 小数据集研究场景下,最稳妥的优化器组合是?

单选题 · easy

  • A.Adam 配合大学习率
  • B.SGD 加动量项← 正确答案
  • C.LAMB 大并行训练
  • D.AdamW 加权重衰减

答案:B。小数据实验追求可复现与泛化,SGD+Momentum 像徒步队一样稳健且超参直观,是研究场景的黄金组合。Adam 虽省心但泛化略逊,LAMB 更适合大规模场景。

Q2. Momentum 方法中的动量系数通常取多少?

单选题 · easy

  • A.零点一左右
  • B.零点五左右
  • C.零点九左右← 正确答案
  • D.一点五左右

答案:C。动量系数 β 决定了历史速度的保留程度,0.9 意味着保留 90% 历史速度、融入 10% 新梯度,是实践中最常见的取值,相当于自行车惯性保留九成。

Q3. Adam 相比 SGD 的核心优势是什么?

单选题 · mid

  • A.引入速度惯性
  • B.自适应学习率← 正确答案
  • C.梯度裁剪因子
  • D.权重衰减机制

答案:B。Adam 同时维护一阶和二阶动量,为每个参数自动调节学习率,就像自动驾驶根据路况自动调速。速度惯性是 Momentum 的特点,裁剪和衰减都不是 Adam 的核心。

Q4. AdamW 与 Adam 的关键区别是什么?

单选题 · mid

  • A.学习率调节策略
  • B.权重衰减可解耦← 正确答案
  • C.使用二阶动量化
  • D.使用一阶动量化

答案:B。AdamW 将权重衰减从梯度估计中解耦出来,像“保养和开车分开安排”,能避免 Adam 中 L2 正则被二阶矩归一化干扰,从而提升泛化。

Q5. LAMB 优化器的核心机制是什么?

单选题 · mid

  • A.小批量随机梯度
  • B.按层缩放学习率← 正确答案
  • C.全局统一权重
  • D.动量累积速度

答案:B。LAMB 在 Adam 基础上对每一层网络单独计算学习率缩放因子,让千层大模型在大 batch 下也能步调一致,是“每节车厢按载重调牵引力”的思路。

Q6. 为什么 Adam 在大模型预训练中常被 AdamW 取代?

单选题 · hard

  • A.收敛速度更加慢
  • B.泛化差距且遗忘难← 正确答案
  • C.显存占用更加高
  • D.无法用于分布式

答案:B。Adam 自带的自适应机制容易收敛到泛化较差的平坦极小值,且 L2 权重衰减在 Adam 中失效;AdamW 解耦衰减后泛化更稳,因此大模型预训练几乎全面转向 AdamW。

Q7. 从 SGD 切换到 Adam 时,学习率一般如何调整?

单选题 · easy

  • A.保持完全相同
  • B.减小约一个量级← 正确答案
  • C.增大约十倍幅度
  • D.直接设置为零

答案:B。Adam 的自适应步长会放大更新幅度,沿用 SGD 的学习率容易震荡甚至发散,通常应把学习率缩小约 10 倍,相当于自驾时轻踩油门。

Q8. 下列哪些是 Adam 优化器的核心超参数?

多选题 · mid

  • A.一阶动量系数← 正确答案
  • B.二阶动量系数← 正确答案
  • C.学习率衰减策略
  • D.权重衰减项

答案:AB。Adam 的两大核心是 β1(一阶动量系数)和 β2(二阶动量系数),二者控制惯性记忆与波动估计。学习率衰减属调度策略,权重衰减是 AdamW 的增强。

Q9. LAMB 适用于大规模预训练的原因有哪些?

多选题 · hard

  • A.按层自适应缩放← 正确答案
  • B.大批次稳定收敛← 正确答案
  • C.自动降低通信开销
  • D.二阶动量去噪

答案:AB。LAMB 通过按层缩放让大 batch 训练稳定,从而减少迭代轮数、间接降低通信成本,它本身并不直接压缩通信量。二阶动量是 Adam 机制而非 LAMB 独有。

Q10. 关于优化器选型,下列说法正确的是?

多选题 · easy

  • A.SGD 收敛慢泛化好← 正确答案
  • B.Adam 适合小数据
  • C.AdamW 适合大模型← 正确答案
  • D.LAMB 仅用于联邦

答案:AC。SGD 泛化强但收敛慢,适合小数据研究;AdamW 是大模型训练的事实标准;LAMB 专攻大规模分布式预训练而非联邦学习;Adam 虽然省心,但在小数据上泛化往往不如 SGD。