自动搜索奖励函数!单卡40小时跑通GRPO闭环,模型F1提升0.19

Enhanced LLM Reasoning by Optimizing Reward Functions with Search-Driven Reinforcement Learning

自动搜索奖励函数!单卡40小时跑通GRPO闭环,模型F1提升0.19 论文图示

最近,强化学习(RL)在提升大型语言模型(LLM)复杂推理能力上的表现令人瞩目。特别是 DeepSeekMath 引入的组相对策略优化(GRPO)算法以及后续引发热潮的各类推理模型,证明了后训练(Post-training)阶段不仅能让模型学会说话,还能让模型学会思考。然而,在这条繁荣的技术路线背后,仍然隐藏着一个高度依赖人工经验的瓶颈环节:奖励函数(Reward Function)的设计。

ArXiv URL:https://arxiv.org/abs/2605.02073v1

在数学推理等任务中,奖励函数的设计面临着两难。如果仅仅对最终答案的对错进行打分(结果监督),信号颗粒度太粗,模型很难分辨出自己到底哪一步做对了,甚至容易学会用错误的逻辑凑出正确答案(Reward Hacking)。如果对推理过程的每一步进行打分(过程监督),又面临极高的标注成本和设计难度。为了打破这一僵局,来自俄克拉荷马大学(University of Oklahoma)的研究团队提出了一种全新范式:将奖励函数本身视为可以通过代码生成的搜索对象,让大模型在自动化闭环中自己迭代、优化奖励函数。

在这项研究中,作者构建了一个“生成—验证—训练—排名”的搜索闭环。该框架通过前沿语言模型生成候选的 Python 奖励函数代码,利用 GRPO 在基础模型上进行快速试错训练,并根据真实的推理测试集表现进行优胜劣汰,将结果反馈给下一轮。最值得注意的是,这套完整的自动化管线仅需一张消费级显卡(RTX 5090),在约 40 小时内即可跑通。实验结果证明,这一系统自动探索出的最佳奖励函数组合,在 Llama-3.2-3B-Instruct 模型上使 GSM8K 的推理 F1 分数达到了 0.795,相比于仅使用基础奖励的基线模型(F1 为 0.609),实现了 0.19 的绝对提升。

为什么奖励函数需要被“自动搜索”?

在传统的强化学习与偏好对齐(如 RLHF 或 DPO)流程中,无论是人工设定的规则还是训练出的奖励模型,通常都被视为固定的基础设施。一旦设定好,研究者的主要精力便集中在如何调整策略网络(Policy Network)来最大化这个固定的奖励。

但对于数学推理任务来说,怎样的推理过程才算“好”?模型是需要写出更多的中间步骤,还是需要更密集的数学计算式?这些问题很难提前用死板的规则定义。如果采用人工编写的 Python 验证脚本,不仅耗费大量专家时间,还极易挂一漏万;如果使用独立的奖励模型,又会增加额外的显存开销,并面临奖励模型自身鲁棒性不足的问题。

因此,本文提出,既然现代 LLM 已经具备了出色的代码生成与修改能力,为什么不把寻找最优奖励逻辑的任务也交给 LLM?只要有一个合理的反馈机制来过滤不合格的代码,系统就能在广阔的函数空间中,找到那些真正能指导基础模型提升推理质量的“金子”。

自动化搜索闭环:生成、验证、训练与排名

整个框架的核心是一个迭代的反馈机制。为了在有限算力下跑通整个流程,研究者选用了 Meta 的 Llama-3.2-3B-Instruct 作为固定的基础模型,并结合了 4-bit 量化与 LoRA(低秩微调)技术。整个搜索流程被划分为五个轮次,每一轮包含以下关键步骤:

框架概览

1. 候选奖励的生成与验证

在每一轮开始时,系统会提示一个前沿模型(论文中使用的是 Kimi K2)生成 10 个候选奖励函数。提示词不仅包含了 GSM8K 的部分真实训练数据和所需的函数签名(输入必须是 Prompt、补全内容和参考答案,返回浮点数列表),还明确要求模型生成此前没有尝试过的新颖逻辑。

为了保证生成的 Python 代码不会破坏训练环境,候选函数必须经过严格的四步沙盒验证:首先通过 AST 语法树检查拦截非法库导入,接着在剥离了危险内置函数的受限环境中执行,然后将函数绑定在只暴露正则化库、数学库和标签常量的命名空间中,最后输入假数据进行试运行。只有成功返回正确格式列表的函数,才能进入下一阶段。

2. 基于 GRPO 的快速试错训练

通过验证的候选奖励函数并不会直接被认定为有效。相反,系统会让基础模型带上这个新奖励函数“真刀真枪”地练一练。研究者使用了 GRPO 算法,该算法通过对一组采样的输出奖励进行相对标准化处理:

\[\hat{A}_{i,t}=\widetilde{r}_{i}=\frac{r_{i}-\operatorname{mean}(\mathbf{r})}{\operatorname{std}(\mathbf{r})}\]

由于 GRPO 消除了传统 PPO 算法中用于估计价值的 Critic 网络,其显存占用大幅下降,非常适合在单卡上配合 LoRA 快速迭代。每一轮,新生成的奖励函数会与三个不可被覆盖的“基础奖励”(分别负责检验严格格式、宽松格式和最终答案正确性)叠加,在 GSM8K 训练集上进行 500 步的 GRPO 训练。训练结束后,LoRA 权重会被卸载,以确保不同奖励函数之间的测试互不干扰。

3. 测试集排名与反馈驱动

经过 500 步快速训练的模型会在 GSM8K 的 1319 道测试题上进行全面评估。系统主要依据 F1 分数(平衡了答案精确度和格式合规性)对所有测试过的奖励函数进行大排名。

这里最精妙的设计是反馈回路:系统不仅记录这些分数,还会将排名前列的奖励函数的代码特征、轮次信息以及具体的 F1 表现打包成紧凑的文本摘要,直接注入到下一轮大模型的生成提示词中。高分奖励作为成功的进化范本保留,而低分奖励则隐性地告诉模型“这条路走不通”。正是在这种自然语言构建的演化压力下,生成的奖励函数质量逐渐提升。

实验结果:F1 稳步爬升与过程奖励的胜利

经过五个轮次的搜索,系统共产出了 50 个合法的候选奖励函数。研究者绘制了这 50 个函数在各轮次中的 F1 分布。

F1按轮次变化的箱线图

从分布数据可以看出,系统的整体表现呈稳步上升趋势。第一轮中候选奖励的平均 F1 仅为 0.596,而到了第五轮,平均值攀升至 0.632。其中单个表现最强的奖励函数(名为 thinking_steps_count)在第五轮被发现,单核作战便将 F1 顶到了 0.787。虽然第三轮的数据出现过微小回落,但这正符合启发式搜索在探索未知奖励空间时的正常波动。

Precision vs Recall 图

这 50 个函数中究竟藏着什么秘密?研究者提取了排名前十的奖励代码,发现了一个极具启发性的规律:排名前列的绝大多数是“过程监督”型的函数。

这些通过搜索脱颖而出的策略说明,由于那三个保底的“基础奖励”已经很好地负责了最后一步的答案核对,系统自动领悟到,再额外增加结果校验只会带来边际递减效应。相反,鼓励模型“多想几步”“把算式列清楚”的结构化过程奖励,能够与结果核对形成互补,从而最有效地引导模型得出正确的逻辑链。

奖励函数的组合魔法与对照验证

在得到 50 个打分各异的奖励函数后,作者进一步探究了将它们组合起来的效果。他们选取了搜索出的顶级奖励函数,与基础奖励构建了不同的融合配置(Ensemble)。

结果显示,结合了最佳几组发现的集成奖励,最终在 GSM8K 上拿到了 0.795 的 F1 分数和 0.660 的准确率。对比只使用了“基础奖励”跑完同样 GRPO 训练步骤的基线模型(F1 为 0.609),这一结果带来了足足 0.19 的绝对提升。

为了证明这一惊人涨幅不是因为“奖励加得越多分越高”,研究者还专门设置了一个“随机抽取 5 个奖励进行组合”的对照组。结果这个随机对照组的训练发生了严重崩溃,F1 分数暴跌至 0.047。这一反差强力证明,模型性能的飞跃并非来自多重奖励的简单堆砌,而是完全归功于那套通过测试集严苛排名挑选出的、高质量反馈信号。

此外,为了防止由于结构性奖励(例如仅统计思考行数)引发模型学会恶意注水(比如疯狂输出空话骗取行数奖励),这些被发现的过程奖励在最终使用时总是与核对最终答案的基础奖励进行加和计算。这样一来,如果模型瞎编步骤导致最终答案错误,最终答案的严厉扣分就会直接抹平前面的过程加分,从而在机制上杜绝了单一奖励容易引发的漏洞。

总结与工程启示

长期以来,如何为大模型的后训练提供高质量的指导信号,要么是财大气粗的大厂才能玩得起的人工标注游戏,要么是依赖难以调试的庞大奖励模型。而这篇研究用不到几十美元的 API 成本和单张消费级显卡几十个小时的等待,向我们展示了一条兼具优雅与实用性的平民路线。

将大模型的代码生成能力与 GRPO 高效的在线强化学习相结合,不仅让我们跳出了手动编写复杂奖励校验逻辑的泥潭,更让我们观察到了自动化系统对数学推理的真实理解。代码形式的奖励函数不仅易于被人类审查、修改和组合,其可解释性更是传统神经网络奖励模型无法比拟的。对于正致力于利用 RL 进一步挖掘小参数模型潜力的从业者而言,这种把评价标准本身交还给机器去试错迭代的思路,无疑提供了一张极具参考价值的寻宝图。