CODE: NeurIPS 2024
https://github.com/YangLing0818/buffer-of-thought-llm
Abstract
我们介绍了思想缓冲(BoT),一种新颖而通用的思想增强推理方法,用于提高大型语言模型(大型语言模型)的准确性、效率和鲁棒性。具体来说,我们提出了元缓冲区来存储一系列信息丰富的高级思想,即思想模板,这些思想是从不同任务的解决问题过程中提炼出来的。然后,针对每个问题,检索相应的思想模板,并自适应地实例化特定的推理结构,以进行有效的推理。为了保证可扩展性和稳定性,我们进一步提出了缓冲区管理器来动态更新元缓冲区,从而在处理更多任务时增强元缓冲区的容量。我们在10个具有挑战性的推理密集型任务上进行了广泛的实验,并比以前的SOTA方法取得了显着的性能改进:Game of 24提高了11%,Geometric Shapes提高了20%,checkmate in- one提高了51%。进一步的分析表明,我们的BoT具有卓越的泛化能力和模型鲁棒性,而平均只需要多查询提示方法(例如,树/思想图)的12%的成本。值得注意的是,我们发现我们的Llama3-8B + BoT具有超越Llama3-70B模型的潜力。
Introduction
一系列大型语言模型(Large Language Models, LLMs),如GPT-4、PaLM和LLaMA,已经在各种推理任务中展示了令人印象深刻的性能。除了扩大模型大小来提高推理性能外,还有更有效的提示方法可以进一步增强大型语言模型的功能和性能。我们将这些方法分为两类:
(i)单查询推理;这些方法通常侧重于提示工程,它们的推理过程可以在单个查询中完成,例如CoT在输入查询中附加“Let ' s think step by step”以产生提高推理精度的理由,以及少量样本学习提示,它提供了与任务相关的范例来帮助答案的生成;
(ii)多查询推理:这些方法侧重于利用多个大型语言模型查询来引出不同的似是而非的推理路径,从而将复杂问题分解为一系列更简单的子问题,如Least-to-Most、ToT和GoT。
然而,这两种方法都存在一定的局限性:
(1)单查询推理通常需要对推理过程进行先验假设或相关示例,难以逐个任务手工设计,缺乏通用性和泛化性;
(2)由于推理路径的递归扩展,当为每个特定任务的推理过程寻找唯一的内在结构时,多查询推理通常是计算密集型的;
(3)单查询和多查询推理过程都受到其设计的示例和推理结构的限制,它们忽略了从先前完成的任务中推导出一般和高级的指导方针或思想,这些指导方针或思想对于解决类似问题时提高效率和准确性具有重要意义。
为了解决这些限制,我们提出了思想缓冲(BoT),这是一种新颖而通用的思想增强推理框架,旨在提高大型语言模型在各种任务中的推理准确性、效率和鲁棒性。具体来说,我们设计了元缓冲区,这是一个轻量级的库,包含一系列通用的高级思想(思想模板),这些思想是从不同的问题解决过程中提炼出来的,可以跨任务共享。然后,对于每个问题,我们检索一个相关的思想模板,并用特定的推理结构实例化它,以实现有效的思想增强推理。为了保证BoT的可扩展性和稳定性,我们进一步提出了缓冲区管理器来动态更新元缓冲区,随着任务的增加,有效地提高了元缓冲区的容量。
我们的方法有三个关键优势:
(i)准确性提高:通过共享的思想模板,我们可以自适应地实例化处理不同任务的高级思想,从而消除了从头开始构建推理结构的需要,从而提高了推理准确性。
(ii)推理效率:我们的思维增强推理可以直接利用信息丰富的历史推理结构进行推理,而不需要复杂的多查询过程,从而提高推理效率。
(iii)模型鲁棒性:从思想检索到思想实例化的过程就像人类的思维过程一样,使大型语言模型能够以一致的方式解决类似的问题,从而显著增强了我们方法的模型鲁棒性。我们的实证研究表明,缓冲思想显著提高精度,效率和鲁棒性在不同的任务阵列。
贡献:
1. 为了提高基于llm的推理的准确性、效率和鲁棒性,我们提出了一种新的思想增强推理框架——思想缓冲(BoT)。
2. 我们提出了元缓冲区来存储从不同问题中提炼出来的信息丰富的高级思想,并自适应地实例化每个思想模板来解决每个特定的任务。
3. 我们设计了缓冲区管理器,从各种解决方案中提取思想模板,并随着任务的解决不断提高元缓冲区的容量。
4. 我们对10个具有挑战性的推理密集型任务进行了广泛的实验。与以前的SOTA方法相比,我们的BoT实现了显着的性能改进:Game of 24提高了11%,Geometric Shapes提高了20%,将死合一提高了51%,而平均只需要多查询提示方法12%的成本。
Related Work and Discussions
Retrieval-Augmented Language Models 引入检索增强(Large)语言模型作为缓解幻觉现象和提高语言模型输出质量的解决方案。当提供一个输入问题时,检索增强大型语言模型首先查询一个具有十亿级令牌的外部数据库,以检索文本语料库的子集,以帮助生成最终答案。值得注意的是,与传统的大型语言模型相比,检索增强的大型语言模型使用更少的参数实现了更好的问答性能,并且它已经在各种下游任务中得到了应用,包括多模态生成和生物医学应用。在本文中,我们构建了一种新的检索数据库,称为元缓冲区,它包含一系列高层次的思想,而不是具体的实例,旨在普遍解决基于llm的推理的各种任务。
Prompt-based Reasoning with Large Language Models 提示技术显著增强了大型语言模型的算术和常识推理能力。思维链(CoT)提示及其变体,如Least-to-Most、decomposition提示和Auto-CoT,提示大型语言模型将复杂问题分解为更简单的子任务,并在总结最终答案之前系统地解决它们。许多研究已经证明了这些提示方法在广泛的任务和基准中是有效的。像Tree-of-Thought和Graph-of-Thought这样的创新,通过探索动态的、非线性的推理路径来扩展大型语言模型的启发式能力,进一步推动了这一领域的发展。然而,它们面临着不断增加的资源需求和更大的时间复杂性,依赖于手动提示制作,并且经常针对特定的任务类型进行定制。最近的元提示方法对各种任务使用相同的任务无关的提示形式,并递归地引导单个大型语言模型自适应地处理不同的输入查询。然而,如此长的元提示可能需要相当大的上下文窗口,并且这些方法无法利用历史信息指导或想法来执行潜在的类似任务。
Analogical Reasoning 类比推理是一种有用的自然语言推理技术。最近的研究表明,大型语言模型可以像人类一样进行类比推理。例如,Analogical prompts和Thought Propagation提示大型语言模型自生成一组类似问题,然后利用类似问题的结果生成输入问题的解。然而,针对自探索问题的具体解决方案可能会引入额外的噪声并导致误差积累。最近的思想检索器使用解决过去用户时产生的中间思想来处理类似的查询,但它只关注文本理解/生成,而不是一般的推理问题。因此,大型语言模型复杂推理仍然缺乏更高级和更普遍的类比方法。
Buffer of Thoughts
Overview of Buffer of Thoughts 在本节中,我们将详细介绍我们的思想缓冲,并在图2中说明我们的核心思想增强推理过程。给定一个特定的任务,我们利用问题提取器(第3.1节)提取特定于任务的关键信息以及相关约束。基于提炼出来的信息,我们在包含一系列高级思想(思想模板)的元缓冲区(第3.2节)中搜索,并检索与任务最相关的思想模板。随后,我们将检索到的思想模板实例化为更具任务特异性的推理结构,并进行推理处理。最后,我们使用了一个缓冲区管理器(第3.3节)来总结整个解决问题的过程,并提炼出提高元缓冲区容量的高级思想。
说明不同的推理过程。思想缓冲使大型语言模型能够通过我们的思维增强推理过程来处理复杂的推理任务。思想模板用橙色标记,实例化的思想用蓝色标记。
Problem Distiller
大多数复杂任务在其上下文中包含隐式约束、复杂的对象关系以及复杂的变量和参数。因此,在推理阶段,大型语言模型需要克服三个主要挑战:提取重要信息、识别潜在约束和执行准确的推理。这些挑战将给一个大型语言模型带来沉重的负担。因此,我们通过在推理过程中增加一个问题蒸馏器,将任务信息的提取和理解阶段与最终推理阶段分开。具体来说,我们设计了一个元提示φ来首先提取和形式化任务信息。提取的任务信息可表示为:
其中x是任务语句。由于页面限制,我们将problemdistiller的详细元提示放在附录A.2中。
Problem Condensation and Translation 我们使用问题蒸馏器从输入任务中提取关键元素,重点关注:(1)解决问题的基本参数和变量;(2)输入任务的目标及其约束条件。然后,我们将这些提炼出来的信息重新组织成清晰、可理解的格式,以供后续推理阶段使用。然后,我们将具体问题转化为高级概念和结构。这个翻译过程将复杂的现实问题,如复杂的数学应用场景,分解成更简单的多步计算,使其更容易在以后检索高层次的思想。
Thought-Augmented Reasoning with Meta Buffer
Motivation 人类在解决问题时,往往会总结和归纳出更高层次的准则,然后将其应用于相关问题。受此启发,我们提出了元缓冲区,这是一个轻量级库,包含一系列高级思想(思想模板),用于解决各种类型的问题。与传统方法不同,我们的高级思想模板可以在解决不同问题时自适应实例化,从而提高大型语言模型的精度和灵活性。
Thought Template 作为一种高级指南,我们的思想模板存储在元缓冲区中,并由缓冲区管理器从各种解决问题的过程中获得。关于获取思想模板的细节将在3.3节中介绍。由于我们的BoT旨在为各种任务提供通用的推理方法,因此我们相应地将思想模板分为六类:文本理解、创造性语言生成、常识推理、数学推理、代码编程和应用程序调度。我们在附录A.1中提供了一些示例思想模板。这种思想模板的分类可以方便地检索模板,为不同的问题找到最合适的解决方案。这里我们将思想模板、模板描述及其对应的范畴表示为(Ti,DTi, Ck),其中i表示元模板的索引,k∈Z+,1≤k≤6,表示Ck属于六个范畴之一,DTi表示思想模板的描述。
Template Retrieval 对于每个任务,我们的BoT通过计算描述DTi和xd之间的嵌入相似度来检索与提炼问题xd高度相似的思想模板Ti。检索过程可表述为:
N为元缓冲区的大小,f(·)为普通文本嵌入模型,Tj为检索到的思想模板。我们设置了一个阈值δ(建议0.5 ~ 0.7)来确定当前任务是否为新任务。因此,如果Sim(f(xd), {f(DTi)}n i=0) < δ,我们将任务x识别为新任务。
Instantiated Reasoning 对于每个特定的任务,我们讨论实例化推理的两种情况,这取决于当前任务是否是新的:第一种情况是我们成功地检索了任务的思想模板Tj。在这种情况下,如图2所示,我们的思想增强推理将通过我们设计的实例化提示(见附录A.3)自适应地实例化到合适的推理结构。例如,在将军合一问题中,我们实例化了更新棋盘状态的模板来逐步解决问题。因此,我们使用提取的信息xd和检索到的模板Tj对任务x进行实例化推理,得到其解Sx为:
其中llmininstance表示具有大型语言模型的实例化推理器。
在第二种情况下,任务被标识为新任务。为了启用适当的实例化推理,我们准备了三个通用的粗粒度思想模板供使用。基于提取的任务信息xd,我们的BoT将自动为推理过程分配合适的思想模板。详细的预先定义的思想模板包含在附录A.3中。
Buffer Manager
我们建议使用buffer-manager来总结从每个问题解决过程中获得的高级指导方针和思想。它可以将每个特定的解决方案推广到更多的问题,将提炼出来的关键知识以思想模板的形式存储在元缓冲区中。与为每个问题临时生成示例或指令的方法相比,我们的缓冲管理器可以确保基于llm的推理在准确性、效率和鲁棒性方面的永久进步。
Template Distillation 为了提取一个通用的思想模板,我们提出了三步走的方法:
(1)核心任务总结:识别和描述问题的基本类型和核心挑战;
(2)解决步骤说明:总结解决问题的一般步骤;
(3)通用回答模板:在上述分析的基础上,提出一个可以广泛应用于类似问题的解决模板或方法。
此外,为了提高模板蒸馏的泛化能力和稳定性,我们精心设计了两种类型的上下文示例,用于生成任务中思想模板和跨任务示例。交叉任务意味着我们选择从一个任务中提炼出来的模板来解决其他任务的问题,比如用一个与代码相关的思想模板来解决一个数学问题。从输入任务x提取的新模板可以表示为:
其中llm蒸馏器是基于llm的模板蒸馏器,用以下提示符初始化:
Dynamic Update of Meta-Buffer 模板蒸馏后,我们需要考虑蒸馏后的模板是否应该更新到元缓冲区中。如果我们初始化一个空的元缓冲区,或者遇到一个没有合适的思想模板的问题,提炼出来的思想模板将直接存储在元缓冲区中。如果我们用检索到的思想模板来解决问题,新的见解可能会在某个思想模板的实例化过程中产生。因此,为了在保持新生成的信息思想的同时避免元缓冲区的冗余,我们将计算DTnew与{DTi}的嵌入向量i=0之间的相似度,并按照以下规则更新元缓冲区:
否则,这意味着元缓冲区已经拥有解决此任务所需的知识,不需要执行更新。我们的动态更新策略有效地减少了模板检索的计算负担,同时保证了元缓冲区的轻量级。我们在第6节进一步进行烧蚀研究进行分析。
Additional Method Details
Detailed Thought-Templates
Text Comprehension
任务描述:该任务包括分析一个包含企鹅的各种属性(如姓名、年龄、身高和体重)的表,并回答有关这些属性的问题。表可以用新条目更新,并且可以用自然语言提供额外的上下文或比较。
解决方案描述:要准确地回答有关企鹅属性的问题,必须能够解释以表格形式呈现的数据,理解以自然语言提供的任何附加信息,并根据所问问题应用逻辑推理来识别正确的属性。
思想模板:
第1步:解析初始表,将标题信息和每个企鹅的属性提取为结构化格式(例如,字典列表)。
步骤2:读取并集成更新或添加到表中的任何其他自然语言信息,确保数据保持一致。
步骤3:确定所讨论的属性(例如,最老的企鹅,最重的企鹅)和表中相应的列。
步骤4:应用逻辑推理来比较所有条目中的相关属性以找到正确答案(例如,最老企鹅的最高年龄)。
步骤5:从提供的选项中选择与逻辑比较结果匹配的答案。
Creative Language Generation
任务描述:任务是生成一首遵循传统英语十四行诗“ABAB CDCD EFEF GG”押韵方案的十四行诗,并在文本中逐字包含三个特定的单词。
解决方案描述:写一首十四行诗需要按照特定的押韵模式制作14行诗。这些线条通常是抑扬格的五音步,尽管出于创造性的原因可以允许节奏的灵活性。给定的押韵方案决定了每一行的结尾音,确保了有结构的诗歌形式。将所提供的三个单词一字不差地结合在一起,需要有策略地放置在行内,以保持诗歌的连贯性和主题的统一。
思想模板:
第一步:确定必须包含在十四行诗中的三个词。
第二步:理解“ABAB CDCD EFEF GG”的韵律,并准备一个可以使用的押韵词列表。
第三步:为十四行诗制定一个主题或故事,可以自然地结合三个提供的单词。
第四步:开始起草十四行诗,按照“ABAB”押韵方案写第一个四行诗(四行),确保包含一个或多个提供的单词。
第五步:继续第二个四行诗“CDCD”,第三个四行诗“EFEF”,最后是结束的对行诗“GG”,每次都根据需要合并提供的单词。第六步:回顾十四行诗的连贯性、流畅性和对韵式的坚持,必要时进行调整。
Common Sense Reasoning
任务描述:给定一个特定的日期和事件,如假日或历史事件,确定以下日期。
解决方案描述:要确定下一个日期,我们需要考虑日历的结构、每个月的天数以及是否为闰年。通常,一个月的天数是固定的,除了二月可能会因闰年而变化。一年中的第二天通常是增加一天的日期,除非是月底,那么第二天就是下个月的第一天。对于一年的结束,第二天将是下一年的1月1日。
思想模板:
第一步:确定给定日期的月号和日号。
第二步:检查是否到了月底;如果是,确定下个月的开始日期。
第三步:如果不是月底,只需在日期上加1。
第四步:年终要特别注意,确保年终有增量。
Mathematical Reasoning
任务描述:求解任意情况下的二次方程ax2 + bx + c = 0。
解说明:解任何形式为ax2 + bx + c = 0的二次方程,我们可以根据所描述的方法遵循一般方法。下面是解决这类方程的结构化模板:
思想模板:
步骤1:计算判别式-使用公式D = b2−4ac计算判别式D。
步骤2:确定根的性质-如果D > 0,方程有两个不同的实根。如果D = 0,则方程只有一个实根(也称为重根或二重根)。—如果D < 0,则方程有两个复根。
步骤3:计算根—当D≥0时,用公式x =−b±√d2a计算根。—当D < 0时,用公式x = - b 2a±√- D 2a i计算复根的实部和虚部,其中i为虚数单位。
Code Programming
任务描述:当给定一个数字列表时,尝试使用4个基本的数学运算(+-*/)来获得目标数字。
思想模板:
Application Scheduling
任务描述:给定SAN中的一些象棋移动,更新棋盘状态。