当前位置: 首页 > news >正文

Adam、AdamW介绍,以及AdamW优势

本篇博客是对 Adam、 AdamW的详细介绍,包含什么是Adam、AdamW,以及它们之间的优化差异和 AdamW 的优势。


一、Adam 优化器介绍

1. 原理

Adam(Adaptive Moment Estimation)是一种常用的自适应优化算法,结合了:

  • Momentum(动量):利用过去梯度的指数加权平均来加快收敛;

  • RMSProp:通过梯度平方的指数平均值自适应调整学习率。

2. 参数更新公式

设当前参数为 θ,当前梯度为 gt:

m_t = β₁ * m_{t-1} + (1 - β₁) * g_t       # 一阶矩(动量)
v_t = β₂ * v_{t-1} + (1 - β₂) * g_t^2     # 二阶矩(方差)
m̂_t = m_t / (1 - β₁^t)                   # 偏差修正
v̂_t = v_t / (1 - β₂^t)
θ = θ - α * m̂_t / (√v̂_t + ε)            # 参数更新

3. 优点

  • 自适应学习率;

  • 收敛速度快;

  • 适用于稀疏梯度的场景;

  • 不太依赖学习率调参。


二、Adam 的局限(关于正则化)

Adam 在实现 L2 正则化(即权重衰减)时存在问题:

在 Adam 中,L2 正则项是加入 loss 后参与梯度计算的。但由于 Adam 的梯度会被缩放(平方根、动量修正等),正则项也会被错误地缩放,导致其效果变弱或不稳定。

结果:

  • 正则效果受干扰;

  • 泛化能力下降;

  • 难以有效控制模型复杂度。


三、AdamW 优化器介绍

AdamW("W" 表示 Weight Decay)是对 Adam 的一个改进,提出者是 Loshchilov & Hutter(2019)。

1. 改进点:正则项与梯度解耦

AdamW 并不是将权重衰减加入到梯度中,而是 在梯度更新之外直接对参数做衰减

更新公式:

θ = θ - α * (Adam 更新) - α * weight_decay * θ

而不是 Adam 的:

θ = θ - α * (Adam 更新 + weight_decay * θ)

2. 优势

项目AdamAdamW
权重衰减实现作为正则项加进 loss 中,参与梯度与梯度无关,独立进行权重衰减
对梯度缩放敏感性是,正则项受缩放影响否,正则项直接作用于参数更新
正则稳定性较差较好
泛化能力相对较弱更强,适合训练大型模型
实际应用(如 BERT、GPT)很少使用默认优化器(如 Hugging Face 默认设置)


四、AdamW 的优势总结

  1. 正则项有效:不会因梯度缩放而失效;

  2. 训练更稳定:尤其在 Transformer 等大模型上;

  3. 提升泛化能力:减少过拟合,提升在验证/测试集的表现;

  4. 更好的收敛性能:尤其在训练深层网络时;

  5. 广泛应用:几乎所有 NLP 预训练模型(BERT、GPT、T5 等)都使用 AdamW。


五、小结

  • Adam 适合初学者,结构简洁,自适应效果好;

  • AdamW 是更专业的改进版本,处理正则更合理;

  • 对于实际任务,特别是需要正则化控制模型复杂度的任务,推荐使用 AdamW

  • PyTorch 中可直接使用 torch.optim.AdamW,或 transformers.AdamW

http://www.dtcms.com/a/293160.html

相关文章:

  • 数控机床上滚珠螺杆故障怎么解决?
  • HITL节点介绍(Human-in-the-loop nodes)(指在自动化流程(如AI工作流或系统)中,允许人类在关键步骤直接参与、干预或修正的节点)
  • 【Verilog】竞争、冒险
  • 11.Java三大特性
  • 知识付费平台源码开发详解:内容审核、版权保护与防盗机制全方案
  • IMU(LSM6DSMTR+LIS2MDLTR)
  • STL学习(一、string容器)
  • C# 基于halcon的视觉工作流-章21-点查找
  • freertos任务调度关键函数理解 vTaskSwitchContext
  • 编程基础:常见数据类型详解
  • Kubernetes 服务发布基础
  • 从云端到指尖:MNN实现端侧大模型“量子压缩”
  • Flask转发 [Siemens.Sistar.Api.dll] Braumat API--->DLL to restAPI
  • 鸿蒙开发:弹出库更新至1.2.2版本,新增模态页面弹出
  • Java中的泛型数据
  • K8S基础环境部署
  • 赋能未来数学课堂——基于Qwen3、LangChain与Agent架构的个性化教辅系统研究
  • Rocky Linux 9 快速安装 Node.js
  • 遇到JAVA问题
  • SQL 基础案例解析
  • Spring Boot 使用Jasypt加密
  • 我们能否承担微服务带来的复杂性和运维成本?
  • wps dispimg python 解析实现参考
  • ROS个人笔记
  • 【音视频协议篇】RTMP协议
  • A316-HF-I2S-V1:USB TO I2S HiFi音频转换器评估板技术解析
  • Flutter基础(前端教程①⑨-margin-padding)
  • 构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究
  • List和Map的区别
  • Java值传递和构造函数