AdamW优化器

wen IT资讯 25

本文目录导读:

AdamW优化器

  1. 核心问题:Adam 的 L2 正则化是错误的
  2. AdamW 的解决方案
  3. 为什么 AdamW 效果更好?
  4. 核心配置参数与建议
  5. 常见误区澄清
  6. 总结:何时用 AdamW?

这是一个关于 AdamW 优化器 的详细解读。

AdamW 是目前深度学习中(尤其是在 Transformer 架构和 LLM 训练中)最主流、最推荐的优化器之一,你可以把它理解为 Adam 的修正版,主要解决了 Adam 在使用 L2 正则化(权重衰减)时的一个根本性错误。

核心问题:Adam 的 L2 正则化是错误的

在理解 AdamW 之前,需要先知道传统 Adam 在实现“权重衰减”时存在的问题。

  1. L2 正则化 vs. 权重衰减:在标准 SGD(随机梯度下降)中,L2 正则化(在损失函数中加入权重平方项)与权重衰减是等价的,它们都会让权重在每次更新时乘以一个略小于 1 的系数。
  2. Adam 的问题:Adam 的自适应学习率机制(即参数除以梯度二阶矩的平方根)改变了 L2 正则化的数学表达。
    • 在 Adam 中,L2 正则化项带来的梯度也是自适应调整的。
    • 这意味着,对于更新幅度小的参数,正则化效果反而被放大;对于更新幅度大的参数,正则化效果被缩小
    • Adam 中的 L2 正则化不等同于真正的权重衰减,且效果不稳定,容易导致模型泛化性能下降。

AdamW 的解决方案

AdamW 将权重衰减从梯度更新中剥离出来,在参数更新后直接对参数进行衰减,不经过自适应学习率的调整。

数学公式对比:

  • Adam(错误方式)g = ∇L(w) + λ*w (正则化项和损失梯度混合) m = β1*m + (1-β1)*g v = β2*v + (1-β2)*g² w = w - α * m / (√v + ε)

  • AdamW(正确方式)g = ∇L(w)计算损失梯度) m = β1*m + (1-β1)*g v = β2*v + (1-β2)*g² w = w - α * (m / (√v + ε))先进行 Adam 自适应更新w = w - α * λ * w再进行独立的权重衰减

关键变化:权重衰减项 λ*w 没有被放入 g 中,因此不会mv 缩放,它是一个独立、固定比例的参数缩小步骤。

为什么 AdamW 效果更好?

  1. 更好的泛化能力:恢复了权重衰减的物理意义——无论参数更新幅度大小,都按相同比例进行衰减,这使得训练出来的模型在测试集上表现更好,正则化效果更可控。
  2. 超参数解耦:学习率 α 和权重衰减系数 λ 互不影响,你可以独立调整 λ 来控制正则化强度,而不用担心它被自适应学习率机制扭曲。
  3. 与 SGD+Momentum 对齐:在对超参数(尤其是 λ)进行调参时,AdamW 的最佳 λ 值与 SGD 类似的动量优化器的值更接近,方便经验迁移。

核心配置参数与建议

当你使用 PyTorch/TensorFlow 等框架时,通常通过 torch.optim.AdamWtf.keras.optimizers.AdamW 调用。

  • lr (学习率):推荐使用较 Adam 更低的值,常见范围:1e-45e-5
  • betas:默认 (0.9, 0.999),一阶矩和二阶矩的衰减率,一般无需改动。
  • eps:默认 1e-8,防止除零,一般无需改动。
  • weight_decay (权重衰减系数)AdamW 最重要的超参数
    • 对于小模型(如简单的 CNN/MLP):建议尝试 1e-41e-3
    • 对于大模型(如 Transformer、LLM、ViT):建议尝试 011,很多现代 LLM 使用 1 或更高。
    • 注意:在 AdamW 中,这个参数通常需要比在 Adam 中大一个数量级(例如从 1e-5 提升到 01)。

常见误区澄清

误区 澄清
“AdamW Adam 加了一个新功能” 不是,它是一个修复,它纠正了原版 Adam 在 L2 正则化实现上的数学错误。
“权重衰减值可以沿用 Adam 的经验” 不行,在 AdamW 中,weight_decay 不经过梯度缩放,所以通常需要设为原来 Adam 的 10~100 倍
“AdamW 只是因为解耦了才有效” 不完全是,主要原因是解耦后权重衰减不再受自适应梯度影响,从而保持了正则化的数学一致性。

何时用 AdamW?

场景 推荐优化器 原因
预训练大型模型(BERT/GPT/Llama/ViT) AdamW 超参数稳定,泛化性能好,行业标准。
需要强正则化的任务(小数据集、容易过拟合) AdamW 可独立调节 weight_decay,效果优于 Adam 的 L2 正则化。
快速原型、简单模型(小 CNN) Adam / SGD(带动量) 差异不明显,Adam 代码更少。
计算机视觉(特别是 Vision Transformer) AdamW Silcock 等人已证明其在 ViT 上显著优于 Adam。
大语言模型(LLM) AdamW 几乎所有的 GPT 系列、Llama、PaLM 都使用 AdamW(或变体)。

AdamW = Adam 的解耦纠正版,它通过手动分离权重衰减步骤,恢复了正则化的效果,是当前训练 Transformer 和大规模模型事实上的标准优化器。

上一篇梯度累积步长

下一篇SGD动量

抱歉,评论功能暂时关闭!