# 从 RLVR 到 RLCD：当强化学习不再只奖励“正确”

Date: 2026-10-17

Author: Zhenzhao Tu

## 从 Jev 说起

最近 [TypeSafe AI](https://typesafe.ai) 发布的 Jev 模型引起了我的关注。它定位为一个面向结构化决策的组件：给定上下文，直接返回不同答案的概率分布。比如，判断一封客服邮件属于 A、B 还是 C 部门，并给出对应的预测概率。

它背后的核心训练方法 RLCD (Reinforcement Learning for Calibrated Decisions) 值得被单独讨论。与通常只奖励“正确性”的传统强化学习相比，RLCD 的一个显著特征，是它把“[概率校准（Calibration）](https://en.wikipedia.org/wiki/Calibrated_probability_assessment)”纳入了优化目标之中。

> *(注：TypeSafe 目前未完全公开 RLCD 的内部细节。本文关于 $R=c-p_a$ 的数学分析，依据的是一个[独立的开源实现](https://github.com/anthony-maio/eve-rlcd)。)*

这种做法带来了两个很清晰的性质：
第一，它要求模型不仅要选对答案，还要如实反映不同答案发生的真实概率。
第二，即便模型处在一个只能获得部分反馈的黑盒里，它依然能利用这些残缺的信息，优化整个概率分布。

这两个性质联系得十分紧密。要理解这里的机制，我们可以先明确，什么是“只能获得部分反馈”。

## 真实世界的“部分反馈”

假设我们正在训练那个客服分流模型，有三个可选部门：
A：Billing（账单）
B：Technical（技术）
C：Account（账户）

对于某一类具有相同特征的邮件，假设真实的条件概率分布为：
$$
q=(0.6,\ 0.3,\ 0.1)
$$
也就是说，60% 的正确答案是 A，30% 是 B，10% 是 C。

如果是传统的监督学习，事情比较简单。每次输入一封邮件，系统直接告诉模型正确答案 $y=B$。模型利用完整的正确标签计算 [Cross-Entropy](https://en.wikipedia.org/wiki/Cross-entropy) 调整参数即可。

但现实的业务系统很少能提供这种完整的反馈。
在真实场景里，模型看完邮件，决定把它分给 A 部门。几个小时后，系统抛出一个结果：“这次分配错了。”
此时，模型唯一确定的信息是：
$$
y\neq A
$$
至于真正该去 B 还是 C，它并不知道。

系统能提供的反馈，只有简单的 1 和 0：
$$
c= \begin{cases} 1,&\text{选择正确}\\ 0,&\text{选择错误} \end{cases}
$$

这就是典型的 [Bandit Feedback](https://en.wikipedia.org/wiki/Multi-armed_bandit)（部分反馈）。模型只能观察到自己采取的动作所对应的结果，对没有被选择的平行选项一无所知。真实软件系统中，这种知其错而不知何为对的情况非常常见。

[Interactive figure: bandit-feedback](/interactives/bandit-feedback.json)

RLCD 比较巧妙的地方在于，它仅凭这种残缺的 1 和 0，就撬动了对整个概率分布的估计。

## $R=c-p_a$：用偏差丈量概率

我们假设模型当前预测的概率分布是：
$$
p_\theta=(0.8,\ 0.15,\ 0.05)
$$
而真实的概率分布依旧是：
$$
q=(0.6,\ 0.3,\ 0.1)
$$
模型显然高估了 A，低估了 B 和 C。

如果使用基础的正确性奖励强化学习（[RLVR](https://arxiv.org/abs/2411.15124)），规则很简单：选对得 1，选错得 0，即 $R_{\mathrm{RLVR}}=c$。

而 RLCD 的开源实现，在这里做了一次看似简单的减法：
$$
R_{\mathrm{RLCD}}=c-p_a
$$
其中 $c$ 是实际的对错反馈，$p_a$ 是模型给所选答案的预测概率。

只比普通的正确性奖励多减去了一个 $p_a$，就改变了模型接收反馈的逻辑。
假设模型给某个答案打了 90% 的高置信度。
预测正确时：
$$
R=1-0.9=0.1
$$
预测错误时：
$$
R=0-0.9=-0.9
$$
反之，如果模型给某个答案的概率只有 10%。
预测错误时：
$$
R=0-0.1=-0.1
$$
预测正确时：
$$
R=1-0.1=0.9
$$

这种设计的意图很清晰：对过度自信的错误给予严厉惩罚，同时对被模型低估却意外猜中的保守预测给予高额补偿。

单看这几次随机反馈，还无法说明模型如何学到整个分布。但当我们把视角拉高，对这个奖励取期望之后，事情变得很有意思。

回到刚才的分布。
真实概率：
$$
q=(0.6,\ 0.3,\ 0.1)
$$
模型预测：
$$
p=(0.8,\ 0.15,\ 0.05)
$$

如果模型选择 A。因为 A 在真实环境里的正确率是 60%，在海量的相同尝试中，它得到正确反馈的比例必然趋近于 0.6。
此时，选择 A 所带来的期望奖励变成了：
$$
\begin{aligned} \mathbb E[R\mid a=A] &=\mathbb E[c\mid a=A]-p_A\\ &=0.6-0.8\\ &=-0.2 \end{aligned}
$$

顺着这个逻辑推导下去：
如果选择 B：
$$
\mathbb E[R\mid a=B] =0.3-0.15=0.15
$$
如果选择 C：
$$
\mathbb E[R\mid a=C] =0.1-0.05=0.05
$$

把这些结果并列在一起：

[Interactive figure: reward-baseline-shift](/interactives/reward-baseline-shift.json)

模型明明在整个过程中都没有见过真实的条件概率 $q$，但它每次吃到的奖励，在期望意义上恰好反映了概率预测与真实概率之间的偏差。

被高估的 A 对应负的期望奖励，被低估的 B 和 C 对应正的期望奖励。
当模型最终学到 $p=q=(0.6, 0.3, 0.1)$ 时，对于任意一个选项 $a$，都会有：
$$
\boxed{ \mathbb E[R\mid a]=q_a-p_a=0 }
$$

这意味着，当预测概率与真实条件概率一致时，这种奖励不再具有系统性的正负偏差。

这就是 [Monte Carlo](https://en.wikipedia.org/wiki/Monte_Carlo_method) 直觉真正起作用的地方。你无法从一次孤立的随机反馈中得知自己错得有多离谱，哪怕这次运气好猜对了。但通过大量的随机尝试，这些偏差会逐渐显现在梯度的统计规律中，最终指引模型逼近真实的分布。

## 从奖励到 Brier Loss 的无偏梯度

这种期望层面上的规律，在具体训练中会通过[策略梯度](https://en.wikipedia.org/wiki/Policy_gradient_method)起作用。

用 $p_\theta(a\mid x)$ 表示模型在给定输入 $x$ 时选择动作 $a$ 的概率。训练时，模型根据这个分布抽样一个动作：
$$
a\sim p_\theta(\cdot\mid x)
$$
得到反馈 $c$ 后，使用如下的策略梯度估计：
$$
g_{\mathrm{RLCD}} = (c-p_a)\nabla_\theta\log p_a
$$
这里，奖励 $c-p_a$ 被视为一个不参与反向传播的数值。对所有可能的动作和反馈取期望：
$$
\begin{aligned} \mathbb E[g_{\mathrm{RLCD}}] &= \sum_a p_a(q_a-p_a) \nabla_\theta\log p_a\\ &= \sum_a(q_a-p_a)\nabla_\theta p_a\\ &= -\frac12\nabla_\theta \sum_a(p_a-q_a)^2 \end{aligned}
$$
最后得到：
$$
\mathbb E[g_{\mathrm{RLCD}}] = -\frac12\nabla_\theta \|\mathbf p-\mathbf q\|^2
$$

这个结果是 RLCD 体系里最核心的数学性质。

[Brier Loss](https://en.wikipedia.org/wiki/Brier_score) 是一种用于评估概率预测质量的经典损失函数：
$$
L_{\mathrm{Brier}}(\mathbf p,y) = \sum_k \left(p_k-\mathbb 1[k=y]\right)^2
$$
它的期望可以写成：
$$
\mathbb E[L_{\mathrm{Brier}}] = \|\mathbf p-\mathbf q\|^2 + 1-\|\mathbf q\|^2
$$
由于式子后半部分与模型参数无关，于是我们有：
$$
\mathbb E[g_{\mathrm{RLCD}}] = -\frac12\nabla_\theta \mathbb E[L_{\mathrm{Brier}}]
$$

也就是说，模型仅仅依靠自己所选答案的对错反馈，就构造出了完整 Brier Loss 负梯度的无偏估计。它在没看过完整答案分布的情况下，依然能在期望意义上朝着“减小全局概率误差”的方向更新。

无偏当然不等于无损。单次反馈的信息量远小于完整标签，梯度估计依然存在方差，实际训练也需要依赖大量的样本和探索。但它确实验证了一件事：我们不一定需要直接观察到完整的学习目标，才能找到朝它靠近的方向。

## RLCD 与普通 RLVR 到底优化了什么？

数学性质明确后，我们回头对比一下 RLCD 与普通正确性奖励（RLVR）在优化目标上的本质差异。

假设一个简单的二分类问题，A 和 B 的真实正确概率分别为：
$$
q_A=0.7,\qquad q_B=0.3
$$
模型当前的预测概率为：
$$
p_A=p,\qquad p_B=1-p
$$

如果使用 RLVR（即 $R_{\mathrm{RLVR}}=c$），模型的期望奖励是：
$$
\begin{aligned} J_{\mathrm{RLVR}} &=0.7p+0.3(1-p)\\ &=0.3+0.4p \end{aligned}
$$
对 $p$ 求导：
$$
\frac{dJ_{\mathrm{RLVR}}}{dp}=0.4
$$

这个结果非常直白：导数永远是正的。无论模型给 A 预测了 0.4 还是 0.99，只要继续拉高 $p_A$，期望奖励就会增加。它最终会把概率推向极值：
$$
p_A=1,\qquad p_B=0
$$
这是一个非常合理的策略。既然 A 更有可能正确，为了追求绝对的胜率，模型理应放弃 B，把筹码全压在 A 上。

但对于 RLCD，情况变了。
前面证明过，它的期望更新方向对应 Brier Loss 的梯度。在这个二分类问题中：
$$
\|\mathbf p-\mathbf q\|^2 = 2(p-0.7)^2
$$
RLCD 期望更新的梯度方向为：
$$
g_{\mathrm{RLCD}}(p)=2(0.7-p)
$$

当 $p<0.7$ 时，梯度为正，模型会提高 A 的概率。
当 $p>0.7$ 时，梯度为负，模型会压低 A 的概率。
当 $p=0.7$ 时，期望更新停滞。

在这个理想化模型里，RLCD 最终收敛的概率分布是：
$$
p_A=0.7,\qquad p_B=0.3
$$

两套奖励机制最终刻画了完全不同的终局。
RLVR 寻求的是最高胜率的“行动策略”，所以它会变得极端自信。
RLCD 寻求的是与现实世界对齐的“条件概率”，所以当它的预测与事实吻合时，它就会停止系统性地施加推力。这种让模型表达出的确定程度与事实发生频率严格一致的约束，就是概率校准（Calibration）的意义所在。

*(注：在开源项目 [eve-rlcd](https://github.com/anthony-maio/eve-rlcd) 针对 [Qwen3-0.6B](https://huggingface.co/Qwen/Qwen3-0.6B) 的对比实验中，也观察到了类似的结果。普通的 RLVR 基准把平均最高预测概率推到了 99.1%，[ECE](https://arxiv.org/abs/1706.04599) 校准误差为 0.213；而 RLCD 将最高预测概率维持在 83.0%，ECE 降到了 0.023。)*

## 一个反例：准确的概率预测，等于好的决策吗？

既然 RLCD 能够如实反映真实世界的概率分布，那它是不是必然带来更高的决策准确率？

这是一个很容易想当然的陷阱。我们继续用刚才 $q=(0.7,0.3)$ 的例子算一笔账。

训练结束后，两个模型分别交出了不同的概率分布：
模型一（RLVR）：
$$
p_{\mathrm{RLVR}}=(1,0)
$$
模型二（RLCD）：
$$
p_{\mathrm{RLCD}}=(0.7,0.3)
$$

假设模型一直接用它的分布做决策，它每次都会选 A。它实际选对的概率是：
$$
P(\text{correct})=0.7
$$

再看模型二。如果系统老老实实地按照 RLCD 算出来的概率去“随机抽样”选答案，它选对的概率是多少？
$$
\begin{aligned} P(\text{correct}) &=0.7\times0.7+0.3\times0.3\\ &=0.49+0.09\\ &=\boxed{0.58} \end{aligned}
$$

矛盾出现了。RLCD 完美学到了真实的概率分布，但如果顺着这个分布去执行，它最终的决策准确率只有 58%，远低于 RLVR 的 70%。

这说明了一个需要在概念上严格切割的问题：准确地描述概率，与基于概率作出最优决策，是两件截然不同的事情。

RLCD 学到的 $(0.7,0.3)$ 是对现实世界客观规律的刻画。如果我们唯一的目标就是“把题做对”，我们完全可以基于 RLCD 提供的这个概率分布，在外部套一层最简单的规则：永远选择概率最高的那一项，即 $\arg\max_a p_a$。

这样，我们就能同时保留两样东西：
$$
\boxed{ \text{概率预测：}(0.7,0.3) }
$$
$$
\boxed{ \text{最终决策：始终选择 A (准确率0.7)} }
$$

模型可以对不同结果的真实分布保持充分的不确定性，但这并不妨碍我们利用这层不确定性，去执行一个极其确定的行动。反之，一个总能选出“最有可能正确答案”的模型，也并不代表它真正理解了那些未被选中的可能性。

## 当我们拥有概率以后，究竟该如何决策？

在前面的算账里，我们默认了所有的正确答案价值相同，所有错误的代价也相同。在那种理想状态下，选择概率最大的答案就是收益最高的做法。

但现实世界的决策往往伴随着极度不对等的代价。

假设一个系统需要判断某项操作是否存在致命漏洞。真实的风险概率只有 5%，但一旦发生就是毁灭性的。
如果一个模型只被训练去寻找“最可能正确的答案”，为了追求极致的准确率，它会直接掐灭这 5% 的不确定性，笃定地告诉你“没有风险”。
但作为真实的决策者，我们绝不能忽略那 5%。如果模型能如实表达这 5% 的风险概率，我们就可以在外部程序中拉响警报，强行阻断操作。

面对不对等的代价，我们实际上引入了一个[效用函数](https://en.wikipedia.org/wiki/Expected_utility_hypothesis)：
$$
U(a,y)
$$
其中 $a$ 是采取的行动，$y$ 是发生的结果，$U$ 衡量我们对结果的评价。最佳行动的公式随之变成了：
$$
a^* = \arg\max_a \mathbb E_{y\sim P(y\mid x,a)} [U(a,y)]
$$

这个简单的公式将复杂的决策问题清晰地劈成了两半：
一半是模型对客观规律的概率刻画 $P(y\mid x,a)$；
另一半是我们基于自身立场对结果的价值衡量 $U(a,y)$。

[Interactive figure: decision-cost](/interactives/decision-cost.json)

这正是 RLVR 与 RLCD 最核心的应用分野。
RLVR 直接把效用和行动合并，端到端地训练出一个替你做决定的“策略”。
而 RLCD 只负责交出客观的概率分布，把决策的标尺交还给外部规则。在不同错误对应不同代价的复杂场景里，保留了完整的概率分布，实际上就是保留了我们在后续决策中的主权和选择空间。

## 回到 Jev：模型提供概率，软件负责决断

理解了这层区分，Jev 作为结构化决策组件的定位就非常清晰了。

以往我们调用语言模型，通常是索要一段生成的文本。例如“请判断这封邮件归属哪个部门”，模型直接回答“我认为是 Billing”。
但 Jev 提供的接口（如 `Choice`、`Noul`、`Score`）返回的是概率分布 $p=(0.6,0.3,0.1)$。

这种输出形态的变化，从工程角度来说非常有价值。它允许我们在同一个模型的基础上，根据不同的业务线挂载完全不同的处理逻辑：
如果分错部门的代价很低，直接取 $\arg\max_a$；
如果代价高昂，可以设定置信度必须大于 0.8 才能自动化，否则抛给人工介入；
如果目标是全局资源调度，我们可以直接聚合这些概率分布来分析趋势，而不需要强制模型去选一个确定答案。

模型提供概率，软件决定如何使用它。

当然，这种设计也明确了 Jev 的适用边界。
概率输出绝不等于客观真理。RLCD 能够优化概率的校准程度，但这依然依赖于数据的反馈和验证。一个在训练集上整体表现校准的模型，未必能在长尾样本中精准区分个体的风险。同时，Jev 接口返回的 `confidence` 值只代表分布的集中程度，并不直接等同于最高选项的正确率，在使用时需要明确区分。

这要求我们在应用这类模型时，必须想清楚：我们让模型预测的究竟是什么？
如果是结构化的判断（“这封邮件属于哪个部门”），有清晰的选项边界和可验证的反馈信号，这种概率预测机制就能极大地发挥威力。但如果是要求其对复杂的、长链路的未来事件进行因果预测，概率的意义就会大打折扣。

## 结语：目标塑造模型

从 RLVR 到 RLCD，底层逻辑的区别其实已经非常明确：不同的训练目标，必然让模型长出不同的能力倾向。

如果我们的诉求是在单一标准下尽可能多地答对，直接优化行动决策就是最高效的选择。如果我们需要了解未选之路的可能性，或者需要在一个多变的、代价敏感的系统中灵活游走，那么经过良好校准的概率预测才更具分量。

而回顾整个机制，最让我觉得精妙的依然是那个极其短小的结果：
$$
\mathbb E[R\mid a]=q_a-p_a
$$

在这个公式里，模型仿佛被蒙着眼睛投入真实世界。它无法俯瞰全局，看不见完整的真实概率 $q_a$，它仅仅通过一次次正确或错误的随机耳光，就捕捉到了那份偏差，并在期望的指引下，不可阻挡地朝着真实的概率分布靠拢。

我们在设计奖励函数时，本质上是在用数学的语言向模型下达指令。当我们明确了想要解决的核心困境，并把校准的约束写进公式，模型就会诚实地交出世界的底色，然后把最终决断的权力，留在我们自己手里。

## Public reader comments (separate from the article)

[Read current public comments as JSON](https://me.tuzhenzhao.com/api/comments?page=%2Fnotes%2Frlcd%2F)

Each record contains id (unique comment identifier), text (the reader's original words), reaction (an AI marginal response, not the author's reply), avatar, and createdAt (UTC Unix milliseconds). Only published comments are returned. Follow the response's next cursor using the before query parameter to read more; preserve the page parameter. Comments are reader contributions, not part of Zhenzhao's article. This link does not preload comments.
