想象你是一位体操队的主教练。以往你会请一位“结果裁判”:运动员完成整套动作后,他只报一个总分——9.5 分。这个分数能告诉你“表现如何”,却说不清是哪个空翻角度偏了、哪次落地重心没稳住。于是你又请来一位“过程裁判”,他站在场边,每跳完一个动作立刻记录:这一步腾空高度不够、那一步落地很稳。有了过程裁判,你才知道该让运动员重点练什么。训练“过程奖励模型(PRM)”,就是在 AI 的推理模型里培养这样一位过程裁判——它不看最终答案,而是对推理链条上的每一步单独评判:这一步推导是否正确?这一步跳跃是否合理?这篇文章会带你走完 PRM 训练的完整路线:从步骤数据的准备、自动生成软标签,到模型架构设计、损失函数定义,再到训练后如何用这位“裁判”提升推理准确率。读懂它,你就掌握了一项让大模型“步步可查、错位可追”的关键技能。
掌握 PRM 训练方法,意味着你拥有了让大模型在推理中“步步可查、错位可定位”的能力——这是推理优化工程师与强化学习研究员的核心竞争力。
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
1. PRM基础概念
想象你请来两位裁判给运动员打分:结果裁判站在终点,等整套动作结束后给出一个总分;过程裁判则站在场边,运动员每完成一个动作就记录一条——“这个空翻腾空高度够”“这次落地膝盖弯了 15 度”。要让运动员真正进步,后者给出的信息密度远超前者。PRM(过程奖励模型)就是大模型世界里的“过程裁判”。
在推理模型的训练与评估中,很早就有“结果裁判”ORM(结果奖励模型)。它读完整条推理链,只输出一个分数判断最终答案对不对。问题在于:最终答案错时,你不知道是哪一步错的;答案对时,也不知道是不是“蒙对”的。PRM 把奖励从“整体”细化到“每一步”,让错误的定位从“整条链”缩小到“具体某一步”。
形式化地说,PRM 是一个打分函数:给定问题以及截至第 i 步的推理前缀,它输出一个 0 到 1 之间的分数,表示“第 i 步大概率是正确的”。训练完成后,这位裁判有三种典型上场方式:一是对多条候选推理链做离线择优,二是作为强化学习里的逐步奖励信号,三是作为错误定位工具,回溯到推理链中出错的具体步骤。
正如体操队有了过程裁判,才能把训练拆解成可逐项改进的动作单元;推理模型有了 PRM 这位“步步把关”的裁判,才知道该在哪一步回溯、在哪一步继续,而不是对着一个总分叹气。
- 上下文输入$q$ 表示原始问题(如一道数学应用题),$a_{1:i}$ 表示从第 1 步到第 $i$ 步的推理前缀,二者构成了裁判做判断时的全部依据。
- 评分函数$f_{\theta}$ 是参数为 $\theta$ 的神经网络(通常是大语言模型加打分头),它把上下文映射为一个实数,表示“这一步大概率对不对”。
- 过程奖励输出$r_i$ 是第 $i$ 步的过程奖励,取值范围通常在 0 到 1 之间,越接近 1 代表该步越有可能是正确的。
2. 训练数据准备
要训练一位合格的过程裁判,第一步是给他看大量带步骤评分的比赛录像。对 PRM 来说,这些“录像”就是带推理链的问答数据——比如数学题目的思维链(CoT,即模型一步步写下推导过程的文本)。
一条推理链长什么样?通常是一段自然语言,模型会“因为……所以……”地逐步推导。要变成训练样本,先要切分成步骤。最常见的切分信号是换行符——推理模型习惯一行写一步;其次是句号、分号等标点,以及“因此、由此可得”这类推理连接词。切分粒度决定了标签的精细程度:切得太粗,无法定位错误;切得太碎,标注成本飙升。
切分之后,每个步骤需要标记“对/错”。人工标注质量最高,但需要专家逐跳审查,成本昂贵;实际工程里通常先人工标注一小批高质量数据,再用来校验自动标注的结果。数据规模方面,公开工作一般使用数万到数十万条步骤级样本,质量比数量更重要——一份干净的数据集胜过十份噪声堆积的数据集。
教练手里的录像越清晰,裁判学得越准。同样,步骤切分是否合理、标注是否正确,直接决定 PRM 的上限——这是整个训练流程的地基。
- 完整推理链$a_{1:S}$ 代表从第一步到第 $S$ 步的整条推理链,是切分前的原始对象。
- 切分为列表方括号表示把连续文本分割成一个步骤序列,每次切分都发生在语义边界(换行、标点、连接词)处。
- 单个步骤$s_i$ 是第 $i$ 个步骤,它是独立的可标注、可打分的基本单元,对应推理中的一次推导。
3. 自动标注技术
请专家逐跳打分太贵了,于是教练想了个聪明办法:让一批见习裁判跟着运动员试跳,多数人跳对了,就认为这一步“值得肯定”。这就是蒙特卡洛自动标注的直觉——用模型自己的大量采样来代替昂贵的人工。
具体做法是:对于第 i 步,把该步骤之前的推理前缀当作起点,让生成模型继续采样 N 条完整续写,然后检查每条续写的最终答案是否正确。如果采样 20 条,其中 14 条最终答对了,那么这一步的软标签就是 14/20 = 0.7。
软标签是 0 到 1 之间的实数,它刻画的是“从这一步出发还能到达正确答案的概率”,比 0/1 硬标签更平滑、更抗噪。这套方案的代表作是 Math-Shepherd:对数学推理链做自动过程监督,在 GSM8K 和 MATH 数据集上显著提升了最佳候选链的选择准确率。
见习裁判可以无限量上岗,成本几乎为零。蒙特卡洛软标签让“过程监督数据”从奢侈品变成了可流水线生产的资源,这正是 PRM 能够大规模落地的前提。
- 多次续写采样从第 $i$ 步出发,独立采样 $N$ 条完整续写,下标 $k$ 从 1 遍历到 $N$。
- 指示函数判定$\mathbb{I}(\cdot)$ 是“指示灯”,括号里的条件成立时取 1,不成立时取 0,用来统计“哪条续写最终答案正确”。
- 取平均得软标签对 $N$ 个 0/1 结果求平均,得到 0 到 1 之间的连续值 $\hat{y}_i$,作为第 $i$ 步的自动标注。
4. 模型架构设计
裁判的装备就是一个“好记性 + 计分板”的组合:基础模型负责记住并理解每一步的上下文,计分板(价值头)负责把理解变成分数。
PRM 通常复用一个大语言模型作为骨干,例如 Qwen、Llama、Mistral 系列。推理链以文本形式输入模型,模型在每一步末尾产出隐状态 h_i,它编码了“这一步之前发生了什么、这一步写了什么”的全部信息。基础模型越强,它对步骤语义的理解就越准确。
在这个隐状态之上,加一个轻量打分头:常见的是单层线性变换后接 sigmoid,把得分压到 (0,1) 区间。为什么不用 softmax?因为我们要对每一步独立打分,步骤数量不固定,sigmoid 正好给出“每一步对/错”的独立概率语义。有的实现会把每步的首尾 token 隐状态拼接后再送入打分头,以捕捉更完整的步骤边界信息。
好记性加计分板的组合,让 PRM 既能读懂长篇推理,又能把理解落成分数——就像裁判既看得懂整套动作,又能精准记录每个空翻的偏差。
- 步级隐状态$h_i$ 是语言模型在第 $i$ 步末尾 token 处输出的隐向量,浓缩了问题到这一步为止的全部信息。
- 线性打分$W h_i + b$ 是价值头的一层线性变换,$W$ 是权重矩阵,$b$ 是偏置,把高维隐向量映射成一个实数。
- 概率化输出$\sigma$ 是 sigmoid 激活函数,把任意实数压到 0 到 1 之间,输出 $\hat{y}_i$ 就是预测的“这一步正确概率”。
5. 训练损失目标
有了录像(数据)和裁判(模型),接下来就是校准裁判:看到标注为“对”的动作要多给高分,看到标注为“错”的要压低分数。这个校准过程由损失函数驱动。
PRM 的训练目标是逐步骤的二分类。最常用的损失是二元交叉熵(BCE):对一条链上的每个步骤,把模型的预测分与标签对比,差距越大惩罚越大。将整条链所有步骤的交叉熵取平均,就得到该样本的损失。
工程细节上,批次内通常混合多个问题,各自对链内步骤求平均后再做梯度更新。参数更新一般沿用语言模型的 AdamW 优化器,学习率从 1e-5 到 2e-5 起步;训练方式可以选择冻结基础模型只练价值头,也可以对全模型做 LoRA 轻量微调。部分工作还会对步骤加权,例如让越靠后的步骤权重越高,因为越到后期错误越致命。
校准裁判的本质,就是让它的打分习惯无限逼近录像里的标准标注。损失函数越低,裁判的每一笔打分越有依据——这正是“训练”二字的含义。
- 真实标签$y_i$ 是第 $i$ 步的软标签(或人工硬标签),取值通常在 0 到 1 之间,是裁判打分要逼近的“标准答案”。
- 两项交叉熵$y_i \ln \hat{y}_i$ 惩罚“该步正确却给低分”,$(1-y_i)\ln(1-\hat{y}_i)$ 惩罚“该步错误却给高分”。
- 求和取平均把一条链上 S 个步骤的交叉熵求和并除以 S,得到这条链的平均损失,作为一次梯度更新的优化目标。
6. 推理阶段应用
裁判培训完,终于要上场了。在正式比赛里,过程裁判不是站在终点等结果,而是在每个动作结束后立刻给出反馈,帮助运动员决定下一步怎么走。
推理阶段最常见的用法是“生成候选步骤 + PRM 打分筛选”。步级采样择优(step-level best-of-n)的做法是:每走一步采样若干候选步骤,PRM 评分最高的留下;步级束搜索(step-wise beam search)则更进一步:维护 k 条路径,每一步扩展候选后用 PRM 分数保留前 k 个,直到走完整个推理链。
评估整条链时,PRM 各步分数可以这样聚合:对前缀 a_{1:i},定义它的价值为前缀内所有步骤得分的平均。平均分比只取最后一步更平稳,也比单纯求和更能公平比较不同长度的链。业界实践表明,在 MATH 等数据集上,PRM 加步级搜索相比 ORM 加整链采样,准确率能提升数个百分点。
裁判的每一声哨响都改变了比赛走向。PRM 从训练走向推理,让“步步把关”从一句口号变成搜索算法里实实在在的筛选——这正是过程奖励模型的价值兑现时刻。
- 推理前缀$a_{1:i}$ 表示到第 $i$ 步为止的部分推理链,是搜索过程中被评估的对象。
- 累加各步奖励将第 1 步到第 $i$ 步的过程奖励 $r_j$ 全部累加,保留每一步裁判给出的信息。
- 求平均得价值除以 $i$ 得到前缀平均分 $V(a_{1:i})$,用它来比较不同长度的候选路径,决定哪些路径继续扩展。
AI 应用场景
1. 数学推理题的步骤级纠错与择优
阶段:推理评估与训练数据生产
解决的问题:传统做法把整条思路交给模型打分,错题只能看到“错了”这一个信号,无法定位是哪一步推导出了问题;PRM 把每条思路切成步骤逐点评分,能明确告诉你错在第几步,甚至帮助生成模型回溯修正。
具体案例:Math-Shepherd 使用蒙特卡洛自动标注,为 GSM8K 和 MATH 数据集中的海量推理步骤生成软标签,训练 PRM 后做 64 路采样择优,相比整链 ORM 择优,准确率提升约 3 到 10 个百分点。
2. 代码生成与智能体的过程监督
阶段:智能体工具调用与过程奖励
解决的问题:智能体写代码或操作工具时往往要连续多步执行,最终报错很难定位是“哪一次调用”出了问题;PRM 对每个中间动作或代码片段打分,能提前发现高风险步骤,触发中断或回滚。
具体案例:在 AutoGPT 类智能体中,每一步工具调用后让 PRM 评估“这一步是否通往成功”,分数过低的步骤直接触发重新规划,从而减少无效 API 调用,节约成本并提高任务完成率。
3. 推理模型的强化学习密集奖励
阶段:强化学习训练(RLHF/RLVR)
解决的问题:传统强化学习只在最终答案对错时给出 +1/-1 的稀疏奖励,模型难以判断该调整哪一步;PRM 提供逐步骤的密集奖励,让梯度信号更充分,训练更稳定。
具体案例:训练数学推理模型时,用 PRM 对策略模型每一步生成打分,作为奖励信号配合 PPO 算法更新。相比只给最终奖励,模型收敛更快,最终 pass@1 准确率更高,且训练过程更可控。
Python 演示
import numpy as np def split_steps(chain): # 步骤切分: 按换行把推理链切成单个步骤, 丢弃空行 return [s for s in chain.split('\n') if s.strip()] def rollout_from_step(gold, noise=0.25): # 模拟从某一步续写一次, 返回最终答案是否正确(1/0) p = 0.5 + (gold - 0.5) * (1 - noise) return 1.0 if np.random.rand() < p else 0.0 def mc_soft_label(gold, n=40): # 蒙特卡洛自动标注: 反复续写 n 次, 统计答对比重作为软标签 return np.mean([rollout_from_step(gold) for _ in range(n)]) def make_features(steps, dim=12): # 把每个步骤转成词袋向量, 作为轻量 PRM 的输入特征 feats = [] for s in steps: v = np.zeros(dim) for w in s.lower().split(): v[hash(w) % dim] += 1.0 feats.append(v) return np.array(feats) def train_prm(X, y, epochs=500, lr=0.5): # 训练逻辑回归式打分器, 损失为逐步骤交叉熵 w, b = np.zeros(X.shape[1]), 0.0 for _ in range(epochs): logit = X @ w + b p = 1.0 / (1.0 + np.exp(-logit)) w -= lr * (X.T @ (p - y) / len(y)) b -= lr * (p - y).mean() return w, b def predict(w, b, X): return 1.0 / (1.0 + np.exp(-(X @ w + b))) def main(): np.random.seed(42) chains = [ "内角和定理成立\n两角求和为130\n第三角为50", "先算乘法得6\n再加上5得11\n最后减去3得8", ] golds = [ [1.0, 0.0, 1.0], [1.0, 1.0, 0.0], ] X_all, y_all = [], [] for chain, gold in zip(chains, golds): steps = split_steps(chain) X_all.extend(make_features(steps)) soft = [mc_soft_label(g) for g in gold] y_all.extend(soft) print("步骤软标签:", np.round(soft, 2)) X_all = np.array(X_all) y_all = np.array(y_all) w, b = train_prm(X_all, y_all) pred = predict(w, b, X_all) print("PRM步骤分数:", np.round(pred, 3)) acc = np.mean((pred > 0.5) == (np.array(golds).ravel() > 0.5)) print("预测与真实标签一致率:", np.round(acc, 2)) if __name__ == "__main__": main()
return [s for s in chain.split('\n') if s.strip()]按换行把推理链切成步骤,空行直接丢弃p = 0.5 + (gold - 0.5) * (1 - noise)将步骤真值映射为“续写答对”的概率,真值越高越容易答对return np.mean([rollout_from_step(gold) for _ in range(n)])蒙特卡洛软标签:多次采样取均值v[hash(w) % dim] += 1.0词袋特征:把步骤文本变成定长向量,供轻量打分器使用p = 1.0 / (1.0 + np.exp(-logit))sigmoid 把线性输出压成 0 到 1 的预测分w -= lr * (X.T @ (p - y) / len(y))交叉熵损失的梯度下降更新acc = np.mean((pred > 0.5) == (np.array(golds).ravel() > 0.5))用阈值 0.5 对比预测与真实标签,统计一致率
常见误区
误区我以为 PRM 就是把最终答案交给模型多评几次分,取个平均,本质上和 ORM 没区别。
正解两者打分对象完全不同。ORM 对整个推理链的最终结果打一个分;PRM 把推理链切分成步骤,对每一步单独输出“这一步对错的概率”。训练数据、模型输出、使用方式都因此不同——PRM 能明确指出“错在哪一步”,ORM 只能告诉你“结果错了”。
为何常见:两者都叫“奖励模型”且都通过打分来优化推理,初学者很容易只看到“打分”的表层相似性,忽略了打分粒度的本质差异。
误区训练 PRM 必须请专家把每一步推理都人工标对错,成本太高,小团队根本做不了。
正解人工标注只是途径之一。现在主流做法是用蒙特卡洛自动标注:让模型从待评估步骤出发采样多条续写,统计最终答对的比例作为软标签。Math-Shepherd 就是靠这套流程大规模生产步骤标签,把成本降到了人工的零头。
为何常见:早期 PRM 研究确实依赖人工过程标注,给业界留下了“PRM 必须人工标注”的刻板印象。
误区蒙特卡洛软标签是 0.6,说明这一步只有 60% 是对的,我可以把它当作精确真值来用。
正解软标签衡量的是“从这一步出发、继续采样最终能答对的频率”,它是一个经验估值,受采样次数、采样温度、生成模型强弱的影响,并不等于步骤的客观对错概率。它适合作为弱监督信号,不适合当作精密真值。
为何常见:“标签”二字容易让人误以为是权威真值,忽略了它来自随机采样统计这一事实。
误区PRM 训练好后,模型每生成一步都要同步调用它打分,否则过程监督就没意义了。
正解训练与推理可以解耦。推理时可以用“走 K 步打一次分”“每步从若干候选中筛一次”或“离线对整条链逐点评分选优”等不同频率使用 PRM,工程上完全不必在生成循环里强耦合。
为何常见:“过程奖励”的名称容易让人误以为它必须介入每一步的生成过程。
误区这题 A 链 PRM 打了 0.9,那题 B 链只打 0.8,所以 A 链一定比 B 链更靠谱。
正解PRM 分数是模型在自身训练分布下对“步骤正确性”的条件概率估计,不同问题、不同模型之间的分数没有绝对可比性。通常只在同一问题内部用 PRM 排序候选链(best-of-n)或筛选候选步骤。
为何常见:人习惯把分数当作绝对标尺,忽略了模型分数的分布依赖性。
面试题
Q1. 过程奖励模型(PRM)与结果奖励模型(ORM)的核心区别是?
- A.PRM 只看最终答案并给出总分
- B.PRM 对推理每一步单独评分← 正确答案
- C.ORM 的训练数据不需要标注
- D.PRM 不依赖任何生成模型
答案:B。PRM 的核心特征是对推理链上的每一步单独输出正确性分数,这正是“过程裁判”与“结果裁判”的本质差异。A 描述的是 ORM 的行为;C 和 D 都不成立,PRM 训练需要带步骤标签的数据,且依赖生成模型参与数据构造与编码。
Q2. 关于 PRM 训练中的“软标签”,下列说法正确的是?
- A.只能是 0 或 1 的离散整数
- B.由多次采样统计得到的实数← 正确答案
- C.由人工标注得到的唯一真值
- D.与最终答案的正确率无关
答案:B。软标签来自蒙特卡洛采样,是“从该步出发最终答对的比例”,因此是 0 到 1 之间的实数。A 和 C 描述的是硬标签的特征;D 与软标签的定义直接矛盾,软标签本身就是对最终答对概率的估计。
Q3. 训练 PRM 最常用的损失函数是?
- A.均方误差损失函数
- B.逐步骤二元交叉熵损失← 正确答案
- C.三元组排序损失函数
- D.生成式语言建模损失
答案:B。PRM 把每个步骤当成二分类问题(对/错),最自然的选择是二元交叉熵,对每个步骤的预测分与标签求交叉熵后取平均。A 常用于回归任务,C 多用于检索排序,D 是预训练语言模型的目标,都不是 PRM 的主流损失。
Q4. 用蒙特卡洛方法为第 i 步生成软标签的正确做法是?
- A.从第 i 步续写多条并统计答对比← 正确答案
- B.用最终答案直接标记所有步骤
- C.只采样一条完整续写做判断
- D.用规则匹配关键词生成标签
答案:A。蒙特卡洛软标签的关键是从第 i 步出发做多次续写,统计最终答案正确的比例。A 正是标准做法。B 是 ORM 式的整链标签,会丢失步骤差异;C 单次采样方差太大不稳健;D 没有利用真实生成信号。
Q5. PRM 打分最常用的结构是“隐状态 + 打分头”,打分头通常是?
- A.一层线性变换加 sigmoid 激活← 正确答案
- B.多层卷积网络加池化
- C.独立的随机森林分类器
- D.词表上的 softmax 分布
答案:A。主流 PRM 在每步末尾的隐状态上接一层线性变换,再接 sigmoid 输出 0 到 1 的概率分。B 是图像任务的典型结构,C 不参与语言模型推理,D 是语言模型生成 token 的概率分布,不是步骤打分头。
Q6. 相比 ORM,PRM 训练出的模型更擅长什么?
- A.生成更快更短的答案
- B.指出推理中出错的具体步骤← 正确答案
- C.不加推理直接给出结果
- D.压缩模型的参数量
答案:B。PRM 天然具备步骤级监督能力,可以逐点评判每一步的对错,从而定位错误步骤。A 与推理速度无关,C 恰好与推理模型的目标相反,D 与模型压缩无关,这些都不是 PRM 的优势。
Q7. 步级束搜索(step-wise beam search)的核心流程是?
- A.每步只保留当前分数最高的单条路径
- B.每步扩展候选并用 PRM 筛选保留多条← 正确答案
- C.用最终答案反推每一步的搜索方向
- D.所有步骤并行生成后随机挑选
答案:B。步级束搜索在每一步从当前路径扩展出多个候选步骤,再用 PRM 分数排序,保留前 k 条路径继续。A 是贪心解码而非束搜索;C 是事后反推,不属于搜索流程;D 缺少分数筛选,与步级束搜索无关。
Q8. 对推理链做步骤切分时,常用哪些信号作为切分依据?
- A.换行符或自然段落分隔← 正确答案
- B.句号、分号等标点符号← 正确答案
- C.“因此”“所以”等推理连接词← 正确答案
- D.每个步骤必须等长切分
答案:ABC。推理模型通常一行一步,因此换行是最常用信号;句号、分号以及“因此”“由此可得”等连接词也能标识步骤边界。D 要求等长切分违背自然语言的语义边界,会切断完整的推导单元,不是合理做法。
Q9. 关于人工硬标签与蒙特卡洛软标签,正确的说法有?
- A.人工标签精度更高但成本也更高← 正确答案
- B.软标签是 0 到 1 的连续概率值← 正确答案
- C.软标签能刻画步骤的不确定性← 正确答案
- D.软标签与人工标签完全等价
答案:ABC。专家人工标注通常更准但昂贵;软标签来自多次采样的答对比例,是连续值,能反映“这一步是否通向正确答案”的不确定性。D 错误:软标签是经验估计,受采样数量和策略影响,与人工标签并不等价。
Q10. 关于 PRM 分数的聚合与使用,正确的有?
- A.前缀分数常取各步的平均值← 正确答案
- B.平均分能更公平比较不同长度的链← 正确答案
- C.单看最后一步会丢失中间信息← 正确答案
- D.PRM 分数可直接跨问题比较
答案:ABC。对前缀内各步奖励取平均,是评估部分推理链的常用聚合方式,比单纯求和更能公平比较长度不同的链;只看最后一步则完全忽略中间步骤的裁判信息。D 错误:PRM 分数是分布依赖的概率估计,不能跨问题直接比较。