让 8B 小模型学会"我不知道":TIAR 用 GRPO 轨迹给弃权 reward 动态加权

核心摘要

幻觉的本质,很多时候不是模型"答错了",而是它"明明该说不知道,却硬答了一个"。这两年大家在弃权(abstention)学习上做了不少工作,最直接的一条线是 TruthRL 那种三元奖励——答对 +1、答错 -1、说"我不知道" 0 分。听起来很合理,但作者一句话就把它戳穿了:把弃权奖励钉死在 0,等价于隐式假设"所有题的难度都是 0.5"——这显然不成立。

TIAR(Trajectory-Informed Advantage Reweighting)的解法挺漂亮的:直接利用 GRPO 本身就要采样 G 条轨迹这个特性,把这一组轨迹里"非弃权答对的比例" \(\hat{p}\) 当成模型对这道题的自信度,再用机会成本推一个最优弃权奖励 \(R_a^* = 1 - 2\hat{p}\)。但作者发现直接替换 reward 会污染 GRPO 的 group 标准化(他们叫耦合问题),所以最终做成了"标准化之后再单独给弃权样本加一个偏置"的 post-hoc advantage 调整。

实测在 AbstentionBench 的 6 大类 31 个数据集上,TIAR(基于 Llama-3.1-8B-Instruct)拿下 5/6 类 SOTA F1,相对 TruthRL 在 17/31 个数据集上更优,关键是 accuracy 几乎没掉——而过去做弃权学习一个常见暗病就是"教它说不知道,结果连知道的也开始不答了"。

一句话评价:方法上不是底层突破,但思路顺、推导干净、改动量小——把 GRPO 多轨迹这个"白嫖"的难度信号用满了,工程上几行代码就能上线。


论文信息

  • 标题:TIAR: Trajectory-Informed Advantage Reweighting for LLM Abstention Learning
  • 作者:Muyu Pan, Shu Zhao, Nan Zhang, Philip Shin, Varun Parekh, Vijaykrishnan Narayanan, Rui Zhang
  • 机构:Pennsylvania State University, Department of Computer Science
  • arXiv2605.25850(提交于 2026 年 5 月 25 日)
  • 代码:匿名仓库 https://anonymous.4open.science/r/TIAR_repo/

一、为什么我们需要"教模型说不知道"这件事

先从一个我自己碰到过的事情说起。之前调一个领域问答模型,验证集上 accuracy 看起来挺漂亮,结果上线之后被业务同学截图打脸——某个用户问了个根本不在训练分布里的问题,模型一本正经地编了三段。

这就是幻觉的典型症状。问题不在它答错,问题在它"该闭嘴的时候没闭嘴"

弃权学习(abstention learning)就是在解决这个事情:让 LLM 在自己没把握的时候,老老实实说"I don't know",而不是硬编。这不是个新方向,但 OpenAI 那篇《Why Language Models Hallucinate》(Kalai et al., 2025)专门点过这件事的重要性,呼吁多做点弃权方面的探索。在医疗、法律这种高风险场景,"宁愿不答也不要乱答"是底线。

之前的方法大概分这么几条路子:

  • SFT 路线:R-Tuning 这类,把训练集里答不对的题标成 "I don't know",监督学。简单粗暴,但容易过拟合到特定话题。
  • 偏好学习:DPO 那一套,构造"我不知道 vs 错误答案"的偏好对。
  • 推理时弃权:多采几次看一致性,靠 self-consistency 决定要不要答。
  • RL 路线:TruthRL(Wei et al., 2025)是这条路上目前的 SOTA,用 GRPO + 三元奖励:答对 +1、答错 -1、弃权 0。论文里报的数据是相比 binary reward 减少了 19.1% 的幻觉率。

TIAR 站在 TruthRL 肩膀上,只挑了一个点——三元奖励里那个写死的"弃权 = 0 分"——做改造。

二、把"弃权奖励 = 0"这件事,重新算一遍

这部分是我读这篇论文觉得最舒服的地方:从"应不应该弃权"这个最朴素的问题开始,一步步推到最优奖励应该是什么。

2.1 从决策论看:什么时候该弃权?

设当前这道题,模型采了 G 条轨迹,里面有 \(n_c\) 条答对、\(n_w\) 条答错、\(n_a\) 条弃权。把"在尝试答的轨迹里答对的比例"定义为:

\[\hat{p} = \frac{n_c}{n_c + n_w}, \quad \text{当 } n_c + n_w > 0\]

这个 \(\hat{p}\) 本质上就是模型相对于这道题的自信度——高 \(\hat{p}\) 说明这题对它来说简单,低 \(\hat{p}\) 说明这题超出它能力范围。

那"尝试答"的期望收益是多少?

\[V_{\text{attempt}}(\hat{p}) = \hat{p} \cdot R_c + (1-\hat{p}) \cdot R_w = 2\hat{p} - 1\]

模型应该在 \(R_a > V_{\text{attempt}}(\hat{p})\) 的时候选择弃权。在三元奖励下 \(R_a = 0\),这个条件就是 \(\hat{p} \lt 0.5\)

这就是关键。 三元奖励隐式地把弃权阈值钉死在 0.5——"答对率超过五成就该答,否则就该弃权"。但这个假设其实挺勉强的:训练集里题目难度肯定是分布的,不是所有题都是 0.5 难度的。

2.2 机会成本:动态最优弃权奖励是 \(1-2\hat{p}\)

作者从机会成本的角度推了最优弃权奖励的形式。弃权的时候,避免了一份预期损失 \((1-\hat{p}) \cdot |R_w|\),但同时让出了一份预期收益 \(\hat{p} \cdot R_c\)。两者相减:

\[R_a^* = \underbrace{(1-\hat{p}) \cdot |R_w|}_{\text{避免的损失}} - \underbrace{\hat{p} \cdot R_c}_{\text{让出的收益}} = 1 - 2\hat{p}\]

这个动态奖励有几个性质特别符合直觉:

\(\hat{p}\) \(R_a^*\) 解读
0(全错) +1 弃权奖励拉满,鼓励说不知道
0.5 0 退化为标准三元奖励
1.0(全对) -1 弃权惩罚拉满,鼓励答

也就是说,三元奖励是动态奖励在"假设所有题都难度 0.5"下的特例。这个推导挺干净的。

三、看似一行替换的事情,其实有一个隐蔽的坑

最自然的做法是:把 \(R_a = 1 - 2\hat{p}\) 直接代回 GRPO 的 reward 函数,然后照常算 advantage。

GRPO 的 advantage 是组内标准化的:

\[\hat{A}_i = \frac{r(x, y_i) - \text{mean}\{r(x, y_j)\}}{\text{std}\{r(x, y_j)\}}\]

问题来了——你改了 \(R_a\),会同时影响这一组的均值 \(\bar{R}\) 和方差 \(\sigma\)所有轨迹的 advantage 都会被改写,包括正确和错误的。

具体看一下:在标准三元奖励下,组均值是

\[\bar{R}_{\text{ternary}} = \frac{n_c - n_w}{G}\]

换成动态奖励之后:

\[\bar{R}_{\text{dynamic}} = \bar{R}_{\text{ternary}} + \frac{n_a(1-2\hat{p})}{G}\]

在难题上(\(\hat{p} \lt 0.5\)),\(1 - 2\hat{p}\) 是正的,组均值被推高。这意味着正确轨迹的 advantage 反而变小了——明明这道难题它居然答对了,应该重赏才对,结果信号被稀释。

作者管这个叫耦合问题(coupling problem)。这块是论文里我觉得最值钱的洞察之一——很多时候我们调 RL 的 reward 觉得"思路是对的,怎么效果反而差",往往就栽在这种"标准化耦合"的细节上。

他们做了实验验证:直接耦合替换 reward,accuracy 比 ternary baseline 掉了 0.76%,F1 只涨 0.15%——典型的"想得对但做错了"。

方法 Accuracy Abstention F1
TruthRL(三元) 67.07 72.45
耦合替换 66.31 72.60
Δ -0.76 +0.15
Win/Loss 6/16 13/13

表 1:耦合实现 vs ternary baseline,Llama-3.1-8B-Instruct 在 step 20 的对比

四、TIAR 的解法:标准化之后再加偏置

图 1:TIAR 整体框架——根据组内"答对/答错"轨迹的比例,对弃权轨迹的 advantage 单独加一个偏置

图 1:TIAR 框架。先按 ternary reward 算完标准的 GRPO advantage,然后只对那些"弃权"的轨迹再加上 \(\lambda(1-2\hat{p})\) 这个偏置——简单的题目(\(\hat{p}\) 高)惩罚弃权,难的题目(\(\hat{p}\) 低)奖励弃权。

核心 idea 一句话:别动 reward,去动 advantage

具体来说,先用标准的三元 reward 把 GRPO 的 advantage 全部算完——保留所有正确/错误轨迹的标准化信号。然后单独对弃权轨迹做 post-hoc 调整:

\[\hat{A}_j \leftarrow \hat{A}_j + \lambda(1 - 2\hat{p}), \quad \text{当 } r_j = 0\]

这个偏置项 \(\lambda(1-2\hat{p})\) 正好就是机会成本推导出的"最优 - 三元"差值:

\[\Delta_a = R_a^* - R_a^{\text{ternary}} = (1-2\hat{p}) - 0 = 1 - 2\hat{p}\]

伪代码(直接照搬论文 Algorithm 1,简化版):

for x_i in batch:
    trajectories = sample_G_responses(policy, x_i)  # G=8
    rewards = ternary_reward(trajectories)          # +1/-1/0
    advantages = grpo_advantage(rewards)            # 标准 GRPO 标准化

    n_c = sum(r == 1 for r in rewards)
    n_w = sum(r == -1 for r in rewards)

    if n_c + n_w > 0:
        p_hat = n_c / (n_c + n_w)
        for j, r in enumerate(rewards):
            if r == 0:  # 弃权轨迹
                advantages[j] += lambda * (1 - 2 * p_hat)

update_policy(advantages)

整体改动就这么几行\(\lambda\) 是控制调整强度的超参,论文里默认 1.0。

为什么这么做就解耦了?因为 ternary reward 的均值和方差完全没动,正确/错误轨迹的标准化信号原封不动。只是给弃权这组轨迹叠了一个外部偏置——相当于告诉模型:"对这种难题,弃权这件事,请额外重视一下。"

我喜欢这个做法的地方在于它用最小的改动达到目的。你不需要重新推导什么 KL 项、不需要修改 GRPO 框架,verl 之类的框架里加个 hook 就完事了。

五、实验:5/6 类别 F1 上 SOTA,accuracy 几乎不掉

5.1 实验设置

  • 基座:Llama-3.1-8B-Instruct 和 Qwen3-8B
  • 训练集:TruthRL-CRAG(656 条样本,从 CRAG benchmark 衍生)——这一点很关键,训练集本身有大量"超出模型参数知识"的问题,自然形成可答/不可答的分布
  • 训练框架:verl + GRPO,batch_size=64,rollout_n=8,lr=1e-6,KL 系数 0.001
  • 算力:16 张 A100 40GB,训 20 步用了 6.7 小时,单模型总预算 107.2 GPU-hours
  • 评测:AbstentionBench——20 个数据集 31 个子集,覆盖 6 类弃权场景(Answer Unknown / Underspecified Intent / Stale / Underspecified Context / False Premise / Subjective)
  • 裁判:另起一份 Llama-3.1-8B-Instruct 当 LLM-as-Judge,先判定是不是弃权,再判定答得对不对

提一句训练成本:107.2 GPU-hours 单模型,对于很多团队来说不算便宜。论文也老实承认这点是局限——所有结果都是单种子单次训练,没做 seed scan。

5.2 主结果

直接看核心表(每类挑一个代表数据集):

Llama-3.1-8B-Instruct

方法 BB/Known Unk. BBQ FreshQA UMWP QAQA KUQ/Cont.
F1 | Acc F1 | Acc F1 | Acc F1 | Acc F1 | Acc F1 | Acc
R-Tuning 91.7 | 91.3 82.4 | 62.7 69.9 | 40.0 75.3 | 86.2 56.0 | 44.2 75.0 | 66.3
RFT 97.9 | 87.0 85.9 | 67.6 72.2 | 50.0 76.1 | 86.7 57.1 | 44.9 77.7 | 67.8
DPO 93.9 | 69.6 84.4 | 67.4 72.1 | 48.0 75.5 | 89.7 58.0 | 46.7 74.6 | 66.7
TruthRL 95.8 | 87.0 84.5 | 71.7 74.7 | 54.0 78.9 | 90.3 58.0 | 50.5 74.8 | 70.7
TIAR 97.9 | 87.0 84.6 | 70.7 74.5 | 55.0 77.6 | 91.7 58.2 | 48.4 76.2 | 70.7

表 2(节选):TIAR 在 Llama-3.1-8B-Instruct 上 6 类代表数据集的表现。粗体为该指标最优。

观察几个有意思的点:

第一,TIAR 几乎在所有类别上都接近或拿到了 F1 最优,且 accuracy 没明显牺牲。最值得拎出来讲的是 False Premise 这一类——FreshQA 上从 TruthRL 的 74.7 微调到 74.5(基本持平),但 accuracy 从 54.0 提到 55.0;UMWP 上 accuracy 从 90.3 提到 91.7。这跟之前 R-Tuning/DPO 那种"推高 F1 但拉垮 accuracy"的套路完全不一样。

第二,DPO 在 Llama 上的 BB/Known Unknowns 这一栏非常说明问题——F1 93.9 看起来还行,但 accuracy 只有 69.6,比其他方法直接低 17 个点。这是典型的过度弃权:召回拉满(100.0),精度偏低(88.5),代价是连能答的题都开始说不知道。这是弃权学习里最常见的暗病,TIAR 在这个维度做得特别稳。

第三,Qwen3-8B 上的现象不太一样。Qwen 本身的弃权能力就强很多(baseline 普遍 80-90 F1),TIAR 的提升空间被压缩了,甚至在 BB/Known Unk. 这一栏 F1 还掉了(85.2 → 79.3)。但在 BBQ、UMWP、KUQ/Cont. 这些场景上仍然是最高 F1。这暗示 TIAR 对那些原本弃权能力较弱的模型,提升更明显——也合理,因为 \(\hat{p}\) 信号在原本"乱答型"模型上更有矫正空间。

5.3 消融:\(\lambda\) 不是越大越好,但 \(\lambda=0.3\) 是个坑

这是 TIAR 唯一的关键超参,作者扫了 4 个值:

设置 F1 Accuracy
\(\lambda = 0\)(即 TruthRL) 71.6 72.7
\(\lambda = 0.3\) 67.6 65.4
\(\lambda = 0.5\) 71.4 72.0
\(\lambda = 1.0\)(默认) 71.9 72.6

表 3(汇总):在全 31 个数据集上的平均结果

\(\lambda = 0.3\) 这个数据点很有意思——两个指标都崩了。F1 从 71.6 掉到 67.6,accuracy 也从 72.7 掉到 65.4。作者的解释是"小的反转权重不足以提供有效信号,反而扰动了训练"。

说实话我对这个解释半信半疑。0.3 比 0.5 差这么多,单从"信号不足"这个理由解释有点弱。我猜更可能的原因是:在 \(\lambda\) 很小的时候,弃权的 advantage 偏置叠加在原本噪声较大的标准化结果上,会形成一种"半推半就"的信号——既没强到让模型学会动态阈值,又破坏了原本三元奖励下的稳态分布。这种 non-monotonic 现象在 RL 里其实挺常见,但作者没深入分析机理,挺可惜。

5.4 跟闭源模型比一比

这一段我个人觉得作者有点自我加戏——拿 8B 开源模型对比 Claude Sonnet 4.5 / GPT-5.2 / Gemini 3,本身参数量量级就差几十倍,谁该比谁不公平不太好说。

但有几个数据值得看:

  • Answer Unknown 类(BB/Known Unk.):TIAR F1 95.8 和 precision 92.0 都超过三个 API 模型——这个场景下"是不是知道自己不知道"这件事,规模带来的边际收益反而不大
  • FreshQA 这种考时效性的场景:TIAR 远不如 Claude(68.4 vs 75.2),原因很直接——开源 8B 的世界知识就是没那么新
  • Gemini 3 在 KUQ/Cont. 上 F1 100.0 但 accuracy 只有 50.0:典型的过度弃权——主观题它干脆全部弃权

这些数据其实更佐证了弃权学习的核心瓶颈不在规模,而在训练目标。一个 8B 模型在"知道边界"这件事上能拿到接近闭源 SOTA 的水平,但在"边界内还要答得准"这件事上,规模就是规模。

六、几个值得讨论的点

6.1 这是不是"伪命题"?

弃权学习这件事从工程实践来看是真实需求——RAG 系统、领域问答、Agent 工具调用都会碰到"问得超纲"的情况。但有一个值得追问的点:直接给模型上一个"我不知道"分类头,或者推理时做 self-consistency,会不会就够了?

作者在 Related Work 里讨论过推理时弃权的方法(Cole et al., 2023; Lin et al., 2022 等),但没在实验里直接对比这类方法的最强 baseline。这是论文的一个 gap——如果一个简单的 self-consistency + 阈值就能达到 80% 的 TIAR 效果,那 TIAR 这套 RL 训练流程的成本收益比就需要重新算。

6.2 跟同期方法的差异化

论文 Related Work 里提到了两个跟 TIAR 思路接近的工作:

  • An & Xu (2025) 的 Semantic Clustering:对 GRPO 轨迹做语义聚类,根据簇大小判断"哪些轨迹算正确",需要手动设阈值
  • Wu et al. (2026):要求用户显式指定一个风险分数 \(t \in [0, 1]\),把弃权奖励缩放成 \(2t - 1\)

TIAR 相对这两者的优势是完全不需要外部输入——既不要手动阈值,也不要用户提供风险分数,\(\hat{p}\) 自动从 GRPO 的多轨迹里来。这是一个清爽的设计选择。

但反过来想,\(\hat{p}\) 的稳定性其实依赖 \(G\) 不能太小。论文用的 \(G=8\),意味着 \(\hat{p}\) 只能取 0、1/8、2/8 ... 1.0 这 9 种离散值。如果 \(G\) 调小到 4 甚至 2,\(\hat{p}\) 的分辨率会非常粗糙,弃权信号可能就抖了。这个超参敏感性论文没扫,是另一个值得后续验证的地方。

6.3 对工程落地的几点启发

如果你也在做 RAG 或者 Agent 类系统,TIAR 这套思路有几个点是可以直接借鉴的:

  1. GRPO 的多轨迹本来就是个免费的 self-consistency 信号——不用额外采样,组内 \(\hat{p}\) 就能当难度 proxy。这个观察其实可以泛化到很多 GRPO 应用场景,不只是弃权学习。
  2. "不动 reward 动 advantage"是一个干净的 hack——当你想给某一类轨迹(比如安全/合规相关)加偏好时,与其改 reward 引发标准化耦合,不如做 post-hoc 的 advantage 调整。
  3. 机会成本视角值得用——很多时候我们设 reward 是凭直觉拍数,用决策论 / 期望效用的视角推一下,往往能发现"原来这个数字隐含了什么假设"。TIAR 戳穿"\(R_a=0\) 等价于假设 \(\hat{p}=0.5\)"这件事就是一个漂亮的例子。

七、我的判断

读完整篇,我对它的定位是"工程上简洁有效的小步改进",不是底层突破。

  • 方法论上的贡献:把 GRPO 多轨迹用作弃权信号 + 用机会成本推动态奖励 + 用 post-hoc advantage 解耦——这套组合拳拼起来挺干净的,每一步都有清晰的动机。
  • 实证上的贡献:在公开 benchmark 上做了系统性评测,覆盖 6 大类 31 个数据集 + 两个基座模型,结果有泛化性。
  • 工程价值:实现成本极低(几行代码),不依赖额外组件,不要求用户输入。

但需要保持冷静的几个点:

  • 论文只在 8B 规模做了实验,没有验证在 70B+ 或 MoE 这种大模型上是否同样 work。直觉上 \(\hat{p}\) 信号在大模型上可能更稀疏(大模型对很多题都能稳定答对),TIAR 的边际收益可能下降。
  • 训练成本不低——107 GPU-hours 在小机房挺奢侈的。当然这是 GRPO 本身的问题,不是 TIAR 引入的。
  • 实验全是单种子单次跑,统计置信度有限。一些 0.5-1 个点的差异在 RL 训练里其实不一定显著。
  • 多轮对话和 RAG两个场景的扩展只是放在 future work——而这恰恰是工业界最关心的弃权场景。

如果你正在做一个基于 GRPO 训练弃权能力的项目,TIAR 这条路值得一试,特别是当你已经在用 TruthRL 风格的 ternary reward 时——把这一行 advantage 调整加上去,看看 17/31 这个 win rate 在你的数据上能不能复现。

如果你做的是非弃权场景的 GRPO 训练,"用组内统计量当 advantage 偏置信号"这个套路也值得借鉴——它本质上是一种对 reward shaping 的解耦实现,可以推广到很多想"只给某类轨迹加额外信号"的情形。


参考文献

  • Wei et al. (2025) TruthRL: Incentivizing Truthful LLMs with Reinforcement Learning (TIAR 的直接前置工作)
  • Shao et al. (2024) DeepSeekMath - GRPO 的原始论文
  • Kirichenko et al. (2025) AbstentionBench
  • Kalai et al. (2025) Why Language Models Hallucinate
  • Zhang et al. (2024) R-Tuning: Instructing Large Language Models to Say "I Don't Know"
  • Rafailov et al. (2024) Direct Preference Optimization

觉得有启发的话,欢迎点赞、在看、转发。跟进最新 AI 前沿,关注我