CritICL:小模型犯错的方式大模型也犯——把失败变成教材
一个反直觉的观察
在 Qwen2.5 家族里,1.5B 小模型和 72B 大模型,谁更容易在某道数学题上犯错?
直觉上,72B 比 1.5B 强 48 倍,当然更不容易错。但 CritICL 这篇论文发现了一个更深的现象:1.5B 在哪些题上犯错、犯的是什么类型的错,和 72B 高度一致。
不是错得一样多,而是错得一样"形状"。
这个发现听起来像个坏消息——大模型也有小模型的毛病。但 CritICL 把它变成了好消息:既然失败模式是共享的,那小模型的错误就可以用来给大模型当教材。
失败模式:不只是"错了",而是"怎么错的"
先说什么是"失败模式"。
一道数学题,模型答错了。错误本身不携带信息——"算错了"谁都知道。但错误的方式携带大量信息:
- 计算错误:步骤对,算术崩了
- 逻辑跳跃:跳了一步关键推理
- 公式误用:用了相似但不正确的公式
- 条件遗漏:漏看了题目里的某个约束
- 过度推广:把特殊情形的结论推广到一般
- 终止失败:推理没结束就输出了答案
批评不是泛泛的"你错了",而是"你在这一步犯了公式误用,正确公式应该是 X"。像老师批改作业,不是打叉,是写批注。
CritICL 的两个变体:动态与静态
有了 CritBank,怎么用?CritICL 提出两种方式。
CritICL-dynamic:输入感知的失败模式预测
对每道新题,先让小模型试一下。根据小模型的错误模式,预测大模型在这道题上可能犯什么错。然后从 CritBank 里检索对应失败模式的批评,塞进大模型的上下文里。
流程是:新题进来 → 小模型试错 → 预测失败模式 → 检索对应批评 → 大模型带着批评答题。
这像什么?像一个有经验的考生,做题前先翻一遍自己以前错过的同类题,提醒自己"上次在这里栽过,这次注意"。
CritICL-static:全局失败模式
更简单的版本:不用针对每道题预测,直接用全局最常见的失败模式对应的批评,作为通用提示。
效果稍差但更便宜——不需要在线跑小模型,直接用一个固定的批评集合。
为什么有效:失败模式的跨尺度一致性
CritICL 的核心假设是:同一模型家族里,小模型和大模型共享失败模式分布。
论文在 §4.1 验证了这个假设。在 Qwen2.5 家族(1.5B、3B、7B、32B、72B)里,小模型最常犯的错和大模型最常犯的错高度相关。1.5B 爱犯"公式误用",72B 也爱犯"公式误用";1.5B 在哪类题上犯"逻辑跳跃",72B 也在哪类题上犯。
这个一致性是 CritICL 成立的基础。如果失败模式不跨尺度,小模型的错误对大模型就没指导意义。
为什么会有这种一致性?论文没给理论解释,但直觉上:同一家族的模型用同样的架构、同样的数据配方训练,学到的"盲区"自然相似。大模型只是在小模型的盲区上叠加了一层修正,但盲区本身没消失。
实测:12.9% 的提升,更少的 token
在 Qwen2.5-32B 和 72B 上测试,任务包括 GSM8K、MATH、AMC、AIME:
- CritICL-dynamic:最高提升 12.9%
- CritICL-static:最高提升 13.4%
原因反直觉:CritICL 增加了输入长度(塞进了批评),但减少了输出长度。因为模型带着"避坑指南"答题,不需要反复试错,一次就能给出更对的结果。总 token 反而更少。
这和"分工比统一更有效"的原则一致——小模型负责找坑,大模型负责填坑,比大模型自己反复试更高效。
跨家族迁移:意外的好消息
CritICL 还做了一个意外实验:用 Qwen 家族小模型构建的 CritBank,能不能给 Llama 家族大模型用?
结果:可以,但效果不如同家族。跨家族迁移有部分效果,说明失败模式有一部分是通用的(数学推理的常见陷阱),有一部分是家族特定的(训练数据的偏置)。
这个结果对实际部署有意义:如果你没有同家族的小模型,用别家的小模型也能搭一个粗糙版 CritICL。
局限:依赖家族结构
CritICL 的硬约束是必须有同家族的小模型。如果你用的是闭源 API(比如 GPT-4、Claude),拿不到同家族小模型的内部状态,CritICL 就用不了。
另外,CritBank 的构建需要离线跑一次小模型,标注失败模式,生成批评。这是一次性成本,但不是零成本。论文在附录 F.1 估算了这个成本,结论是"可接受"——CritBank 构建一次,可以反复用。
更深的含义:失败是结构化的
CritICL 的真正贡献不是某个具体方法,而是一个认知:模型的失败不是随机的,是结构化的。
这个结构化有两层:
1. 类型结构化:失败可以分类,每类有对应的修正方式 2. 尺度结构化:失败模式在同一家族里跨尺度一致
第一层让"批评"成为可能——如果失败是随机的,批评就没意义。第二层让"小模型教大模型"成为可能——如果失败模式不跨尺度,小模型的错误就只对小模型有用。
这两层合起来,把"失败"从"要避免的坏东西"变成了"可利用的信息源"。小模型不是大模型的廉价替代品,而是大模型的诊断器——它告诉你大模型会在哪里跌倒。
这和"评测盲区定律"形成互补:评测盲区定律说"不测的就是问题藏身处",CritICL 说"测出来的失败本身就是教材"。前者是警告,后者是机会。
论文与代码
- 论文:https://arxiv.org/abs/2608.27455
- HTML 版本:https://arxiv.org/html/2608.27455v1
- 代码:https://github.com/umwyf/CRITICL
- 协议:CC BY 4.0
CritICL 的故事让我想起一个老笑话:新手程序员写代码,bug 是敌人;资深程序员写代码,bug 是教材。CritICL 把这个道理用在了模型上——小模型的 bug 不是要藏起来的羞耻,而是给大模型备课的素材。失败模式跨尺度一致,意味着我们不需要等大模型犯错才发现问题,小模型已经提前把"这里会出问题"标出来了。
分工比统一更有效:小模型找坑,大模型填坑,比大模型自己摸索更省、更快。