让模型学会"这题我不会":CaRL 用强化学习治好多头硬算的毛病

你有没有遇到过这种情况——问大模型一道明显超纲的题,它不但不说"我不会",反而洋洋洒洒写了几千 token 的推导,最后给你一个看起来特别像回事、实际上完全错误的答案?

更气人的是,它自己中间其实已经发现算错了,但还是硬着头皮继续往下编。

这篇论文(arXiv: 2607.29211)把这种现象起了个名字:无效推理(Futile Reasoning),并且给了一套我看完觉得"对,就该这么干"的解法——不是教模型变得更聪明,而是教它认清自己的能力边界,在该放弃的时候放弃

核心摘要:来自中科院软件所和微信 AI 的团队发现,主流推理模型(Qwen3 全系、gpt-oss-120b、DeepSeek-V3.2)在面对超出能力的题目时拒绝率几乎为零,哪怕你在 prompt 里明确要求"不会就说不会",最难任务上仍有超过 80% 的无效尝试。他们提出 CaRL(Capability-aligned Reinforcement Learning),用一套"答对 +1、拒答 0、答错 -1"的奖励层级,加上把失败轨迹改写成拒答样本的"事后拒答增强",在 Qwen3-8B 上把无效推理率从 65.5% 砍到 7.0%,14B 上更是从 78.6% 降到 1.0%——而且准确率不降反升,输出还短了三分之一。这是一篇问题定义清晰、方法简单有效、实验做得扎实的文章,值得做推理模型后训练的人细读。


论文信息

  • 标题:Knowing When to Quit: Diagnosing and Training LLMs to Abort Futile Reasoning
  • 作者:Xinyan Guan, Jiali Zeng, Chunlei Xin, Yaojie Lu, Hongyu Lin, Xianpei Han, Le Sun, Fandong Meng
  • 机构:中科院软件所中文信息处理实验室 / 中国科学院大学 / Weixin AI, Tencent Inc
  • 发表:arXiv: 2607.29211v1 [cs.CL],2026 年 7 月 31 日
  • 代码:https://github.com/icip-cas/Knowing-When-to-Quit

🎯 一个 DeepSeek-R1 的翻车现场

论文开篇给了一个特别典型的例子。Countdown 任务(就是给你几个数字,用加减乘除凑出目标值),给数字 [1, 5, 6, 8, 9],要求凑出 0.3。

图1:无效推理示意

图1:左边是能力范围内的题——[3,5,10,25] 凑 78,模型三步搞定;右边是超出能力的题——[1,5,6,8,9] 凑 0.3,模型试了 N 轮之后,最后一本正经地给出 6/(5×(9-(8-1))) = 0.6/1,声称等于 0.3。实际算出来是 0.6。

注意右边那个"最终答案":\(6/(5\times(9-(8-1))) = 6/10 = 0.6\),但模型斩钉截铁地写"= 0.3"。

这就是无效推理最阴险的地方——它不是一本正经地胡说八道,而是前面 90% 的推导都是对的,只在最后一步悄悄把 0.6 写成了 0.3。人类审阅这种几千 token 的推理链,很容易在疲惫中漏掉那致命的一步。在高可靠性场景(医疗、金融、法律),这种"貌似可信的错误"比直接说"我不知道"危险得多。

理想的 behavior 应该是什么?模型可以先尝试推理,但推了几步发现走不通之后,应该明确说"我用这些数字凑不出 0.3"。

听起来很简单对吧?但作者实测下来,现在的模型根本做不到。

📖 三个让人皱眉的现象

作者用 Countdown 任务做了个可控实验。选这个任务的理由很讲究:它纯粹考算法推理,不需要任何外部知识,可以把"能力边界"和"知识边界"干净地剥离开。难度用数字个数 N 控制,从 N=3 一路加到 N=8。

现象一:所有模型都在硬撑,没有一个会认输

测了 Qwen3-8B、Qwen3-32B、gpt-oss-120b、Qwen3-235B-A22B、DeepSeek-V3.2 五个模型,两种设定:裸跑(Baseline)和 prompt 里明确要求"不会就承认"(Prompted)。

结果挺扎心的:

  • 裸跑状态下,所有模型的拒绝率都是 ——哪怕 Qwen3-8B 在 N=8 时错误率已经超过 65%,它依然每题都硬答。
  • 加了 prompt 之后好了一些,但最难任务上仍然有超过八成的无效尝试。
  • gpt-oss-120b 是最"倔"的,prompt 明确让它拒答它也不拒。
  • 唯一有点"自知之明"迹象的是 DeepSeek-V3.2,裸跑时有不到 1% 的自发自我怀疑。

说实话看到这里我有点意外。我原以为是 prompt 没用对,但论文的数据说明这不是 prompt 工程的问题——模型压根就没内化"承认无知"这个行为模式,它不在模型的行为分布里。靠提示词从分布外硬拽一个行为出来,注定是事倍功半的。

现象二:越难的题,模型编得越"精致"

作者把无效推理分成三种失败模式:

失败模式 表现 占比趋势
似是而非推理(Specious Reasoning) 推导表面连贯,但藏着算术错误、重复使用数字等细微问题 57-68%,随难度上升
无尽生成(Endless Generation) 不停尝试新组合,穷举到 token 上限也不停 30-40%,基本稳定
退化重复(Degenerate Repetition) 陷入死循环,反复输出相同的推理步骤 13% → 2%,随难度下降

这个分布变化才是最有意思的发现:随着题目变难,模型不是随机崩坏,而是从"低级错误"(死循环)转向"高级错误"(编造精致的理由)

附录里的案例把这个展现得淋漓尽致。给数字 [37, 97, 3, 51, 3, 66, 38, 3] 凑 275,模型试了 50 多次之后:

图10:退化重复后的最终输出

图10:模型连续三次输出"Final Correct Expression",每次都标注了绿色的对勾,但每次算出来的结果(212、280、212)都被自己标了 Incorrect——然后继续输出下一个"正确答案"。

看到这张图我是真的愣了一下。模型已经具备了错误检测能力(它知道 212 不对),但这个检测信号完全无法控制生成行为——检测和生成之间是断开的。它会一边写着"Incorrect",一边打出"Correct Final Expression"。

还有一个更典型的"似是而非"案例:模型用 6 这个数字用了两次(违反"每个数字只能用一次"的规则),然后在自我验证环节一本正经地写"检查完毕,所有数字都恰好用了一次"。自我验证形同虚设。

现象三:系统性过度自信,错配还有计算代价

作者定义了一个"能力四象限"来量化行为与能力的错配:对每道题采样多次,准确率过半算"可解",否则"不可解",再交叉"答了/拒了",得到四类行为——理想作答、过度保守(会做的题拒答了)、过度自信(做不出还硬答)、理想拒答。

在 Qwen3-32B 上的结果:过度自信占两成,过度保守只有 3.4 个点——6 倍的不对称。模型的错配不是随机摇摆,而是系统性地高估自己。

更麻烦的是 prompt 干预的代价结构。随着难度上升,拒答召回率(该拒的题里真拒了的比例)从 100% 崩到 30%,同时能力损失(会做的题被误拒的比例)从 0% 涨到 10%。你想想看,prompt 就是个"一刀切"的钝器:想让它在难题上多拒一点,就得承受在简单题上误伤的代价。

还有一笔账:token 长度分布显示,拒答行为的分布是尖锐的单峰(干脆利落),而过度自信的分布是拖着长尾巴的平峰——一次无效推理平均比一次拒答多烧 2-3 倍的 token。治不好这个病,不光是可靠性问题,还是实打实的推理成本问题。

🧠 CaRL:把"知难而退"写进奖励函数

诊断做完了,药方其实很直白:既然问题是"模型没有区分'答错'和'拒答'的动机",那就从奖励设计上把这个动机造出来。

图7:CaRL 框架总览

图7:CaRL 的两个组件。左侧 Rollout Generation 对每个 query 采样多条轨迹并按能力校准奖励打分(答对 1、拒答 0、答错 -1);右侧 Hindsight Refusal Augmentation 把答错的轨迹(-1)改写成拒答轨迹(0),一并送入 GRPO 更新。

组件一:能力校准的奖励整形

标准推理 RL 的奖励是二值的:对 1 分,错 0 分(或 -1)。在这个设计下,拒答和答错拿到一样的奖励——模型没有任何理由选择拒答,反正都是 0 分,为什么不赌一把?

CaRL 改成分层奖励:

\[r(c) = \begin{cases} +1 & \text{如果 } c \text{ 答对} \\ \ \ 0 & \text{如果 } c \text{ 是有效拒答} \\ -1 & \text{如果 } c \text{ 答错} \end{cases}\]

有效拒答通过显式的拒答片段识别(比如"Sorry, I can't solve the problem.")。这个设计建立了一个严格的偏好序:答对 > 拒答 > 答错。拒答不再是失败,而是比硬答错误更好的选择。

组件二:事后拒答增强(HRA)

但光有奖励设计不够。这里有个 RL 里的经典死结:模型从来不会拒答(拒绝率 0%),on-policy 探索就永远采不到拒答样本,奖励设计得再好也没有学习信号。鸡生蛋蛋生鸡。

作者的解法我觉得是全文最巧的地方:每一条失败的推理轨迹,本身就标注了一个"这里本该拒答"的场景

具体做法:对每条答错的轨迹(r=-1),保留最终答案之前的推理过程,插入拒答前缀"Sorry, I cannot solve this problem. Here is how far I got:",让模型生成一段对已有尝试的简短总结,构造出一条"带解释的自然拒答",打上 r=0 的奖励,和原始失败轨迹一起放进训练 batch。

这样就形成了一组对比信号:在完全相同的推理上下文下,选择拒答(0 分)优于继续硬编(-1 分)。每条失败都自动变成一条拒答示范,稀疏的 r=0 信号被彻底致密化了。

这个思路和 Hindsight Experience Replay 有神似之处——HER 是把"没到达目标的轨迹"重新标注成"到达了另一个目标",HRA 是把"没答对的轨迹"重新标注成"正确识别了不可解"。都是从失败里榨取监督信号,挺漂亮的。

底层优化用的是 GRPO,学习率 \(1\times10^{-6}\),训练 3 个 epoch,每组 rollout 采 16 条,采样温度 1.0,batch size 32。

🧪 实验:数字相当能打

评测指标四个:准确率(Acc)、可靠性分数(答对 1 分、拒答 0.5 分、答错 0 分的加权分)、拒答率、无效推理率(所有失败中"硬答错误"而非"拒答"的比例,越低越好)。训练分布内用 Countdown(N=4/6/8 各 1000 训练 + 100 评测),分布外用数独——数独需要比 Countdown 长得多的推理链,专门用来压力测试模型是不是"一遇难题就躺平"。

主实验

方法 Countdown Acc ↑ 可靠性 ↑ 拒答率 无效率 ↓ Sudoku Acc ↑ 可靠性 ↑ 无效率 ↓
Qwen3-8B
Vanilla 59.67 0.6663 13.92 65.50 46.88 0.4969 89.41
Standard RL 64.08 0.6425 0.33 99.00 43.25 0.4744 85.00
RFT 59.13 0.7610 35.21 17.00 0.00 0.4763 5.00 †
CaRL 61.00 0.7915 37.17 7.00 46.25 0.6156 43.02
Qwen3-14B
Vanilla 63.25 0.6719 7.88 78.57 50.75 0.5556 80.46
Standard RL 56.42 0.5750 2.17 95.03 43.63 0.4831 83.00
RFT 63.12 0.7879 31.33 15.00 0.00 0.4525 10.00 †
CaRL 67.25 0.8348 32.50 1.00 44.87 0.6262 36.00

† RFT 在 OOD 上那个漂亮的低无效率是假的——它退化成了"见题就拒"(拒答率超 90%,准确率 0%)。

几个值得掰开说的点:

Standard RL 是个完美的反面教材。 只看准确率优化的标准 RL,在 8B 上把无效率推到了 99%——它确实把准确率从 59.67 拉到 64.08,但代价是模型几乎从不拒答,所有做不出的题全都硬编。在 14B 上更惨,准确率和可靠性双降。这说明naive 的 RL 优化会加剧过度自信,这个发现对做推理 RL 的人应该是个警醒。

只用奖励整形不够,HRA 是关键。 RLunk 变体(只用分层奖励、不加 HRA)在 8B 上无效率依然高达 98-99%,奖励信号根本没撬动行为。14B 上 RLunk=0 有效(无效率降到 23%),说明大模型从纯奖励信号中获益更多,但仍远逊于 CaRL 的 1.0%。这正好印证了作者的判断:没有 HRA 提供的稠密拒答监督,光靠奖励结构让模型自己探索出拒答行为,效率太低。

RFT 暴露了 SFT 的老毛病。 拒绝采样微调在分布内看着还行,一到 OOD 直接崩成"全拒"。这跟前人"SFT 记模式、RL 学泛化"的结论一脉相承——CaRL 的拒答率从分布内 37.17% 到分布外 36.63% 几乎不变,说明它学到的是能力边界判断,不是题型记忆。

难度泛化与效率

方法 L4 无效率 L4 长度 L6 无效率 L6 长度 L8 无效率 L8 长度
RLunk 95.8 2240 99.7 4948 98.4 7042
RFT 2.8 2327 14.4 6476 20.4 9133
CaRL 2.0 1804 5.6 4188 8.1 6156

(Qwen3-8B,无效率单位 %,长度单位 token)

RFT 的无效率从 L4 到 L8 涨了 7 倍(2.8% → 20.4%),典型的监督学习外推失败;CaRL 只从 2.0% 涨到 8.1%。更实用的是效率:L8 难度下 CaRL 平均输出 6156 token,比 RFT 的 9133 少了约 33%——及时止损带来的计算节省在难题上尤其可观。

通用能力没受损

最怕的就是"学会了拒答,把推理能力也拒没了"。作者在 AIME 2024 和 GPQA 上测了 Qwen3-8B:

指标 AIME 2024 Acc 可靠性 长度变化 GPQA Acc 可靠性 长度变化
Vanilla 75.40 0.7542 14,788 59.85 0.5985 7,506
CaRL 74.60 0.7854 12,411 58.33 0.6768 5,620
Δ -0.8 +3.1 -16.1% -1.5 +13.1 -25.1%

准确率损失在 2 个点以内,可靠性涨了不少(AIME 加 3.1 个点,GPQA 加 13.1 个点),token 省了 16-25%。参数分析还显示,CaRL 训练前后变化超过 \(10^{-5}\) 的参数块集中在 31-35 层——改动是局部的"决策机制"调整,没有扰动底层的推理能力。

案例对比

图8:Countdown 案例研究

图8:同一道 L8 难题(用 [99,68,52,37,65,8,90,44] 凑 151)。左边 Vanilla 模型反复输出"Final Correct Expression"但每次都不对,陷入递归式幻觉;右边 CaRL 探索后发现最接近的值 89 到不了 151,主动拒答并附上尝试总结:"Sorry, I can't solve this problem. Here is how far I got..."。

注意 CaRL 的拒答不是干巴巴一句"我不会",而是带着探索过程的交代——这正是 HRA 构造的训练格式(拒答前缀 + 尝试总结)在推理时的自然复现。

💡 我的判断

这篇论文最值钱的地方,我觉得不是方法本身有多复杂,而是问题定义得准

"模型该在什么时候放弃"这个问题,之前大多被归在"幻觉"或"校准"的筐里笼统讨论。作者把它单独拎出来,给了名字(无效推理)、给了分类(三种失败模式)、给了量化框架(能力四象限),还顺手揭了两个行业里心照不宣的事实:标准 RL 会让模型更爱硬撑,自我验证环节经常是摆设。这些诊断性结论即使你不采用 CaRL,也值得记住。

方法层面,奖励整形 + HRA 的组合说不上有多高深,但每个组件都精确对着一个诊断出来的病灶:奖励整形治"没有拒发动机",HRA 治"探索不到拒答样本"。实验里消融做得干净利落,RLunk 和 RFT 两个 baseline 选得很能说明问题。

当然,也有几个我会追问的点。一是测试床只有 Countdown 和数独这种纯算法题,作者自己也承认知识密集型任务(开放域 QA、数学应用题)里能力边界和知识边界是纠缠的,拒答机制能不能迁过去是未知数。二是"有效拒答"靠关键词片段识别,这个判定在更开放的任务上会很脆——模型完全可能学会在不该拒的时候用拒答句式骗 0 分(0 分也比 -1 好),论文里没看到这个方向的对抗分析。三是数独 OOD 上 43% 的无效率说明能力边界的泛化还远没解决,只是比 baseline 好。

但瑕不掩瑜。如果你在调推理模型,我的建议是:先去看看你的模型在超出能力的输入上是什么表现——大概率你也能复现出那 0% 的拒绝率。然后,"答错比拒答更糟"这个奖励层级,加上"失败轨迹改写成拒答样本"这个数据增强思路,是拿来就能用的。

说到底,一个知道自己几斤几两的模型,比一个什么题都敢答的模型,更值得信任。


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