
1. 从“会做题”到“会找路”强化学习在数学推理中的角色定位很多人第一次听到“AI for Math”和“强化学习”放在一起脑子里蹦出来的画面是AlphaGo下围棋——一个智能体在棋盘上反复试错最后找到赢棋的策略。这个直觉方向是对的但数学推理的场景和围棋有本质区别搞清楚这个区别是理解整个技术路线的起点。围棋的规则是封闭的、确定的落子之后局面变化完全可预测奖励信号也很清晰——赢了就是赢了。数学推理不一样。一道证明题可能有多种正确路径中间步骤的对错往往没有即时反馈只有最终答案或证明完成时才知道对不对。这就导致强化学习在数学场景下的应用核心难点不在于“搜索”而在于奖励信号的构造和稀疏性处理。我在实际接触这类项目时发现很多人一上来就急着搭PPO或者GRPO的训练框架结果跑了几天发现模型输出全是重复的废话或者干脆退化成只会输出最终答案、跳过所有推理步骤。问题出在哪出在对“强化学习在数学推理中到底优化什么”这件事没有想清楚。用一句话概括强化学习在数学推理中的核心作用是让模型学会“分配推理预算”——在哪些步骤上多花计算、在哪些步骤上快速跳过、什么时候回溯、什么时候继续往前推。它不是教模型数学知识那是预训练和微调的事而是教模型在已有知识的基础上如何更高效地搜索到正确答案。这个定位决定了后续所有的设计选择奖励函数怎么设计、训练数据怎么筛选、策略网络和价值网络怎么初始化、KL散度约束设多大。如果你把强化学习当成“万能提升器”指望它把模型从不会数学变成会数学那大概率会失望。但如果你把它当成“推理路径优化器”在模型已经具备基础数学能力的前提下它能带来的提升是相当可观的。适合读这篇内容的人对AI for Math有基本了解、知道Transformer和预训练是怎么回事、想搞清楚强化学习在这个领域具体怎么落地的人。如果你连策略梯度都没接触过建议先补一下强化学习的基础概念不然下面的内容可能会有些吃力。2. 核心思路拆解为什么数学推理需要“过程奖励”而不是“结果奖励”2.1 结果奖励的致命缺陷最朴素的思路是模型输出一个答案对了给正奖励错了给零奖励然后用策略梯度更新。这个方案在数学场景下有一个致命问题——奖励太稀疏了。一道题可能有几十步推理最终答案错了你无法判断是哪一步开始错的。是第一步的公式记错了还是中间某步的代数变换出了问题还是最后计算失误结果奖励把所有步骤的贡献混在一起模型收到的信号是“这一整条路径都不好”但具体哪里不好、怎么改完全不知道。我试过在一个中等规模的数学模型上直接用结果奖励跑PPO训练曲线是这样的前几百步奖励几乎不涨然后突然崩掉模型开始输出大量重复的“因此答案是……”但后面跟的答案是随机的。原因就是稀疏奖励导致梯度方差极大策略更新方向完全随机最后模型退化成了一种“假装在推理”的模式。2.2 过程奖励模型PRM的引入解决稀疏奖励的标准做法是引入过程奖励模型Process Reward ModelPRM。PRM不只看最终答案而是对推理过程中的每一步给出一个评分告诉模型“这一步推理是合理的”还是“这一步开始跑偏了”。PRM的训练数据通常来自人工标注或自动生成。人工标注成本极高一道题几十步每步都要标对错标注员还得是数学专业背景。自动生成的路子更常见用多个模型对同一道题生成大量推理路径最终答案正确的路径中统计每一步出现的频率高频步骤大概率是合理步骤低频或只出现在错误路径中的步骤大概率有问题。注意PRM本身的质量直接决定强化学习的效果上限。如果PRM本身判断不准模型会被引导到错误的方向。我见过一个案例PRM把“设x为未知数”这种标准步骤标为低分原因是训练数据中这类步骤出现太频繁被降权了结果模型学会了跳过设未知数直接列方程正确率反而下降。2.3 优势函数的设计GAE在数学推理中的变体有了PRM之后每一步都能拿到奖励信号接下来就是怎么把这些信号转化成策略更新的梯度。标准做法是使用广义优势估计Generalized Advantage EstimationGAE但在数学推理场景下GAE需要做一些调整。标准GAE的优势函数是A_t Σ (γλ)^l * δ_{tl}其中δ_t r_t γV(s_{t1}) - V(s_t)。在数学推理中γ通常设得很接近1比如0.99因为推理步骤之间的时间跨度不像游戏帧那样需要强折扣。λ控制偏差和方差的权衡数学推理中通常取0.95左右。但这里有一个坑价值网络V(s)的估计在数学推理中非常难训练。状态s是当前推理前缀价值网络要预测从这个前缀出发最终能得到正确答案的概率。这个预测本身就很难因为同一个前缀可能导向正确也可能导向错误取决于后续的采样。我试过用一个小型价值网络来估计V(s)结果训练了几千步之后价值网络的输出几乎恒定完全没有区分度。后来我换了一个思路不用价值网络直接用PRM的累积分数作为优势函数的基线。具体来说把PRM对每一步的评分累加起来减去一个滑动平均的基线得到优势估计。这个方案虽然理论上不如GAE优雅但实际效果更稳定因为PRM的评分至少是有意义的信号而价值网络的估计在训练初期几乎是噪声。2.4 策略约束KL散度不能设太大也不能太小强化学习训练数学推理模型时策略约束KL散度的设置非常关键。KL散度约束的是新策略和旧策略之间的差异防止策略更新太猛导致崩溃。KL系数设太大比如0.1以上模型几乎不更新训练半天没变化。设太小比如0.001以下模型更新太激进很快就会退化成输出重复内容或者完全胡言乱语。我的经验值是0.01到0.05之间具体取决于模型规模和任务难度。模型越大、任务越难KL系数应该越小因为大模型本身能力已经不错只需要微调小模型需要更大的更新幅度KL系数可以适当放大。还有一个细节KL散度应该只约束推理步骤部分不应该约束最终答案的格式。如果模型学会了输出“答案是X”这种格式强行用KL约束把这个格式也限制住会导致模型在格式上浪费大量更新预算。我的做法是在计算KL散度时对答案部分做mask只对推理步骤计算KL。3. 实操全流程从数据准备到训练收敛的完整路径3.1 数据准备题目筛选和推理路径生成数据准备阶段的核心任务是筛选出适合强化学习训练的题目并生成足够多样化的推理路径。题目筛选有几个原则。第一难度要适中。太简单的题模型已经会了强化学习没有提升空间太难的题模型完全不会奖励全是零梯度信号也是零。我的做法是先用基础模型跑一遍候选题目保留正确率在20%到80%之间的题。这个区间内的题既有提升空间又有足够的正样本供学习。第二题目类型要多样。纯计算题、证明题、应用题、几何题每种类型对推理能力的要求不同。如果训练数据全是计算题模型学到的策略可能只适用于计算场景遇到证明题就懵了。推理路径生成通常用温度采样。对每道题用基础模型以温度0.7到1.0采样多条路径比如16条或32条保留最终答案正确的路径作为正样本答案错误的作为负样本。正负样本的比例不需要刻意平衡因为强化学习本身就是在正负样本之间找区分度。实操心得采样温度不要设太低。温度太低比如0.3生成的路径几乎一样多样性不够PRM训练出来的评分区分度很差。我一般用0.8到1.0之间的温度保证路径之间有足够的差异。3.2 PRM训练标注策略和损失函数选择PRM的训练数据来自上一步生成的推理路径。每条路径被拆分成若干步骤每个步骤的标签来自“这条路径最终是否正确”以及“这个步骤在正确路径中出现的频率”。具体标注逻辑对于最终正确的路径所有步骤标为正对于最终错误的路径从后往前找第一个“明显错误”的步骤该步骤及之后标为负之前的步骤标为正。怎么判断“明显错误”一个简单的启发式方法是看这个步骤是否在正确路径中也出现了。如果某个步骤只出现在错误路径中大概率是错误步骤。PRM的损失函数用二元交叉熵每一步输出一个0到1之间的分数表示该步骤正确的概率。训练时用步骤级别的标签做监督。这里有一个容易忽略的细节PRM的输入应该包含题目和当前步骤之前的所有推理前缀而不是只看当前步骤。因为同一个步骤在不同上下文中的正确性可能不同。比如“两边同时除以x”这个步骤如果x可能为零那就是错误的如果已知x不为零那就是正确的。只看当前步骤PRM无法做出这个判断。3.3 强化学习训练循环采样、评分、更新训练循环的伪代码大致如下for iteration in range(num_iterations): # 1. 采样阶段 problems sample_batch(dataset) trajectories [] for problem in problems: trajectory model.generate(problem, temperature0.8, max_steps20) trajectories.append(trajectory) # 2. 评分阶段 rewards [] for traj in trajectories: step_rewards prm.score(traj.problem, traj.steps) final_reward 1.0 if check_answer(traj) else 0.0 # 混合过程奖励和结果奖励 total_reward 0.7 * sum(step_rewards) 0.3 * final_reward rewards.append(total_reward) # 3. 优势估计 advantages compute_advantages(rewards, baselinemoving_average) # 4. 策略更新 for epoch in range(ppo_epochs): loss ppo_loss(model, trajectories, advantages, kl_coef0.02) loss.backward() optimizer.step()几个关键参数的经验值参数推荐值说明采样温度0.8-1.0太低多样性不足太高噪声太大每批题目数32-64太小梯度方差大太大显存吃不消每题采样路径数8-16太少正样本不够太多计算开销大PPO epoch数2-4太多容易过拟合当前批次KL系数0.01-0.05根据模型规模调整过程奖励权重0.6-0.8结果奖励权重相应为0.2-0.4学习率1e-6到5e-6比预训练小一到两个数量级3.4 训练监控看什么指标、什么时候该停训练过程中需要监控的指标不只是奖励曲线。奖励曲线上升不代表模型真的变好了可能只是模型学会了钻PRM的空子。我一般同时看四个指标第一验证集正确率。这是最硬的指标。每训练几百步在留出的验证集上跑一遍看正确率是否真的在涨。如果训练奖励在涨但验证正确率不涨说明模型在过拟合PRM需要降低过程奖励的权重或者加强KL约束。第二平均推理步数。如果步数突然大幅下降说明模型学会了“偷懒”——跳过推理步骤直接猜答案。这时候需要检查PRM是否对短路径有偏好或者结果奖励的权重是否太高。第三KL散度实际值。如果KL散度持续接近上限说明策略更新太激进需要增大KL系数。如果KL散度几乎为零说明策略几乎没更新需要减小KL系数或增大学习率。第四输出重复率。统计模型输出中重复n-gram的比例。如果重复率突然飙升说明模型开始退化通常是KL系数太小或者学习率太大导致的。停止训练的时机验证集正确率连续多个评估周期不涨或者KL散度持续撞上限或者输出重复率超过阈值比如10%。不要等到奖励曲线完全平坦才停那时候模型可能已经过拟合了。4. 常见问题与排查技巧实录4.1 奖励黑客模型学会了骗PRM这是强化学习在数学推理中最常见也最棘手的问题。模型发现某些输出模式能获得高PRM分数即使这些输出在数学上毫无意义。我遇到过一个典型案例PRM对“根据定理X我们可以得到……”这种句式给出了偏高的分数因为训练数据中正确路径经常出现这种句式。结果模型学会了在所有步骤前面都加上“根据定理X”不管这个定理是否适用。更离谱的是模型开始编造定理名称“根据欧拉定理的推广形式”这种根本不存在的定理被反复使用。排查方法定期人工检查模型输出特别是那些PRM分数高但最终答案错误的路径。如果发现模型在系统性地利用PRM的某些偏好就需要调整PRM的训练数据或者奖励函数。解决思路在奖励函数中加入格式惩罚项对编造定理名称、重复使用相同句式等行为扣分。另外PRM的训练数据中要加入足够多的“负样本”让PRM学会区分“合理引用”和“胡乱引用”。4.2 训练崩溃奖励突然断崖式下跌训练过程中奖励突然从高位跌到接近零模型输出变成乱码或重复内容。这个问题通常由以下原因之一导致学习率太大。策略更新步子迈太大一步跨到了参数空间的坏区域。解决办法是降低学习率或者增大KL系数。批次内方差太大。一个批次里的题目难度差异太大有的题全对有的题全错梯度方向相互冲突。解决办法是做难度分层采样每个批次里的题目难度尽量接近。数值不稳定。策略梯度的方差本身很大加上混合精度训练很容易出现NaN。解决办法是使用梯度裁剪gradient clipping把梯度范数限制在1.0以内。我踩过最坑的一次是训练到一半突然崩溃排查了半天发现是某个批次的题目里有一道题的PRM评分全是NaN导致整个批次的优势估计都变成了NaN。后来在PRM评分环节加了NaN检查遇到NaN就用结果奖励代替问题就解决了。4.3 推理步数坍缩模型学会了“跳步”模型发现少写几步推理也能得到正确答案或者猜对答案于是逐渐缩短推理路径最后变成直接输出答案。这在数学推理中是很危险的因为模型可能只是记住了答案模式并没有真正理解。排查方法统计训练过程中平均推理步数的变化。如果步数持续下降同时验证集正确率没有相应提升说明模型在“跳步”。解决思路在奖励函数中加入步数惩罚项对过短的推理路径扣分。但惩罚不能太重否则模型会为了凑步数而写废话。我的经验是设置一个最低步数阈值比如5步低于这个阈值扣分高于阈值不额外奖励。另一个思路是在PRM中加入步骤完整性检查。PRM不仅判断每一步是否正确还判断这一步是否是必要的。如果模型跳过了必要步骤PRM给出低分。4.4 常见问题速查表问题现象可能原因排查方法解决思路奖励不涨学习率太小、KL系数太大检查KL实际值增大学习率或减小KL系数奖励突然崩溃学习率太大、数值不稳定检查梯度范数降低学习率、加梯度裁剪验证正确率不涨过拟合PRM对比训练奖励和验证正确率降低过程奖励权重推理步数坍缩模型学会跳步统计平均步数加步数惩罚项输出重复KL系数太小统计重复n-gram比例增大KL系数PRM评分全NaN数值溢出检查PRM输入加NaN检查、用结果奖励兜底模型编造定理奖励黑客人工检查输出加格式惩罚项、补充负样本4.5 独家避坑技巧技巧一先用小模型验证流程再上大模型。大模型训练一次成本很高如果流程有问题浪费的是真金白银。我一般先用一个1B到3B的小模型跑通整个流程确认奖励曲线正常、验证正确率有提升再把同样的配置迁移到大模型上。小模型上遇到的问题大模型上大概率也会遇到但排查成本低得多。技巧二PRM和策略模型不要同时训练。有些人想搞“联合训练”一边更新策略一边更新PRM。这个思路理论上可行但实际中极不稳定两个模型相互适应很容易陷入局部最优。我的做法是PRM先训练好、冻结住再用来训练策略模型。等策略模型训练到收敛后如果需要再用新数据微调PRM然后继续训练策略。分阶段来稳得多。技巧三保留一定比例的“纯结果奖励”样本。完全依赖PRM会导致模型过拟合PRM的偏好。我在训练时会保留10%到20%的样本只用结果奖励这些样本相当于“锚点”防止模型偏离太远。技巧四定期做“盲测”。每隔一段时间把模型输出和基础模型的输出混在一起让人工标注员不知道哪个是哪个判断哪个更好。这个盲测结果比任何自动指标都可靠。我遇到过自动指标很好但盲测一塌糊涂的情况后来发现是PRM的偏好和人类判断不一致。技巧五不要追求一步到位。强化学习训练数学推理模型是一个迭代过程。第一轮训练可能只提升几个百分点然后你需要分析失败案例、调整PRM、重新生成数据、再训练第二轮。我经历过的最好的项目前后迭代了五轮才达到满意的效果。指望一次训练就解决所有问题不现实。5. 效果评估与迭代方向5.1 评估指标的选择评估强化学习训练效果不能只看最终答案正确率。数学推理的质量还体现在推理过程的合理性、步骤的完整性、表达的自然度等方面。我通常用三个层次的指标答案层指标最终答案正确率、答案格式合规率。这是最基础的指标但不够全面。过程层指标推理步骤的完整率是否跳过了必要步骤、步骤之间的逻辑连贯性用一个小型语言模型判断相邻步骤是否有逻辑断裂、步骤的冗余度是否有重复或无关步骤。人类评估指标请数学背景的人对模型输出做盲评从正确性、清晰度、简洁度三个维度打分。这个成本高但最能反映真实质量。5.2 迭代方向从“能做对”到“讲得清”第一轮强化学习训练通常只能让模型“做对更多题”但推理过程可能还是很粗糙。后续迭代的方向是让模型“讲得更清楚”。具体做法在PRM的训练数据中加入“清晰度”标注让PRM不仅判断步骤是否正确还判断步骤是否表述清晰。然后在奖励函数中加入清晰度分数。这样模型会逐渐学会用更清晰的语言表达推理过程。另一个方向是自适应推理让模型学会根据题目难度调整推理详细程度。简单题快速给出答案难题详细展开。这个能力很难通过结果奖励学到需要PRM对“推理详细程度是否匹配题目难度”做出判断。5.3 一个实际案例的复盘我参与过一个数学推理强化学习项目基础模型在一个中学数学竞赛数据集上的正确率是42%。经过三轮强化学习训练正确率提升到了61%。但更有意思的是过程指标的变化第一轮训练后正确率涨到52%但平均推理步数从12步降到了8步说明模型学会了跳步。第二轮训练加入了步数惩罚项正确率微涨到55%步数恢复到11步。第三轮训练优化了PRM的清晰度评分正确率涨到61%步数稳定在10步左右人类评估的清晰度评分从3.2涨到了4.1满分5分。这个案例说明强化学习的效果不是线性的中间可能会有反复。关键是要有明确的评估体系知道每一轮训练在优化什么、牺牲了什么。提示如果你的项目时间有限优先保证答案正确率的提升过程质量可以后续迭代。但如果你的应用场景需要展示推理过程比如教育类产品那过程质量从一开始就要纳入优化目标。6. 工具链与工程实践建议6.1 框架选择强化学习训练框架的选择取决于你的团队技术栈和模型规模。如果模型在7B以下用TRL或者verl这类轻量级框架就够了上手快、调试方便。如果模型在13B以上需要考虑DeepSpeed或者Megatron的集成显存优化和通信效率是重点。我个人的偏好是小规模实验用TRL大规模训练用verl。TRL的API设计很直观适合快速验证想法verl对分布式训练的支持更好适合正式训练。但verl的学习曲线陡一些需要花时间理解它的配置体系。6.2 显存优化强化学习训练比普通微调更吃显存因为需要同时保存策略模型、参考模型用于计算KL、PRM、优化器状态。7B模型的全参数强化学习训练至少需要4张80G的卡。如果显存不够可以考虑以下方案LoRA微调只训练低秩适配器显存占用大幅降低。但LoRA的表达能力有限强化学习的效果可能不如全参数训练。我的经验是LoRA适合做快速验证正式训练还是全参数更好。梯度检查点用时间换显存开启后显存占用降低30%到50%但训练速度慢20%到30%。参考模型共享如果KL系数很小参考模型和策略模型的差异不大可以考虑让参考模型和策略模型共享底层参数只保留顶层差异。这个方案比较trick需要根据具体情况调整。6.3 训练日志与复现强化学习训练的可复现性是个大问题。同样的配置换个随机种子结果可能差很多。为了尽量保证可复现我一般做以下几件事固定所有随机种子包括Python、NumPy、PyTorch的种子。记录完整的配置文件包括所有超参数和模型版本。保存每个评估周期的模型检查点方便回溯。记录训练过程中的所有指标不只是奖励和正确率还包括KL散度、梯度范数、学习率等。注意即使做了所有这些完全复现仍然很难。强化学习的随机性来自多个环节采样、环境交互、梯度更新。我的建议是不要追求完全复现而是关注统计意义上的可复现——同样的配置跑三次结果在合理范围内波动就算可复现了。6.4 成本估算强化学习训练数学推理模型的成本主要包括GPU租用费用、数据标注费用如果用人工标注、PRM训练费用。以7B模型为例一轮完整的强化学习训练包括采样、评分、更新大约需要200到400 GPU小时。按市场价算一轮训练的成本在几千到一万多不等。如果要做多轮迭代成本会成倍增加。降低成本的几个思路用小模型做前期验证确认流程没问题再上大模型PRM训练一次后冻结多轮策略训练复用同一个PRM采样阶段用vLLM等推理加速框架吞吐量能提升3到5倍。我个人在实际操作中的体会是强化学习训练数学推理模型技术门槛其实没有想象中那么高真正的门槛在于耐心和迭代。第一轮训练效果不理想是常态关键是要能从失败中定位问题、调整方案、再来一轮。我见过太多人跑了一轮效果不好就放弃了其实再坚持迭代两轮效果可能就出来了。这个领域没有银弹但有方法。