跳到主要内容

多答几遍,然后投票 — 以及那张十二行的账本

这一章讲什么: 第 07 章造出了「每遍答得不一样」这件事,这一章把它用起来 —— 同一道题答好几遍,选出现次数最多的那个答案。 这一招真的管用,而且做法简单到一眼看穿。 然后是这一章真正的重头戏:一张十二行的成绩表 —— 它是全书唯一一张把「不动权重」这条路的所有组合摆在一起的账本,而账本上的数会颠覆几个直觉。

它在全书链条里的位置: 「不动权重」这条路上分数最高的一站(52.0%), 也是这条路的天花板。这一章之后,不动模型能拿的基本拿完了。

需要的基础: 第 07 章的温度和 top-p(它们让「多答几遍」成为可能),第 05 章那把尺子。

顶层全景:五个答案,一次计票

还是第 06 章那道题:3x−9 的一半等于 x+37,求 x。正确答案 83。

同一道题,同一个提示词,采 5 次(温度 > 0,配上 top-p)

├─ 第 1 次 → 抽出 '83'
├─ 第 2 次 → 抽出 '22'
├─ 第 3 次 → 抽出 '54'
├─ 第 4 次 → 抽出 '83'
└─ 第 5 次 → 抽出 '61'

▼ 计票:83 出现 2 次,22 / 54 / 61 各 1 次
选 83 —— **对了**

图说:五次里有三次是错的,可正确答案仍然赢了 ——
因为**错法各不相同,而对法只有一种**。这就是这一招的全部原理。

把这条走查放大到 500 道题,就是这一章第 3、4 节那张表。

1. 这一招是什么:说穿了就是多数投票

做法只有三步1:

干什么
用大于 0 的温度、配上 top-p,对同一道题采出好几个答案
从每个答案里把 \boxed{} 框里那一小截抠出来(第 05 章那套)
选出现次数最多的那一个

这套做法有个名字:自洽(self-consistency)。 书自己都觉得这名字唬人,原话的意思是:名字听着花哨,说穿了就是一种简单的多数投票2

它的出处书也给了:是 Google Research 的一篇论文正式提出来的2

走查第 ①–③ 步就是开头那张图:采 5 次得到 83、22、54、83、61,计票选 83,答对3

为什么这么土的办法会管用

这一节要回答的是红线上那个问题。书没有专门论证,我们把它接到第 07 章的机制上:

模型答错的方式有很多种:22 是这么错的,54 是那么错的,61 又是另一种错法
模型答对的方式只有一种:83

⟹ 随机采样把「错」分散到很多个不同的值上,
而把「对」全部堆在同一个值上
⟹ 计票时,分散的一方各自票数很低,集中的一方胜出

图说:这就是为什么「错的比对的多」也照样能选出正确答案。
**前提是「对」的那一种确实有一定的出现概率** —— 如果模型压根答不对,采一百遍也没用。

判断(我们的,不是书里的): 这一招的适用条件比它看起来窄 —— 它要求模型对这道题「有时候是对的」。 它不能把一个完全不会的题变成会, 它只能把「偶尔对」变成「经常对」。 如果错,会错在: 我们没有从书里找到「模型单次答对率」与「投票后准确率」的对照数据, 所以这条推理虽然自然,但书没有直接支撑它。书只报了投票前后的总分,没有拆开报单次命中率。

配上思维链之后,五次全对

书还试了一次:把第 06 章那句「Explain step by step.」也加上,再采 5 次 —— 结果 5 次全是 834

书给的解释很克制:这道题在用了思维链之后,对这个模型来说大概算简单题4——注意这只是一道题的观察,不是规律。全 500 道题的结果在第 3 节,那里的数并不这么好看。

2. 书自己指出的两个缺口

这一招有两处明摆着的短板,书都写了出来。

缺口一:平局怎么办?—— 它直接放弃。

如果好几个答案的票数一样多,这个函数返回「没有」5

书当场给了出路,而且这就是下一章存在的理由之一:

下一章会做一个「给答案打分」的办法,拿它来当平局的裁判5(那把打分尺怎么造、以及它有一个很值得记住的毛病,第 09 章讲。)

缺口二:它要求答案短到能互相比较。

书说得很直白:这一招依赖于「有一个能抠出来的、装在框里的最终答案」; 对那些没有数值型或短答案的问题,它很难套用6

——想想看:两段一千字的散文,你没法「计票」。 这一条限制会把这一招挡在大多数开放式任务之外,而这正是第 09 章那一招更通用的原因。

3. 采样次数越多越准吗?—— 不是

从这一节开始读那张十二行的表。先看只加投票、不加思维链的那三行7:

采几次准确率耗时
3 次29.6%97.6 分钟
5 次27.8%116.8 分钟
10 次31.6%300.4 分钟

两件反直觉的事同时出现:

第一,采 10 次只比采 3 次高 2 个点,而时间涨了三倍。 书的判词是:在这个情形下,用 10 次相比用 3 次几乎没有准确率上的优势7

第二,采 5 次(27.8%)比采 3 次(29.6%)还低。 这条不是单调的 —— 更多的样本不保证更好的结果。书没有解释这一处,我们也不替它解释。

判断(我们的,不是书里的): 那 1.8 个点的回落多半是随机波动 —— 500 道题上 1.8 个点大约是 9 道题的差别,而每次评测都要采样,本身就带随机性。 书在这里没有重复实验取平均,所以这三个数之间的细微差异不该被当成规律。 如果错,会错在: 如果作者其实跑了多次取平均(书没说), 那么 5 次比 3 次差就是一个需要解释的真实现象,而不是随机波动。 ——书在第 7 章开头确实提醒过:要下强结论,每个实验都得重复多次取平均。

第三条更值得记:单独加采样,会把思维链弄坏。

准确率
只加思维链(第 06 章)40.6%
思维链 + 温度和 top-p(不投票)33.4%

掉了 7 个多点。 书的判词很直接:在这种情况下,采样让思维链的结果变差了8

——这一条的实用价值很高:随机性是有代价的,它只有在配上投票之后才划算。

4. 怎么读那张十二行的账本

这是全书唯一一张纵向对照表,值得逐行读一遍。全部 500 道 MATH-500,同一台机器, 温度和 top-p 都用 0.99

#做法模型准确率耗时
1基线,贪心解码base15.2%10.1 分钟
2基线,贪心解码官方推理版48.2%182.1 分钟
3思维链base40.6%84.5 分钟
4温度 + top-pbase17.8%30.7 分钟
5温度 top-p + 投票 3 次base29.6%97.6 分钟
6温度 top-p + 投票 5 次base27.8%116.8 分钟
7温度 top-p + 投票 10 次base31.6%300.4 分钟
8温度 top-p + 思维链base33.4%129.2 分钟
9投票 3 次 + 温度 top-p + 思维链base42.2%211.6 分钟
10投票 5 次 + 温度 top-p + 思维链base48.0%452.9 分钟
11投票 10 次 + 温度 top-p + 思维链base52.0%862.6 分钟
12投票 3 次 + 温度 top-p + 思维链官方推理版55.2%544.4 分钟

读这张表的四条口径:

① 每一行给的是两个数,不是一个分数。 只看准确率会得出完全错误的结论 —— 第 11 行比第 3 行高 11.4 个点,但它要多花十倍的时间。

② 第 1 行和第 2 行是尺子的两端。 书自己的解读:官方推理版的准确率大约是 base 的三倍, 但耗时也大得多,因为它生成的小块更多10 —— 这正是第 03 章那个乘法。

③ 第 4 行那 2.6 个点是「预期之内」的。 理由第 07 章讲过: 温度和 top-p 本身不是提分手段11

④ 第 12 行说明这一招不只对弱模型有用。 官方推理版加上投票 3 次, 从 48.2% 涨到 55.2% —— 书特意点出:推理模型同样吃得到这份红利12

一处工程建议,书顺带给了13:如果你有好几张显卡, 那几次采样可以几路一起跑,而不必一次接一次 —— 总算力不变,但你等的时间能压下去。 (这也说明表里那些吓人的耗时里,有一部分是「一次只跑一条」这个前提造成的, 不全是方法本身的代价。第 04 章第 5 节讲过这件事。)

5. 全书最贵的一行:准确率涨 3.4 倍,时间涨 85 倍

把第 1 行和第 11 行摆在一起,就是「不动权重」这条路的全部交易:

起点(第 1 行)最好(第 11 行)倍数
准确率15.2%52.0%3.4 倍
同一批题跑完10.1 分钟862.6 分钟(约 14.4 小时)85 倍

书用了一个词形容那 862.6 分钟:惊人8

这笔账用第 03 章那个乘法看得最清楚:

总花费 ≈ (每道题跑模型几次) × (每次生成多少个小块) × (每块要把整台机器跑一遍)
↑ 从 1 变成 10 ↑ 从短答案变成长解法
这一章动的是它 第 06 章动的是它

两个因子一起涨 ⟹ 10 × 8.5 ≈ 85 倍。**账对得上。**

书给这张表下的总判词14:

表 4.1 很好地呈现了推理时扩展的权衡:拿更多算力,换更高的准确率。

而这条路的性价比在一路下滑:

第 06 章:一句话 +25.4 个点,时间 ×8.4 ⟹ 每倍时间换约 3 个点
本 章 :投票十遍 再 +11.4 个点,时间再 ×10 ⟹ 每倍时间换约 1 个点

图说:同样是花时间,越往后越不划算。
**这就是为什么必须换一条路 —— 去动模型本身。**

书自己在这一章末尾指向了下一步:下一章要实现一种不同的、更通用的推理时做法 —— 让模型反复改进自己的答案15(那一招和它顺带造出的两把打分尺,第 09 章讲。)

作者的判断与证据

说法性质
五次采样得到 83、22、54、83、61书里印出来的实测
配上思维链之后五次全对书里印出来的实测(一道题,不是统计)
表 4.1 全部十二行书里的实测,同一台机器、同一批 500 道题
「名字花哨,其实就是多数投票」作者的评价,也是最好记的一句话
采 10 次比采 3 次「几乎没有优势」作者读表得出的结论,数据本身摆着
采 5 次比采 3 次低数据里就是这样,书没有解释
采样把思维链弄坏了作者的判词,数据摆着(33.4% 对 40.6%),但没有解释为什么
五次全对是因为「这道题算简单」作者的推测,措辞是「很可能」
平局返回「没有」、要求短答案作者主动列出的两个缺口
多张显卡可以几路一起跑作者的工程建议,书没有实测这一条
「拿算力换准确率」作者给整章的定性,这句话是这条路的一句话总结

判断(我们的,不是书里的): 这张十二行的表是这本书对整个书架最大的增量。 别的书里「哪条路更划算」只有定性的说法,这里有一张同一模型、同一批题、同一把尺子的表。 引用这本书的时候,应该引这张表,而不是引它的算法讲解。 如果错,会错在: 这张表的每一行只跑了一次,而采样本身带随机性 (第 5、6 行那个非单调就是证据)。 若把每一行重复五次取平均,行与行之间几个点的差距可能会重新排序 —— 书自己在第 7 章开头也承认过这类实验需要重复多次取平均。

边界与局限

  1. 每一行只跑了一次。 见上面那个判断块 —— 这是这张表最大的软肋。
  2. 平局没有处理。 这一章的实现直接返回「没有」;裁判要到下一章才有。
  3. 只适用于有短答案的题。 开放式回答套不上这一招。
  4. 「为什么投票管用」书没有正面论证。 它给了做法和结果,没有给机制; 第 1 节那段推理是我们补的,并已标成判断。
  5. 采样把思维链弄坏了这件事,书只报了现象。 为什么会这样,没有解释、也没有做进一步实验。
  6. 温度和 top-p 都固定在 0.9。 换成书自己推荐的 0.3–0.8 会怎样,表里没有。
  7. 耗时受「一次只跑一条」这个前提影响很大(第 04 章第 5 节), 所以那 862.6 分钟不该被当成这个方法的固有代价。

可带走的

  1. 这一招的全部内容:采多个答案 → 各自抠出短答案 → 选出现次数最多的。 名字叫自洽,说穿了就是简单多数投票。
  2. 它为什么管用:错法各不相同,对法只有一种 —— 随机把错票分散,把对票堆在一起。
  3. 它的前提是「模型对这道题有时候是对的」。 它把「偶尔对」变成「经常对」, 变不出模型压根不会的答案。
  4. 它有两个硬缺口:平局没法处理、答案必须短到能互相比较。 后一条把它挡在大多数开放式任务之外。
  5. 采样次数不是越多越好。 从 3 次加到 10 次只涨 2 个点,时间却涨三倍; 而且这条曲线不是单调的。
  6. 随机性单独用会伤思维链(40.6% → 33.4%)。它只有配上投票才划算。
  7. 报成绩一定要「准确率 + 耗时」成对报。 这张十二行的表之所以有价值, 全在于它每一行都带了耗时。
  8. 不动权重的天花板:52.0%,代价是 862.6 分钟。 相对起点,准确率 3.4 倍、时间 85 倍。
  9. 这条路的性价比在一路下滑 —— 第一招每倍时间换约 3 个点,这一招只换约 1 个点。 这就是必须换路(去动模型本身)的理由。
  10. 投票对已经很强的模型同样有效(48.2% → 55.2%)—— 它不是只能救弱模型的补丁。
  11. 有多张显卡的话,几次采样可以几路一起跑。 总算力不变,但你等的时间能压下来。

原文地图

主题原书章原文位置
这一招是什么、名字与出处4.6 Improving response accuracy with self-consistencytext/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:19(搜「simple majority voting」)
三步流程同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:132(搜「Samples multiple answers」) · :138(搜「Chooses the most frequent final answer」)
五次采样的输出同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:200(搜「[Sample 1/5]」) · :204(搜「[Sample 5/5]」)
平局返回「没有」、下一章做裁判同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:241(搜「does not handle ties」)
配上思维链后五次全对同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:346(搜「all 5 answers are 83」)
表 4.1 的标题同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:358(搜「Table 4.1」)
表 4.1 第 1–12 行同上:387(搜「15.2%」) · :400(搜「48.2%」) · :413(搜「40.6%」) · :431(搜「17.8%」) · :444(搜「29.6%」) · :457(搜「27.8%」) · :470(搜「31.6%」) · :488(搜「33.4%」) · :501(搜「42.2%」) · :514(搜「48.0%」) · :527(搜「52.0%」) · :540(搜「55.2%」),均在 text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt
第 1、2 行的解读同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:563(搜「approximately 3 times the accuracy」)
第 4 行的解读同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:575(搜「not inference-time scaling techniques themselves」)
第 5–7 行的解读同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:581(搜「almost no accuracy advantage」)
第 8、11 行的解读同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:587(搜「the sampling makes the chain-of-thought results worse」)
多张显卡可以几路一起跑同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:593(搜「computed in parallel rather than sequentially」)
第 12 行的解读同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:599(搜「benefits from self-consistency sampling as well」)
整张表的总判词同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:605(搜「trade better accuracy for more compute」)
只适用于短答案 · 指向下一章同上text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:611(搜「relies on a final boxed answer」) · :617(搜「self-refinement」)

Footnotes

  1. 出处:「4.6 Improving response accuracy with self-consistency」第 132 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:132,搜「Samples multiple answers」)与第 138 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:138,搜「Chooses the most frequent final answer」)。这两行是书里那段代码的注解。

  2. 出处:「4.6 Improving response accuracy with self-consistency」第 19 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:19,搜「simple majority voting」)。原文的措辞是「Despite the fancy name」——尽管名字唬人。论文题目是《Self-Consistency Improves Chain-of-Thought Reasoning in Language Models》,地址书写在附录里(见「Appendix A. References and further reading」第 338 段,text/79-apx-a-appendix-a-references-and-further-reading.txt:338,搜「2203.11171」)——那个地址我们没有另行打开核对 2

  3. 出处:「4.6 Improving response accuracy with self-consistency」第 200 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:200,搜「[Sample 1/5]」)到第 204 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:204,搜「[Sample 5/5]」)。五个抽出来的答案依次是 83、22、54、83、61。

  4. 出处:「4.6 Improving response accuracy with self-consistency」第 346 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:346,搜「all 5 answers are 83」)。作者的解释用的是「likely」——很可能是因为配上思维链之后,这道题对模型来说相对简单。 2

  5. 出处:「4.6 Improving response accuracy with self-consistency」第 241 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:241,搜「does not handle ties」)。原文明说下一章会做一个算「这个答案有多大把握」的办法,用来打破平局。 2

  6. 出处:「4.6 Improving response accuracy with self-consistency」第 611 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:611,搜「relies on a final boxed answer」)。

  7. 出处:表 4.1 第 5–7 行,「4.6 Improving response accuracy with self-consistency」第 444 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:444,搜「29.6%」)、第 457 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:457,搜「27.8%」)与第 470 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:470,搜「31.6%」);作者的解读在第 581 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:581,搜「almost no accuracy advantage」)。「5 次比 3 次低」这一点书没有提,是我们从表里读出来的。 2

  8. 出处:「4.6 Improving response accuracy with self-consistency」第 587 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:587,搜「the sampling makes the chain-of-thought results worse」)。注意:这一段正文把最贵那一行的耗时写成了 862.9 分钟,而表里第 11 行写的是 862.6 分钟(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:529,搜「862.6 min」)—— 两处对不上,是早期试读版的笔误。我们按表里的数。 2

  9. 出处:表 4.1,「4.6 Improving response accuracy with self-consistency」第 358 段起(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:358,搜「Table 4.1」)。十二行的准确率与耗时逐一见「原文地图」那一行列出的地址。表 4.1 里所有涉及温度和 top-p 的实验都用 0.9 这个取值,见第 575 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:575,搜「a setting of 0.9 for both」)。

  10. 出处:「4.6 Improving response accuracy with self-consistency」第 563 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:563,搜「approximately 3 times the accuracy」)。同一段还重申了前两行用的是第 3 章那套不加随机的生成函数,也就是贪心解码。

  11. 出处:「4.6 Improving response accuracy with self-consistency」第 575 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:575,搜「not inference-time scaling techniques themselves」)。

  12. 出处:「4.6 Improving response accuracy with self-consistency」第 599 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:599,搜「benefits from self-consistency sampling as well」)。

  13. 出处:「4.6 Improving response accuracy with self-consistency」第 593 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:593,搜「computed in parallel rather than sequentially」)。原文强调:总算力不变,只是把它摊开同时算,墙上时钟走过的时间更短。

  14. 出处:「4.6 Improving response accuracy with self-consistency」第 605 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:605,搜「trade better accuracy for more compute」)。

  15. 出处:「4.6 Improving response accuracy with self-consistency」第 617 段(text/33-ch04-06-4-6-improving-response-accuracy-with-self-consis.txt:617,搜「self-refinement」)。原文用的形容是「不同的、更通用的」(a different and more versatile)。