TOT思维树:从单向路径,到实现多样思维,每个节点为中间步骤 + 分支为潜在解决路径

 


论文:Tree of Thoughts: Deliberate Problem Solving with Large Language Models

代码:https://github.com/princeton-nlp/tree-of-thought-llm

提出背景

CoT,模拟一个逐步思考的过程得出答案。

只有一条解决问题的路径,但复杂问题(如搜索问题、非线性的结构问题)的解法通常是多个子解法组成(多条路径)。

TOT,把一条路径扩展为多条,这样可以综合多条路径的结果得到最终结论。

  • 与其让这个 prompt 给我生成,然后不好再生成,不断重复
  • 不如,让他用三个不同的专家视角,或者三种决策方式,或者三种风格,来一次性给我生成三个迥然不同的结论。
  • 在这个TOT里面,每一个步骤的内容生成会影响其他的内容生成,就是你设置的这几个角色相互之间是会真的产生决策影响的,能切换视角 + 交叉决策 + 相互评估。
  • 如果说你只是说几个人各干各的,互相也不讨论不交叉,其实你用的TOT还是用多个COT,但是如果说你还能在一个复杂环境里用多个视角,还要让这些视角之间产生一个生成答案的相互影响的话,这种就更有效,这就是 TOT!

作者指出,虽然现有的大模型可以执行各种任务,但它们仍然采用了最初的自回归生成文本的机制,即逐个决策地生成文本。

然而,人类认知研究表明,人们在决策时会同时运用快速、自动、无意识的“系统1”和缓慢、深思熟虑的“系统2”。

作者认为,大模型当前的操作方式更类似于“系统1”,而应该引入一种更深思熟虑的“系统2”规划过程来辅助。

为此,他们提出了ToT框架,将问题解决过程表示为一棵思维树,通过维护和探索各种中间思路来进行问题求解。

ToT框架通过维护一颗思维树,其中每个思路都是朝着解决问题的中间步骤,使LM能够通过自我评估中间思路的进展来进行深思熟虑的推理过程。

ToT的实现步骤包括四个主要环节:问题分解、想法生成、状态评价以及搜索算法的选择。

  • 问题分解:首先,ToT将复杂问题拆解成多个小问题,以便逐个解决。
  • 想法生成:在每个子问题上,模型生成可能的想法或解决方案。
  • 状态评价:对生成的想法进行评估,选择最佳的候选方案。
  • 搜索算法的选择:根据评估结果,选择合适的搜索算法来进一步探索和优化解决方案。

我感觉 TOT 就是结构化思维,我们平常的时候就是想到什么就是什么,但真正遇到事情,就会进行结构化分析。

  • 结构化思维是梳理分析问题的框架
  • 遇到问题要从问题本身、外部环境、解决主体(不同专家视角),这 3 个维度理解和分析问题。

这样你就能考虑所有局面,不重不漏的想到所有解决方案。

问题:1L水,怎么放入容量 0.1L 的杯子?

CoT 分析:一步步思考,怎么解决这个问题,并把思维过程写下来

TOT 分析:遇到问题要从问题本身(杯子能不能变化增大容量)、外部环境(能不能从地球到月球)、解决主体(水的状态能不能变化),这 3 个维度理解和分析问题,就会找到不只是靠经验得到的方案。

你需要以 3 个分析师的身份来分析【XXX】问题,你分析的步骤如下:

1. 分析师1遇到问题从问题本身分析,分析师2遇到问题从环境分析,分析师3遇到问题从解决主体分析,所有分析师都写下思考这个问题的第一个步骤,再与大家分享
2. 然后,所有分析师继续写下思考的下一个步骤,并与大家分享,以此类推,直到所有分析师写完他们思考的所有步骤
3. 只要大家发现有分析师的步骤出错了,就让这位分析师离开

这里是固定了 3 个专家,但实际上 TOT 是 BFS + DFS 搜索的,基本思路如上。
 


思维链类型

问题设定

假设我们要解决一个数学问题,例如:“如果你有3个苹果,然后你又买了5个苹果,你现在有多少个苹果?”

输入输出(IO)提示方法

在使用输入输出提示方法时,我们直接将问题形式化为一个具体的提示(prompt),如下:

  • 输入: “如果你有3个苹果,然后你又买了5个苹果,你现在有多少个苹果?”
  • 输出: “8个苹果。”

这种方法直接指导模型从问题描述中提取关键信息,并直接生成答案。

思维链(CoT)提示方法

在使用思维链提示方法时,我们不直接求解,而是引导模型进行一系列的逻辑思考步骤:

  • 第一步:识别问题是关于加法的。(“首先,确定问题类型,这是一个加法问题。”)
  • 第二步:解释问题中的具体数字。(“问题中提到有3个苹果,然后买了5个。”)
  • 第三步:进行计算。(“将3和5相加得到8。”)
  • 最终答案:得出结论。(“所以,总共有8个苹果。”)

不止是给答案,还会告诉过程 — 找出量,列出式。

这种方法使模型在给出最终答案之前,先行展示其思考过程,有助于验证模型的逻辑推理是否准确。

自我一致性思维链(CoT-SC)提示方法

在使用自我一致性思维链提示方法时,我们会生成多个独立的思维链,然后从中选择出现频率最高的答案作为最终输出(少数服从多数)。

例如,模型可能会产生以下几种思维链:

  • 链1: “这是一个加法问题,3加5等于8,所以答案是8个苹果。”
  • 链2: “首先识别数字,3和5,然后将这两个数字相加,结果是8,所以总共有8个苹果。”
  • 链3: “问题涉及到数量的增加,3个苹果加上5个苹果,计算出总数是8个苹果。”

如果“8个苹果”是所有思维链中最常见的结论,那么模型将选择这个答案。

这种方法通过探索不同的解释路径来增加结果的可信度和鲁棒性,有助于发现并纠正可能的错误推理。

 


在这里插入图片描述
这张图展示了使用大模型(LLMs)进行问题解决的不同方法。

每个方法都通过不同的策略使用语言模型来从输入生成输出。

(a) 输入输出提示(IO)
这是最简单的方法,其中输入直接通过模型转换成输出。

这种方法不涉及任何中间步骤或复杂的推理过程,适用于直接和简单的查询。

© 思维链提示(CoT)
在这种方法中,输入首先被转换为一系列的中间“思维”步骤,这些步骤逐步引导到最终的输出。

每个步骤都是问题解决过程的一个组成部分,有助于构建最终的答案。

© 自我一致性与思维链(CoT-SC)
这种方法是对思维链方法的扩展,它生成多个独立的思维链,并通过多数投票来决定最终的输出。

这样可以提高输出的可靠性,因为通过多个独立推理的验证可以减少错误。

(d) 思维树(ToT)
这是最复杂的方法,它不仅生成多个思维步骤,还形成了一个思维树,其中包含多个可能的问题解决路径。

这种方法允许模型在生成过程中进行更广泛的搜索和回溯,以探索和评估不同的解决方案。

每个节点代表一个思维状态,而树的分支表示不同的探索路径。

这张图说明了从最简单的直接输入输出模型到复杂的思维树模型,不同的问题解决策略在处理复杂性和深度上的递增。

每种方法都有其适用场景,其中更复杂的方法(如思维树)适用于需要深层次推理和多步骤解决策略的复杂问题。

 


思维树(TOT)提示方法

目的:ToT框架的主要目的是提供一种结构化和系统化的方法来解决复杂的问题,通过模拟和扩展人类的思维过程来生成、评估和选择最佳解决方案。

子解法1:思维分解
  • 特征:问题的复杂性需要被简化。
  • 理由:思维分解能将大问题分解为小的、可管理的单元,使得问题解决过程更为清晰和可控。
  • 例子:在解决一个大型企业的市场策略问题时,可以先将问题分解为市场分析、目标群体识别、竞争对手分析等子问题。
子解法2:生成潜在思维
  • 特征:需要探索多种可能性来找到最优解。
  • 理由:通过生成多个潜在的思维路径,ToT可以全面评估不同的解决方案,从而增加找到最有效解的可能性。
  • 例子:在开发一个新产品时,团队可能需要考虑多种设计方案、材料选择和成本效益分析,以确保产品的市场竞争力。
子解法3:状态评估
  • 特征:必须对生成的解决方案进行筛选。
  • 理由:状态评估允许快速识别和淘汰那些不切实际或效果不佳的解决方案,节约资源并专注于最有希望的选项。
  • 例子:在进行药物开发时,需要通过初步的生物活性测试来评估数百种候选化合物,仅将那些最有潜力的化合物送入进一步的开发阶段。
子解法4:搜索算法
  • 特征:问题解决需要系统地探索和比较不同的解决路径。
  • 理由:使用如BFS或DFS等搜索算法可以有效地遍历思维树,确保每个可能的解决路径都被考虑到,同时可以根据需要进行回溯,优化决策过程。
  • 例子:在解决复杂的逻辑谜题时,可能需要试探各种不同的假设和推理路径,逐步排除不合理的选项,直至找到正确的解答。

举个例子,创意写作。

### 任务设定:创作一个包含神秘元素的短篇故事

假设一个作家想创作一个包含未解之谜的故事,故事的开头是一个神秘的信件的发现。

### 应用 ToT 框架与搜索算法

#### 1. 初始化思维树
- **根节点**:故事开始于发现一个神秘信件。

#### 2. 使用 BFS 生成不同情节发展
- **第一层节点**:考虑信件可能来自的三个来源:一个失踪的亲人、一个未知的崇拜者、一个未来的自己。
- **第二层节点**:每个来源分别引出不同的情节发展:
  - 失踪的亲人:可能引出寻人冒险、家族秘密揭露、或是遗产争夺。
  - 未知的崇拜者:可能发展为恐怖的跟踪、一段浪漫的邂逅、或是误会的揭晓。
  - 未来的自己:可能探索时间旅行、预言的实现、或是对现实的警告。

通过广度优先搜索,作家可以平行地探索这些不同的分支,每个分支都为后续的深入探索提供了多种可能性。

#### 3. 使用 DFS 深入探索选定的情节线
假设作家选择深入探索“未来的自己发来的信件”这一情节线:
- **深入探索**:从发现信件到揭示信中的预言,逐步发展故事中的神秘和冲突。
  - 探索信件中的预言可能关联的历史事件、科学发现或个人生活的重大改变。
  - 考虑故事如何展现主角与这些预言互动,以及这些互动如何影响他们的决策和生活。
  - 最终,深入到预言实现的高潮和解决这一神秘。

#### 4. 评估和选择
- 在每一步DFS深入探索中,作家可以评估每个情节点的吸引力和逻辑一致性,确定是否继续这一线索或返回上一层尝试其他选项。

逻辑链

ToT框架
├── 人工智能与认知科学起源【灵感来源】
│   ├── 新尔、肖和西蒙的研究【基础理论支持】
│   └── 问题解决定义为组合问题空间搜索【理论定义】
├── 系统模式【基础理论支持】
│   ├── 系统1 (快速直觉)【思维模式分类】
│   │   └── 关联性选择【实现机制】
│   └── 系统2 (缓慢分析)【思维模式分类】
│       └── 更具策略的规划过程【实现机制】
├── 实现框架【框架设计】
│   ├── 思维树 (ToT)【核心结构】
│   │   ├── 每个节点为中间步骤【结构单位】
│   │   └── 分支为潜在解决路径【结构单位】
│   ├── 思维的生成与评估【功能实现】
│   │   ├── 生成多样的思维【生成机制】
│   │   └── 通过启发式评估节点【评估机制】
│   └── 搜索算法的应用【搜索策略】
│       ├── 广度优先搜索 (BFS)【算法实现】
│       └── 深度优先搜索 (DFS)【算法实现】
├── 应用与评估【应用领域】
│   ├── 数学问题、创造性写作与填字游戏【任务类型】
│   └── 经验性结果显示优于传统方法【效果验证】
└── 未来方向【研究发展】
    ├── 增强问题解决能力【目标】
    └── 提高资源效率【目标】
├── 刻意问题解决【核心概念】
│   ├── 思维过程【ToT中的关键机制】
│   │   ├── 分解【将复杂问题拆分为较小的、可管理的思维单元】
│   │   │   ├── 输入【复杂问题的具体情境】
│   │   │   ├── 处理过程【通过模型生成初步思维方向】
│   │   │   └── 输出【生成具体可操作的子问题列表】
│   │   ├── 生成【依据分解的子问题,创造潜在解决方案】
│   │   │   ├── 输入【分解后的子问题】
│   │   │   ├── 处理过程【利用预训练的语言模型生成多种潜在思维路径】
│   │   │   └── 输出【多种可能的解决方案或思维路径】
│   │   └── 评估【从生成的多种方案中评估最优选择】
│   │       ├── 输入【生成的思维路径】
│   │       ├── 处理过程【通过评价机制比较不同思维路径的效用】
│   │       └── 输出【筛选出最有潜力的解决方案】
│   └── 搜索算法【选择合适的方法来探索和优化解决方案】
│       ├── 广度优先搜索(BFS)【逐层探索所有可能的思维路径】
│       │   ├── 输入【所有可能的初步思维路径】
│       │   ├── 处理过程【同层级广泛搜索,优先扩展】
│       │   └── 输出【广泛但浅层的探索结果】
│       └── 深度优先搜索(DFS)【深入探索特定几个可能的思维路径】
│           ├── 输入【选定的思维路径】
│           ├── 处理过程【深入探索,逐步深化】
│           └── 输出【深入但窄范围的探索结果】
└── 应用与实验【实际使用 ToT 解决具体问题】
    ├── 24点游戏【数学推理挑战,使用ToT框架解决】
    │   ├── 输入【四个数字和基本运算符】
    │   ├── 处理过程【通过ToT生成解决方案】
    │   └── 输出【得到计算结果为24的公式】
    ├── 创意写作【利用ToT增强创意写作过程】
    │   ├── 输入【随机生成的四个句子】
    │   ├── 处理过程【通过ToT构建有组织的文章】
    │   └── 输出【一篇包含这四个句子的完整文章】
    └── 迷你填字游戏【利用ToT解决词汇排布问题】
        ├── 输入【填字游戏的提示词】
        ├── 处理过程【使用ToT策略生成可能的单词填充方案】
        └── 输出【完成的填字游戏格局】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值