来自 Sea AI Lab 和新加坡国立大学最新研究认为在强化学习微调中普遍存在的训练不稳定和性能瓶颈,其根源并非像先前研究所认为的那样,是复杂的算法设计缺陷,而是一个更基础的因素——数值精度
![]()
论文矛头直指当前业界的标准配置 BF16。这个因其在预训练阶段表现稳定而备受青睐的格式,在精细的 RL 对齐过程中却成了一个“累赘”。研究团队通过详实的实验证明,BF16 的低精度会在模型的训练过程和实际的推理(或采样)过程之间制造出一条关键的鸿沟。正是这个被称为“训练-推理不匹配”(training-inference mismatch)的现象,导致了大量训练任务的失败和崩溃。
而他们提出的解决方案,并非一个全新的复杂算法,而是回归到一个更早的标准:简单地将计算精度切换回具有更高精度的 FP16 格式。他们断言,这一个微小的改动,几乎可以从根本上消除不匹配问题,从而带来更稳定、更高效、性能更强的模型。
以下是论文详细解读:
RL 微调中的幽灵:训练-推理不匹配问题
强化学习已经成为提升大型语言模型(LLMs)推理等高级能力的关键技术。然而,通往高性能模型的 RL 微调之路却充满了不确定性。训练过程常常极其敏感和不稳定,容易出现性能突然下降甚至完全崩溃的情况,这使得稳定地提升模型表现成为一项重大挑战
论文指出,这种不稳定性的一个关键来源,是现代 RL 框架中一个根本性的矛盾:训练-推理不匹配(training-inference mismatch)。
问题的成因
为了最大化效率,RL 框架通常会为两个不同的阶段配备不同的计算引擎
推理引擎:用于生成响应(即 rollout 或称“采样”),这个过程需要极高的速度,因此会使用高度优化的计算核心(kernels)
训练引擎:用于计算梯度并更新模型参数,这个过程则侧重于支持反向传播等复杂运算
尽管从数学原理上看,这两个引擎在给定相同模型权重时应该产生完全相同的输出,但由于硬件层面的具体实现、并行策略和数值精度上的细微差异,它们实际的计算结果会存在微小的数值偏差。这种看似微不足道的差异,却给优化过程带来了两个严重的问题。
两大核心困境
1.有偏梯度(Biased Gradient):在 RL 中,我们使用从推理策略 μ(由推理引擎执行)采样的数据来优化训练策略 π(在训练引擎中定义)。当 π 和 μ 之间存在数值偏差时(即 π ≠ μ),如果我们直接使用这些样本来计算梯度,而忽略了这个偏差,那么得到的梯度就是有偏的,它无法准确地指向真正能提升模型性能的方向。这会误导优化过程,导致训练不稳定。
2.部署差距(Deployment Gap):这是一个更隐蔽但同样致命的问题。我们的模型参数是在训练引擎 π 的环境下进行优化的,目标是最大化 π 的预期回报。然而,在模型最终部署应用或进行评估时,我们使用的是推理引擎 μ。这意味着,即使我们找到了对 π 而言的最优参数,这组参数对于实际使用的 μ 来说却不一定是最优的。这种差距会导致模型在真实场景中的表现低于训练时的预期。
现有解决方案的局限性
为了解决梯度偏差问题,先前的研究工作主要依赖于算法层面的“补丁”,其核心思想是重要性采样(importance Sampling, IS)。通过计算一个概率比率 π(y|x) / μ(y|x) 来重新加权梯度,可以在理论上得到一个无偏的梯度估计。然而,这些方法自身也带来了新的挑战。
高方差与慢收敛:对于长序列的生成任务,序列级别的重要性采样比率方差极大,这会导致训练过程虽然稳定,但收敛速度异常缓慢。为了缓解方差,研究者们提出了诸如截断重要性采样(Truncated importance Sampling, TIS)和掩码重要性采样(Masked importance Sampling, MIS)等变体。这些方法通过引入少量偏差来换取方-差的大幅降低,但它们并没有完全解决问题。
计算效率低下:几乎所有基于重要性采样的修正方案,都需要额外进行一次前向传播来计算训练策略 π 的概率,以便得到重要性权重。假设一次反向传播的计算成本是前向传播的两倍,这个额外的步骤会直接导致约 25% 的训练成本增加,对于大规模 RL 训练而言是难以接受的。
无法弥合部署差距:更重要的是,这些算法补丁的设计初衷只是为了修正训练过程中的梯度,它们本质上仍然是在训练引擎 π 的框架下进行优化。因此,它们无法从根本上解决模型最终部署在推理引擎 μ 上时的性能损失问题。
综上所述,现有的算法修正方案要么代价高昂,要么治标不治本。这促使论文作者深入探究不匹配问题的根源,并最终将目光锁定在了一个被长期忽视的基础层面——浮点数精度。
问题的根源:浮点数精度
论文的核心观点在于,训练-推理不匹配的根本原因并非复杂的算法或工程实现差异,而是源于我们选择的数值表示本身——即浮点数的精度。通过对比目前主流的两种 16 位浮点格式 BF16 和 FP16,论文揭示了问题的本质。
BF16 与 FP16 的对决
两者都使用 16 个比特位来表示一个数字,但其内部结构分配截然不同,这导致了它们在特性上的巨大差异
BF16 :由 Google 推出,它分配了 8 位给指数部分(exponent),7 位给尾数部分(mantissa)
优势:拥有和 32 位浮点数(FP32)相同的动态范围,这意味着它能表示极大和极小的数值,极不容易发生上溢(overflow)或下溢(underflow)。这使得模型训练过程非常稳定,不易因数值问题中断
劣势:尾数位非常少,导致其精度极低。在两个相近的数之间,BF16 无法进行精细的区分。
FP16 (半精度浮点数):遵循 IEEE 754 标准,它分配了 5 位给指数部分,10 位给尾数部分
优势:拥有 10 位尾数,其精度远高于 BF16(可表示的离散值数量是 BF16 的 2^3=8 倍)。这使得它能更准确地表示数值,减少舍入误差。
劣势:指数位只有 5 位,动态范围非常有限,在训练中容易出现梯度过小而下溢(变成零)的问题。
BF16 为何成为主流?
尽管 FP16 出现得更早,但 BF16 凭借其巨大的动态范围优势,迅速成为现代大模型训练(尤其是预训练阶段)的 de-facto 标准。使用 BF16,开发者几乎无需担心数值溢出问题,可以像使用 FP32 一样进行“即插即用”的混合精度训练。相比之下,使用 FP16 则必须配合一种称为损失缩放的技术:在反向传播前,将损失函数乘以一个巨大的缩放因子 S,从而将原本微小的梯度值放大到 FP16 的可表示范围内;在更新权重前,再将梯度除以 S 恢复原值。虽然这个技术很成熟,但在分布式训练中会增加通信和同步的复杂性。因此,为了简洁和稳定,业界普遍选择了 BF16
BF16 如何导致 RL 微调失败?
论文指出,BF16 在预训练中的优势,恰恰成了 RL 微调中的致命弱点
舍入误差的累积:RL 微调中的响应生成是一个自回归(autoregressive)过程,即逐个 token 生成。在 BF16 的低精度下,训练引擎和推理引擎中那些因实现不同而产生的微小舍入误差,会在长序列的生成过程中被不断累积和放大
策略分布的偏离:经过几十上百个 token 的生成后,这些累积的误差足以让训练策略 π 和推理策略 μ 的概率分布产生显著的分歧。这正是“训练-推理不匹配”现象的直接来源
离线分析证据:论文通过离线实验直观地展示了这一点。
在 token 级别的概率对比散点图中,FP16 的点紧密地聚集在对角线(π = μ)周围,而 BF16 的点则分散得多。
在序列级别的对数概率比(log-probability ratio)分析中,随着生成序列长度的增加,BF16 引入的 mismatch 呈指数级增长,而 FP16 的 mismatch 则基本保持在一个非常低的水平(比 BF16 小约 24 倍)。
对于 RL 微调阶段而言,模型的权重和激活值范围已经在预训练中被稳定下来,BF16 的超大动态范围不再是必需品。相反,它所牺牲的精度,却成了导致训练不稳定的关键。因此,论文提出的解决方案非常直接:放弃 BF16 不必要的动态范围,换回 FP16 急需的数值精度。FP16 的高精度就像一个“缓冲垫”,能够吸收掉不同计算引擎间的微小实现差异,阻止舍入误差的累积,从而从根源上保持了训练与推理策略的一致性。
实证研究:FP16 如何完胜现有算法
为了验证 FP16 在解决训练-推理不匹配问题上的有效性,论文设计了一套严谨的实验,并与现有的基于 BF16 的算法修正方案进行了直接对比。
创新的实验设计:Sanity Test
为了排除数据集本身难度分布带来的干扰,研究者们构建了一个“完美可解”的数据集(perfectible dataset)。他们首先从 MATH 数据集中筛选出初始模型准确率在 20% 到 80% 之间的问题,排除了那些过于简单或过于困难的题目。在这个特制的数据集上,一个设计良好、运行稳定的 RL 算法理论上应该能够达到接近 100% 的训练准确率。如果一个算法无法在此数据集上取得成功,就表明其本身存在根本性缺陷。这个“理智测试”(Sanity Test)为评估算法的可靠性提供了一个清晰、高效的基准。
实验结果:FP16 的压倒性优势
实验在 VeRL 和 Oat 两个独立的 RL 框架上进行,以确保结果的普适性。对比结果非常清晰:
BF16 算法阵营的集体困境:
* **基础 GRPO 算法**:在训练初期就迅速崩溃。
* **GRPO + Token-TIS** (token 级别的截断重要性采样修正):虽然能延长一些训练时间,但最终仍然无法避免崩溃的命运。
* **GRPO + Seq-MIS** (序列级别的掩码重要性采样修正):这是 BF16 阵营中唯一能保持稳定不崩溃的算法。然而,由于其重要性权重的方差极大,它的收敛速度异常缓慢,性能远未达到饱和就已耗费大量计算资源,并且最终的性能上限也明显低于 FP16。
* **GSPO 算法**:表现出乎意料地比 Token-TIS 更稳定,但同样无法与 FP16 的表现相提并论。
FP16 的轻松取胜:
研究者们使用了一个最基础、最简单的重要性采样策略梯度算法(PG-Seq-IS),没有添加任何复杂的方差削减或修正技巧。仅仅因为运行在 FP16 精度下,该算法就展现出了极高的训练稳定性,不仅从未崩溃,而且收敛速度飞快,轻松达到了近乎完美的训练奖励,性能全面超越了所有精心设计的 BF16 算法。
深入洞察训练动态
Mismatch 作为崩溃的预警信号:实验发现,所有最终崩溃的 BF16 算法,在崩溃前都表现出一个共同的特征:训练策略 π 和推理策略 μ 之间的差异(mismatch)持续增大。这表明 mismatch 是一个有效的训练健康状况监测指标和崩溃预警信号
FP16 从根本上解决了问题:切换到 FP16 后,不同 RL 算法之间的性能差异变得微乎其微。无论是简单的策略梯度还是复杂的 GRPO 变体,在 FP16 环境下都能稳定地达到很高的性能。这雄辩地证明,FP16 已经从根源上解决了不匹配问题,使得那些为解决此问题而设计的复杂算法补丁变得多余。
精度组合的消融实验
为了进一步厘清训练和推理精度各自的影响,论文进行了消融研究,测试了不同精度组合的效果。
BF16 训练 + FP32 推理:虽然能实现完全稳定的训练,但 FP32 推理的速度比 FP16 或 BF16 慢了近三倍,付出的代价过于高昂,不具备实用性
FP16 训练 + FP16 推理:这个组合不仅实现了最低的训练-推理不匹配,获得了最稳定的训练动态和最高的性能,同时还保持了极高的计算效率。
综合所有实验,结论是明确的:简单地将训练和推理精度统一为 FP16,是解决 RL 微调不稳定性问题最高效、最直接、最经济的方案。
普适性验证:跨模型、跨场景的广泛优势
为了证明“切换到 FP16”这一解决方案并非偶然,而是一种具有广泛适用性的普适性原则,论文在一系列更多样化的模型、数据和训练范式上进行了验证。结果表明,FP16 在所有测试场景中都展现出了一致的优势。
混合专家(MoE)模型的 RL 微调
MoE 模型因其独特的结构(如 top-k 专家选择等精度敏感操作),在 RL 训练中是出了名的不稳定,通常需要复杂的稳定化策略。实验结果(见原文图 1 (i), (j), (k))显示:
在对 MoE 模型进行 RL 微调时,无论是使用 GRPO-Seq-MIS、GRPO-Token-TIS 还是 PG-Seq-TIS 算法,FP16 精度下的训练都比 BF16 更加稳定,并且能够持续获得更高的训练奖励和验证集性能。这证明 FP16 能有效缓解 MoE 模型中更为严重的训练-推理不匹配问题。
低秩适应(LoRA)的 RL 微调
LoRA 是一种参数高效的微调技术,因其高效和接近全量微调的性能而备受青睐。实验中,研究者们使用 LoRA 进行了 RL 微调:
结果显示,基于 BF16 的 LoRA 训练在大约 600 步后就崩溃了。
相比之下,基于 FP16 的 LoRA 训练则从头到尾都保持了完全的稳定。这说明 FP16 对于提升参数高效微调方法的稳定性同样至关重要
大型稠密模型的 RL 微调
为了验证该发现在更大规模模型上的有效性,实验在一个 140 亿(14B)参数的稠密模型(Dense-14B)上进行。
结果再次证实了结论:使用 FP16 进行训练,模型的奖励增长速度远快于 BF16,并且在 AIME 2024 验证集上取得了更高的准确率。这表明 FP16 能够有效释放大模型在 RL 训练中的潜力
其他模型家族的适用性
为了排除结论可能仅限于特定模型架构(如 Qwen)的可能性,研究者们还在一个基于 Llama 架构的 OctoThinker-3B 模型上进行了实验
结果与之前完全一致:BF16 训练在约 150 步后便因数值不匹配问题而变得不稳定,最终崩溃;而 FP16 训练则一路平稳,没有任何不稳定的迹象。
通过在 MoE 模型、LoRA 微调、大型稠密模型以及不同模型架构上的全面验证,论文有力地证明了,将浮点数精度从 BF16 切换到 FP16 是一种能够系统性提升 RL 微调稳定性和性能的根本性解决方案。其效果超越了特定的算法、模型尺寸或架构,具有极高的普适价值。这一发现不仅解决了当前 RL 微调领域的一个核心痛点,也促使我们重新思考在 LLM 训练流程中关于数值精度的权衡与选择





京公网安备 11011402013531号