推理链里出错,多数时候不是模型不够强。
是错误一旦落进上下文,后面每一步都在替它背书。
这话听起来像给模型开脱。不是。我想说的是,我们对“推理出错”的默认反应,方向就选错了。
默认反应是换更强的模型,或者加一句“再仔细想想”。
这两件事是同一件事。都是指望同一套参数,在同一个位置上多使一次劲。同一个参数化下,盲点会重复。它看不见的地方,你让它看十遍,它还是看不见,只是看得更自信。
让它自己想三遍再投票,也是这个路子。温度调高一点,看着像三个意见,其实是同一个分布的三个抽样点。分布窄的地方抽出来还是一样。那种“自我一致性”的提升因此往往有个上限,撞上就上不去。我一直觉得那个上限不是采样不够多,是采样根本没有独立性。
前一阵 arXiv 上有一篇讲 model slicing 的论文。我看到的第一反应是:这东西的价值不在结果,在它把问题提在哪儿。
它说的缺陷很朴素。单模型推理,后面的步骤依赖前面的输出。前面错一步,后面全歪,而且歪得自洽,因为每一步看到的都是前文,前文是它自己写的。所以没有人能独立复核。不是没人复核,是复核的人和犯错的人共用一套参数。
这是结构问题,不是能力问题。
这两个词的区别值得停一下。能力问题靠加参数、加数据、加算力,历史上一直有效,所以大家条件反射地往那儿走。结构问题只能靠改路径,加多少参数都不动它。你把一条单链做得再长,它还是单链。
人写代码 review 也是这么回事。自己 review 自己的,和换个人 review,差别很大,虽然两边看的是同一份 diff。差别不在认真程度,在独立性。
论文的做法我概括一下:不是训一个更大的,是把一个大模型按相近的参数预算切成几个更小的、异构的模型,让前面那一步推理在另一套参数化下被重新过一遍。
关键词是异构。
这个词现在用得太随便了。同一个模型开三个角色互相聊,那不叫异构。那是同一个人换了三顶帽子,他的知识空洞、他的偏见、他遇到某类题就往某个方向跑的怪癖,一样不少地跟着走。
多智能体 debate 效果时好时坏,我怀疑一部分原因在这。不是它们讨论得不够,是它们错误的作者相关性太高。三个高度相关的评审投票,不会更接近真相,只会更自信。
你可能会反对说,这不就是 ensemble 换了张皮,老东西。
只对一半。ensemble 是在输出层投票,这里动的是中间步骤。投票发生在最后,错误传导发生在中间。最后投一次票,救不回第三步就歪掉的那条链。这个区别不算小。
¹ 切分本身当然不保证异构。切出来三个模型如果错在同一处,那就是三个复读机,还比原来贵。
论文里另一块是 pyramid supervision,协议蒸馏加步骤级监督。这部分最容易被跳过,觉得是工程细节。我觉得它才是重点。
它在说:协作是有策略的,而策略得学。
这话听着平淡。反过来讲就刺耳了:默认的协作方式,通常比单干差。
几个 agent 凑一块儿,谁先说话、谁质疑谁、什么情况下接受对方的结论、什么时候该吵下去,这些用一段 prompt 写不出来。写出来那版就是零样本协作,运气好能用,运气不好就是互相把对方往坑里带。
“协作”这个词被滥用得太厉害,开会也叫协作,接龙也叫协作。但协作从来不是免费的。两个能力相当的人一起解题,经常比一个人解慢,因为要先对齐。对齐的成本,只有在分歧真能带来信息的时候才划得来。而同质的模型之间,分歧不带来信息。
² 步骤级监督的标签从哪来,这篇给的信息不够。最后答案对不对是免费的,中间步骤对不对得有人标。这一步决定方法能不能推广,我暂时持保留。
结果那块我不细说。四类任务上追平或超过原来的大模型,也超过一些多智能体基线。这类数字通常要打折看:任务是他们选的,基线是他们挑的,超没超过取决于你信哪一个。
我更在意另一个细节:不同任务上,模型之间长出了不同的协作模式。
如果这句成立,它比分数有信息量。它意味着不存在一个通用的协作方式,得按任务学。而这正好是 prompt 层面怎么也做不到的事。prompt 只能给你一个通用的协作方式,然后祈祷它在所有任务上都还行。
³ 效率那部分比的是多智能体基线,不是和原来那个大模型比推理开销。参数预算相近不等于推理成本相近,几个模型并排跑和一次前向,不是一回事。论文没怎么强调这点,但值得记住。
再往前推一步。如果这条路对,接下来会变的不是模型大小,是“模型怎么组织”变成一个正经的设计变量。切几个、怎么切、谁审谁、审几轮,这些以前不算设计,现在算了。
难点也不在训练,在于你怎么知道切得对。异构是手段,不是保证。
我这里可能错了。也许大多数推理错误确实是知识不够,路径只是把知识不够放大了一点。
但至少有一类不是。那类错误换个更大的模型也治不好,只会治得更贵。
