首页/新闻资讯/正文详情

PaddleNLP AdamW 优化器模块实战:AdamWDL 与逐层学习率衰减(layerwise_lr_decay)深度解析

发布时间:2026/9/23 23:25:27 来源:云帆数科 栏目:资讯中心
PaddleNLP AdamW 优化器模块实战:AdamWDL 与逐层学习率衰减(layerwise_lr_decay)深度解析
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本文以 PaddleNLP 仓库中 paddlenlp.ops.optimizer.adamw 模块文档为核心系统讲解其背后承载的 AdamW 动态学习率优化器AdamWDLAdamW with Dynamic Learning rate与配套的layerwise_lr_decay逐层学习率衰减机制。读者通过本文可以掌握如何在 Transformer 类大模型训练中按层指数衰减学习率、如何基于set_param_lr_fun自定义任意参数的动态学习率策略以及 AdamWDL 在解耦权重衰减、多精度混合训练等场景下的源码级实现原理。模块定位从 API 文档到实现源码docs/zh/source/paddlenlp.ops.optimizer.adamw.rst是 Sphinx autodoc 生成的 API 文档页它通过automodule:: paddlenlp.ops.optimizer.adamw指令将 paddlenlp/ops/optimizer/adamwdl.py 模块的 docstring、类与函数签名自动渲染为文档。因此该模块的实际技术载体是源码文件本身模块对外暴露了两个核心 APIAdamWDL基于 Paddle 官方paddle.optimizer.AdamW实现的、支持动态学习率默认采用逐层衰减的优化器类layerwise_lr_decay默认的动态学习率设置函数实现按 Transformer 编码器层序指数衰减学习率。从 paddlenlp/ops/optimizer/init.py 可以看出ops.optimizer子包统一导出layerwise_lr_decay、AdamWDL、ExponentialMovingAverage、InverseSquareRootSchedule构成了一个面向 Transformer 训练的优化工具集。其中InverseSquareRootSchedule逆平方根学习率调度实现在 paddlenlp/ops/optimizer/lr.py可与 AdamWDL 配合使用。AdamWDLAdamW 与动态学习率的结合设计动机与适用场景AdamWDL 的 docstring 明确指出它基于 AdamW 优化并带有动态学习率设置dynamic lr setting通常用于 Transformer 模型。其核心思想来自论文Layer-wise Learning Rate DecayarXiv:1906.08237在深层次 Transformer 中越靠近底层的参数embedding、浅层 encoder在反向传播中梯度信号越弱统一的学习率要么导致浅层欠拟合、要么导致深层过拟合。逐层衰减的策略是自顶向下指数衰减各层的学习率——例如第 24 层使用学习率l逐层衰减率layer-wise decay rate为α则第m层的学习率为l·α^(24-m)。继承关系与构造参数AdamWDL 直接继承自paddle.optimizer.AdamW因此完整保留了 AdamW 的全部标准能力同时新增了动态学习率相关的参数。完整构造签名与默认值如下与源码 adamwdl.py 一一对应参数类型默认值说明learning_ratefloat / LRScheduler0.001学习率可为浮点数或学习率调度器对象beta1float / Tensor0.9一阶矩估计的指数衰减率beta2float / Tensor0.999二阶矩估计的指数衰减率epsilonfloat / Tensor1e-8数值稳定性小量parameterslist / tupleNone需要更新的参数动态图模式下必填静态图默认 None 表示更新全部参数weight_decayfloat / Tensor0.01权重衰减系数AdamW 中与 L2 正则解耦apply_decay_param_funfunction / NoneNone若提供仅对满足apply_decay_param_fun(Tensor.name)True的参数施加权重衰减grad_clipGradientClipBaseNone梯度裁剪策略如paddle.nn.ClipGradByGlobalNorm等lazy_modeboolFalse惰性模式仅更新当前 mini-batch 有梯度的元素可加速超大参数更新multi_precisionboolFalse是否在权重更新中使用多精度如 FP32 master weight FP16 参数layerwise_decayfloat1.0逐层学习率衰减率αn_layersint12Transformer 编码器总层数set_param_lr_funfunction / Nonelayerwise_lr_decay在每次执行 Adam 算子前为参数设置学习率的回调函数name_dictdictNone参数动态名 → 静态名的映射可通过model.named_parameters()获得namestrNone优化器名称一般无需设置其中layerwise_decay在构造函数中被校验为float或paddle.framework.Variable类型否则抛出TypeError(coeff should be float or Tensor.)。数学形式AdamWDL 保留 Adam 的经典更新公式与paddle.optimizer.AdamW一致t t 1 moment_1_out β1 * moment_1 (1 - β1) * grad moment_2_out β2 * moment_2 (1 - β2) * grad * grad learning_rate learning_rate * sqrt(1 - β2^t) / (1 - β1^t) param_out param - learning_rate * (moment_1 / (sqrt(moment_2) ε) λ * param)注意最后一式中λ * param即解耦权重衰减param_out param - lr·(moment_1/(√moment_2ε)) - lr·λ·param权重衰减项与梯度动量项分离这正是 AdamW 区别于传统 AdamL2 正则化的关键。layerwise_lr_decay默认逐层衰减策略的实现layerwise_lr_decay(decay_rate, name_dict, n_layers, param)是 AdamWDL 的默认set_param_lr_fun其计算逻辑非常直观见 adamwdl.py通过name_dict[param.name]将参数的动态名映射为静态名若静态名包含encoder.layers则解析出encoder.layers.idx中的层号layer返回ratio decay_rate ** (n_layers - layer)若静态名包含embedding返回ratio decay_rate ** (n_layers 1)——embedding 层视为比最底层 encoder 层还要浅一层获得最小的学习率缩放其余参数返回ratio 1.0不缩放。例如n_layers12、decay_rate0.8时第 0 层 encoder 的ratio0.8^12≈0.0687第 11 层ratio0.8^10.8embedding 层ratio0.8^13≈0.055。可见衰减幅度随层深增加而增大正好符合浅层学习率更低的设计。自定义动态学习率set_param_lr_fun 回调AdamWDL 的通用性体现在set_param_lr_fun上——它并不限定必须使用逐层衰减。docstring 给出的示例展示了一个自定义回调对参数名中含weight的参数统一将学习率缩放decay_rate**0.5import paddle from paddlenlp.ops.optimizer import AdamWDL def simple_lr_setting(decay_rate, name_dict, n_layers, param): ratio 1.0 static_name name_dict[param.name] if weight in static_name: ratio decay_rate**0.5 param.optimize_attr[learning_rate] * ratio linear paddle.nn.Linear(10, 10) name_dict dict() for n, p in linear.named_parameters(): name_dict[p.name] n inp paddle.rand([10, 10], dtypefloat32) out linear(inp) loss paddle.mean(out) adamwdl AdamWDL( learning_rate1e-4, parameterslinear.parameters(), set_param_lr_funsimple_lr_setting, layerwise_decay0.8, name_dictname_dict) loss.backward() adamwdl.step() adamwdl.clear_grad()回调的签名约定为f(decay_rate, name_dict, n_layers, param)其中decay_rate、name_dict、n_layers三个参数由 AdamWDL 在构造时通过functools.partial预绑定见源码 adamwdl.py调用时只需传入param。回调内部通过改写param.optimize_attr[learning_rate]实现按参数定制学习率。源码级实现机制动态学习率如何生效更新流程_append_optimize_opAdamWDL 的核心逻辑位于_append_optimize_opadamwdl.py它在静态图/动态图的参数更新阶段被调用流程为先执行_append_decoupled_weight_decay追加解耦权重衰减算子记录当前参数原始学习率prev_lr调用set_param_lr_fun(param)得到缩放比ratio将param.optimize_attr[learning_rate] * ratio调用父类AdamW._append_optimize_op执行标准 Adam 更新此时使用缩放后的学习率恢复原始学习率prev_lr避免影响后续参数的更新。这一临时改写、用完恢复的技巧保证每个参数只在自己的更新步骤中生效对应的动态学习率。解耦权重衰减_append_decoupled_weight_decay该方法adamwdl.py实现了param param - param * coeff * lr的权重衰减逻辑关键细节若设定了apply_decay_param_fun会先判断参数名是否满足条件不满足则直接跳过该参数的衰减学习率为float时直接使用否则调用_create_param_lr创建参数级学习率保证在_create_global_learning_rate之后调用通过_lr_to_coeff字典缓存decay_coeff 1.0 - learning_rate * self._coeff避免同一学习率下重复计算注释说明这是为流水线并行设置的device:all兼容多精度支持当multi_precisionTrue且参数为 FP16 时使用self._master_weights[param.name]中的 FP32 master weight 进行衰减与回写find_master分支否则直接作用于原参数。由于动态图下apply_gradient每步都会执行_lr_to_coeff缓存在_create_optimization_pass中被清空adamwdl.py保证每步学习率变化时系数不会残留。在真实模型训练中的配置佐证仓库的测试夹具配置 tests/fixtures/model_zoo/ernie-m.yaml 是 AdamWDL 的典型落地场景该配置在优化器相关段落中设置了layerwise_decay: 0.8即对 ERNIE-M 这类多语言预训练 Transformer 模型启用 0.8 的逐层学习率衰减。这表明 AdamWDL 的典型用法是从paddlenlp.ops.optimizer导入AdamWDL通过model.named_parameters()构造name_dict传入layerwise_decay、n_layers与name_dict其余参数按普通 AdamW 使用即可。配套优化工具InverseSquareRootSchedule 与 EMA除了 AdamWDLops.optimizer包还提供两个常与动态学习率配套的工具源码见 lr.py 与 ema.pyInverseSquareRootSchedule基于更新步数的逆平方根学习率调度先线性 warmup从 0 线性增长到设定学习率随后按decay_factor * step^(-0.5)衰减其中decay_factor learning_rate * warmup_steps^0.5保证在warmup_steps处衰减曲线与峰值平滑衔接。参数包括warmup_steps必填、learning_rate默认 1.0、last_epoch默认 -1、verbose默认 False。ExponentialMovingAverage指数滑动平均用于训练后对权重取 EMA 版本以提升泛化。三者组合可形成一套完整的 Transformer 训练优化方案InverseSquareRootSchedule控制全局学习率曲线AdamWDL的layerwise_lr_decay控制层间学习率差异ExponentialMovingAverage平滑最终权重。总结PaddleNLP 的paddlenlp.ops.optimizer.adamw模块以 AdamWDL 为核心为 Transformer 大模型训练提供了开箱即用的逐层学习率衰减方案一方面完整复用 Paddle 官方 AdamW 的优化语义与解耦权重衰减、多精度等能力另一方面通过set_param_lr_fun回调机制将每个参数独立学习率的定制能力开放给用户。配合InverseSquareRootSchedule、ExponentialMovingAverage以及仓库配置如 ernie-m.yaml 中的layerwise_decay: 0.8开发者可以在不修改模型代码的前提下快速复现论文Layer-wise Learning Rate Decay的训练策略提升深层 Transformer 的收敛稳定性。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 中的 AdamWDL 优化器基于层间学习率衰减的 Transformer 训练方案PaddleNLP 中的 AdamWDL 优化器基于层间学习率衰减的 Transformer 训练方案 导读 AdamWDLAdamW with Dynam人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPAI4Animation 中的 AdamW 优化器与余弦退火重启调度器解耦权重衰减与循环学习率实战指南AI4Animation 中的 AdamW 优化器与余弦退火重启调度器解耦权重衰减与循环学习率实战指南 本文围绕 AI4Animation https://l人工智能深度学习图形学游戏开发如何使用 annotated_deep_learning_paper_implementations 配置 AdamW 权重衰减与 warmup 学习率调度如何使用 annotated_deep_learning_paper_implementations 配置 AdamW 权重衰减与 warmup 学习率调度 在人工智能深度学习大模型NLP计算机视觉强化学习LoRA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

graphile-build-pg 版本演进全解析:从 5.0.0-alpha 到 5.1.3 的 API 重构、行为系统与插件生态
graphile-build-pg 版本演进全解析:从 5.0.0-alpha 到 5.1.3 的 API 重构、行为系统与插件生态

graphile-build-pg 版本演进全解析:从 5.0.0-alpha 到 5.1.3 的 API 重构、行为系统与插件生态 【免费下载链接】crystal 🔮 Graphiles Crystal Monorepo; home to Grafast, PostGraphile, pg-introspection, pg-sql2 and much more! 项目地址: https:… · 2026/9/23 23:25:21

VxWorks DHCP客户端源码解析:从协议状态机到嵌入式网络配置实战
VxWorks DHCP客户端源码解析:从协议状态机到嵌入式网络配置实战

简介:这份资源是面向VxWorks嵌入式网络开发者的DHCP协议实现源码包,适合从事工业控制、航空电子等实时系统开发、需要理解或定制DHCP客户端与服务器逻辑的工程师研读。压缩包共15个文件,以14个C源文件为主,另含1个Makefile构建脚本… · 2026/9/23 23:25:21

微信 gif 表情怎么保存到本地?群里那个高手教我的
微信 gif 表情怎么保存到本地?群里那个高手教我的

我们群里有个朋友,是公认的「表情担当」。别人还在打字,他已经甩出一张精准到位的表情,把气氛直接拉满。我一直以为他是网感好、反应快。直到有次吃饭,我凑过去看他手机,才发现秘密根本不在脑子里。微信 gif 表情保存到… · 2026/9/23 23:25:15

虚假新闻检测多模态融合实战:文本+结构化+统计特征联合建模
虚假新闻检测多模态融合实战:文本+结构化+统计特征联合建模

简介:本资源是一套基于Python实现的虚假新闻多模态检测高分课程设计项目,面向计算机专业本科生及AI初学者,解决社交媒体中图文混合内容的真实性判别问题,适用于期末大作业、课程设计与入门级科研实践。压缩包共39个文件&#xff0… · 2026/9/24 0:04:16

使用 Ruby AWS SDK 访问 Ceph RGW S3 接口:桶与对象操作完整指南
使用 Ruby AWS SDK 访问 Ceph RGW S3 接口:桶与对象操作完整指南

存储分布式文件系统对象存储后端高可用 【免费下载链接】ceph Ceph is a distributed object, block, and file storage platform 项目地址: https://gitcode.com/gh_mirrors/ce/ceph 点击查看 免费下载 导读 Ceph Object Gateway(RGW)对外… · 2026/9/24 0:04:15

校园二手数码小程序搭建实战:订单状态机与信用体系设计
校园二手数码小程序搭建实战:订单状态机与信用体系设计

毕业季那会儿,我在学校论坛里看到好几个帖子都在转闲置的iPad、相机和游戏本。有人挂了一周没人问,有人刚发帖就被秒拍,中间差的不是价格,而是“可信任”这三个字。校外二手平台上骗子多、到手刀多,同校交易又缺少一个… · 2026/9/24 0:04:09

Play Framework 迁移指南:移除 GlobalSettings,全面转向依赖注入(Scala 与 Java)
Play Framework 迁移指南:移除 GlobalSettings,全面转向依赖注入(Scala 与 Java)

后端Web框架 【免费下载链接】playframework The Community Maintained High Velocity Web Framework For Java and Scala. 项目地址: https://gitcode.com/gh_mirrors/pl/playframework 点击查看 免费下载 本文基于 Play Framework 仓库中 GlobalSettings.md 编写… · 2026/9/24 0:03:50

Numba 类型推断机制详解:从 Numba IR 到编译期类型重建的完整原理与实践
Numba 类型推断机制详解:从 Numba IR 到编译期类型重建的完整原理与实践

编译器高性能计算 【免费下载链接】numba NumPy aware dynamic Python compiler using LLVM 项目地址: https://gitcode.com/gh_mirrors/nu/numba 点击查看 免费下载 导读 Numba 是基于 LLVM 的 NumPy 感知的动态 Python 编译器,其核心挑战在于&#x… · 2026/9/24 0:03:38

企业级项目dragonballz_e159-1的技术架构与实现方案
企业级项目dragonballz_e159-1的技术架构与实现方案

1. 项目背景解析"dragonballz_e159-1"这个项目名称看似简单,实际上包含了丰富的技术内涵。从命名规则来看,这很可能是一个涉及数据处理或系统集成的技术项目。这类编号通常出现在企业级应用开发、自动化脚本或数据处理流水线中,其中… · 2026/9/24 0:03:11

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码