思维树

4322 字
29 分钟
思维树
思维树
Tree of Thoughts: Deliberate Problem Solving with Large Language Models
Shunyu Yao 等 · 普林斯顿大学与 Google DeepMind · 2023 年 12 月
主线
大模型的推理是逐词向左向右走的,这在需要探索和试错的题上必然出错。这篇的改法是把思维链从一条线扩成一棵树,让模型能在多个候选路径里选、往前看、往回退。24 点游戏这个题目上,思维链的成功率是 4%,思维树是 74%。
内核
推理慢不是问题,不能反悔才是问题。人类解问题的方式是在一棵搜索树上走,走错了可以退回来换个分支;大模型只能一条路走到底。这篇的核心不是让模型想得更多,而是给它一个可以放弃当前答案的结构。
方法
把三条旧路线写成公式,逐条指出不足

思维树不是拍脑袋想出来的,它是把已有的三条路线放在同一个形式下比较,然后补上它们共同缺的那一块。

路线做法不足
直接问答把问题包成提示,直接生成答案没有中间过程可言
思维链生成一串想法当中间步骤,串起来通向答案链内不探索,一条链只有一条走法
思维链 + 自我一致性独立采样 k 条链,答案最频繁的赢同样链内不探索;而且「最频繁」这个启发式只在输出空间有限时成立,比如多选题
思维链 + 自我一致性:只在开头分叉 起 每条链一旦选了就走到底 而且「多数票」只在输出空间有限时才成立 24 点的输出空间是无限的,多数票无从下手 思维树:每一步都分叉 起 剪 每个状态都能停下来评估分支 分叉发生在每一步,不只在开头 所以能剪掉走不通的分支
思维树补的正是「探索」这一块:不是独立采样 k 条完整的链,而是在一个状态上分叉出 k 个候选想法,给每个打分,再决定往哪条走。

第三条的批评最关键,而且直接解释了 24 点游戏上的现象。自我一致性的胜负靠多数票,但 24 点的输出空间是无限的(四个数字有无数种排列组合),多数票无从下手。所以采样投票在这个任务上只有 9%。

作者用一句话概括方法的定义:思维树的一个具体实现要回答四个问题:中间过程怎么拆成想法、想法怎么生成、状态怎么评估、用什么搜索算法。这四个问题就是后面四个部件的由来。

作者还引了人类问题解决研究作为依据:人在解问题时是在一棵组合树上搜索,节点是部分解,分支是修改它的算子,走哪条分支由启发式决定。大模型缺的正是那个启发式式的搜索。

论证链
从一条线扩成一棵树

作者先指出两个具体缺陷,再给解法。

一条线:只能往前,不能反悔 起 1 2 3 开局决定错了 后面只能一条路走到底 思维链在这个结构上 24 点题只有 4% 一棵树:可以选、可以回退 起 剪 状态评估器给每个分支打分,分数低就剪掉 作者指出的两个具体缺陷 局部不探索 在一段推理内部不尝试别的走法 全局无规划 没有往前看、没有回头路
人类认知里有两套系统:快而自动的系统一负责直觉,慢而有意识的系统二负责检查和重来。作者的判断是大模型只有系统一:它能联想,但不能审视自己的联想。
缺陷说的是什么
局部不探索模型在一段推理内部不尝试别的走法,没有「这里也可以那样算」的分支
全局无规划没有往前看、没有回头路。开局决定错了,后面只能一条路走到底

解法是把问题定义成一棵搜索树。树上每个节点是一个「状态」,也就是原始输入加到目前为止生成的一串想法;从状态出发的每条分支是一个候选想法。这样一来,「生成下一步」变成扩展节点,「判断对不对」变成给状态打分,「推倒重来」变成剪枝。

证据的重量在 24 点游戏上。这个任务的规则极简:四个数字凑出 24,只能用加减乘除,但 GPT-4 用思维链只有 4% 的成功率,用思维树(宽度 5)是 74%。

方法成功率
直接问答7.3%
思维链4.0%
思维链 + 100 次采样投票9.0%
思维树(宽度 1)45%
思维树(宽度 5)74%

这张表里最该看的是宽度 1 和宽度 5 的差距。宽度 1 就是「只探索一条,但会评估并回退」,已经到 45%,比思维链高十倍。说明主要的收益来自能反悔,而不是看得宽。而从 45% 到 74% 才是宽度带来的第二段收益。

作者还做了一个公平对照:把直接问答和思维链各采样 100 次取最好的,成绩是 33% 和 49%,仍然低于思维树。这个对照很关键:它排除了「多采样几次总会碰对」这个解释。

前提与边界

三个任务(24 点、创意写作、迷你填字)都是作者新设计的,题目规模都很小。这些任务是否真的代表「需要规划的复杂问题」,论文没有论证。而且这三个任务恰好都是训练数据里可能有大量同题的,模型可能有记忆优势。

四部件
四个部件,都是可换的

思维树不是一招固定的提示技巧,而是一个框架。这四个部件作者都给了不止一种实现,并且做了消融。这一点比结果本身更重要:它说明效果不来自某个具体的提示词。

任何问题都是一棵搜索树:每个节点是一个状态,每条分支是一个候选想法 想法的粒度 小到能生成有差异的候选 大到能判断它的前景 填字一个词,24 点一行算式 想法生成器 独立采样:空间大时 顺序提议:空间小时 两种可换 状态评估器 给人写死的规则之外 学出来的策略之外 第三条路:让模型自己推理 搜索算法 广度优先:树浅时 深度优先:需要回溯时 两种可换 没有它就没有回退的可能 传统启发式要么人写死,要么学出来;这篇用模型自己给每个状态打分
评估器是最关键的一个部件。独立打分(1-10 分或「有把握、可能、不可能」分类)或放在一起比较投票,都可以。

一、想法的粒度。一个想法该多大,没有标准答案。论文给的判据是一句话:小到模型能生成有差异的候选,大到模型能对它的前景做出判断。具体任务里的粒度差别很大:填字游戏是一个词,24 点是一行算式,创意写作是一整段写作计划。生成整本书太大,会不连贯;单个 token 太小,无法评估。

二、想法生成器。给下一步出 k 个候选,两种策略各有适用场景:

策略做法什么时候好用
独立采样从思维链提示里独立抽 k 个想法想法空间大时(如一段写作计划)。独立采样天然带来多样性
顺序提议用一个「提议提示」依次给出 k 个想法,彼此看得见想法空间受限时(如一个词、一行算式)。同上下文提议能避免重复

三、状态评估器。这是最关键的一个部件。没有它就没有回退的可能。传统搜索算法的启发式规则要么是人写死的(如国际象棋引擎),要么是学出来的(如围棋)。这篇提出第三条路:用大模型自己去推理每个状态值不值得继续。同样分两种:独立给每个状态打分,或者把一批状态放在一起比较投票。可以用 1-10 的分值,也可以用「有把握、可能、不可能」这样的分类。

四、搜索算法。广度优先是每层保留最有希望的 b 个状态,用于树浅的任务(24 点、创意写作,最多 3 步)。深度优先是先走最有希望的,走不动了就剪掉这棵子树换一条,用于树深、需要回溯的任务。作者明确说更复杂的算法(A*、蒙特卡洛树搜索)留作未来工作。这两个都不是最优搜索算法,价值在于简单、可解释、随插随用。

一次推理实际怎么跑

四个部件装好之后,作者用两种搜索算法把它跑起来。这两种算法就是「思维树」在推理时的具体形态。

广度优先(树浅时用)做什么
1用想法生成器在当前每个状态上各出 k 个候选想法,展开成一堆新状态
2用评估器给这堆新状态打分
3只保留分数最高的 b 个,其余全扔掉
4重复直到走满 T 层,最后从终层里挑最好的那个生成答案
深度优先(要回溯时用)做什么
1在当前状态生成候选想法,按分数排序
2分数最高的那条超过阈值就继续往下走,低于阈值就剪掉、换下一个候选
3走到超过 T 层就记录答案,返回上一层换分支

这一步是整篇论文的机制核心。作者强调 ToT 是可插拔的:四个部件配不同的搜索算法,就能应对不同形状的问题。24 点游戏树浅用广度优先,填字要回溯就用深度优先。

前提与边界

四个部件的组合有 16 种可能,论文只测了其中一部分。作者没有给出「怎么给不同任务选组合」的方法论。框架给了灵活性,选择的成本留给了用户。

实验
三个任务,三种「难」

作者设计三个任务不是为了覆盖场景,而是让三种不同的难题各显形。

24 点游戏 规则确定、步骤浅 只有算式这一种想法 难点在全局找不找得到 创意写作 想法空间最宽 一个想法是一整段写作计划 没有唯一正确答案 迷你填字 唯一涉及自然语言 跨词联想、带约束的搜索 最难的一个 创意写作里还有第三种生成方式 修改已有的想法,而不是每次重新生成,连贯性评分从 6.19 提到 7.67 为什么不直接做普通填字 普通填字可以用专门的大规模检索管线解掉,测不出模型作为通用问题求解器的上限
三个任务的「难」不在一个方向上:24 点难在组合搜索,创意写作难在想法太宽,填字难在两者兼有。所以生成器和搜索算法的选法也不同。

24 点游戏是最纯粹的搜索问题,思维链在这里几乎无效,因为难点不在每一步,而在全局找不找得到那个组合。思维树的收益主要来自评估器剪掉了大量走不通的分支。

创意写作的想法空间最宽(整段写作计划),所以生成器用的是独立采样。任务本身没有唯一正确答案,评估靠人工按 1-10 分打分。这里有个关键细节:作者又加了第三种生成方式,修改已有的想法,而不是每次重新生成。这让连贯性评分从 6.19 提到 7.67。

迷你填字是最难的一个,也是唯一的自然语言任务。作者说明了为什么不直接做普通填字:普通填字可以用专门的大规模检索管线解掉,测不出模型作为通用问题求解器的上限。5×5 迷你填字需要跨词联想、带约束的搜索,正好卡在模型能力的边界上。

三个任务上思维树都赢,但赢的幅度差别很大,这跟任务的想法空间宽窄直接相关。

作者在迷你填字上还做了一组消融,这组数据比成功案例更能说明方法的核心。逐个去掉组件看掉多少:

配置成功率单独字母单词
完整方法78%60%20
去掉剪枝65.4%41.5%5
去掉回退54.6%205
迷你填字成功率(%) 完整方法 78 去掉剪枝 65.4 去掉回退 54.6 去掉剪枝掉 13 个点,去掉回退掉 23 个点,回退的贡献接近剪枝的两倍
这与 24 点游戏上「宽度 1 就到 45%」的发现对上了:能走回头路,比能剪掉一个分支更关键。单词这一列掉得最狠(20 掉到 5),因为填字要靠回退才有机会重填。
前提与边界

创意写作的评估是人工打分,样本量与评分者一致性论文交代得不多。而 24 点游戏上,同一个题目在训练数据里几乎肯定出现过大量变体。

缺口
这篇论文没回答什么
1. 成本没给完整对照。

作者承认思维树比采样方法贵(要用多次接口调用),但说「模块化让用户可以自定义性能与成本的取舍」。具体贵多少、能换来多少,这篇没给一张直接的表。附录里有成本讨论,但正文没有。

2. 「需要规划的复杂问题」这个判断是事后给的。

三个任务都是作者挑的、都能被思维树解好。没有第四个任务是思维树解不好的,所以「这类任务需要思维树」这个结论的强度,比实验设计能支撑的要弱。

3. 评估器本身可能出错,论文没量化。

整套方法依赖「模型能判断一个状态值不值得继续」。如果评估器剪掉了正确分支,整棵树就废了。论文报告了失败样本的分布,但没给评估器的准确率。

4. 只用现成模型,没有训练。

作者自己列为未来工作:能不能用「反事实决策」的思路去微调模型,比如让它预测下一段而不是下一个词。也就是说,这篇验证的是推理时框架,没有回答能不能把这种能力内化进权重。

5. 深度优先的回退机制依赖阈值,阈值怎么定没说。

剪枝时的价值阈值是一个超参,论文没有敏感性分析。阈值太高会过早剪掉正确分支,太低就退化成暴力搜索。这个平衡点在哪,论文没回答。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

当前页面没有目录

文章目录

当前页面没有目录