让模型学会"这题我不会":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:左边是能力范围内的题——[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:模型连续三次输出"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 的两个组件。左侧 Rollout Generation 对每个 query 采样多条轨迹并按能力校准奖励打分(答对 1、拒答 0、答错 -1);右侧 Hindsight Refusal Augmentation 把答错的轨迹(-1)改写成拒答轨迹(0),一并送入 GRPO 更新。
组件一:能力校准的奖励整形
标准推理 RL 的奖励是二值的:对 1 分,错 0 分(或 -1)。在这个设计下,拒答和答错拿到一样的奖励——模型没有任何理由选择拒答,反正都是 0 分,为什么不赌一把?
CaRL 改成分层奖励:
有效拒答通过显式的拒答片段识别(比如"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:同一道 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前沿,关注我