同一道算术题,模型可以写出流畅解释,也可以碰巧猜中答案。假如我们手里有可靠的标准答案,能不能让它自己尝试多种解法,再根据对错学会更好的解题方式?

上一章的偏好训练让模型学习“哪份回答更合适”。本章换一个更容易核验的目标:计算结果是否正确、程序是否通过测试。关键不只是怎样给分,还包括给分以后更新什么,以及一个分数究竟能证明多少事情。读完后,你应当能拆开一条推理强化学习流程,并找出评分规则可能教错模型的地方。

1.把生成回答看成连续做选择

模型每生成一个token,都根据题目和已有前缀分配下一步概率。在强化学习语言里,这种决定行动的规则叫“策略”。用π表示策略,用θ表示它的参数,πθ就是由这些参数决定的生成规则。行动可以细到选下一个token,一整段回答则包含一串行动。

“采样”是按概率抽取行动。给同一题生成四份回答,不保证得到四种不同解法,却让训练有机会看到不同尝试。“奖励”是评价这些尝试的数值信号,例如最终答案正确记1,否则记0。目标是在一类题目上,让策略以后取得更高的平均奖励,而不是给某一份回答贴上永久正确的标签。强化学习的策略、采样与奖励

这与SFT有个重要差别。SFT通常已经拿到示范文本,让模型提高示范token的概率;强化学习先让模型按当前策略尝试,再用评价反馈影响参数更新。奖励可以只告诉模型“这一回成功了”,无需事先提供每一个正确步骤。

不过,没有逐步示范并不等于没有人类设计。题目从哪里来、成功怎么定义、输出怎样解析、失败是否扣分,都决定了模型实际学习的任务。

2.一个结果分数怎样影响参数

设一份回答拿到了高于基准的奖励。策略优化会利用这份回答的生成概率,构造训练目标,使产生类似成功选择的倾向得到加强。低于基准的尝试则提供相反方向的信号。之后仍要经过反向传播和优化器,参数才真正改变。策略优化与基准

先用只有两个动作的例子接上“平均奖励”和“生成概率”。临时把整份回答当一次动作:回答u的固定奖励为1,回答v的固定奖励为0;策略分别以s和1−s的概率选择它们,0<s<1。这里直接把s当成可调整的量,暂不引入真实网络参数。平均奖励J=s×1+(1−s)×0=s,因此s增加0.01,J也增加0.01,斜率为1。

如果只能采样,看不到所有候选,怎样估计这个斜率?对抽到的回答计算“奖励×它的log概率斜率”:抽到u时是1×d(ln s)/ds=1/s;抽到v时奖励为0,信号就是0。按实际采样概率平均,两者合成s×(1/s)+(1−s)×0=1,恰好是J的斜率。d/ds只是表示对s做微小改变时的局部变化率;ln概率的求导把1/s带了进来,随后由采样概率s配平。

例如s=0.5时,一次采样可能给出信号2,也可能给出0,各占一半,平均才是1。有限批次未必恰好各抽一半,所以得到的是有波动的估计。这个例子说明奖励乘log概率并非任意拼出的口诀:它的梯度按当前策略采样取平均,可以对应平均奖励的梯度。训练程序习惯最小化损失,所以把这个“向上改善”的表达式加负号。OpenAI策略梯度推导

因此,“奖励加1”不是给某个权重直接加1,也不是把答案概率提高一个百分点。所有token共享许多参数,一次更新会影响很多输入;不同样本的信号也会互相叠加。训练目标给出的是改进方向,不能保证每份高分回答更新后都恰好更常出现。

难点叫“信用分配”:一段回答有很多选择,最后却只收到一个分数。到底是哪一步算对了、哪一步只是多余文字、哪一步虽然错误却碰巧没影响结果?终点分数通常没有直接回答这些问题。

可以把它想成只知道一支队伍赢了比赛,却不知道每位队员的贡献。用整段回答的概率接受同一个结果反馈,是一种可计算的做法;它并没有自动获得逐步因果解释。长解释中出现“让我检查一下”,也不能单凭这句话证明真的检查成功了。

3.拿四份回答,亲手分三种分数

下面全部是手写教学例。题目是:计算24÷(3+5),结尾使用“答案=整数”。正确计算为3+5=8,再算24÷8=3。

  • 回答A:3+5=8,24÷8=3;答案=3
  • 回答B:3+5=6,24÷6=4;答案=4
  • 回答C:3+5=6,24÷6=4;答案=3
  • 回答D:3+5=8,24÷8=3;得数为3

先给结果分O:由我们人工核对最后表达的数值,正确记1。A、B、C、D依次得到1、0、1、1。C的最后答案虽然正确,前面的推导明显错误。

再给格式分F:只检查是否按指定结尾书写。四份回答依次得到1、1、1、0。D的数学没有错,只是格式不符合要求。这两类错误应分别记录,否则修格式时可能被误以为修好了计算。

最后给步骤分P:本例要求算式正确,而且解释能支持结论,四份依次得到1、0、0、1。这里P是我们为整份解答做的简化检查;实际过程监督可以逐步标注,远比这个二值例子细致。

试着设计总奖励R=0.8O+0.2F。四份回答得到1、0.2、1、0.8。A和C仍然同分,错误推导没有受到惩罚;D反而低于C。问题并非加权求和算错,而是这份奖励根本没有检查步骤。

系数表达了设计者的取舍,不能由算法替我们决定。改变系数,也无法凭空补上评分规则没有观察到的信息。

看图1时,先看四份回答究竟错在哪里,再横向读三个评分列。这里的O由人工理解最后表达的数值,F只管结尾格式,不能把D的格式失败偷偷改算成数学失败。

16|推理强化学习:答案可验证时,奖励怎样设计:图1

图1|四份回答分别接受结果O、格式F和步骤P检查。R=0.8O+0.2F没有使用P,所以A与C同得1,D得0.8;奖励看不见的错误,不会因为加权计算而自动被惩罚。

4.群组相对反馈怎样进入损失

现在只用结果分:1、0、1、1。组内平均值是0.75,每份减去平均值,得到0.25、−0.75、0.25、0.25。直觉很简单:相对于同题的其他尝试,哪些回答更值得鼓励?

DeepSeek-R1报告采用的GRPO,就利用同一问题的一组奖励形成相对反馈,避免另训一个单独的价值评估模型来提供这种基准。报告中的算法还涉及按组内波动缩放、限制更新幅度及参考策略约束;这里的减均值仅展示核心直觉,不是完整算法。DeepSeek-R1技术报告第2.2节

这些差值不是四个新概率,也不是最终权重改变量。如果四份回答全得0,减均值后就全是0,这组结果奖励没有提供区分方向。即使其他训练项仍可能起作用,单靠“再比一次同样的失败”也没有获得成功线索。

如果完整实现还要除以组内标准差,相同奖励会带来零方差,需要数值保护或专门处理;本例只减均值,没有执行除法。

现在把第2节的原始奖励换成相对反馈。把已经采样的回答暂时固定,把这次相对反馈记为a,也称本次的优势估计,并在求梯度时把a当常量。对同一批回答,不在反向传播时重新抽token或重算一个随参数变化的a。一个最小的代理损失是:

L=-a×ln πθ(y|x)=-a×各生成位置的log概率之和。

如果a为正,让这段回答的对数概率增大,L就减小;如果a为负,同样的改变会让L增大,梯度下降便有相反倾向。反向传播经过的是πθ的概率计算,采样出的token编号和验证器的0/1结果不需要连续可导。策略梯度与加权log概率:OpenAI官方源码文档

选读:减去基准为何可行,旧样本为何不能一直用

固定请求x、有限候选与奖励r(y),用Σ_y表示对候选求和,∇θ表示对策略参数求梯度。在概率为正且可微时,∇θπθ=πθ∇θlnπθ,因此:

∇θJ=Σ_y r(y)∇θπθ(y|x)=Σ_y πθ(y|x)r(y)∇θlnπθ(y|x)。

最右边正是“按策略抽样,再平均奖励加权的log概率梯度”。若减去一个对当前请求固定、且不随本次抽到哪个回答而变的基准b,多出来的项为bΣ_y∇θπθ=b∇θ1=0。因此用a=r−b不会改变这个期望梯度;求梯度时固定b与a。OpenAI策略梯度与基准

接着使用第2节的u/v例子。采样时的旧策略是s₀=0.5,取固定基准b=0.5,所以两个a分别是+0.5和−0.5。在s=0.5处,u的信号为0.5/s=1;v的信号为(−0.5)×−1/(1−s)=1。它们的平均仍为J的斜率1。这里的信号是−L的梯度,即提高奖励的方向;L的梯度符号相反。

但如果继续用旧策略各占一半的数据,把s评估到0.8,而不修正采样权重,平均信号变成0.5×(0.5/0.8)+0.5×(0.5/0.2)=1.5625;真实J=s的斜率仍为1。这个两动作例中方向尚未反转,但“等于真实梯度”的关系已经失效。若按新的0.8/0.2分布重新采样取期望,则又得到1。

因此要区分旧采样策略π_old与正在更新的πθ:朴素加权log损失在采样点给出梯度估计,有限样本带来噪声,走离采样点又带来分布不一致。概率比校正和裁剪等机制正是在处理这些问题。上面固定基准的证明也不能直接覆盖“用包含本样本奖励的组均值作基准”;组内估计和标准化要按算法另行分析,四份回答例只展示相对反馈。

只为看清符号,固定一份回答,把它的整段概率从0.2比较到0.3。a=0.25时,L从-0.25ln0.2≈0.4024降到0.3010;a=-0.75时,L从0.75ln0.2≈-1.2071升到-0.9030。第二种反馈因此不鼓励这次概率增加。代理损失允许为负,它的大小不是答题正确率。

这里比较的是已采样文本上的局部优化信号,不是宣称一次更新会恰好把0.2变成0.3。采样分布随策略改变,反复把旧批次的这个简式压到更低,并不保证未来平均奖励改善。完整GRPO还要处理旧策略概率比、裁剪、归一化和参考约束;不能把这个教学目标当作完整实现。

16|推理强化学习:答案可验证时,奖励怎样设计:图2

图2|先用四份结果分得到相对反馈,再把a乘到已采样回答的log概率上。橙色回边只沿可训练策略的概率计算求导;离散回答、验证器与本次a在这一小步中固定。下方曲线展示正、负反馈对同一段概率变化的相反作用。

因此,题目过易或过难都可能降低反馈价值:全答对时缺少区分,全答错时又缺少可学的成功。需要合适的题目难度、一定的尝试多样性,以及足够可靠的评价。多采样会增加找到有效尝试的机会,也会增加生成和验证成本。

5.结果奖励和过程奖励分别看见什么

结果奖励检查终点。算术题可以比较数值,程序题可以运行测试。它的优势是不用逐步规定解法,模型可以找到与示范不同的路线;弱点是成功可能掩盖中间错误,失败也未必告诉我们错在何处。

过程奖励检查途中某一步是否有效,因而有机会把A与C区分开。相关研究在数学解题上比较了只看最终结果和逐步监督;过程评价在其研究设置中表现出优势,但这不是对所有任务的普遍保证。过程监督原始研究

过程评价也有自己的难题。步骤如何切分?一个简短的跳步是省略了常识,还是偷偷跳过难点?模型提出一条不同于标准解答的路线,评价器能否识别它的合理性?若评价器只喜欢熟悉的句式,模型可能学会写得“像在认真推理”,而不是把题解对。

此外,过程评价可以用于筛选训练数据、形成训练奖励,也可以只用于使用时挑选候选。这些是不同用途。“用了验证器”并不说明一定做了强化学习,必须继续追问验证结果有没有进入参数更新。

6.验证器也要接受测试

假设一个粗糙程序只检查回答里是否出现字符“3”。“答案=13”也会通过。若训练不断奖励这种输出,模型就可能提高这类投机行为的概率。我们想要的是正确答案,实际优化的却是一个能被钻空子的字符串规则。

这叫奖励投机:提高代理分数的行为偏离了真正目标。它不要求模型先拥有人的欺骗动机,只要某类输出更容易得分,优化就可能把它放大。神经网络评价器和规则评价器都可能出错,不能把“程序给分”直接等同于“客观真理”。

相反,过严的验证器也会误伤。题目允许等价分数,却只接受小数写法;程序实现正确,却因为测试环境限制被判失败。错拒同样会教模型远离原本合理的行为。

改进应针对具体漏洞:明确唯一最终答案的提取方式,规范化允许的等价表达;为程序补充边界和隐藏测试;抽查高奖励样本中是否出现反常模式。验证代码与被测代码也要隔离,不能让被测输出修改评分规则。

“可验证”也不是一张永久贴在题目上的标签。同样是数学任务,核对一个整数与检查一篇证明,所需验证能力可能差很多。标准答案如果抄错,精确匹配反而会稳定奖励错误;证明若省略关键条件,最终结论碰巧成立也不能补上缺口。先检查参考答案和验证条件,才有资格把分数当成学习信号。

这与软件测试中的判定依据很接近:测试程序不仅要能运行,还要正确区分通过与失败。误放会把错误输出标为高奖励,策略更新随后提高同类选择的倾向;错拒会把本来有效的解法压低。优化越认真,这个错误反馈回路就越值得检查。

不过,作为训练输入的测试分数与作为产品验收的独立测试不是同一层。前者参与决定参数向哪里更新,后者检查更新后的模型在未见题目和既定预算下是否满足要求。可以记录采样策略版本、评分规则版本、奖励分项和验收结果,让异常有迹可查。

16|推理强化学习:答案可验证时,奖励怎样设计:图3

图3|宽松验证器把“答案=13”误放为正确,会产生错误的正向学习信号;过严验证器把允许的“1/2”错拒,也会压低有效行为。两条路径都要从评分规则与独立样本核查,不能只看训练奖励。

增加测试能缩小漏检范围,却不等于穷尽所有可能输入。若一个程序只通过已知的十个测试,我们获得的是这十个条件下的证据,而不是任意条件下正确的证明。

7.真实模型为什么同时使用SFT与RL

DeepSeek-R1-Zero从基座直接做强化学习,报告采用规则式准确性和格式奖励;作者同时指出了可读性、语言混杂等问题。正式DeepSeek-R1则把冷启动示范、推理强化学习、筛选数据后的监督微调与后续强化学习组合起来。因此,“R1研究了无需SFT的路线”不能改写成“R1系列训练都没有SFT”。DeepSeek-R1官方模型说明

Qwen3公开报告为较大模型区分长推理示范的冷启动、推理RL、思考模式融合和通用RL。推理RL采用题目与验证器配对,并考虑难度与覆盖;后面的模式融合又使用SFT。这表明示范学习和自主尝试可以前后衔接,而不是互相淘汰。Qwen3技术报告第4节

可以这样理解分工:示范帮助模型获得可用的起点,RL利用反馈调整尝试倾向,新的SFT数据可以补足表达与任务覆盖。具体顺序取决于模型和目标,公开案例支持这种组合存在,不能据此猜测其他闭源模型的内部流水线。

8.训练时学会与使用时多算

训练时,模型生成尝试、获得奖励,再更新参数;许多题目的经验因此影响未来回答。使用时,固定同一套参数,让它多写一些token、多采样几份答案或接受外部检查,增加的是本次计算量。

一个实用的纸笔检查是画两列账:一列写“这一轮改变了哪些参数”,另一列写“这一题增加了多少生成或核验”。如果第一列为空,第二列再长,也不能说模型完成了一轮训练;如果第一列发生变化,又必须用训练后的模型重新评测。这样就不会把保存一次对话、增加思考预算和更新模型权重混在一起。

二者可以合作:后训练可能让模型更善于利用额外计算,使用时的预算又决定它能尝试多久。但只观察“解释更长”和“分数更高”同时出现,不能证明长度本身导致提升。训练数据、模型版本、采样方式都可能一起变了。

Qwen3报告还单独研究思考预算,说明预算是需要控制和评测的变量。对一道简单题,更多文字可能只是增加等待;若每次都沿着同一错误假设走,更多尝试也可能重复错误。Qwen3官方说明

判断训练是否有效,应留出独立题目,并分别观察正确率、格式合规、验证器漏检和计算开销。只盯训练奖励,可能是在见证模型越来越适应评分漏洞。开放式写作或现实决策也未必有唯一可靠答案,不能硬套算术题式的结果奖励。

本章练习

题目

问题1|奖励遗漏了什么

使用R=0.8O+0.2F,算出回答C和D的奖励。为何C更高,却不能据此说C的数学解释更好?

问题2|奖励乘在哪里

固定一份已采样回答,a=-0.75,序列概率由0.2改成0.3。用L=-a ln p比较前后损失,并说明反向传播经过哪一部分。若同组四个结果奖励全为0,减均值能区分它们吗?把旧批次的这个简式一直优化下去,能保证新策略平均奖励持续改善吗?

问题3|核验与训练的边界

固定模型生成十份答案,再用独立计算器选择一份,属于强化学习吗?如果后来把计算器评分用于训练,应先检查验证器的什么问题?

思考提示

提示1|对应问题1

列出C和D的O、F、P;检查奖励究竟使用了哪两列。

提示2|对应问题2

先保留a的负号;再区分固定评分与可训练的概率计算,并检查旧批次是否仍代表更新后的采样分布。

提示3|对应问题3

看有没有参数更新,再构造一个错误答案被放过或正确答案被错拒的测试。

参考答案与解析

答案1|对应问题1

C的O=1、F=1,所以R=1;D的O=1、F=0,所以R=0.8。C的步骤P=0,D的P=1,但R没有使用P。这个排序反映结果与格式规则,遗漏了推导是否支持结论。

答案2|对应问题2

L从约-1.2071变为-0.9030,即升高;这项负反馈不鼓励该概率增加。梯度经过策略给固定回答计算概率的路径,不是对离散0/1评分直接求导。全0减均值仍全0,不能区分步骤质量;若再做标准差归一,还须处理零方差。持续优化旧批次也没有所说的保证:策略已改变,固定样本仍来自旧分布,简式梯度一般不再等于新策略平均奖励的梯度;须按完整算法处理采样与更新,并重新评价平均奖励。

答案3|对应问题3

仅有生成与挑选不构成强化学习,因为参数未更新,增加的是本次推理计算。若评分进入训练,应测试最终答案解析、等价表达、边界情况和标准答案本身,抽查误放与错拒,并隔离被测内容与评分规则。例子包括不能因为“答案=13”含字符3就通过,也不能错拒题目允许的等价分数。

下一章

一个大模型已经能产生许多有用示范时,小模型是否必须重走全部试错过程?下一章讨论蒸馏:把教师的文本或概率分布变成学生的训练信号,究竟能迁移什么,又会把哪些错误一起带过去?