HRM-Text的AdamATan2优化器揭秘:atan2更新规则与EMA权重为何关键
HRM-Text的AdamATan2优化器揭秘atan2更新规则与EMA权重为何关键【免费下载链接】HRM-TextHRM-Text is a 1B text generation model based on the HRM architecture, strengthened by task completion and latent space reasoning.项目地址: https://gitcode.com/gh_mirrors/hr/HRM-TextHRM-Text 是一个基于 HRM 分层循环架构的 1B 参数文本生成基础模型以约 1/130 到 1/600 的训练算力就能完成从零预训练在多项基准测试中表现亮眼。支撑这一效率的除了架构设计还有一个常被忽视的主角——自研的AdamATan2 优化器它用atan2函数实现了一套尺度不变的参数更新规则再配合EMA 权重平滑机制共同构成了模型稳定、高质量收敛的关键。本文不带复杂代码带你读懂这两大核心机制的设计思路。 初识 AdamATan2百行代码里的两个核心设计整个优化器的实现非常精炼全部位于 models/adam_atan2.py 这一个文件中核心更新逻辑不足百行。它是在经典 Adam 的基础上做了两处手术更新规则把 Adam 的动量除以梯度均方根换成atan2角度运算让每一步更新幅度天然有界EMA 权重缓冲为每个参数额外维护一份指数滑动平均副本推理与导出时默认使用这份更平滑的权重。预训练入口 pretrain.py 中模型构建完成后立即创建AdamATan2实例学习率、betas、权重衰减与 EMA 衰减率全部来自配置文件。 揭秘 atan2 更新规则为什么角度比除法更稳标准 Adam动量除以梯度均方根传统 Adam含 AdamW的更新可以概括为一阶动量m梯度的指数移动平均代表方向二阶动量v梯度平方的指数移动平均代表波动幅度更新步lr × m̂ / √v̂带偏差修正问题在于除法没有上下界。当某个参数的√v̂极小时比如训练早期或梯度稀疏时更新步可能瞬间放大出现不稳定的跳变。AdamATan2用 atan2 把除法换成角度在 models/adam_atan2.py 中更新规则被改写为分母denom √v̂带偏差修正更新步 step_size × atan2(m, denom)atan2(y, x)返回的是角度其值域被天然限制在(-π/2, π/2)之间。这带来两个重要性质更新幅度有界无论梯度如何爆炸或稀疏单步更新最多约为1.57 × step_size从根本上消除了除法带来的极端跳变训练更加平稳无需 eps 兜底标准 Adam 需要人为添加一个极小量eps防止除零而atan2在分母趋近 0 时依然有良定义数值上更干净。隐藏的福利尺度不变性让分布式训练更省心atan2还有更妙的性质——尺度不变性如果把所有梯度统一放大或缩小c倍一阶动量放大c倍、√v̂也放大c倍而atan2(c·m, c·√v̂) atan2(m, √v̂)结果完全不变。这意味着优化器的方向只取决于梯度的相对模式与梯度绝对大小无关。正因如此pretrain.py 中可以直接禁用 FSDP 的梯度均分默认按卡数除以 world size多机多卡求和得到的梯度虽然更大但优化器行为保持一致省去了对学习率的换算和调参负担。 优化器一个 step 的完整流程结合 models/adam_atan2.py每一步更新按顺序做四件事顺序操作说明1权重衰减AdamW 式解耦衰减参数先整体乘1 - lr × weight_decay2更新动量m、v按 β1/β2 做指数滑动平均3atan2 更新按step_size × atan2(m, √v̂)更新参数4更新 EMAEMA 缓冲向当前参数做一步滑动平均其中偏差修正也做了取舍只对一阶动量修正step_size lr / (1 - β1^t)二阶项只修正开方后的分母逻辑简单且效果良好。⚖️ 为什么 EMA 权重关键EMA一份平滑版的参数副本随机梯度天然带噪声逐步步进的原始权重会不停震荡。EMAExponential Moving Average通过维护一份按衰减率γ平滑的参数副本相当于对训练轨迹做低通滤波得到更平滑、泛化更好的权重。在 models/adam_atan2.py 中每步更新后执行一次lerpEMA 状态随优化器一起随检查点保存不额外占用训练流程。评测与导出EMA 是默认主角项目对 EMA 的使用贯穿了完整生命周期这也正是它关键的原因推理评测simple_inference_engine.py 加载检查点后默认调用swap_ema()用 EMA 权重替换原始权重evaluation/engines.py 同样以 EMA 为默认。HF 格式导出conversion/convert_to_hf.py 中--ckpt_use_ema默认为true导出的模型权重就是 EMA 版本。swap_ema机制models/adam_atan2.py 实现了一个巧妙的原地交换——把参数与 EMA 缓冲对调评测完再换回即可几乎零拷贝开销。SFT 技巧从平滑权重出发微调微调场景下config/cfg_sft.yaml 把 EMA 衰减率从预训练的0.9999调高到0.999——因为 SFT 步数少约 1300 步更快的衰减率能让 EMA 缓冲区主要跟踪 SFT 轨迹评测时再使用 EMA 可获得小幅正则化收益。配合weights_only_resume_from_ematrue见 README 微调章节 与 pretrain.py微调开始时直接把预训练的 EMA 权重换入模型并重置优化器状态相当于从一份更平滑的起点出发微调避免原始权重中的噪声被放大。 让结果说话训练成本与基准测试对比下图是 HRM-Text 与同级模型的基准测试平均分对比按训练 FLOPs 与训练 token 数两种口径可以看到 HRM-Text 1B 在极低的训练成本下取得了同级最优的均衡表现——稳定的优化器更新与 EMA 权重平滑正是这种低成本高质量的重要支撑 速查AdamATan2 关键参数与配置文件参数预训练默认值配置文件学习率lr2.2e-4config/cfg_pretrain.yamlβ1 / β20.9 / 0.95config/cfg_pretrain.yaml权重衰减0.1config/cfg_pretrain.yamlEMA 衰减率0.9999SFT 为 0.999config/cfg_sft.yaml✅ 小结atan2 更新规则用有界的角度替代除法更新幅度天然受限、数值无需 eps 兜底还附带尺度不变性让 FSDP 分布式训练免去梯度换算EMA 权重为参数维护平滑副本评测、HF 导出默认使用微调时还可通过swap_ema从平滑权重出发是 HRM-Text 低成本高质量收敛的另一把钥匙。如果你想动手复现可以按 README.md 的流程启动预训练再在 evaluation/README.md 中了解评测细节优化器源码入口始终是一个文件——models/adam_atan2.py百行代码值得逐行一读。【免费下载链接】HRM-TextHRM-Text is a 1B text generation model based on the HRM architecture, strengthened by task completion and latent space reasoning.项目地址: https://gitcode.com/gh_mirrors/hr/HRM-Text创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考