想象你管理一座菜园,模型里的参数就是园中的植物,损失函数是植物对阳光、水分的需求,而“过拟合”则是藤蔓疯长:叶片记住每一粒灰尘,却长不出健康的果实。园丁 Adam 很会灌溉,他能根据最近的风向和土壤湿度灵活浇水,因此在很多地形上长势很快。但他有一个坏习惯:总把剪刀绑在洒水器上。水大时修剪被冲淡,水小时修剪反而格外用力,结果每棵植物被剪得忽轻忽重。AdamW 是他的升级版:浇水归浇水,修剪归修剪。每次按固定比例修剪枝条,不再受天气和土壤湿度影响。于是花园既长得好,又不至于杂乱无章。这篇文章带你走进园丁的工具箱,看懂权重衰减、L2 正则化,以及 AdamW 为什么能让深度学习模型泛化得更好。

岗位关联

对 AI 从业者来说,理解 Adam 与 AdamW 的差异能直接影响模型调优效率:选对优化器与权重衰减方式,往往比盲目加大数据或调学习率更省力、更可复现。

目录
  1. 可视化演示
  2. 权重衰减原理
  3. L2正则化本质
  4. Adam动态调节
  5. Adam的L2缺陷
  6. AdamW解耦设计
  7. 泛化性能提升
  8. 配置调优要点
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示编码器将输入序列压缩为上下文向量,解码器据此逐步生成多步预测输出的完整流程。

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

编码阶段 编码器逐时间步读取输入序列,持续更新隐藏状态 最终隐藏状态汇成上下文向量 c,编码全部输入信息 h_t = f(h_{t-1}, x_t) 上下文向量 c 是输入序列的压缩表示

权重衰减原理

菜园里的植物总会疯长,最简单的园艺智慧是:每天浇水后,拿剪刀把每根枝条都轻轻剪掉相同比例。这样做的结果不是让植物不长,而是让它们避免无限扩张。神经网络里的“枝条”就是参数,这个动作就是权重衰减。它非常朴素:每次更新完梯度后,不需要知道梯度大不大、方向怪不怪,只要按同一比例把参数推向零即可。

数学上,若当前参数为 \(\theta_t\),学习率为 \(\eta\),衰减系数为 \(\lambda\),那么单独看这一步修剪操作,参数的更新可以写成:

正因为衰减是“按比例”的,大权重会被更坚决地压住,小权重则只是轻轻收拢。于是模型不会把过多能量浪费在少数极端参数上,也不容易去死记硬背训练样本中的噪声。可以说,权重衰减是正则化家族里最像“日常修剪”的手段。

θt+1=θt−ηλθt\theta_{t+1} = \theta_t - \eta\lambda\theta_t
如果把 \(\theta_t - \eta\lambda\theta_t\) 合并,就等于 \((1-\eta\lambda)\theta_t\),也就是给当前参数乘一个略小于 1 的系数。系数越小,衰减越强。
  1. 当前参数 \(\theta_t\)这是某条“枝条”此刻的粗细,可能是正数也可能是负数,代表某一权重。
    θt\theta_t
  2. 学习率 \(\eta\)优化器每次前进的步子大小,也用于控制衰减的最终力度。
    η\eta
  3. 衰减系数 \(\lambda\)决定每步剪掉多少比例,是我们要调的核心旋钮。
    λ\lambda
  4. 衰减量 \(\eta\lambda\theta_t\)扣减量与参数本身成正比,参数越大,绝对剪掉越多。
    ηλθt\eta\lambda\theta_t
  5. 等价收缩形式合并后变为 \((1-\eta\lambda)\theta_t\),清楚表达“等比缩小”。
    (1−ηλ)θt(1-\eta\lambda)\theta_t

L2正则化本质

除了直接剪枝,还有一个更“间接”的思路:给花园收税——哪根枝条长得越长,哪根就要付出更多养分。这个“枝条税”在数学上就是 L2 正则化。它不直接乘一个小于 1 的系数,而是往损失函数里加入一项与参数平方成正比的惩罚。枝条越长,平方越大,惩罚越重,于是植物会主动克制自己的生长。

具体来说,原来的数据损失 \(L_{\text{data}}\) 会变成:

很多人因此把 L2 正则化和权重衰减当成同一个东西。这个印象在标准 SGD 下基本正确,但一旦进入 Adam 这样的自适应优化器,事情就会发生变化:因为 Adam 会对梯度做一阶矩、二阶矩平均,\(\lambda\theta\) 这个附加项也会被吞进“风”和“雨”的记忆里,导致修剪不再纯粹。

Lfull(θ)=Ldata(θ)+λ2∑i=1dθi2L_{\text{full}}(\theta)=L_{\text{data}}(\theta)+\frac{\lambda}{2}\sum_{i=1}^{d}\theta_i^2
加上平方惩罚后,每次求梯度都会多出一个 \(\lambda\theta\) 项。这个附加项会把参数往零的方向拉,效果和权重衰减很像。
  1. 数据损失 \(L_{\text{data}}\)衡量模型在训练样本上表现如何,是“植物目前长得是否够好”的指标。
    Ldata(θ)L_{\text{data}}(\theta)
  2. 平方惩罚项 \(\frac{\lambda}{2}\sum_i\theta_i^2\)对每个参数取平方再求和,平方让大的参数承受更高税率。
    λ2∑i=1dθi2\frac{\lambda}{2}\sum_{i=1}^{d}\theta_i^2
  3. 正则化梯度贡献 \(\lambda\theta_i\)对惩罚项求导后得到 \(\lambda\theta_i\),它会出现在整体梯度里,把参数拉向零。
    λθi\lambda\theta_i
  4. 合并更新在普通梯度下降中,完整更新变成减去数据梯度和 \(\lambda\theta\) 两项,等价于先按比例收缩再正常更新。
    θt+1=θt−η(∇θLdata(θt)+λθt)\theta_{t+1}=\theta_t-\eta\big(\nabla_\theta L_{\text{data}}(\theta_t)+\lambda\theta_t\big)

Adam动态调节

Adam 之所以受欢迎,是因为它像一位聪明的园丁:不只关心今天植物长多少,还关心最近的风向和土壤湿度。反向传播给出的梯度 \(g_t\) 是此刻的“天气信号”,Adam 用两个滑动平均来记录天气历史。第一是梯度的平均方向,名叫一阶矩 \(m_t\);第二是梯度平方的平均大小,名叫二阶矩 \(v_t\)。靠着这两个指标,Adam 可以为每个参数单独调整浇水力度。

Adam 的核心更新可写成:

这套机制让 Adam 在稀疏数据和复杂网络中都非常好用。可问题也恰恰出在这里:当 L2 正则化被塞进梯度时,它不再是一个独立剪刀,而会变成一阵“被雨水稀释的修剪动作”。

mt=β1mt−1+(1−β1)gt,vt=β2vt−1+(1−β2)gt2,m^t=mt1−β1t,v^t=vt1−β2t,θt+1=θt−ηm^tv^t+ε.\begin{aligned}m_t &= \beta_1 m_{t-1} + (1-\beta_1)g_t,\\v_t &= \beta_2 v_{t-1} + (1-\beta_2)g_t^2,\\\hat m_t &= \frac{m_t}{1-\beta_1^t},\quad \hat v_t = \frac{v_t}{1-\beta_2^t},\\\theta_{t+1} &= \theta_t - \eta \frac{\hat m_t}{\sqrt{\hat v_t}+\varepsilon}.\end{aligned}
Adam 的聪明之处在于:每个参数都有自己的有效步长。某个方向梯度一直很小,二阶矩就小,分母小,反而可能走得更快;梯度很大时,分母大,自动放慢速度。
  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. 偏差校正 \(\hat m_t, \hat v_t\)训练初期 \(m_t, v_t\) 从零开始会偏小,除以 \(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. 最终更新用标准化的 \(\hat m_t\) 除以 \(\sqrt{\hat v_t}+\varepsilon\),每个参数得到自适应步长。
    θt+1=θt−ηm^tv^t+ε\theta_{t+1} = \theta_t - \eta \frac{\hat m_t}{\sqrt{\hat v_t}+\varepsilon}

Adam的L2缺陷

想象园丁 Adam 的剪刀被绳子绑在洒水器上。正常浇水次数越多,剪刀反而越难使上力;某块地很久没下雨,水流一大,剪刀又会猛地剪下去。 Adam 对权重衰减的影响也是这样。在普通 Adam 实现里,如果把 \(\lambda\theta\) 直接加进梯度,那么这一项会被一阶矩和二阶矩记录,再被最终的标准化更新缩放。原本我们希望的是“每步固定修剪”,实际却变成了“修剪强度依赖梯度历史”。

具体来说,Adam 中 L2 项给参数带来的收缩量近似为:

结果就是,某些方向上参数被剪得几乎归零,另一些方向上又毫无约束地疯长。这不是简单的“正则化强弱”问题,而是修剪动作本身失真了。这样一来,训练损失可能照样下降,但验证集上的泛化能力却会变得忽好忽坏。

Δθidecay≈−ηλθiv^t,i+ε\Delta\theta_i^{\text{decay}} \approx -\eta\frac{\lambda\theta_i}{\sqrt{\hat v_{t,i}}+\varepsilon}
理想衰减是 \(-\eta\lambda\theta_i\),但 Adam 的 L2 多了一个 \(1/\sqrt{\hat v_{t,i}}\) 因子。这个因子随梯度历史剧烈变化,导致有效正则化强度不稳定。
  1. 理想衰减项 \(-\eta\lambda\theta_i\)我们希望每个参数都稳定地按相同比例收缩。
    −ηλθi-\eta\lambda\theta_i
  2. Adam 实际衰减项\(\lambda\theta_i\) 被 \(\sqrt{\hat v_{t,i}}+\varepsilon\) 缩放,像是把修剪力气交给洒水器决定。
    −ηλθiv^t,i+ε-\eta\frac{\lambda\theta_i}{\sqrt{\hat v_{t,i}}+\varepsilon}
  3. 二阶矩 \(\hat v_{t,i}\)如果某方向过去梯度很小,\(\hat v_{t,i}\) 小,分母小,衰减被放大,导致过度修剪。
    v^t,i\hat v_{t,i}
  4. 产生的不均匀性不同参数梯度历史不同,实际衰减强度千差万别,正则化效果不可预测。
    1v^t,i+ε\frac{1}{\sqrt{\hat v_{t,i}}+\varepsilon}

AdamW解耦设计

AdamW 的解决方案听起来很朴素:把剪刀从洒水器上解下来。浇水的归浇水,修剪的归修剪。在 AdamW 中,动量 \(m_t\) 和二阶矩 \(v_t\) 只由原始数据梯度计算,不混入任何 \(\lambda\theta\) 项;等自适应更新完成后,再单独对每个参数做一次固定比例的权重衰减。两件事互不干扰,所以叫“解耦权重衰减”。

AdamW 的更新公式可以写成:

AdamW 由 Loshchilov 和 Hutter 提出后,迅速成为 Transformer 类模型的默认选择。原因很简单:固定比例的修剪让正则化的行为变得可预测,超参数迁移也稳定得多。园丁不再需要一边担心天气,一边担心剪刀。

θt+1=θt−ηm^tv^t+ε−ηλθt\theta_{t+1} = \theta_t - \eta\frac{\hat m_t}{\sqrt{\hat v_t}+\varepsilon} - \eta\lambda\theta_t
前一项是 Adam 自己的自适应浇水,后一项是独立进行的固定修剪。修剪强度不再被 \(\hat v_t\) 缩放,每步都会稳定地按 \(\eta\lambda\) 收缩参数。
  1. 纯自适应项 \(-\eta\frac{\hat m_t}{\sqrt{\hat v_t}+\varepsilon}\)这一项只服务于梯度下降,帮助模型沿着有效方向更新。
    −ηm^tv^t+ε-\eta\frac{\hat m_t}{\sqrt{\hat v_t}+\varepsilon}
  2. 解耦衰减项 \(-\eta\lambda\theta_t\)在自适应更新之后单独作用,不受一阶矩和二阶矩影响。
    −ηλθt-\eta\lambda\theta_t
  3. 等价收缩形式只看衰减项,\(\theta_t-\eta\lambda\theta_t=(1-\eta\lambda)\theta_t\),每步得到稳定的相对压缩。
    (1−ηλ)θt(1-\eta\lambda)\theta_t
  4. 参数语义\(\lambda\) 表示修剪强度,\(\eta\) 表示修剪比例与学习率的联动,二者共同决定实际收缩幅度。
    ηλ\eta\lambda

泛化性能提升

当修剪变得稳定,花园的整体形状就更健康。AdamW 带来的最直接收益不是训练损失更低,而是训练损失和验证损失之间的“差距”更小。差的泛化往往来自模型记住了训练集中的噪声,而稳重、均匀的权重衰减恰好能压制这种记忆冲动。

我们可以用训练集损失和验证集损失定义泛化差距:

在视觉 Transformer、BERT 类预训练模型和大规模推荐模型中,工程师们普遍发现 AdamW 比 Adam+L2 更容易调出好的验证集结果。这不是魔法,而是因为固定的修剪不会在某些低梯度方向上突然“用力过猛”。长期训练下来,模型参数保持在一个更平滑、更简单的状态,泛化也就更可靠。

Gap=Lval(θ)−Ltrain(θ)\text{Gap} = L_{\text{val}}(\theta) - L_{\text{train}}(\theta)
Gap 越大,说明模型在熟悉地形上表现好、在陌生地形上表现差,也就是过拟合风险高。AdamW 的固定衰减让 Gap 更容易被控制。
  1. 训练集损失 \(L_{\text{train}}\)模型在自家菜园里的表现,是“背题能力”。
    Ltrain(θ)L_{\text{train}}(\theta)
  2. 验证集损失 \(L_{\text{val}}\)模型在陌生土壤里的表现,是“解题能力”。
    Lval(θ)L_{\text{val}}(\theta)
  3. 泛化差距 Gap两者相减,数值越大越说明模型只是在死记硬背。
    Gap=Lval(θ)−Ltrain(θ)\text{Gap} = L_{\text{val}}(\theta) - L_{\text{train}}(\theta)
  4. 正则化的作用合适的衰减让 Gap 变小,同时不牺牲训练集上的主干表达能力。
    min⁡λ Gap\min_{\lambda}\ \text{Gap}

配置调优要点

有了 AdamW,并不代表随便设一个衰减系数就万事大吉。园丁仍然需要知道:修剪太轻会杂草丛生,修剪太重会让植物停止生长。工程上通常先设一个合理的初始值,再用验证集反馈去微调。

AdamW 中真正发挥作用的有效衰减是学习率和 weight_decay 的乘积:

配置时的另一个常见做法是选择衰减范围:偏置项和 BatchNorm、LayerNorm 的尺度参数通常不做权重衰减。因为这些参数是“园丁的辅助工具”,数量少且语义特殊,过度修剪会干扰归一化统计。最后,观察训练集与验证集损失之间的 Gap:Gap 大就调大 weight_decay,训练损失始终降不下去时再调小。这样,花园才能在“茂盛”和“整洁”之间找到平衡。

λeff=ηtλwd\lambda_{\text{eff}} = \eta_t \lambda_{\text{wd}}
\(\eta_t\) 是当前步学习率,\(\lambda_{\text{wd}}\) 是优化器里的 weight_decay。两者共同决定每步实际剪掉多少比例,所以调学习率时也要重新审视权重衰减。
  1. 当前学习率 \(\eta_t\)在 AdamW 里,学习率不仅影响梯度步长,也会线性放大或缩小修剪量。
    ηt\eta_t
  2. weight_decay 配置 \(\lambda_{\text{wd}}\)这是优化器参数里写的修剪强度,常见初始值在 \(0.01\) 到 \(0.05\) 之间。
    λwd\lambda_{\text{wd}}
  3. 有效衰减 \(\lambda_{\text{eff}}\)代表这一步真正剪掉的比例,是调参时真正需要关心的量。
    λeff=ηtλwd\lambda_{\text{eff}} = \eta_t \lambda_{\text{wd}}
  4. 联动调整如果换了学习率调度器,\(\eta_t\) 变化,\(\lambda_{\text{eff}}\) 也随之变化,必要时同步缩放 \(\lambda_{\text{wd}}\)。
    λeff=ηtλwd\lambda_{\text{eff}} = \eta_t \lambda_{\text{wd}}

AI 应用场景

场景1:预训练 Transformer 的默认优化器

阶段:模型预训练

解决的问题:预训练模型参数量巨大,普通 Adam+L2 会让正则化效果随梯度历史飘忽不定,导致训练曲线不稳定、下游迁移效果差。AdamW 把权重衰减从自适应梯度中剥离,使预训练过程更稳定,泛化性能更可预测。

具体案例:某团队预训练一个中小型 BERT 模型,训练初期使用 Adam+L2,验证集困惑度忽高忽低;切换到 AdamW,并设置 weight_decay=0.01,配合 warmup 和余弦退火后,验证集 loss 平稳下降,下游分类任务平均提升约 2%。这符合实践中大多数 Transformer 库默认使用 AdamW 的经验。

场景2:微调视觉模型与迁移学习

阶段:模型微调

解决的问题:微调阶段数据量小,模型容易记住新任务的噪声。AdamW 的固定比例权重衰减可以更安全地抑制过拟合,同时保留预训练学到的通用特征。

具体案例:在 10 类医学图像数据集上微调 ViT,工程师先用 Adam 配合 L2 正则化,训练集精度接近 100% 但验证集只有 83%;改用 AdamW 并保持相同 weight_decay 后,验证集精度稳定在 88%,训练与验证精度差距明显缩小。

场景3:推荐系统的稀疏特征模型

阶段:模型训练与调参

解决的问题:推荐模型中大量稀疏特征维度,Adam 的自适应步长对不同特征差异很大。如果 L2 混入梯度,稀疏维度容易遭遇不稳定性;AdamW 的独立衰减让每个特征都能得到一致的正则化控制。

具体案例:某公司训练一个亿级参数的深度兴趣网络用于广告点击率预估,将优化器从 Adam+L2 切换为 AdamW,并只对非偏置权重做衰减,离线 AUC 提升 0.6%,线上 CTR 预估也变得更稳定。

Python 演示

python59 行
import numpy as np  def make_data(n=1000, d=8, seed=42):    rng = np.random.default_rng(seed)    X = rng.standard_normal((n, d))    y = (X[:, 0] - 0.6 * X[:, 1] + 0.2 * rng.standard_normal(n) > 0).astype(float)    return X, y  def sigmoid(z):    return 1.0 / (1.0 + np.exp(-np.clip(z, -30, 30)))  def evaluate(X, y, theta):    pred = (sigmoid(X @ theta) >= 0.5).astype(float)    return (pred == y).mean()  def train(X, y, wd, mode, epochs=120, lr=0.08):    n, d = X.shape    theta = np.zeros(d)    m = np.zeros(d)    v = np.zeros(d)    b1, b2, eps = 0.9, 0.999, 1e-8    best = theta.copy()    best_acc = 0.0    for t in range(1, epochs + 1):        p = sigmoid(X @ theta)        grad = X.T @ (p - y) / n        if mode == "adam_l2":            grad = grad + wd * theta        m = b1 * m + (1 - b1) * grad        v = b2 * v + (1 - b2) * grad ** 2        mhat = m / (1 - b1 ** t)        vhat = v / (1 - b2 ** t)        theta = theta - lr * mhat / (np.sqrt(vhat) + eps)        if mode == "adamw":            theta = theta - lr * wd * theta        acc = evaluate(X, y, theta)        if acc >= best_acc:            best_acc = acc            best = theta.copy()    return best, best_acc  def main():    X, y = make_data()    split = 800    X_train, y_train = X[:split], y[:split]    X_val, y_val = X[split:], y[split:]    for mode, wd in [("adam_l2", 0.05), ("adamw", 0.05)]:        theta, acc = train(X_train, y_train, wd, mode)        val_acc = evaluate(X_val, y_val, theta)        print(mode, "val_acc=%.4f" % val_acc)  if __name__ == "__main__":    main()
目的:用合成二分类数据比较 Adam+L2 与 AdamW 在相同 weight_decay 下的验证集精度,直观展示解耦权重衰减带来的泛化差异。
  1. grad = grad + wd * theta这是 Adam+L2 的传统做法,把正则化混进梯度,后续动量与方差都会记录它。
  2. theta = theta - lr * wd * theta这是 AdamW 的关键:在自适应更新后单独做固定比例收缩,修剪不依赖梯度。
  3. mhat = m / (1 - b1 ** t)偏差校正,让训练初期动量估计不过小。
  4. vhat = v / (1 - b2 ** t)偏差校正,让二阶矩估计也回到正常尺度。
  5. val_acc = evaluate(X_val, y_val, theta)在验证集上评估最终参数,用来观察哪种正则化方式泛化更好。

常见误区

误区我以前只知道 L2 正则化和权重衰减在数学上等价,就以为 Adam、SGD、AdamW 里用哪个都一样,反正都是往损失函数里加一项。

正解等价关系只在普通梯度下降或标准 SGD 下成立。Adam 会对梯度做滑动平均和二阶矩缩放,混入梯度的 \(\lambda\theta\) 会被缩放成不稳定的惩罚;AdamW 正是为了修复这种不一致才把衰减从梯度和动量中解耦出来。剪刀绑在洒水器上,和剪刀单独使用,效果完全不同。

为何常见:教科书和基础课程通常先用 SGD 推导 L2 与权重衰减的等价性,很少强调自适应优化器会“放大或缩小”这一项,学习者因此容易形成全局等价印象。

误区Adam 会自动调节每个参数的学习率,我觉得它本身就能控制权重无穷增长,所以无需额外加权重衰减。

正解自适应步长解决的是“不同参数更新节奏不同”的问题,并不会主动限制权重规模。模型仍然可能学出非常大的权重并过拟合。权重衰减解决的是“参数过大导致模型复杂”的问题。浇水再聪明,也不能代替定期修剪。

为何常见:很多人看到 Adam 收敛快、稳定性好,就误以为它已经内置了正则化。实际上自适应与正则化是两个独立维度。

误区我原来以为 AdamW 就是把普通 Adam 的 weight_decay 从 0.01 改成 0.1,或者换个名字提醒大家要重视正则化。

正解AdamW 是结构性的改动:普通 Adam 把 \(\lambda\theta\) 放进梯度参与动量计算,AdamW 把 \(\lambda\theta\) 从梯度里拿掉,在自适应更新之后单独作用。这个区别让有效衰减不再被二阶矩缩放,固定比例的修剪带来更稳定的正则化效果。

为何常见:因为 PyTorch 中调用 torch.optim.AdamW 时接口很相似,使用者不读源码就很难意识到参数摆放位置的变化。

误区我总担心权重衰减会把模型参数压得太小,导致欠拟合,所以每次训练都把 weight_decay 设成 0 或非常小的值。

正解正则化本质是在训练损失和模型复杂度之间取平衡。权重衰减过小,模型容易过拟合,验证集表现差;权重衰减过大,模型欠拟合,训练损失也降不下去。正确做法是观察训练集与验证集损失差距:Gap 大就调大,训练不足就调小。

为何常见:训练初期训练损失会上升,人们容易把原因归给正则化,却没有同时看验证集损失的变化,从而误判衰减的收益。

误区我一开始直接把 weight_decay 应用到全部参数,包括偏置和 BatchNorm 的 scale,觉得参数无差别,统一衰减才公平。

正解工程实践中常把偏置和归一化层参数排除在权重衰减之外,因为偏置个数少、语义是平移,归一化尺度负责统计,过度衰减会干扰模型表达。Transformer 和卷积网络的常用实现中,也常单独建立参数分组处理这些特殊参数。

为何常见:许多框架默认接口只暴露一个全局 weight_decay,用户没有意识到可以通过参数分组控制衰减范围。

面试题

Q1. 权重衰减的本质更新操作是什么?

单选题 · easy

  • A.每个参数按固定比例缩小← 正确答案
  • B.每个参数随机置零
  • C.梯度整体乘一个系数
  • D.损失加一次罚项

答案:A。权重衰减就是每步更新后给参数乘一个略小于 1 的系数,让大权重被按比例压下。随机置零是 Dropout,梯度整体缩放是学习率调整,损失加一次罚项则不是标准做法。

Q2. L2 正则化的梯度贡献是什么?

单选题 · easy

  • A.参数自身乘上 λ← 正确答案
  • B.损失乘上参数 λ
  • C.动量项乘上 λ
  • D.学习率乘上 λ

答案:A。L2 正则化在损失中加入 \(\frac{\lambda}{2}\theta^2\),对其求导会得到 \(\lambda\theta\),也就是参数本身乘上 λ。这个附加梯度把参数拉向零。

Q3. 在标准 SGD 中,L2 正则化与权重衰减是什么关系?

单选题 · mid

  • A.数学上基本等价← 正确答案
  • B.两者毫无关系
  • C.只在回归中相同
  • D.在高阶优化相同

答案:A。标准 SGD 下,L2 正则化带来的梯度项 \(\lambda\theta\) 和独立权重衰减 \((1-\eta\lambda)\theta\) 在更新式中可以互相转化,因此基本等价。但这个等价在 Adam 中会被破坏。

Q4. 为什么 Adam 中直接加入 L2 项会有问题?

单选题 · mid

  • A.二阶矩缩放使衰减波动← 正确答案
  • B.一阶矩估计总是为零
  • C.偏差校正会彻底失效
  • D.学习率必须不断增大

答案:A。Adam 会用二阶矩 \(v_t\) 缩放梯度,混入梯度里的 \(\lambda\theta\) 也会被缩放成 \(\lambda\theta/\sqrt{v_t}\)。不同参数梯度历史不同,衰减强度忽大忽小,导致正则化不稳定。

Q5. AdamW 的“解耦”指什么?

单选题 · mid

  • A.衰减与自适应更新分离← 正确答案
  • B.动量与梯度估计分离
  • C.学习率与参数分离
  • D.数据与验证集分离

答案:A。AdamW 把权重衰减项从梯度计算中拿出来,放在 Adam 自适应更新之后独立执行。解耦的是“自适应下降”和“固定比例修剪”,这正是它名字的由来。

Q6. AdamW 相比 Adam+L2 的优势通常包括哪些?

多选题 · mid

  • A.正则化强度更加稳定← 正确答案
  • B.泛化性能通常更好← 正确答案
  • C.完全不需要学习率
  • D.超参数迁移更容易← 正确答案

答案:ABD。AdamW 的修剪不受二阶矩影响,因此正则化稳定;这让验证集泛化通常更好,也更容易在不同任务间迁移超参数。AdamW 仍然需要学习率,所以 C 错误。

Q7. 给定 AdamW 更新 \(\theta=\theta-\eta m/(\sqrt{v}+\varepsilon)-\eta\lambda\theta\),有效衰减意味着什么?

单选题 · hard

  • A.每步相对收缩约 1−ηλ← 正确答案
  • B.收缩比例依赖梯度范数
  • C.衰减强度等于 λ 的平方
  • D.只对正的参数生效

答案:A。\(-\eta\lambda\theta\) 是独立衰减项,合并后每步参数近似乘上 \(1-\eta\lambda\),收缩比例恒定。它不依赖梯度范数,也不会因为参数正负而不同。

Q8. 配置 AdamW 时,常见做法是:

多选题 · hard

  • A.偏置通常不做衰减← 正确答案
  • B.归一化层通常不做衰减← 正确答案
  • C.学习率越大衰减越小
  • D.观察验证集 gap 调衰减← 正确答案

答案:ABD。工程上会把 bias 和 BatchNorm/LayerNorm 的尺度参数排除在权重衰减外,并通过训练集与验证集损失差距来调整 weight_decay。有效衰减是 \(\eta\lambda\),学习率越大衰减越大,因此 C 错误。

Q9. 为什么 Transformer 预训练常把 AdamW 作为默认优化器?

单选题 · hard

  • A.解耦衰减可预测且好调参← 正确答案
  • B.它让训练损失必然降为零
  • C.它免除了所有正则化需求
  • D.它只能在 Transformer 上使用

答案:A。Transformer 参数规模大,正则化行为必须稳定。AdamW 的固定比例衰减不随梯度历史抖动,超参数迁移更顺利。它并不能保证训练损失降零,也不能免除正则化,也并非只能用于 Transformer。

Q10. 关于 Adam 中的 L2 正则化,哪些说法正确?

多选题 · extreme

  • A.λθ 会被二阶矩缩放← 正确答案
  • B.低梯度方向可能过度修剪← 正确答案
  • C.与 SGD 的等价关系失效← 正确答案
  • D.与 AdamW 的衰减完全等价

答案:ABC。Adam 会把混入梯度的 \(\lambda\theta\) 除以 \(\sqrt{v_t}+\varepsilon\),因此低梯度方向分母小、修剪强,容易过度收缩;这也让 L2 与权重衰减的 SGD 等价关系失效。D 与 AdamW 语义相反。