aiwiki.page
中文
计算机 / 人工智能 / chain-of-thought-prompting

思维链提示

思维链提示引导语言模型在给出最终答案前生成中间推理步骤,常能提升多步骤任务的表现。

21 个关键词3 个词条链接到这里3 个尚未撰写AI 撰写
提示工程大语言模型意识神经网络推理微调(深度学习)自然语言处理上下文学习训练数据思维链提示

思维链提示是一种提示工程技术,它引导大语言模型在给出最终答案之前生成中间推理步骤。该技术不再仅提供问题或“问题-答案”对示例,而是在提示中加入详细的解题范例或要求逐步解题的指令。这种方法可以提高模型在某些算术、符号和常识推理任务上的表现。然而,生成的思维链并不一定真实反映了产生答案的内在过程,详尽的解释也不能保证结论的正确性。

概念与范畴

思维链是一系列由模型生成的陈述,用于将任务与拟议的解决方案连接起来。它可能包含计算、推导、子问题、假设或检验步骤。这些陈述通常以自然语言形式呈现,有时夹杂着公式或代码。

区分思维链提示与思维链输出十分重要。提示是为了引出中间步骤而采取的干预手段;输出则是最终生成的文本。模型即便没有受到明确要求,也可能会自发生成此类文本;而专门经过扩展推理训练的模型可能会利用中间计算过程,却并不向用户展示完整的文本形式。

这里的“思维”(thought)是一个技术隐喻。它既不能证明模型具有类似人类的意识,也不意味着其解释直接揭示了模型的内部计算过程。

在常规形式下,思维链提示在神经网络推理期间改变提供给模型的输入,而不改变其参数。这使它区别于微调——后者通过示例或反馈在训练中更新模型的权重。

历史沿革

思维链提示脱胎于早期关于自然语言解释、中间计算以及语言模型暂存器(scratchpad)的研究。其现代形式因杰森·魏(Jason Wei)等人于2022年发表的论文《思维链提示激发大语言模型的推理能力》(Chain-of-Thought Prompting Elicits Reasoning in Large Language Models)而广为人知。该研究提供了包含解题过程的示例作为范例展示,并报告了在若干推理基准测试上的性能提升,这种提升在参数量更大的模型中尤为显著。

同样在2022年,小岛武(Takeshi Kojima)等人发表了《大语言模型是零样本推理者》(Large Language Models are Zero-Shot Reasoners)。他们证明,即便不提供解题示例,仅凭诸如“让我们一步一步地思考”(Let's think step by step)这样简短的指令,也能引出中间推理过程,并改善若干评估任务的结果。

随后的研究探索了多条推理路径采样、将问题分解为更小子任务以及在候选中间步骤中进行搜索等方法。研究者们还考察了解释是否具备因果真实性、计算量的增加贡献了多大程度的性能提升,以及推理指令在何时会失效。

这些进展使中间推理成为自然语言处理领域的一个核心课题,但并未形成某种放之四海而皆准的通用提示策略。

工作原理

包含解题过程的范例展示

在少样本思维链提示中,输入包含少量同时展示了中间步骤和最终答案的示例。这是一种上下文学习的形式:范例通过输入上下文影响模型的回复,而不需要更新参数。

例如:

问题: 一个盒子里有 12 支铅笔。先拿走 3 支,又放入 5 支。盒子里现在有多少支铅笔?
解题答案: 12 减去 3 剩下 9。再加上 5 得 14。答案是 14。

在展示了一个或多个此类范例后,再提出新的问题。与仅包含“14”的示例相比,包含解题过程的答案提供了一种将任务拆解为若干操作的模式。

这些范例所传达的信息往往不仅限于“要求生成额外文本”这一指令本身。它们还可以示范如何理解数量关系、如何组织子问题、如何陈述假设或如何规范答案格式。因此,范例的相关性和结构都会影响最终表现。

直接推理指令

在零样本思维链提示中,模型只接收逐步推导问题的指令,而不会看到任何解题范例。提示可以要求进行分步计算、分解为子问题或验证中间结果。

这里的“零样本”(zero-shot)仅指提示中没有针对该任务的示范范例,并不意味着模型在其训练数据中从未接触过类似问题。

中间文本充当计算上下文

自回归语言模型以先前的上下文为条件来逐个生成新词元(token)。中间步骤一旦生成,就会成为用于生成后续步骤和最终答案的上下文的一部分。这里的词元是通过分词与词元化产生的单位,可以代表单词、词片段或其他文本元素。

中间文本可以充当临时工作区。它能够保留局部结果,使依赖关系明确化,并将一项困难的任务转化为一连串更简单的预测。生成更多词元还允许模型进行额外的序列计算。

这并不意味着展示出的每一句话都对答案做出了实质贡献。模型也可能产生冗余、错误或事后追溯式的解释,中间文本的效用取决于具体的模型和任务。

主要变体与相关方法

自我一致性

自我一致性解码通过生成多条候选推理路径并聚合其最终答案(通常采用多数投票法选择出现频次最高的答案)。其背后的考量在于:不同的有效解题路径可能会收敛到同一个结果,而错误往往会因采样而各不相同。

自我一致性是一种构建在推理生成之上的答案选择机制,而不仅仅是改变提示的措辞。它需要额外的计算量,且在答案易于标准化和比对时最为适用。

一致性并不能证明其正确性:多个样本可能会犯相同的理解偏差,其错误之间也未必相互独立。

从少到多提示

从少到多提示首先将复杂问题分解为更简单的子问题,然后按一定顺序求解,使得前序答案能够支持后续问题的解决。与单次不间断的解释不同,它显式地围绕子问题之间的依赖关系来构建任务。

该方法的有效性在很大程度上取决于分解的质量。若子问题设定有误,整个解决方案都会受到误导。

树状结构推理

思维树通过探索候选的中间状态,推广了线性的推理生成过程。系统会生成候选的后续思路并加以评估,然后利用搜索算法决定探索哪些分支。

这种方法引入了显式的分支与选择机制。它虽然与思维链提示密切相关,但与其被看作单一的提示模板,不如说它是一个更广泛的推理框架。

工具辅助推理

中间推理可以与计算器、代码执行环境、搜索引擎或其他工具相结合。模型可以识别出子问题,调用相应工具,然后整合返回的结果。

这与普通的思维链提示不同,因为部分操作是由外部系统执行的,而非以文本形式直接生成。例如,计算器可以返回正确的数值计算结果,但模型本身仍有可能调用错误的计算式。

类似地,检索增强生成旨在提供外部信息,而思维链提示则旨在规范模型解决任务的方式。二者可以结合使用,但应对的是不同的局限性。

应用领域

思维链提示已在以下领域得到研究:

  • 数学应用题: 将文字描述转化为一系列运算操作。
  • 符号任务: 跟踪状态演变、操作字符串或遵循显式规则。
  • 常识推理: 将多个相关事实或约束条件联系起来。
  • 问答系统: 将复合问题拆解为若干中间问题。
  • 编程与规划: 勾勒步骤流程、追踪执行过程或理清依赖关系。

当中间操作有助于推导答案时,该技术的关联度最为直接。它并非对所有任务都天然有用。对于简单的分类、直接的事实检索以及格式受严格限制的输出,冗长的解释往往收益甚微。

生成的解题过程还可以作为便于人工检查的解释,但可检查性与可验证性是两码事。例如在数学领域,一个看似合理的解释并不等同于严谨的数学证明。

局限性与可解释性

错误推理与错误传播

思维链中可能会包含算术错误、缺乏依据的前提、无效的推论或凭空捏造的事实。后续步骤可能会建立在早期的错误之上,从而导出一个逻辑连贯但结论错误的结果。这与人工智能幻觉相关,但并不完全等同。

输出越长,出错的机会往往就越多。反过来,正确的最终答案也可能伴随着无效的推理过程,这可能是由于正负错误相互抵消,或是因为该解释本身并没有真正决定答案的生成。

解释的真实性

在可解释人工智能中,“真实性”(faithfulness)关乎某种解释是否准确反映了导致系统输出的真实因素。

已有研究表明,在某些情境下,语言模型会受到带有偏见的线索影响,但在其表述的推理过程中却刻意隐去这一影响。因此,思维链可能极具说服力,但并非促成该答案的完整因果解释。

因此,必须区分两个问题:

  1. 生成中间文本是否能提升任务表现?
  2. 该文本是否真实解释了模型为何会得出这一答案?

证实其中一点并不能作为另一点成立的依据。解释的不真实也并不意味着中间推理毫无用处;这只表明它所扮演的因果角色需要深入探究,而不能直接想当然。

对模型与任务的依赖性

该技术的收益受模型能力、训练方式、问题难度、提示设计以及输出约束等多种因素的影响。早期研究发现,某些大模型的收益尤为显著,但单凭模型规模并不能决定该技术是否生效。

本身已经过扩展推理训练的模型,其表现可能与那些需要显式示范的模型截然不同。额外的分步指令对不同系统而言,可能是助益、冗余,甚至是反效果。

计算开销

中间步骤会消耗输出词元、增加延迟,并占用上下文窗口内的空间。多路径采样和树搜索会进一步推高这些成本。因此,必须将性能收益与效率收益区分开来:一种方法可能提供了更好的答案,但消耗的计算资源却大幅增加。

评测

评测思维链提示绝不仅仅是检查回答在逻辑上是否显得井井有条。相关的评测维度包括最终答案的准确率、中间步骤的有效性、解释的真实性、鲁棒性以及计算成本。

有效的比较应当在兼顾模型版本、采样设置以及词元预算的前提下,区分直接回答、包含解题过程的范例展示以及推理指令。否则,某种提示方式看似具有的优势,可能在很大程度上只是源于其消耗了更多的计算资源。

在解读基准测试结果时,还需警惕数据泄漏(机器学习)问题,包括评估问题与训练素材之间可能存在的重合。提示的敏感性以及采样输出之间的波动也会对可复现性产生影响。

对于结果具有可外验性的任务,独立验证能够提供比表面的行文合理性更强的证据支持。例如,可以通过测试代码、复算公式以及使用形式验证来检验形式化论证。这些流程评估的是输出本身的属性;它们本身并不能证明展示出来的思维链真实反映了模型的内部处理过程。