Tree of Thoughts 与 MCTS 在 LLM 中的应用:当模型不再只猜一次时会发生什么
一位开发者在 Dev.to 上发表文章,探讨了 Tree of Thoughts(ToT,思维树)和 MCTS(蒙特卡洛树搜索)在大语言模型中的应用。核心观点是:传统的 LLM 推理方式是让模型"一次性猜答案",而 ToT 和 MCTS 让模型能够探索多条推理路径、评估中间结果、选择最优路径,从而显著提升复杂推理任务的性能。
背景:LLM 的一次性推理问题
传统的 LLM 推理方式(包括标准 prompting 和 Chain-of-Thought)本质上是让模型"一次性猜答案":
- 模型从左到右生成 token,每一步都基于之前的上下文
- 一旦生成了某个 token,就无法回退或修改
- 推理路径是线性的,没有分支和回溯
- 模型无法在多个可能的推理路径之间进行比较和选择
这种方式对于简单任务足够有效,但对于复杂推理任务存在明显局限:
- 早期的错误会沿着推理路径传播,无法纠正
- 模型无法探索多个可能的解决方案
- 无法评估中间推理步骤的质量
- 对于需要全局最优的问题,容易陷入局部最优
Tree of Thoughts(思维树)
Tree of Thoughts 是由普林斯顿大学和 Google DeepMind 的研究者提出的框架,旨在让 LLM 能够进行更灵活的推理。
核心思想
ToT 的核心思想是将推理过程组织成一棵树:
- 节点:表示一个推理状态(部分解决方案或中间思考)
- 边:表示从一个状态到另一个状态的推理步骤
- 根节点:初始问题
- 叶节点:完整的解决方案
模型在推理过程中可以:
- 分支:从一个状态生成多个可能的下一步
- 评估:评估每个中间状态的质量("这个思路看起来对吗?")
- 搜索:在树中搜索最优路径(广度优先、深度优先或其他策略)
- 回溯:放弃不好的路径,回到更好的分支
与传统方法的对比
| 方法 | 推理结构 | 能否探索多路径 | 能否评估中间结果 | 能否回溯 |
|---|---|---|---|---|
| Input-Output | 单步 | 否 | 否 | 否 |
| Chain-of-Thought | 线性链 | 否 | 否 | 否 |
| Self-Consistency | 多条独立链 | 是(但独立) | 否 | 否 |
| Tree of Thoughts | 树 | 是 | 是 | 是 |
典型流程
一个典型的 ToT 推理流程包括:
- 思维分解:将问题分解为多个推理步骤,每个步骤生成若干候选思维
- 思维生成:对于每个当前状态,生成多个可能的下一步思维
- 状态评估:让模型评估每个候选状态的质量(可以是打分或分类)
- 搜索算法:使用搜索算法(BFS/DFS/beam search)选择要探索的路径
- 输出选择:从所有完整的解决方案中选择最优的一个
示例:24 点游戏
24 点游戏是 ToT 的经典测试场景:给定 4 个数字,通过加减乘除得到 24。
传统 CoT 方式:模型一次性尝试生成完整的解题过程,一旦中间步骤出错就无法纠正,成功率较低。
ToT 方式:
- 第一步:从 4 个数字中选择 2 个,生成所有可能的运算结果
- 评估:哪些中间结果看起来有希望(接近 24 的因数)
- 第二步:从有希望的中间结果继续,生成下一步
- 重复直到得到 24 或确认无解
- 选择最优的解题路径
研究表明,ToT 在 24 点游戏中的成功率从 CoT 的约 4% 提升到了约 74%。
MCTS(蒙特卡洛树搜索)
MCTS 是一种在博弈树中进行随机搜索的算法,因 AlphaGo 而闻名。将 MCTS 与 LLM 结合,可以实现更高效的推理搜索。
MCTS 的四个步骤
MCTS 每次迭代包括四个步骤:
- 选择(Selection):从根节点开始,根据选择策略(如 UCB1)选择一个未完全展开的节点
- 扩展(Expansion):在选中的节点上生成一个或多个子节点
- 模拟(Simulation):从新节点开始,进行随机或启发式的模拟,直到达到终止状态
- 回溯(Backpropagation):将模拟结果回溯更新到路径上的所有节点
重复这四个步骤,直到达到计算预算,然后选择最优的下一步。
LLM + MCTS 的结合方式
将 LLM 与 MCTS 结合有几种方式:
方式一:LLM 作为策略和价值函数
- LLM 负责生成候选动作(策略函数)
- LLM 负责评估状态的好坏(价值函数)
- MCTS 负责搜索和选择
- 这类似于 AlphaGo 中神经网络 + MCTS 的方式
方式二:LLM 作为推理器,MCTS 作为搜索框架
- LLM 在每个节点生成推理步骤
- MCTS 管理搜索树,决定探索哪些分支
- LLM 评估中间结果的质量
- MCTS 根据评估结果调整搜索方向
方式三:渐进式解码
- 将 LLM 的解码过程本身组织成树搜索
- 每个节点表示部分生成的文本
- MCTS 决定在哪些分支上继续生成
- 最终选择最优的完整文本
与 ToT 的区别
虽然 ToT 和 MCTS 都涉及树搜索,但它们有一些区别:
| 特性 | ToT | MCTS + LLM |
|---|---|---|
| 搜索策略 | 通常 BFS/DFS/beam search | 蒙特卡洛随机搜索 |
| 评估方式 | LLM 直接评估状态 | 模拟 + 回溯更新 |
| 计算预算 | 固定深度或宽度 | 可灵活控制迭代次数 |
| 探索 vs 利用 | 较难平衡 | UCB1 天然平衡 |
| 实现复杂度 | 中等 | 较高 |
实际应用场景
1. 数学推理
ToT 和 MCTS 在数学推理任务中表现突出:
- 多步骤数学问题
- 方程求解和证明
- 逻辑推理
- 组合优化问题
通过探索多种解题路径并评估中间步骤,模型可以避免早期错误导致的整体失败。
2. 代码生成
在代码生成中,ToT 和 MCTS 可以:
- 探索多种实现方案
- 评估代码的正确性和效率
- 自动调试和修复错误
- 选择最优的实现
研究表明,ToT 在代码生成任务中可以显著提升正确率。
3. 规划和决策
对于需要多步规划的任务:
- 任务分解和调度
- 资源分配
- 路径规划
- 战略决策
ToT 和 MCTS 可以评估不同规划方案的优劣,选择最优方案。
4. 科学发现
在科学研究中:
- 假设生成和验证
- 实验设计
- 数据分析
- 文献综述
ToT 和 MCTS 可以帮助系统地探索多种假设和研究路径。
实现挑战和注意事项
1. 计算成本
ToT 和 MCTS 需要多次调用 LLM,计算成本远高于单次推理:
- 一棵有 100 个节点的树可能需要 100 次 LLM 调用
- 每次调用都有延迟和费用
- 需要在性能和成本之间找到平衡
缓解方法:
- 设置合理的搜索预算(节点数、深度、时间)
- 使用便宜的模型进行搜索,高端模型进行最终生成
- 缓存重复的状态评估
- 并行化搜索过程
2. 状态评估的准确性
ToT 和 MCTS 的效果很大程度上取决于状态评估的准确性:
- LLM 可能错误地评估中间状态的质量
- 不好的评估会导致搜索方向偏离最优路径
- 某些任务难以在中间步骤评估好坏
缓解方法:
- 使用更强大的模型进行评估
- 结合多种评估方式(LLM 评估 + 规则检查 + 验证器)
- 对评估结果进行校准
- 在不确定时增加探索
3. 树的爆炸问题
搜索树可能迅速膨胀:
- 每个节点生成多个子节点,指数级增长
- 大量节点消耗计算资源
- 需要有效的剪枝策略
缓解方法:
- 使用 beam search 限制宽度
- 设置最大深度
- 及时剪枝明显不好的分支
- 使用 MCTS 的 UCB1 策略智能分配计算资源
4. 与现有框架的集成
将 ToT 和 MCTS 集成到现有 LLM 应用中需要一定的工程工作:
- 需要管理搜索树的状态
- 需要实现搜索算法
- 需要处理异步和并行
- 需要监控和调试
现有工具:
- LangChain 提供了 ToT 的基础实现
- HuggingFace Transformers 支持一些搜索算法
- 有专门的库如
tree-of-thoughts、llm-mcts等
总结
Tree of Thoughts 和 MCTS 代表了 LLM 推理方式的重要演进:从"一次性猜答案"到"系统性地探索和评估多条推理路径"。
核心要点:
- 传统 LLM 推理的局限:线性、无回溯、无法评估中间结果
- ToT 的价值:将推理组织成树,支持分支、评估、搜索和回溯
- MCTS 的优势:通过蒙特卡洛搜索智能平衡探索和利用,计算预算灵活可控
- 显著的性能提升:在数学推理、代码生成、规划决策等复杂任务中,性能提升明显
- 实际挑战:计算成本、评估准确性、树爆炸、工程集成
对于需要处理复杂推理任务的开发者来说,ToT 和 MCTS 是值得了解和尝试的技术。它们不是要替代传统的推理方式,而是在需要更高推理质量的场景中提供更强大的工具。
正如文章标题所说:当你不再让模型只猜一次,而是让它系统性地探索和评估时,会发生什么?答案是:推理质量会显著提升,但代价是更高的计算成本和更复杂的工程实现。在合适的场景下,这个代价是值得的。
原文链接:https://dev.to/shrsv/tree-of-thoughts-and-mcts-for-llms-what-happens-when-you-stop-making-the-model-guess-once-3dmm