腾讯混元提出 GradLoc:精准定位大模型 RLVR 训练崩溃 Token

腾讯混元发布GradLoc,精准定位大模型RLVR训练崩溃token,告别“玄学”调优,让模型训练更科学。

原文标题:「上下文学习」之后,腾讯混元第二篇公开研究:精准定位RLVR训练崩溃的“罪魁祸首”Token

原文作者:机器之心

冷月清谈:

腾讯混元团队发布第二篇公开研究,聚焦大模型强化学习中RLVR训练的工程挑战,推出了异常梯度定位器GradLoc,可以将全局梯度突刺(gradient spike)定位到具体出现问题的 token 上,助力系统性解决强化学习中训练不稳定的问题,使得模型调优从依赖直觉的“玄学” 走向基于数据证据的“科学”。

GradLoc通过适配分布式计算框架和引入二分搜索策略,实现了从全局Batch到具体异常Token的高效定位,将排查复杂度从线性降低至对数级。同时,GradLoc 采用贪心策略,优先追踪梯度范数最大的一侧分支,能够在定位主要异常 token 的同时,回溯定位多个其他异常 token。

通过 GradLoc,研究人员可以建立起 “实时定位 -> 异常归因 -> 针对性解决” 的系统化迭代闭环。例如,在 Qwen3-4B-Instruct 模型上,GradLoc 揭示了训练初期存在的“训推不一致”问题,以及后期出现的“层间梯度异质性”现象,并提出了分层梯度裁剪 LayerClip 进行优化。GradLoc 的目标是降低RLVR训练动态的观测与分析门槛,构建 Infra 工具指导算法研发的协同范式,让“异常梯度定位”成为像“查看 Loss 曲线”一样触手可及的基础能力,从而推动RLVR领域更深层的探索。

怜星夜思:

1、文章中提到GradLoc通过二分查找将问题定位到具体的token,这个方法在其他领域是否有应用?有没有什么局限性?
2、文章中提到“层间梯度异质性”,并提出了LayerClip。除了LayerClip,大家觉得还有什么其他方法可以缓解或解决这个问题吗?
3、GradLoc的出现,对于大模型训练的意义是什么?除了文章中提到的,你认为它还能在哪些方面发挥作用?

原文内容


本文来自腾讯混元研究博客(HY Research),是继 《》(Learning from context is harder than we thought)之后的第二篇公开研究。在这篇文章里,混元团队将对大模型强化学习中的 “工程深水区” 展开探索,希望通过一系列提升 RLVR 训练细粒度可观测性的基础设施工具,降低 RLVR 底层物理和统计机理研究的 “工程壁垒”。


这篇博客提出了异常梯度定位器(Gradient Anomaly Localizer, GradLoc),可以将全局梯度突刺(gradient spike)定位到具体出现问题的 token 上,助力系统性解决强化学习中训练不稳定的问题,让开发者不再依赖直觉试错,而是基于确凿的数据证据进行 “确定性” 的算法迭代。


这标志着 RLVR 的模型调优正在逐渐告别 “玄学”,变得更加 “科学”。


  • 中文博客:https://hy.tencent.com/research/100015?langVersion=zh

  • 英文博客:https://hy.tencent.com/research/100015?langVersion=en

  • Github仓库:https://github.com/Tencent-Hunyuan/GradLoc



大模型强化学习的 “工程深水区”


如果说 2024 年的大模型竞争焦点在预训练(Pre-training),那么 2025 年的主战场已彻底转向后训练阶段。通过利用数学、代码等领域的可验证结果作为反馈信号(RLVR),大模型正在实现推理能力的显著跃升。然而,尽管算法层面的探索百花齐放,RLVR 的落地却面临着极高的工程门槛


相比预训练阶段相对成熟的工程链路,大规模 RLVR 训练为了追求极致的效率,引入了大量近似计算。这使得 RLVR 本质上演变成了一个高噪声的复杂动态系统:数据分布与模型参数互为因果,任何微小的近似误差都可能在迭代中被放大,导致对训练动态的分析与理解变得异常困难。


这种系统级的复杂性,构建了一道难以逾越的 “分析壁垒”。目前,大量优秀的底层机理研究设想往往因为无法越过工程壁垒、无法有效定位问题根源而被迫搁置。这并非因为这些设想本身有误,而是因为研究者缺乏能够剖析这一复杂系统的观测工具。


因此,我们这项工作的核心意图并非单纯输出一个算法,而是致力于提供一套可观测的基础设施工具。我们希望通过大幅降低对 RLVR 训练动态的观测与分析门槛,助力开发者突破工程黑盒,对 RLVR 的训练动态进行更系统的理解与分析。


让 RL 训练调优从 “玄学” 回归 “科学”


训练崩溃(Training Collapse)是 RLVR 训练的重要挑战,在实际训练中,这往往表现为模型准确率的断崖式下跌,同时伴随着监控面板上的 “梯度突刺”(Gradient Spikes),对异常梯度的排查往往令研发人员头大。


行业内普遍采用的排查范式具有很强的 “黑盒” 特征:研究员只能对着 grad_norm 曲线等全局监控指标进行猜测:是因为学习率设置不当?数据质量低?还是工程上的问题?然后通过实验端到端的验证故障来源;这种排查方式高度依赖专家直觉,不仅验证周期长,时间成本高,而且归因困难,使得算法迭代充满不确定性。


为解决这一痛点,我们将问题排查的颗粒度从 “全局” 推进到了 “微观”,推出了异常梯度定位器(Gradient Anomaly Localizer, GradLoc),将全局梯度突刺定位到具体异常 token。


GradLoc 的引入,相当于为 RLVR 训练系统配备了一台精密诊断设备。过去,我们在缺乏观测工具时,就像一位没有精密仪器的内科医生,只能面对病人 “高烧”(Gradient Spikes)这一表象,凭经验猜测病因是 “细菌感染” 还是 “免疫系统问题”(猜测是脏数据干扰还是训推不一致),并尝试进行宽泛的干预。而 GradLoc 就像是一次 “全身核磁共振”,它能够穿透复杂的系统表象,直接定位病灶。



借助 GradLoc,我们不再模棱两可地将失败归因于 “训练不稳定” 或 “运气不好”,而是能给出极具确定性的工程诊断:


“训练崩溃的根源,是 Batch 中第 2 个序列的第 5 个 Token,在经过模型第 32 层梯度反向传播时,产生了数值异常。”


这让开发者不再依赖直觉试错,而是基于确凿的数据证据进行算法迭代。这标志着 RLVR 的模型调优正在告别 “玄学”,回归严谨的 “科学” 范畴。


GradLoc:将全局梯度突刺定位到具体异常 token


当 RLVR 训练发生崩溃时,研究者面对的是一系列复杂计算得到的加总结果:数万个 Token 构成的长序列,经过深层神经网络的复杂非线性变换,最终汇聚成一个失控的梯度突刺(Gradient Spike)。


在现有的训练框架中,梯度是通过全局的前向 - 反向(forward-backward)计算获得的,而框架并未存储单个 Token 的梯度信息。若要追溯异常,全量遍历排查 Batch 中数以千万计的 Token(N≈10^7)意味着不可接受的算力成本 —— 仅仅排查一个 Step 的异常,就需要消耗相当于数万个 Step 的常规训练时间。


为此,GradLoc 深度适配了分布式计算框架,引入二分搜索Binary Search)策略。这一策略将排查复杂度从线性降低至对数级(O (log N)),从而实现了从全局 Batch 到具体异常 Token 的高效定位。


GradLoc 在分布式计算的不同层级(全局 -> Micro-Batch -> Rank -> Token)进行二分定位


在实际诊断中,我们往往不需要找出所有的异常 token,只要锁定贡献最大 / 较大的 “罪魁祸首” 即可归纳出系统性问题。GradLoc 采用了贪心策略:在搜索过程中,优先追踪梯度范数最大的一侧分支。GradLoc 将朴素二分改进为深度优先搜索(DFS)机制,能够在几乎不增加额外耗时的前提下,在异常 token 附近回溯,同时定位出多个其他异常 token,以支持对异常来源的充分归因。


为了适应分布式训练中聚合规模的动态变化(从 Global 到 Micro-Batch 再到 Token),GradLoc 结合梯度向量的统计特性,推导并应用了一套自适应阈值。这一机制能动态调整检测标准,有效避免了 “漏检”(无法定位根源)和 “误检”(在正常训练步触发检测),从而最大限度地节省算力。


虽然 GradLoc 的介入会使异常 Step 的耗时增加 1-3 倍,但它仅在检测到梯度突刺时触发(Always-on but Dormant)。对于长周期的 RLVR 训练而言,这种 “按需启动” 的特性使得摊销后的额外开销微乎其微。具体性能数据如下表所示:



此外,一个常见的理论担忧是:在大 Batch(N 个 Token)训练中,累积的噪声是否会掩盖单个 Token 的异常信号,导致二分搜索失效?我们的理论分析表明,大语言模型极高的参数维度(D≈10^10)有效保证了 GradLoc 在海量数据中定位单个异常的成功率。


关于 GradLoc 的实现细节、理论分析及代码,请参考我们的技术博客和 GitHub 仓库。


借助 GradLoc 系统排查:从 “训推不一致” 到 “层间梯度异质性”


有了 GradLoc,我们不再孤立地依据一两次随机实验来判断算法优劣,而是建立起了 “实时定位 -> 异常归因 -> 针对性解决” 的系统化迭代闭环。


如下图所示,我们基于 Qwen3-4B-Instruct 模型,从标准的 GRPO 算法出发,利用 GradLoc 像剥洋葱一样逐层揭开导致训练崩溃的真相。



第一阶段:解决 “训推不一致” (Type A)


在训练初期,GradLoc 首先将梯度突刺定位到了两类典型的重要性采样(IS)比率异常,这验证了社区关于 “训练 - 推理不一致” 的猜想:


  1. Type A.1(词元级不一致):某些 Token 的 IS Ratio 极度偏离 1.0(例如 < 10^-30 或 > 10^5)。对此,我们引入 TokenClip (如 进行修正。

  2. Type A.2(序列级不一致):某些样本虽然单个 Token 的 IS Ratio 正常,但累积的序列级 IS Ratio 严重偏移。对此,我们引入 SeqClip(如 进行过滤。


实验表明,依次引入 TokenClip 和 SeqClip 后,训练崩溃的时间点被推迟,稳定性得到了阶梯式提升。这说明二者并非替代关系,而是互补的必要手段。



第二阶段:发现新现象 —— 层间梯度异质性 (Type B)


然而,即便解决了上述所有不一致问题,训练依然会在后期发生崩溃。GradLoc 再次发挥作用,将突刺定位到了一类全新的异常 Token(Type B)


这类 Token 极为特殊:它们的 IS Ratio(无论是词元级还是序列级)都非常健康(接近 1.0),从训推一致性层面看完全 “无罪”。但深入分析模型内部的梯度结构后,我们发现了两个显著特征:


  • 层间梯度异质性 (Layerwise Gradient Heterogeneity):模型的某些层(通常是浅层)梯度范数突然爆炸,而其他层梯度则保持稳定。

  • 层内梯度同质性 (Intra-layer Gradient Homogeneity):在发生爆炸的层内部,Attention、MLP 等所有子模块的梯度呈现高度同步的突刺。




这一发现揭示了传统全局梯度裁剪 (Global Gradient Clipping) 的致命缺陷:当层间异质性发生时,梯度被异常层主导,健康层梯度被压缩至接近 0,极大损伤了优化。


第三阶段:分层梯度裁剪 (LayerClip)


为此,我们针对性提出了分层梯度裁剪(Layerwise Gradient Heterogeneity, LayerClip),不再使用单一的全局阈值,而是基于每一层历史梯度的统计量,为每一层动态设置独立的裁剪阈值。实验表明,LayerClip 在 TokenClip 和 SeqClip 的基础上,显著提升了训练的稳定性。



有了 GradLoc,我们不再孤立地依据一两次随机试验对比哪个算法更好,而是从训练异常的具体证据出发,系统地理解和应用各种算法改进,基于 Infra 工具的指导,让算法开发变得更加系统和科学,更加有确定性。


总结与展望 - 构建 Infra 工具指导算法研发的协同范式


坚信确定性带来的效率复利


在工业级的大模型训练中,稳定性即是最大的生产力


由于模型架构、数据分布、预训练状态以及冷启动策略的巨大差异,RLVR 训练往往呈现出极高的不确定性,导致很多算法改进和认知无法泛化。GradLoc 的价值在于,它作为一个高成功率的基础设施(Infra)工具,以极低的成本实现了对任意 RLVR 训练异常的标准化排查。


通过将模糊的 “训练失败” 精确定位到具体的 “异常 Token”,并据此设计针对性解决方案,我们将异常排查的时间成本从 “周” 降低到了 “小时”。这种工程上的确定性,将为算法迭代带来巨大的效率复利。


让异常梯度定位像查看 Loss 曲线一样简单


当前,大模型强化学习仍面临着过高的 “工程门槛”。由于缺乏有效的微观观测工具,大量具有潜力的理论探索往往受阻于复杂的工程调试,难以落地。


为此,我们将持续迭代并开源 GradLoc 这类白盒分析工具。我们希望让 “异常梯度定位” 成为像 “查看 Loss 曲线” 一样触手可及的基础能力


当底层机制的观测门槛被大幅降低,整个社区将不再被工程黑盒所束缚,从而能够突破现有的经验主义限制,在理论与应用的结合点上进行更深层的探索。


展望未来:探索训练动态的底层原理


虽然我们提出的 LayerClip 成功将梯度异常限制在了层内,显著提升了训练稳定性,但它本质上仍是一种 “缓解手段”,并未从源头消除层间梯度异质性。


然而,GradLoc 揭示的 “层间梯度异质性” 现象,作为一类有确凿数据支撑的新发现,极可能指向了大模型训练中尚未被充分理解的底层物理与统计机理。在未来,深入研究这些底层机理将是至关重要的一步。它将指导我们超越单纯的 “梯度裁剪”,从数学原理层面设计出更鲁棒、更高效的优化算法。


© THE END 

转载请联系本公众号获得授权

投稿或寻求报道:liyazhou@jiqizhixin.com

这个问题很有意思!我感觉GradLoc的思路有点像计算机里的“二分查找”,核心是把搜索范围不断缩小。那么,只要是符合“问题可分”这个前提的模型训练,应该都可以尝试用类似的思路。比如,我们可以把模型分成不同的层,然后逐层排查,或者把数据分成不同的batch,然后逐个batch排查。

当然,具体实现上肯定会有差异,需要根据模型的特点进行调整。但我觉得这种“分而治之”的思路,在解决复杂问题时非常有效。

我感觉这个问题问到了点子上!LayerClip就像是给“生病”的梯度贴了个创可贴,治标不治本。要从数学原理上解决,可能要从以下几个方面考虑:

1. 损失函数设计:当前的损失函数可能过于关注最终结果,而忽略了模型内部的梯度分布。可以尝试设计新的损失函数,鼓励模型学习到更“均匀”的梯度分布。
2. 优化器改进:现有的优化器(如Adam)可能无法很好地处理层间梯度异质性。可以尝试改进优化器,使其能够更好地适应不同层的梯度差异。
3. 模型结构改进:目前的模型结构可能本身就存在层间梯度异质性的问题。可以尝试改进模型结构,使其更加稳定和易于训练。

总之,要从数学原理上解决这个问题,需要对模型训练的底层机制有更深入的理解。

层间梯度异质性指的是模型不同层之间的梯度差异很大,某些层梯度爆炸,而其他层梯度很小。这种现象会导致梯度更新时,梯度大的层会主导更新方向,而梯度小的层几乎没有更新,从而破坏了模型的整体学习,最终导致训练崩溃。你可以理解为团队合作时,某个人的声音特别大,完全盖过了其他人的声音,最终导致决策失误。

在计算机科学里,二分查找的应用简直不要太广泛!像编译器里查找符号表、各种查找算法的优化等等。甚至可以拓展一下思路,二分法可以看作是分治思想的一种体现,很多复杂问题都可以通过分解成小问题来解决,比如归并排序。

我比较关注 GradLoc 的可解释性,拿到一个 anomaly token,如何进一步分析它为什么异常,是数据问题,还是模型结构问题,亦或是训练方法问题?如果只是定位到 token,但无法给出更深入的解释,那 GradLoc 的价值会大打折扣。 挑战的话,感觉在于如何将 GradLoc 的结果与现有的训练流程结合起来,如何自动化地进行异常分析和修复。

这个问题很有深度! LayerClip 更多的是一种“治标不治本”的策略,它的作用是防止梯度爆炸,但并没有消除层间梯度差异的根本原因。

要从根本上解决这个问题,我认为可以尝试以下方法:

1. 模型结构改进: 考虑使用更深、更复杂的模型结构,例如 Transformer-XL、Sparse Transformer 等,这些模型结构在设计上就考虑了层间信息传递的问题。
2. 归一化技术: 引入更多的归一化层,例如 Layer Normalization、Weight Normalization 等,可以有效缓解层间梯度差异。
3. 学习率调整: 使用更精细的学习率调整策略,例如 AdamW、LAMB 等,可以自适应地调整不同层的学习率,从而缓解层间梯度差异。
4. 正则化方法: 引入更多的正则化方法,例如 Dropout、Weight Decay 等,可以防止模型过拟合,从而降低层间梯度差异。

这些方法可能需要在实践中进行大量的实验和调优,才能找到最适合特定任务的解决方案。

抛开论文细节不谈,我觉得GradLoc的思路很值得借鉴。深度学习就像一个炼丹炉,很多时候我们只能看到loss曲线,出了问题只能瞎猜。GradLoc相当于给炼丹炉加了个监控,能看到每个token的状态。我觉得这个思路可以用到其他领域,比如GAN的训练,如果能监控生成器和判别器的梯度,说不定能解决GAN训练不稳定的问题。

从物理的角度来看,可以将神经网络的每一层看作一个物理系统,梯度可以看作是能量流动。如果能量在某些层突然富集,导致“层间梯度异质性”,可能意味着能量传递过程中出现了阻碍或者共振现象。这种现象可能与模型的结构、参数初始化、以及训练数据的分布有关。通过研究能量在网络中的流动规律,或许能找到解决层间梯度异质性的根本方法。

我觉得从模型结构入手是一个很好的思路。是不是可以考虑一下自适应的层归一化方法?传统的层归一化可能会抹平一些重要的梯度差异,但如果能让模型自己学习每一层应该如何归一化,或许可以缓解层间梯度异质性。另外,我觉得是不是可以借鉴一下NAS(神经架构搜索)的思想,让模型自己搜索出更适合梯度传播的结构?

GradLoc 主要解决了 RLVR 训练中难以定位梯度异常的难题,让我们可以从全局的梯度突刺,精确定位到导致问题的特定 Token。除了“训推不一致”和“层间梯度异质性”,我觉得还可能暴露以下问题:

* 数据噪声: 某些 Token 对应的训练数据本身就存在错误或噪声,导致模型在这些 Token 上的学习出现偏差。
* 对抗样本: 恶意构造的对抗样本可能会在特定 Token 上引发梯度突刺,从而影响模型的鲁棒性。
* 模型结构缺陷: 模型某些层的设计可能存在缺陷,导致在处理特定类型的 Token 时,梯度出现异常放大。

针对“文章中提到了“层间梯度异质性”,并提出了LayerClip。那么,除了分层裁剪,还有没有其他方法可以缓解或解决这个问题?”

除了 LayerClip 这种“头痛医头”的方法,我觉得还可以从优化器的角度入手,尝试一些自适应的优化算法。比如,可以考虑使用 AdamW 优化器,它在 Adam 的基础上引入了权重衰减,可以有效地防止过拟合,从而缓解层间梯度异质性。

另外,还可以尝试一些二阶优化算法,比如 K-FAC 或 Shampoo。这些算法可以根据每一层的梯度信息动态调整学习率,从而更好地适应不同层的学习需求,缓解层间梯度异质性。

总的来说,解决层间梯度异质性需要综合考虑模型结构、优化算法和训练策略等多个方面,找到一个最合适的解决方案。

针对“GradLoc通过定位异常Token来解决训练崩溃问题,那么,除了Token本身的问题,是否还应考虑Token之间的上下文关系对训练稳定性的影响?”

当然要考虑!这就好比医生诊断病情,不能只看一个指标,得结合病人的整体情况。Token 单独看没问题,但放在上下文里可能就成了“猪队友”。

我有个想法,可以试试在 GradLoc 的基础上,再加一个“上下文评分”机制。这个评分考虑 Token 周围的语境,如果一个 Token 自己没问题,但周围的 Token 很“可疑”,那也给它打个高分,重点关注。

二分搜索保证了效率,能够在log N的时间复杂度内找到异常token的大致位置。而深度优先搜索则是在找到一个异常token后,继续深入挖掘,看看附近还有没有其他异常,相当于扩大了战果。如果batch中存在多个梯度相近的异常token,且二分搜索一开始没有选中梯度最大的那个,可能就会导致搜索路径偏离,最终找不到所有异常。

简单来说,就是模型不同层之间的梯度差异巨大,有些层梯度爆炸,有些层梯度很小。全局梯度裁剪相当于一刀切,照顾了异常层,却损伤了健康层,导致优化受损。

GradLoc 最大的意义在于提升了大模型训练的可观测性,让我们可以更清晰地了解训练过程中发生了什么,而不是像以前一样只能盲猜。这对于debug和优化模型非常有帮助,可以节省大量时间和资源。除了文章中提到的问题定位,我觉得 GradLoc 还可以用于分析不同数据对模型的影响,例如找出哪些数据会导致梯度异常,从而提高数据质量。

可以借鉴Batch Normalization的思想,在每一层之间加入Normalization层,对梯度进行归一化处理,使其分布更加均匀。这样可以减弱层间梯度的差异,提高训练的稳定性。不过,Normalization层也会引入额外的参数和计算量,需要在实际应用中权衡。

同意楼上的看法,二分查找应用广泛,但 GradLoc 的妙处在于将它与梯度异常检测结合。理论上,只要满足单调性(或者某种可预测的趋势),二分查找就能派上用场。局限性的话,我觉得可能在于它假设了异常梯度是“可分离”的,也就是说,可以通过二分逐渐缩小范围来找到。如果多个 token 同时出现异常,且彼此影响,那二分查找的效果可能会打折扣。另外,分布式训练环境下的数据同步和通信也会增加实现的复杂度。

层间梯度异质性确实是个值得关注的点。除了LayerClip,我觉得可以考虑自适应学习率的方法。比如,根据每一层的梯度大小动态调整学习率,梯度大的层学习率小一点,梯度小的层学习率大一点,这样可以避免梯度爆炸的层过度更新参数,同时保证其他层的正常学习。类似于AdamW这种,但是可以更细粒度地应用到每一层。

我有个更“玄学”一点的想法,既然是层间异质性,会不会是模型结构本身的问题?比如,某些层对特定任务的梯度更敏感,导致梯度差异过大。如果是这样,可以尝试调整模型结构,例如增加skip connection,让梯度更容易在层与层之间传递,或者使用一些更先进的网络结构搜索算法,自动寻找更适合任务的模型结构。