Kaya Stechly、Matthew Marquez∗、Subbarao Kambhampati∗ 亚利桑那州立大学,坦比。
摘要
大家对大语言模型(LLMs)到底能否具备推理能力一直有很大的争议。虽然一开始人们非常乐观,认为模型的规模越大,推理能力就会自然而然地显现出来,但众多反例的出现,从简单的乘法运算到计划问题,都让这种乐观心态受到了挑战。尽管如此,许多人仍然坚信大语言模型能够对自己的答案进行自我批判,并通过迭代的方式不断完善解决方案。这种信仰似乎是建立在这样一个前提上:验证一个答案的正确性应该比产生答案更为简单。这是计算复杂性领域的一个经典观点,但如果 LLMs 主要进行的是近似检索的活动,那么这个观点对它们来说应该是不相关的。
在这篇文章中,我们系统地探讨了在图着色这一经典的 NP-完全推理问题中,对大语言模型进行迭代提示的有效性。这不仅关系到逻辑推理问题,也与实际应用如时间表安排和资源分配等问题息息相关。我们从理论和实证两个角度,全面分析了 GPT-4 在解决图着色问题及验证着色方案正确性方面的表现,并对其直接和迭代两种模式进行了对比。在迭代模式中,我们既测试了模型自我评价自己的答案,也测试了由外部的正确推理者来验证模型提出的解决方案。无论是哪一种情况,我们都对批评内容是否真的影响到了最终的性能进行了分析。研究结果显示:(i) LLMs 在解决图着色问题上表现不佳;(ii) 在验证解决方案方面也好不到哪去,因此 LLMs 通过自我批评来改进自己生成解决方案的能力是有限的;(iii) 不管批评是由 LLMs 还是外部解决器提出,其正确性和内容似乎对迭代提示的最终性能影响不大。我们发现,LLMs 在迭代场景中表现出的有效性,很大程度上是因为正确的解决方案恰好出现在了提示的多个可能完成中的前几位,并被外部验证者识别了出来。因此,这篇文章对当前 LLMs 自我批评能力的种种说法提出了质疑。
1. 引言
大语言模型(LLMs),本质上是经过增强的、基于海量网络语料库训练的 n-gram 模型,已经展示出了令人意想不到的语言行为,引起了 AI 研究界的广泛关注。它们表现出的多样性引发了许多研究者的思考:这些模型是否也能在通常与系统 2 能力相关的推理任务上表现良好。基于 LLMs 在推理任务上表现出色的个别案例,人们最初对其寄予了厚望,但近期一系列质疑其稳定性的研究——涉及规划、简单算术和逻辑以及一般数学和抽象基准测试——使这种兴奋有所减弱。尽管如此,人们仍对 LLMs 持乐观态度,认为即使这些模型不能一次生成正确解答,通过迭代提示的方式,它们能够“自我批判”并逐渐优化其解答直至正确。这种观点主要基于一个经典的计算复杂性论点,即对于许多推理问题来说,验证解答的正确性应该比生成解答更容易。但是,如果 LLMs 仅仅是进行近似检索,那么推理任务的复杂性对其性能并无影响,这种观点便值得怀疑。
本文系统探究了迭代提示在图着色问题中的有效性。图着色问题是一个经典的 NP 完全推理问题,代表了 AI 中的标准推理问题类别,如命题可满足性和约束满足问题,以及实际问题如调度和分配。我们采用实证研究方法,对 GPT4 在两个任务上的性能进行了分析:解决一系列随机图着色实例和验证候选着色的正确性,无论是直接模式还是迭代模式。在迭代模式中,我们尝试了 LLMs 自我批判其解决方案和外部准确推理器验证解决方案两种情况,并分析了批判内容对最终性能的实际影响。
我们的研究结果表明,在直接模式下,LLMs 在解决图着色问题上表现不佳,这并不令人惊讶。更有趣的是,它们在验证解决方案方面的表现也并不更好。在迭代模式下,鉴于 LLMs 无法有效验证解决方案,我们发现 LLMs 自我批判其解决方案的策略并没有带来性能提升,反而表现更差,因为系统无法识别正确的着色,可能会错过正确解,最终得到错误的结果。然而,当我们使用外部着色验证器进行迭代策略时,无论是仅要求 LLMs 重试,还是提供反馈显示被违反的约束,都带来了性能的适度提升,从大约 16% 提高到近 40%。令人惊讶的是,“再试一次”的最小信息反馈几乎和提供详细反馈一样有效。这让我们质疑改进是由于反馈的类型,还是因为正确答案恰好在 LLMs 生成的多个候选解中。为此,我们进行了一项实验,让 LLMs 生成多个潜在解决方案,外部验证器从中选择正确的解。结果显示,即使在直接模式下,借助外部验证器进行 top-k 选择,其性能也与迭代策略相当。
因此,我们的研究为迭代提示技术的有效性,特别是依赖 LLMs 自我批判能力的方法的有效性提出了质疑。在本文的其余部分,我们将讨论相关工作,展示我们的实验方法,并详细解释我们的实验结果。
2 相关研究
正如我们在引言中提到的,最近有很多关于大语言模型(LLMs)推理能力的研究,包括 shinn_reflexion_2023、tree-of-thoughts 和 kojima_large_2022 等。这些研究涉及各种各样的推理问题,如规划(valmeekam_large_2023)、逻辑与算术(dziri_faith_2023)和 24 数码谜题(tree-of-thoughts)。研究的结论各不相同,有的突出了 LLMs 在推理上的局限性(mccoy2023embers 和 4cantreason),而有的则认为通过反复引导,LLMs 的推理能力是可以提升的。比如 shinn_reflexion_2023 的研究就表明自我反思对于 LLMs 学习复杂任务非常有帮助,即使只经过了几轮尝试。本文主要探讨这类观点,特别是反复引导的有效性。我们选取的问题——图着色——是一个在人工智能和计算机科学中经典且复杂的 NP-完全推理问题(russell-norvig-text)。它与命题逻辑推理,特别是可满足性、约束满足问题有着紧密联系,同时也与资源分配和时间安排等实际问题息息相关。
3 研究方法
3.1 图着色问题
鉴于我们对 LLMs 自我批判能力的兴趣,我们选择了图着色这一问题领域。这个问题对于人类来说容易理解和验证,而且描述和评价所需的文字不多。最重要的是,我们相信即使在节点和边的数量较少的情况下,这个问题领域也足够丰富多样,使得我们选取的实例几乎不可能出现在 LLMs 的训练数据中,这样就最大限度地降低了模型污染和记忆的风险。
图着色是一个经典的 NP-完全推理问题,与命题满足性问题以及一些实际问题如排程和分配相关。它不仅能够深入挖掘推理的一般特性,而且其规则简单明了,人类或基本的模式匹配工具都能轻松对其进行判定和评估。
常见的图着色基准问题集中了一些连精确求解器都难以处理的复杂问题,这些问题通常包含数百甚至数千个节点和边。而当前的语言模型处理这种规模的问题时会显得力不从心,正如我们后面会看到的,当处理节点数超过二十的图时,这些模型的表现往往不尽如人意。
因此,我们决定自己动手,创建了一个数据集。我们运用 GrinPy 这一工具包来处理常见的图操作。每张图都是通过 Erdős–Rényi 方法(p=0.4)生成的,但我们对其进行了改进:任何生成的非平面图或与先前生成的图同构的图都会被舍弃并重新生成。成功生成的图会被转换为标准的 DIMACS 格式并保存,同时附带上预先计算好的色数信息。
在接下来的实验中,我们生成了 100 个这样的图实例,每个实例平均包含 24 条边,节点数量分布在 10 到 17 之间。这个分布是基于我们之前的实验结果选取的,因为在这个范围内的图问题,模型的表现具有较大的不确定性,这使得研究变得更有趣。图 1 展示了我们用到的一个图实例,以及 LLM 对这个实例的初始响应、对该响应的反馈,以及最终的正确着色结果。
3.2 迭代反馈的架构设计
图 1:单实例反馈架构总览。通过云图形象展示了系统中不同阶段问题的当前状态。红色的菱形图标展示了一个问题从开始到结束的处理过程:首先,一个平面图被传递给 GPT-4 作为生成器(1),它返回一个可能的着色方案(2)。接着,GPT-4 被用作验证器,检查着色方案是否正确。若不正确,GPT-4 会提供反馈,并通过反馈提示(3)连同先前的历史记录一同用于下一次生成请求(4)。每个新的着色方案都会由 GPT-4(作为验证器)进行评估。若 GPT-4 判断着色方案正确,或者迭代次数达到 15 次,它将确认最终答案,并与一个严谨的验证器进行对比验证。
所有的代码和结果将被公开。
提示生成器:
生成器从一个 DIMACS 实例出发,将每条边转化为一句话,然后将这些句子整合到一组通用指令中,形成一个自然语言的提示。我们刻意减小了不同实例之间提示的差异,以减少向语言模型泄露特定问题信息的可能性。各种类型的提示示例可以在附录中找到。
大语言模型:
这个系统允许通过 OpenAI API 使用任何可用的大语言模型(LLM):用户只需在运行时通过相应的参数传递模型名称即可。本文主要关注 GPT-4,这是当前技术水平最高的模型,它最近被认为具有”突现”推理能力(bubeck2023sparks)。
我们为系统设定了一个角色:“你是一个解决各种约束满足问题的求解器。”并将温度参数设置为 0,以确保输出基本上是确定性的。
扩展性:
这种架构可以轻松扩展到其他领域的约束满足问题求解。在我们公开的代码库中,我们提供了一种通过向项目中添加一个文件即可添加新领域描述的方法,这种方式非常方便。
3.3 反馈提示的生成
在验证模式下,LLM 接收到一种不同类型的提示,其中只包含图形描述和建议的着色方案,其任务是验证着色方案的正确性、最优性以及是否对每个顶点都进行了赋值。如果着色方案错误,它必须返回一组矛盾的边。
作为对比,我们还设计了一个保证返回正确结果的验证器,它能列出所有矛盾的边。因为 LLM 的回答也是用自然语言形式,所以我们首先将其转化成便于分析的格式。为了使这个过程更加一致,我们设计了初始提示,明确规定了模型应当遵循的确切输出格式。然后,对模型的回答进行正确性评估。
在这两种情况下,如果验证器确认答案是正确的,流程就此结束。如果已经进行了超过 15 轮迭代(总共 16 次查询),我们就放弃。否则,将创建一个反馈提示,包装在标准指令中,附加到先前的消息历史上,然后作为新的提示发送回模型。
在这个问题领域中,有效的错误反馈是指一对被赋予相同颜色且共享一条边的顶点。为了构建反馈提示,我们需要决定究竟要提供多少反馈信息。我们考察了五种情况:
- 无:作为基线的单次迭代。没有反馈提示。
- Pass/Fail:唯一给出的反馈是答案错误。
- First:只返回遇到的第一个错误。
- Full:返回一个全面的错误列表。
- LLM:反馈由语言模型通过单独的提示提供(见附录)。我们将所有回答,不论其有效性或正确性如何,都传回生成器。
通过比较这些情况下的结果,我们可以了解 LLM 实际利用了多少给定的信息,以及性能提升在多大程度上是由于有更多尝试的机会。我们还将这些情况与另外四种情况进行了比较:在较高温度下,进行单次迭代查询并要求多个答案,这些情况不涉及任何反馈提示、重新提示,或给 LLM 提供除原始提示之外的任何信息。
- Top 5:在温度为 0.5、1 和 1.5 下,查询 LLM 获取 n=5 个答案。
- Top 15:在温度为 1 下,查询 LLM 获取 n=15 个答案。
3.4 验证环节
为了更加深入地理解他们如何利用大语言模型(LLM)进行验证,我们研究了这些模型在发现潜在着色方案错误方面的能力。本能地,我们认为这些错误应该很容易发现:如果两个连接在一起的点颜色相同,就立刻标出这条连接线。在程序实现层面,我们只需要检查每一条连接线,对比连接线两端点的颜色即可。
我们沿用了之前的分析流程,不过这次我们创设了一个新的领域,叫做
color_verification
。在这个环节中,LLM 将被引导去检验着色方案的正确性、最优性,以及是否每个点都被正确着色。如果发现着色方案有误,模型需要列举出所有着色错误的地方,比如,如果两个相连的点颜色相同,模型就要标出这条边来表示这是一个错误。在这个过程中,我们不会给模型任何额外的提示。我们使用之前相同的图表实例,并创建了四种不同类型的着色方案来测试模型:
- 正确型:通过迭代的随机贪心算法生成的无误差、最优着色方案(为确保最优性,我们预先计算了色数)。
- 删减型:在正确型着色方案的基础上,随机改变某个点的颜色,使其与邻居的颜色相同。
- 非最优型:在正确型着色方案中,随机选取一种颜色,并将其部分更改为新的色调。
- 随机型:完全随机地分配颜色,颜色的种类数与图的色数相同。
- LLM 型:从之前实验中,LLM 生成的结果中随机选取的着色方案。
4 结果展示
4.1 反向提示作为自我批判
策略 | 示例 |
---|---|
直接使用大语言模型(LLM) | 请为下面描述的图进行着色,图中的边表示为一组数据,要求同一边上的两个顶点不能使用同一种颜色。你最多可以用三种颜色。0 号顶点与 2 号顶点相连…… |
迭代:LLM 自我批判 | 这是错误的。反馈:0 号和 11 号顶点共享一条边,但它们都被涂成了颜色 1。5 号和 11 号顶点[…],根据这个反馈…… |
迭代(带外部验证器):仅判断对错 | 这是错误的。使用之前提供的图…… |
迭代(带外部验证器):指出第一个错误 | 这是错误的。1 号和 7 号顶点虽然相连,却被涂成了相同的颜色 1…… |
迭代(带外部验证器):指出所有错误 | 这是错误的。1 号和 7 号顶点虽然相连,却被涂成了相同的颜色 1。2 号和 4 号顶点也都被涂成了颜色 0,尽管…… |
表 1:反向提示技术摘要
图 2:性能与反向提示技术的对比。性能是根据验证器认为正确的回答或在 15 轮迭代后来评估的。 图 3:性能与抽样技术的对比。如果 top n 个答案中的任何一个是正确的,则该实例被视为正确。
如果我们向大语言模型(LLM)提出一个问题,接受其答案,然后立即进入下一个问题,而不给予任何反向提示,我们得到了 16% 的基准成功率。然而,当我们在这些相同的例子中使用作为验证器的同一语言模型对 LLM 的回答进行反向提示时,性能大大下降,只有 1% 的问题得到了正确答案。
这个问题的根源在于没有准确的停止条件。理想情况下,如果系统在反向提示的过程中某个时刻给出了正确答案,我们希望验证器能够停止进一步的提示。但在自我验证的情况下,验证器可能没有识别出正确答案,反而产生了错误的反馈。实际上,这种情况确实发生了。
在 40 个问题的反向提示中,有一些时刻模型给出了最优解。但在这些情况下,验证器没有意识到这一点。在 39 个问题中,验证器错误地认为某些顶点对是相邻且颜色相同的。在唯一被标记为正确的那个问题中,正确答案是在最后一轮反向提示后给出的,所以由于时间耗尽,它成了模型的最终答案。这也显示了模型在确认答案正确性方面的犹豫不决。事实上,100 个问题中只有 4 个被验证器停止,而且这些都是错误的。目前还不清楚是错误反馈本身导致了糟糕的结果,还是正确答案倾向于出现在反向提示序列的早期阶段——这可以从乐观的角度看作是更高概率的完成被一种自我破坏性的思考过程所破坏——这一点目前尚不明确。
使用可靠验证器进行反向提示的结果似乎更有希望,正确答案的比例接近 40%。但是,如果这意味着 GPT-4 在倾听、学习并从反馈中推理,那么我们应该期望更有信息量和准确的反向提示能带来更好的结果。然而,在这个领域,原始得分并没有显示出这一点。当使用一个可靠的验证器时,二元反馈、单一错误或全部错误之间的差异几乎没有意义。
我们可以稍微放宽对 LLM 自我评估案例的分析标准,只要在反向提示链中的任何一个环节,LLM 能够生成正确的配色方案,我们就认为这个实例是正确的。这相当于我们用一个综合的反馈系统重新进行了实验:音频验证器负责何时停止,而 LLM 则记录下所有的(尽管可能并不完全准确的)反馈信息。在这种调整之后,其得分达到了可比较的 40%。使用这个较为宽容的标准,四种反向提示方法得到的结果大体相似。
这样看来,相比于反馈的有无,迭代的次数对于提高分数的影响更为重要:如果模型有 15 次机会去生成正确的答案,那么它成功的可能性就要大得多。我们为了验证这个观点,查询了同样的 100 个实例集,但这次我们允许更高的响应灵敏度,并获得了多个独立且不相互影响的答案。这些结果构成了图 3剩余部分的内容。
当
n=5
时,成绩接近标准,虽然还没有完全达到,但当
n=15
(
t=1.0
) 时,其性能已经可以和反向提示法媲美,分数也达到了 40%。
换句话说,闭上眼睛乱猜的效果和认真斟酌反馈的效果差不多。
我们接下来的分析将深入探讨系统出现问题的环节。我们将试图解答两个问题:LLM 在多大程度上能够准确判断一个答案的对错?以及 LLM 是如何(如果确实有)对反馈作出反应的?
4.2 通过 LLM 验证
我们用 GPT-4 对同样的示例进行了着色验证的测试,并为每个示例生成了五种不同类型的着色方案。结果很快就显而易见了,和上文提到的 LLM 自我验证结果完全一致:模型几乎不认可任何答案是正确的。在 100 个最优着色方案中,它只认为 2 个是正确的。将范围扩大到全部 500 个着色方案,其中 118 个是正确的,它却只认可其中的 30 个。在这 30 个中,它只判断对了 5 个。这不是因为正确性有什么特殊属性——在非最优着色方案中也是一样,它只认为 10% 的方案是非最优的。
总体来说,这种情况一直保持着。不到 10% 的案例中,LLM 会给出“正确”、“非最优”或“缺失赋值”的回应。在这些情况中,它的反应似乎有些随机。在大约四分之一的案例中,它会回应“这是错误的”验证,而且解释与实际情况相符,而且它只通过指出不超过一条边来实现这一点,这最小化了错误陈述的机会。
| | 幻觉 | | | | 着色错误 | | | | | | | :— | :— | | | | :— | | | | | |
顶点 | 边 | 两者 | 无 | 数量 | 正确 | |
---|---|---|---|---|---|---|
正确 | 29 | 72 | 7 | 2 | 0 | 100 |
Ablated | 24 | 52 | 5 | 24 | 187 | 0 |
非最优 | 18 | 65 | 3 | 10 | 0 | 0 |
随机 | 10 | 26 | 5 | 66 | 736 | 0 |
LLM | 26 | 41 | 6 | 27 | 240 | 18 |
总计 | 107 | 256 | 26 | 129 | 282 | 118 |
表 2 展示了在验证任务中幻觉的分布情况。这个表格统计了每种幻觉类型在每个子集中所有着色示例中出现的次数,并将其与所有着色示例中错误边的总数进行了比较。
表 2 总结了结果。值得注意的是,当域的错误率增加时,幻觉的比例实际上是减少的。也就是说,当更多的边被错误着色时,模型更有可能指出其中的一条。从直觉上来说,这是有道理的:当平均有一半的边被错误着色时(如在随机着色的图中),猜测其中一条边是错误的变得更容易。
边的幻觉比顶点的幻觉更常见。典型的行为是,模型会选择两个在着色中颜色相同的顶点,但在图的描述中并没有通过边连接,然后声称它们应该相连,从而着色是非法的。而顶点颜色幻觉则恰好相反:模型不是将边错误地归因于颜色相同的节点,而是错误地描述了两个相连顶点的颜色。这两种情况同时出现的情况,即声明一个不存在的边因为不存在的颜色而违反了规则,比任何一种单独的情况都要罕见。注意,模型从不幻觉出新的顶点名称,只是声称图中已有的顶点的颜色与实际不符。
还有一些更罕见的情况出现在响应数据中。有时模型会失去对问题的跟踪,反转问题,错误地声明两个同色的顶点因为它们不相连而违反了条件;或者在推导过程中开始自相矛盾,对一个顶点的颜色做出了多个声明。我们把这些例子放在了附录中。
我们的总结是,尽管这个领域的问题看似常识性质,但 LLM 的验证能力实际上相当薄弱。
4.3 深入反馈提示链
为了解析 GPT-4 是如何利用或忽略信息的,我们深入研究了其在一个反馈提示链中的回应演变。我们对比了三种不同类型的信息丰富的反馈提示方法:标出第一个错误的边,列举所有错误的边,以及随机挑选一个正确的边然后错误地标记它。前两种情况之前已经有过详细的描述。最后一种,我们称之为“误导”情况,是为了测试系统在纠正建议上是否盲目跟从而设计的。
在给出反馈提示后,我们对其回应进行了分析。我们主要关注局部错误的纠正情况。如果反馈提示中标记为错误的边在回应中被修改,且修改后每个顶点的颜色都与其他顶点不同,我们就认为这个提示被系统“听进去了”。我们对所有的反馈提示结果取平均值进行总结,结果如表 3 所示。
反馈提示数量 | 纠正的错误边数量 | 错误边纠正率 | |
---|---|---|---|
第一种 | 1066 | 1004 | 94% |
完整(任一) | 1102 | 1077 | 98% |
完整(全部) | 1102 | 2870 | 84% |
误导 | 1083 | 1017 | 94% |
表 3:根据反馈提示的信息类型计算的局部错误纠正率。完整(任一)的计算方式是,只要反馈提示中提到的任一边被纠正了就算积分。完整(全部)则是根据反馈提示中提到并被纠正的边的数量占提到的所有边的比例来计算分数。误导情况是错误地标记了一个随机正确的边。
虽然性能没有受影响,但 GPT 确实纠正了大部分被指出的错误。然而,它并没有区分真正的错误和误导情况中的虚假错误,而是不加判断地局部进行了“修复”,并未全面考虑正确性。
5 总结
在这项研究中,我们探讨了迭代提示策略在提高大语言模型(LLM)解决推理问题准确性方面的有效性。特别是,我们受到了之前研究中的观点的启发,即即使最初 LLM 给出了错误的答案,它们也能很好地自我反省并改进答案。然而,我们在图着色问题上的实验结果对这一观点提出了质疑。实验显示,LLM 在验证解决方案(在本例中为着色方案)方面表现非常差,而这对于自我反省至关重要。不出所料,相较于 LLM 直接给出一个答案,使用 LLM 自我反省的迭代框架表现得更差。我们确实发现,在有一个外部可靠验证器参与的情况下,迭代提示是有帮助的。即便如此,我们也发现反馈提示的具体内容并不重要,通过让 LLM 生成多个答案,然后让验证器检查并选择任何一个正确的答案同样可以达到改进效果。因此,我们的结果对迭代提示策略的有效性提出了质疑,增加了人们对大语言模型推理能力的怀疑。
感谢
参考文献
附录 A
A.1 提示部分
DIMACS Format For Graphs |
---|
e 0 7 e 0 8 e 0 9 e 0 11 e 1 13 e 2 9 e 3 8 e 3 11 e 3 12 e 4 12 e 5 11 e 6 9 e 7 10 e 7 13 e 9 11 e 10 13 e 11 13 c OPTIMAL CHROMATIC NUMBER === 3 |
Baseline, Direct Prompt |
---|
Color the following graph, described as a set of edges, such that no two vertices on the same edge → share a color. You may use at most 3 colors. Vertex 0 is connected to vertex 7. Vertex 0 is connected to vertex 8. Vertex 0 is connected to vertex 9. Vertex 0 is connected to vertex 11. Vertex 1 is connected to vertex 13. Vertex 2 is connected to vertex 9. Vertex 3 is connected to vertex 8. Vertex 3 is connected to vertex 11. Vertex 3 is connected to vertex 12. Vertex 4 is connected to vertex 12. Vertex 5 is connected to vertex 11. Vertex 6 is connected to vertex 9. Vertex 7 is connected to vertex 10. Vertex 7 is connected to vertex 13. Vertex 9 is connected to vertex 11. Vertex 10 is connected to vertex 13. Vertex 11 is connected to vertex 13. There are a total of 14 vertices. Please label every vertex, even if it is disconnected from the → rest of the graph.Please provide each vertex’s color. Do not skip any vertices. Each color → must be provided on a new line in the response and should be formatted as “{VERTEX NUMBER}: → {VERTEX COLOR ASSIGNMENT}”. Please do not provide anything else in your response. |
略………………