RFT-逻辑推理任务—“谁是好人”
一、什么是RFT
RFT(Reinforcement Fine-Tuning)是一种融合了强化学习(RL)与微调(Fine-tuning)的大模型高效训练新范式。与传统训练方式相比,RFT 不再严重依赖大量人工标注的偏好数据,而是借助自动化的 Grader 机制,对模型输出(Response)与参考答案(Reference)进行对比打分,并将这个 0~1 的评分视作奖励信号(Reward),以驱动模型不断优化。通过 RFT,模型能够自主思考并强化导致正确答案的思维路径,抑制导致错误的思维路径,显著提升推理能力。在许多实际场景中,用户只需提供少量专业数据,模型就可以借助 RFT 的强化学习过程快速“进阶”,迅速达到特定细分领域的“专家”水平。
二、RFT的主要流程
在 RFT 框架中,训练通常分为以下几个关键步骤:
(1)选取初始模型与包含参考答案(Reference)的训练数据;(2)得到模型的初始输出(Response)并通过 Grader进行打分,自动化地衡量输出质量;(3)强化学习策略优化,通常使用 PPO或GRPO算法进行策略更新,动态调整模型参数并不断修正不理想的输出策略。以下将对各阶段展开详细说明。
1. 初始模型选择与数据准备
首先可根据具体任务和领域需求灵活选取预训练大模型,平台提供了丰富的模型选择,包括百度自研大模型和众多开源大模型。您可以选择使用平台数据集或自己准备训练数据,数据格式要求明确,需包含明确的Prompt(问题)与Response(包含Reference参考答案)。Reference(参考答案) 为模型输出提供标准对照,使后续 Grader 能客观地进行评分,以产生可靠的奖励信号。
2. 模型输出与 Grader 评分
将训练样本输入模型后,模型会生成初步的回答(Response)。此时,自动化评分器 Grader 将对模型生成的输出与参考答案(Reference)进行对比分析,计算出一个介于 0 到 1 之间的评分,作为强化学习过程中的奖励信号(Reward)。Grader 的评判标准可以是:基于明确的规则或基于输出与参考答案之间的相似度或语义匹配度。引入自动化 Grader 可以替代传统依赖人工的主观标注,大幅降低人工成本。评分机制确保模型在训练过程中能及时获得客观反馈,使训练更高效、更具可扩展性。
3. 强化学习策略优化
获得Grader提供的奖励信号(评分)后,模型会将此信号输入强化学习算法模块PPO(Proximal Policy Optimization)或GRPO(Guided Reward Policy Optimization)进行策略更新。强化学习模块根据奖励信号的高低,动态调整模型参数,从而促使模型逐步倾向于生成得分更高、更贴合参考答案的输出,并不断纠正低质量或错误的输出路径。强化学习机制能一定程度上避免传统监督微调(SFT)可能陷入的局部最优问题,让模型具备更强的泛化能力。
三、逻辑推理场景描述
逻辑推理任务是要求模型从给定的前提或描述中推导出正确结论的一类任务。这类任务不仅考察模型对事实的记忆,还重点检验其对信息的整合、因果关系以及矛盾排查等能力。逻辑推理任务通常包括:信息抽取与整合、因果关系判断、矛盾检测、多步推导,所以需要模型进行分步骤、链式思考,逐步接近正确答案。在这类任务中,传统的监督微调(SFT)虽然能够提供初步的能力,但容易陷入“死记硬背”或局部最优,难以捕捉到复杂推理中隐含的多层逻辑关系。
因此,在逻辑推理场景下采用 RFT方法,其利用自动化评分器(Grader),对模型生成的中间推理路径和最终答案进行量化打分。这种基于规则或参考答案的0到1分数奖励,能够更精确地指导模型在每一步推导中优化思路,从而提升整体推理的正确性。模型不仅仅依赖训练数据中已有的答案,而是在探索过程中学会纠正错误、避免固定套路,提升在未知逻辑难题中的泛化能力,有效地弥补了传统微调在复杂推理任务中的不足,从而大幅提升模型在逻辑推理场景下的表现。
3.1 场景举例: 逻辑推理——“谁是好人”?
在虚构的“坏人与好人”推理问题中,模型需分析角色陈述的真伪,推断出“好人”与“坏人”的身份。此类问题考验模型的逻辑一致性分析与数学推理能力。我们用一个具体query来展示下该场景:
输入 | RFT前 -Qwen2.5-7B-Instruct 模型输出 |
---|---|
一个非常特殊的岛屿上只有好人和坏人居住。好人总是说真话,坏人总是说谎。你遇到三个居民:杰克、塞巴斯蒂安和詹姆斯。据杰克说:“詹姆斯是好人且杰克是好人。”塞巴斯蒂安评论道:“杰克是坏人且詹姆斯是坏人。”詹姆斯说:“塞巴斯蒂安是好人,仅当他是坏人时成立。”那么谁是好人,谁是坏人? | 输出 <think>首先,我们知道好人说真话,坏人说谎。我们可以从每个人的话开始分析。如果杰克是好人,那么他的陈述“詹姆斯是好人且杰克是好人”都是真的。但这与杰克是好人假设矛盾,因为如果他确实是好人,他不能同时断言他也是好人。因此,杰克是坏人,他的话是假的。这意味着詹姆斯不是好人,或是杰克不是好人或两者都是。由于我们假定杰克是坏人,那么詹姆斯应当是坏人。接着考虑塞巴斯蒂安的话:“杰克是坏人且詹姆斯是坏人”。这是真的,因为根据上面的分析,这两句话都是正确的。最后,詹姆斯的话“塞塞巴斯蒂安是好人,仅当他是坏人时成立。”意味着塞巴斯蒂安不可能既是好人又是坏人。因此,塞巴斯蒂安是坏人。这样,詹姆斯作为坏人的身份就得到了验证,因为他的陈述和整个逻辑的一致性。所以,只能是詹姆斯作为坏人,剩下的塞巴斯蒂安也是坏人。这就是逻辑分析过程。 </think> <answer> (1) 情况下詹姆斯和塞巴斯蒂安都是坏人。 </answer> |
可以看到,在上述的case模型的输出中,思考过程已经逐渐混乱,并且题目本身需要区分3个人的身份,在最终答案中模型只给出2个人的身份结论,并未有效的推理出该问题。我们对模型进一步进行RFT,希望能解决模型输出准确性问题。
3.2 任务挑战
本次RFT任务面临几个主要挑战,包括但不限于:
- 数据准备:开源数据集 K-and-K/knights-and-knaves(约4,500条数据)包含了英文版本的问题、思考过程以及问题答案。本平台对数据进行了预处理,数据格式要求模型不仅能够理解问题,还需生成合理的推理过程,确保中间链条的完整性与逻辑性,同时具有更强的中文理解能力。
- 逻辑推理能力不足:原模型 Qwen2.5-7B-Instruct 在处理复杂数学逻辑推理问题时表现欠佳。已有研究表明,具备链式思考(Chain-of-Thought)能力的模型在此类任务中具有明显优势,但在多人场景下,两类模型的输出结果均存在较大不可预测性,整体正确率均偏低。
- 收敛速度慢:为保证实验结果的稳定性和可靠性,需采用多 Epoch 训练进行持续观察。
四、基于Qwen2.5-7B-Instruct进行RFT的具体步骤
-
Step 1:创建RFT训练任务
-
在千帆ModelBuilder上,选择「模型精调」→「偏好对齐」→「RFT」,并选择base模型Qwen2.5-7B-Instruct,此模型编码和数学能力较强,在逻辑类问题处理方面表现较好 。
选择训练方法 - RFT基于奖励信号驱动模型迭代,奖励规则中定义了评估模型输出好坏的规则。平台预置五种规则,分别是字符串比较(相等或包含两种情况)、字符串相似度对比、数学答案匹配和逻辑推理匹配。我们选择奖励规则为“逻辑推理匹配”,可以提高模型对数学逻辑问题的回答准确率。
-
目前RFT的强化学习算法模块提供PPO和GRPO方法,PPO通过是一种策略梯度方法,通过裁剪(clipping)机制来限制策略更新的幅度,从而防止策略发生过大的破坏性变化,在多种复杂场景下高效且适应性强。GRPO在 PPO 基础上利用广义优势估计精准评估策略优势,采用群组采样方法,并使用更保守的策略更新方式,在训练中具备更高的效率。在该场景下,我们采用GRPO方法进行训练。
奖励规则配置 - 平台提供的默认参数配置能够满足大部分RFT任务需求,但鉴于本次逻辑推理任务对推理精度及链式思考能力提出了更高要求,我们基于前期重复实验数据,对关键参数进行了针对性优化调整,以提升模型在复杂逻辑推理场景下的整体表现,下文展示了具体参数的设置情况。
-
-
Step 2:准备训练数据
- 采用进行数据处理后的开源数据集K-and-K/knights-and-knaves(约4,500条数据),包含了2-8人的逻辑推理情形;平台数据配置中,数据格式需包含Prompt(问题)与Response(参考答案),您可以直接使用本平台的预置数据集进行训练,数据样例如下:
[
{
"prompt": "一段用户和助手之间的对话。用户提问,而助手解答。助手首先在内心思考推理过程,然后向用户提供答案。推理过程分别用 <think> 和 </think> 标签包裹,答案分别用 <answer> 和 </answer> 标签包裹,例如:\n<think> 此处为推理过程 </think>\n<answer> 此处为答案 </answer>。\n\n现在用户要求你解决一个逻辑推理问题。请先进行思考,然后在 <answer> 和 </answer> 标签内清晰列出每个角色的身份。请逐一列出每个人的身份,例如:\n<think> 此处为推理过程 </think>\n<answer> (1) Zoey 是骑士\n(2) Oliver 是骑士\n(3)... </answer>\n\n用户:一个非常特殊的岛屿上只居住着骑士和骗子。骑士总是说真话,而骗子总是撒谎。你遇到了3位居民:Jacob, Chloe 和 Abigail。Jacob 表示 Abigail 是骑士。而 Chloe 则说:“Jacob 是骗子,而 Abigail 是骑士”。Abigail 告诉你,Jacob 是骑士当且仅当 Jacob 是骗子。那么,谁是骑士,谁是骗子?\n\n助手: <think>",
"response": "(1) Jacob 是骗子\n(2) Chloe 是骗子\n(3) Abigail 是骗子"
}
]
- Step 3:发布模型与开始训练
我们处理后的数据并未直接采用原数据集中记录的思考过程,而是通过预定义提示词模板为模型明确指定推理策略,并提供最终答案,从而为模型预留了更为充裕的思考空间,以契合 RFT训练范式的要求。这种方法对 RFT 的优势在于:对每一步逻辑推导提供针对性的奖励反馈,优化模型中间推理过程的准确性和连贯性,借助预定义提示和结构化数据,模型在训练过程中能够获得更明确的梯度信号,进而加速收敛并降低局部最优风险。
- Step 4:结果查看与分析
您可以通过查看“评估报告”以及在训练过程中或结束后的“训练过程可视化”来监测实验进度和训练情况。平台提供多种指标以评估训练效果,主要关注指标Train Reward(衡量模型在训练过程中获得的平均奖励值,反映策略的性能)、Train Policy Loss(表示策略梯度损失,指示策略更新的方向和幅度,帮助判断训练的稳定性和收敛性)。根据具体任务需求,还可关注其他指标,例如,在逻辑推理任务中,若数据集的问题难度逐渐增加,可以观察 Train Response Length(训练响应长度),有助于判断模型在处理不同难度问题时,其输出的推理过程长度是否与问题复杂度相匹配,从而评估模型的推理深度和适应性,注意:虽然响应长度可能在一定程度上反映推理过程的复杂性,但仅凭长度并不能完全评估推理质量。
如何观察实验结果确保实验有效?
- 在 RFT 实验中,我们更关注模型的 Reward 值,即模型答案在每次回答后的得分情况。当模型的正确率达到预期时,就能明确表明训练过程是有效的。本实验的 Reward 设计标准如下:当模型给出的逻辑推理答案完全正确时,奖励值为 1,其他情况下奖励值为 0。
- “Train Reward” 图表直观展示了训练过程中每一个 Step 上所有训练样本回答得分的平均值,该指标越接近于 1,表示模型在当前阶段的整体正确率越高,训练效果也就越理想。相对而言,其他指标(如 Policy Loss 或 Response Length)无法直接反映出模型的真实推理准确性。因此,您可以结合具体任务的侧重点,对其他指标进行更详细的分析和判断。
- 下图展示了训练进行到 Step 150 时的各项指标情况,其中 Reward 值已达到 0.87,说明当前训练阶段的模型回答整体正确率约为 87%,表明训练已取得较好的阶段性成果,距离预期目标接近,可以继续推进训练以进一步优化模型表现。
- Step 5:模型部署与效果快速评估
配置成功后,在平台即可一键开启模型训练,训练完成后一键部署至千帆ModelBuilder,部署后即可创建在线推理服务。在创建服务中,选择合适的算力单元进行购买,即可在业务上部署属于您自己精调后的大模型。部署完成后,您不仅可以调用API实现业务效果,在调用前也可以在体验中心验证模型效果,进而再进行选择。
平台支持创建自动评估任务,可以通过ERNIE-4.0-Turbo等模型作为裁判员模型并自定义评估指标,快速得到模型评估结果,您可以创建自己的评估指标,以下评估方法作为参考:
- 增加您RFT训练后的模型,并使用平台提供的预置数据集(评估集)进行效果评估。
- 评估方法选择“自定义评估指标”,并选择您想要的裁判员模型,新建“打分Prompt”。本试验采取多场景评估方式,评估指标为准确率,详细结果请阅读下文。您可以参考我们提供的“打分Prompt”,根据分纬度评估指标打分来查看您的模型RFT训练后的效果。若想查看准确率情况,请侧重查看“逻辑推理”纬度的得分情况。
五、模型调用对比示例
5.1 结果验证—显著泛化与数据效率提升
基于以往输入的问题,经过RFT微调后,模型不仅能够输出精准的答案,而且逻辑推理过程清晰、条理分明。相比之下,微调前的Base模型在回答问题时存在明显错误,尤其在高难度问题上甚至出现语言混乱。通过RFT,仅需4500条训练数据即可显著提升模型泛化能力,确保在复杂场景下依然能给出合理、连贯的解答。
分类 | 输入 | RFT后:Qwen2.5-7B-Instruct模型输出 |
---|---|---|
简单问题 | 一个非常特殊的岛屿上只有好人和坏人居住。好人总是说真话,坏人总是说谎。你遇到三个居民:杰克、塞巴斯蒂安和詹姆斯。据杰克说:“詹姆斯是好人且杰克是好人。”塞巴斯蒂安评论道:“杰克是坏人且詹姆斯是坏人。”詹姆斯说:“塞巴斯蒂安是好人,仅当他是坏人时成立。”那么谁是好人,谁是坏人? | <think>詹姆斯的声明是一个矛盾命题,因此詹姆斯一定是坏人。由于杰克说詹姆斯是好人,杰克是在说谎,所以杰克也是坏人。因为塞巴斯蒂安说杰克是坏人且詹姆斯是坏人,塞巴斯蒂安说的都是真话,所以塞巴斯蒂安是好人。 </think> <answer> (1) 杰克是坏人 (2) 塞巴斯蒂安是好人 (3) 詹姆斯是坏人 </answer> |
复杂问题 | 一个非常特殊的岛屿上只居住着好人和坏人。好人总是讲真话,坏人总是说谎。你遇到了7个居民:Isabella、Mason、Ella、Harper、Daniel、David 和 Michael。根据Isabella的说法,“David是一个好人”。Mason提到,“Daniel不是一个好人”。Ella说,“Mason不是一个坏人”。Harper的话是:“Daniel是一个好人,David是一个好人”。Daniel说,David是一个好人或者David是一个坏人。David说,“如果Ella是一个好人,那么Daniel是一个坏人。” Michael说,“如果Harper是一个好人,那么Daniel是一个坏人”。那么,谁是好人,谁是坏人? | <think>根据David的话,他要么是好人要么是坏人。但是David的说法与Harper一致,因此David必须是好人。既然David是好人,那么Harper的话也是正确的,所以Harper也是好人。既然Daniel的话与David一致, Daniel也是好人。既然Michael说如果Harper是好人,那么Daniel是坏人, Michael在说谎,所以Michael是坏人。既然Mason说Daniel不是好人,Mason在说谎,所以Mason是坏人。既然Ella说Mason不是坏人,Ella在说谎,所以Ella是坏人。既然Isabella说David是好人,Isabella说的是真话,所以Isabella是好人。 </think> <answer> (1) Isabella 是好人 (2) Mason 是坏人 (3) Ella 是坏人 (4) Harper 是好人 (5) Daniel 是好人 (6) David 是好人 (7) Michael 是坏人 </answer> |
5.2 效果验证—RFT“超强增效”:训练后的模型回答准确率大幅提升,超越OpenAI o1模型!
在3-8人复杂度递增的场景中,RFT后的Qwen2.5-7B-Instruct平均准确率提升48%,超越了OpenAI o1;同时我们也对比了 SFT-全量更新 模型与 RFT 模型 的逻辑推理准确率,结果表明:在逻辑推理场景下,采用 RFT 后的模型性能提升更为显著,训练天花板更高,以下展示了我们的实验结果,采用准确率观测训练效果。具体准确率的计算方式:准确率采用实验方式进行评估,我们分别选取了六个不同的逻辑推理场景进行测试,每个场景设定 100 个测试样本。模型对每个样本进行推理并给出答案,当且仅当模型给出的答案与参考答案完全匹配时,记为正确,否则记为错误。最终准确率计算公式为完全正确样本数与该场景总样本数的比值。通过该定义和计算方式,可以更加准确且直观地评估不同模型在各类逻辑推理任务中的真实表现与泛化能力。
- 数据指标详情
模型 | 3人场景 | 4人场景 | 5人场景 | 6人场景 | 7人场景 | 8人场景 | 平均表现 |
---|---|---|---|---|---|---|---|
OpenAI o1 | 0.51 | 0.38 | 0.38 | 0.35 | 0.30 | 0.20 | 0.35 |
Deepseek-R1 | 0.73 | 0.77 | 0.78 | 0.75 | 0.88 | 0.83 | 0.79 |
GPT-4o | 0.57 | 0.49 | 0.32 | 0.23 | 0.21 | 0.11 | 0.32 |
GPT-4o-mini | 0.42 | 0.34 | 0.17 | 0.09 | 0.10 | 0.01 | 0.19 |
NuminaMath-7B-CoT | 0.13 | 0.12 | 0.05 | 0.01 | 0.00 | 0.00 | 0.05 |
Deepseek-Math-7B | 0.21 | 0.08 | 0.06 | 0.02 | 0.00 | 0.00 | 0.06 |
Qwen2.5-7B-Instruct(base模型) | 0.170 | 0.260 | 0.090 | 0.020 | 0.010 | 0.040 | 0.137 |
Qwen2.5-7B-Instruct+RFT(global step 160) | 0.810↑ | 0.770↑ | 0.680↑ | 0.580↑ | 0.520↑ | 0.360↑ | 0.62 ↑0.48(跟base模型相比) |
Qwen2.5-7B-Instruct+SFT-cot | 0.54 | 0.56 | 0.46 | 0.30 | 0.21 | 0.16 | 0.37 |