思维链与推理策略
1. 思维链(Chain-of-Thought, CoT)基础
核心概念
思维链是一种提示技术,通过引导大模型逐步推理,将复杂问题分解为中间步骤,从而显著提升模型在推理任务上的表现。
关键论文:《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》(Wei et al., 2022)
QUESTION 面试高频:什么是思维链(CoT)? 思维链是一种提示方法,在给出最终答案之前,让模型先输出一系列中间推理步骤。核心思想是:通过展示推理过程来引导模型进行正确的多步推理。实验表明 CoT 对算术推理、常识推理、符号推理等任务有显著提升。
CoT 生效的条件
| 条件 | 说明 |
|---|---|
| 模型规模 | 通常需要 100B+ 参数的模型才能涌现 CoT 能力 |
| 任务类型 | 对多步推理任务有效,单步任务无显著提升 |
| 提示方式 | 需要合适的提示来激发(Few-shot 或 Zero-shot) |
| 模型能力 | 模型本身需具备一定的推理能力 |
CoT 的核心优势
- 分解复杂问题:将多步推理拆解为可验证的中间步骤
- 可解释性:推理过程透明,便于调试和验证
- 错误定位:可以精确找到哪一步推理出错
- 性能提升:在数学、逻辑、常识推理上效果显著
2. CoT 的主要变体
2.1 Few-shot CoT(少样本思维链)
在提示中提供若干包含推理过程的示例:
Q: 罗杰有 5 个网球。他又买了 2 罐网球,每罐 3 个。他现在有多少个网球?
A: 罗杰一开始有 5 个球。2 罐每罐 3 个 = 6 个。5 + 6 = 11。答案是 11。
Q: [你的问题]
A:
QUESTION 面试高频:Few-shot CoT 的示例选择有什么讲究?
- 示例应覆盖不同推理模式(算术、逻辑、常识)
- 示例的推理步骤应简洁清晰
- 示例数量通常 3-8 个效果较好
- 示例的复杂度应与目标问题匹配
2.2 Zero-shot CoT(零样本思维链)
关键论文:《Large Language Models are Zero-Shot Reasoners》(Kojima et al., 2022)
无需示例,仅在提示中添加"Let's think step by step"即可激发推理:
Q: [问题]
A: Let's think step by step.
| 对比 | Few-shot CoT | Zero-shot CoT |
|---|---|---|
| 示例需求 | 需要 3-8 个示例 | 无需示例 |
| 性能上限 | 更高 | 略低 |
| 适用场景 | 有标注数据 | 无标注数据 |
| 实现难度 | 需要设计示例 | 极简 |
| 灵活性 | 受示例限制 | 通用 |
2.3 Self-Consistency(自一致性)
关键论文:《Self-Consistency Improves Chain of Thought Reasoning in Language Models》(Wang et al., 2022)
核心思想:多次采样推理路径,选择出现频率最高的答案。
步骤:
1. 对同一问题,用 temperature > 0 多次生成推理路径(如 k=40 次)
2. 从每条路径提取最终答案
3. 统计各答案出现频次
4. 选择出现最多的答案(多数投票)
QUESTION 面试高频:Self-Consistency 为什么有效? 正确的推理路径虽然多样,但往往收敛到同一个答案;错误的推理路径则分散到不同答案。通过多数投票,正确答案自然胜出。这本质上利用了"正确推理比错误推理更一致"的统计特性。
2.4 Tree-of-Thought(ToT,思维树)
关键论文:《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》(Yao et al., 2023)
将推理过程组织为树结构,支持探索和回溯:
[问题]
/ \
[步骤1a] [步骤1b]
/ \ |
[步骤2a] [步骤2b] [步骤2c]
|
[答案]
| 特性 | CoT | ToT |
|---|---|---|
| 推理结构 | 线性链 | 树状分支 |
| 回溯能力 | 无 | 有 |
| 搜索策略 | 贪心 | BFS/DFS |
| 计算成本 | 低 | 高 |
| 适用场景 | 简单推理 | 复杂规划、博弈 |
2.5 Graph-of-Thought(GoT,思维图)
将推理过程扩展为有向图结构,允许合并和细化推理路径:
- 思维节点可被多路径引用
- 支持推理结果的聚合
- 适合需要综合多条推理线索的任务
2.6 Auto-CoT(自动思维链)
自动构建 CoT 示例,无需人工标注:
- 将问题聚类
- 从每个聚类中选取代表性问题
- 使用 Zero-shot CoT 生成推理过程
- 将生成的推理过程作为 Few-shot 示例
3. 提示技术分类体系
基于示例数量分类
| 类别 | 方法 | 说明 |
|---|---|---|
| Zero-shot | 直接提问 | 无示例,直接描述任务 |
| One-shot | 提供一个示例 | 简单任务引导 |
| Few-shot | 提供多个示例 | 复杂任务引导 |
| Few-shot CoT | 提供带推理的示例 | 推理任务引导 |
基于推理策略分类
| 策略 | 方法 | 推理方式 |
|---|---|---|
| 线性推理 | CoT | 链式逐步推理 |
| 自校验 | Self-Consistency | 多路径投票 |
| 树状推理 | ToT | 分支探索+回溯 |
| 图状推理 | GoT | 网状推理+聚合 |
| 自动化 | Auto-CoT | 自动生成示例 |
4. 小样本提示学习(Few-Shot Prompting)
核心原理
通过在提示中提供少量输入-输出示例,让模型理解任务模式,无需更新模型参数。
QUESTION 面试高频:Few-shot 和 Fine-tuning 的区别?
维度 Few-shot Fine-tuning 参数更新 否 是 数据需求 3-10 个示例 数千到数万条 计算成本 极低(推理即可) 高(需要训练) 灵活性 高(随时更换示例) 低(需重新训练) 性能上限 受上下文窗口限制 理论更高 知识更新 实时(换提示即可) 需重新训练
Few-shot 设计原则
- 示例相关性:示例应与目标任务高度相关
- 示例多样性:覆盖不同的输入模式
- 格式一致性:所有示例遵循统一格式
- 标签正确性:示例答案必须准确
- 示例顺序:靠近查询的示例影响更大
示例选择策略
静态选择:人工筛选固定示例集
随机选择:从示例池中随机抽取
相似度选择:用 embedding 找最相似的示例(KNN)
聚类选择:从不同聚类中选代表示例(Auto-CoT)
5. CoT 的局限性与挑战
| 局限 | 说明 | 应对策略 |
|---|---|---|
| 计算成本 | 多步推理增加输出长度 | 控制推理步骤数 |
| 不可靠性 | 推理步骤可能有误 | Self-Consistency 验证 |
| 模型依赖 | 需要足够大的模型 | 选择合适规模的模型 |
| 提示敏感 | 示例选择影响结果 | 使用自动选择策略 |
| 任务局限 | 不适合事实回忆类任务 | 仅用于推理类任务 |
6. 实践建议
何时使用 CoT
适合 CoT:
- 数学/算术推理
- 多步逻辑推理
- 常识推理(需要推导)
- 复杂问答(需要综合信息)
- 代码调试与生成
不适合 CoT:
- 简单的事实查询
- 情感分析
- 文本分类
- 翻译
- 单步任务
CoT 模板设计
# 基础 CoT 模板
请一步步思考以下问题:
{question}
# 带验证的 CoT 模板
请逐步推理以下问题,并在给出最终答案前验证每一步:
{question}
# 带 Self-Consistency 的模板
请从多个角度分析以下问题,给出不同推理路径,最后选择最可靠的答案:
{question}