作者|Alejandro Piad Morffis
OneFlow编译
翻译|林心宇
题图由SiliconCloud平台生成
大型语言模型(LLM)常常看似能够有效地进行推理(Reasoning)。它们能够给出连贯且与上下文紧密相关的回复,这些回复与人的推理结果相似。不过,这种表面上的能力可能会产生误导。
大型语言模型在面对需要大量推理链的复杂问题时经常犯错。它们的回复起初可能看起来合乎逻辑,但往往缺乏进行合理推理所需的深度和准确性。这在涉及多个步骤或复杂逻辑推导的任务中尤为明显,在这些任务中,模型可能会出错并得出错误的结论。
OpenAI的o1等模型的出现,其令人赞叹的推理能力看似是重大进步。然而,这种方法在大型语言模型的逻辑推理方面并非一种全新范式。实际上,这仅仅是在微调阶段明确引入思维链提示,并通过强化学习让模型选择最连贯的推导路径的方式。
本文探究大型语言模型在推理方面的根本局限,凸显其先进输出成果与逻辑推导能力明显欠缺之间的显著差异。通过对这些模型的随机性、计算约束以及缺乏完整计算能力等方面进行考察,我们将揭示其在复杂推理任务中失败的原因。
此外,本文将讨论当前提升大型语言模型推理能力的策略,包括思维链(CoT)提示和自我批判机制,同时批判性地评估它们的有效性和潜在挑战。本文旨在促进对大型语言模型能做什么和不能做什么有更深入的理解,提醒人们在解读它们看似智能的回答时要保持谨慎的态度。
本文作者Alejandro Piad Morffis是古巴哈瓦那大学的助理教授和AI研究员,也是专注于数据科学和机器学习应用的公司SYALIA, S.R.L的CTO。
(本文由OneFlow编译发布,转载请联系授权。原文:https://blog.apiad.net/p/why-large-language-models-cannot)
1
为什么大型语言模型不能进行推理?
语言模型在推理方面的一个重大局限是其随机性。这些模型基于概率预测而非确定性逻辑规则生成输出。这意味着,即使是一个条理清晰的提示,由于其决策过程中的随机性,在不同情况下也可能产生不同的回答。

因此,大型语言模型可能纯粹出于偶然而得出错误的结论,从而导致推理的不一致性。例如,当被要求解决一个数学问题或进行逻辑推理时,模型的回应可能会因生成过程中使用的随机种子的不同而有很大差异,这削弱了人们对其推理能力的信任。
的确,你可以把温度设为零,从而有效地让模型针对给定的输入确定输出。然而,这个输出依然具有概率性,你只是在对最有可能的后续结果进行采样。输入与输出之间的映射依赖于一个概率分布,这个分布对输入中的元素和输出中的元素之间的相关性进行编码,这一点本身就令人起疑。虽然不是完全不可能,但如果我们恰好就收敛于那个能为每个输入都产生正确输出的正确概率分布,这在逻辑推理规则方面是非常奇怪的。
然而,这种局限性仍然不是确定的。情况还会变得更糟。
从设计上来说,大型语言模型在处理每个词元(token)时会花费固定数量的计算量。这意味着,大型语言模型在产生第一个输出词元之前所进行的计算量仅仅是两个数字的函数:输入规模和模型规模。所以,如果你让大型语言模型为一个逻辑谜题给出是或否的答案,那么这个模型所能进行的所有 “思考” 只是一些固定的(尽管数量巨大)矩阵乘法,而这些矩阵乘法仅取决于输入规模。
现在,考虑有两个不同的逻辑谜题具有相同的输入规模,即相同数量的词元。但一个是容易的谜题,可以用简短的推理步骤链来解决,而另一个则需要更多的步骤。令人惊讶的地方在于:任何大型语言模型在这两个问题上花费的计算量完全相同。这不可能是对的,不是吗?
在计算复杂性理论中,有一个基本的结论:一些输入极小的问题似乎需要极高的、呈指数级增长的计算成本才能够被正确解决。这些问题属于NP完备问题,大多数计算机科学家都认为不存在高效的算法来解决它们。关键在于,大量的推理问题都属于这一范畴,其中就包括了最为基本的逻辑谜题 —— 确定给定的逻辑公式是否能得到满足。
当面临一个NP完备问题的具体例子时,大型语言模型会在仅由输入定义的固定计算量后产生答案。如今,仅仅因为规模较大,一些更大的模型或许会耗费足够多的计算量,从而实现覆盖许多较小的NP完备问题实例。碰巧的是,对于较小的输入而言,一个极大的常数函数可能会比指数函数的值更大。但至关重要的是,我们总是能够找到NP完备问题的实例,这些实例从原则上来说,需要非常大量的计算,以至于能够超越任何大型语言模型的计算能力,无论这个模型有多么庞大。
然而,这意味着事情有一些更为深远的意义。归根结底,大型语言模型并非图灵完备的系统,实际上,它们本质上只是极为庞大的有限自动机(finite automata)。尽管它们可以处理各种各样的任务,并且能够生成看似高深复杂的输出,但它们的底层架构限制了它们能够解决的问题类型。
图灵完备性是指一个计算系统在有足够时间和资源的情况下能够执行任何计算的能力。现代计算机以及许多看似简单的系统,比如元胞自动机(cellular automata),都是图灵完备的系统。但讽刺的是,大型语言模型却不是。
原因很简单。我们从可计算性理论中知道,任何图灵完备的系统都必须能够无限循环。存在一些问题——一些推理任务——在这些问题中,唯一可能的解决方案是不断地进行计算,不断地计算,直到某个条件成立,而所需的计算量无法提前得知。要成为图灵完备的系统,就需要潜在的无限制的计算能力。
不过,这是致命一击。从定义上来说,大型语言模型在计算上是受限的。无论它们的规模有多大,总会存在一些问题实例——我们可能无法事先确定这些实例——它们所需的计算量超过大型语言模型内部庞大的矩阵乘法链所能提供的计算量。
因此,当大型语言模型似乎在处理复杂的推理问题时,它们通常只是解决了这些问题的特定实例,而不是展示出通用的问题解决能力。这对于实际目的来说可能已经足够了——我们可能永远都不需要处理更大的问题实例——但是,从原则上讲,大型语言模型无法进行真正无限制的计算,这意味着它们无法进行真正的推理。结论就是这样。
2
提升大型语言模型的推理能力
然而,我们不必在此放弃。研究人员和从业者已经探索了几种创新策略,包括思维链提示、自我批判机制以及整合外部工具,以提升大型语言模型的推理能力。
思维链提示鼓励大型语言模型清晰地表达其思维过程,使它们能够将复杂问题分解为易于应对的步骤,并提高在推理任务中的准确性。另一方面,自我批判机制旨在通过内部评估过程来优化输出结果,但它在有效纠正错误方面的效果却喜忧参半。此外,整合外部工具,如逻辑推理引擎和代码生成系统,可以通过提供有条理的逻辑和形式验证(formal verification)来显著增强大型语言模型的能力。
然而,每种方法都面临着各自的挑战,需要仔细研究它们在加强大语言模型真正推理能力方面的潜力和局限性。
思维链
思维链提示是一种极具前景的技术,它能够提升大型语言模型的推理能力。该方法通过引导模型在得出最终答案之前阐述中间推理步骤,从而将复杂问题拆解为易于处理的部分。在诸如算术和常识推理等各类推理任务中,这种方法都显著提升了性能。
思维链提示引导大型语言模型把复杂问题拆解为更为简单且连续的步骤,随后分别对每个步骤进行处理。这种结构化的方式使得模型能够单独应对每个组成部分,进而提升回答的准确性与精确性。研究显示,该技术能够在推理任务中显著提升性能,尤其是当模型拥有足够数量的参数(大约1000亿)时,可以有效地发挥思维链提示的优势。
通过鼓励模型清晰地表达其思维过程,思维链提示挖掘了大型语言模型在训练过程中所获取的丰富知识储备。这种机制有助于模型更有效地应用相关信息,解决它们在逻辑推理和问题解决方面固有的困难。
此外,思维链提示促使大型语言模型在一定意义上“更深入思考”,因为它迫使模型生成我们可以看作是“内部思维”词元的内容。所以,我们可以将其视为一种在确定回答之前对输入进行额外计算的方式。
然而,尽管思维链提示有其优势,却因一些原因而仍显不足。
思维链提示的成效在极大程度上取决于所用提示的质量与多样性。倘若提供的示例缺乏代表性或者不够丰富多样,那么模型可能难以生成连贯的推理链条,进而致使性能不尽如人意。对有效提示工程的依赖,会限制该技术的可扩展性与通用性。
此外,大型语言模型的随机性意味着即使有思维链提示,由于生成过程中的随机性,不同运行的输出结果也可能有很大差异。这种可变性可能导致不一致的推理结果,从而破坏模型响应的可靠性。
归根结底,思维链提示在一定程度上扩展了计算预算。然而,除非我们采用某种循环方案,持续提示大型语言模型不断思考,甚至可能无限制地进行下去,直至达到满意状态,否则它们在图灵不完备性方面的根本局限依旧无法消除。
自我批判机制
另一种提高推理能力的直观方法是自我批判,它涉及用同一个模型评估和改进大型语言模型的回答,使用提示来指示模型读取其先前的输出,强调潜在错误,并尝试纠正它们。可以说,这是一种事实后(after-the-fact)的思维链形式。然而,最近的研究强调了这种自我批判能力在有效性方面存在重大局限性。
虽然大型语言模型可以生成多种想法并尝试批判其初始输出,但研究表明,它们通常无法进行有意义的自我纠正。在计算复杂性理论中,“正确性验证应比生成更容易”这一基本假设,通常情况下对于大型语言模型似乎并不适用。这在推理任务中尤其成问题,因为模型难以充分评估其输出的准确性。例如,如果一个大型语言模型生成了一个有缺陷的答案,那么它对该答案进行批判和修订时可能会引发更多错误而非改进。
研究表明,大型语言模型中的自我纠正技术在很大程度上取决于外部反馈的可用性。在许多情况下,当大型语言模型能够获得外部验证器或额外的上下文信息时,其表现会更好,而非仅仅依赖于自身的内部推理能力。例如,在解决诸如图片着色或规划任务等复杂问题时,如果没有外部指导,大型语言模型往往无法生成可靠的解决方案。
有意思的是,尝试进行自我批判有时不但不能提升性能,反而会降低性能。有研究显示,当大型语言模型在没有外部验证的情况下进行自我批判时,可能会出现误报或得出错误结论。如果再进一步施压,就很容易陷入对无效或错误论点进行自我强化的循环,结果是大型语言模型尽管表现越来越糟,却变得越来越笃定。
外部工具
把像逻辑推理引擎或者代码生成系统这样的外部工具融入大型语言模型之中,这是一种很有前景的做法——在我看来,这也是唯一真正行得通的办法——能够增强大型语言模型的推理能力。
将大型语言模型与外部推理引擎或逻辑推理工具相连接,可以显著增强它们的推理能力。这些工具能够处理复杂的逻辑推导、数学计算,甚至是大型语言模型本身可能不具备的特定领域知识。这种整合能够产生更准确可靠的输出结果,因为外部工具可以应用大型语言模型通常难以处理的形式逻辑和结构化推理。
同样地,外部代码生成系统使大型语言模型能够为特定任务生成可执行代码。这种能力可以简化软件开发流程,并提高生成功能性代码片段的效率。外部系统可以提供严格的制衡机制,有助于确保生成代码的正确性。
通过利用这些外部资源,大型语言模型有可能克服其在逻辑推理和问题解决方面的一些固有局限性。首先,外部推理引擎将是图灵完备的,所以我们就解决了那个问题,对吧?
别这么快下结论。很遗憾,这种方法面临许多挑战,特别是在大型语言模型为函数调用或代码执行生成正确输入的能力方面。这一切都回到了大型语言模型的原罪:随机输出。
首先,函数调用或代码生成的成效取决于模型能否准确地理解任务并生成恰当的输入。如果模型错误地理解了需求,或者生成了模糊或不正确的提示,那么外部工具可能会产生错误的输出,或者完全无法执行。这种依赖关系引入了一个潜在的故障点,在此处模型在理解上下文和意图方面的局限性便会凸显出来。
许多推理任务需要对逻辑和上下文有细致入微的理解,而这可能超出语言模型的能力范围。例如,在为逻辑推理引擎生成输入时,模型必须理解问题,并以符合系统要求的方式清晰地表达出来。如果模型无法捕捉到这些细微之处,就可能导致错误的推断或无效的推理过程。
将文本转换为代码或结构化查询会使其变得更加复杂,并可能削弱推理能力。这种转换需要编程语法和逻辑知识,而对于主要在自然语言数据上训练的大型语言模型来说可能并不直观。在这种转换中的错误可能会传播到外部系统,从而导致更多的错误。
虽然外部工具在原则上能够凭借提供结构化逻辑和形式验证来提升大型语言模型的推理能力,然而却无法弥补大型语言模型在生成精准输入方面的根本局限。所以,无法保证这种整合后的输出在逻辑上合理或者适用于特定情境,原因就在于那句老话:输入垃圾,输出也必然是垃圾。
3
总结
虽然大型语言模型可能展现出一些推理能力,但其本质上的随机性以及固定的计算架构阻碍了它们进行无限制的、任意长度的推导。这种根本的局限性意味着,尽管正在进行研究并探索各种增强推理的技术,例如思维链提示和自我批判机制,甚至用强大的推理引擎对其进行“临时拼凑”,我们仍然不知道如何让语言模型使用完美无缺的形式逻辑进行推理。
所以,尽管o1是一项令人惊叹的技术与壮举,但它以及任何基于相同范式的未来模型都将继续面临所有大型语言模型所固有的核心局限,它们只是通过一些巧妙的方法进行了缓解。因此,虽然它们在某些情境下可能表现卓越,但还是必须谨慎对待其输出的推理结果。
其他人都在看
让超级产品开发者实现“Token自由”
邀请好友体验SiliconCloud,狂送2000万Token/人
邀请越多,Token奖励越多
siliconflow.cn/zh-cn/siliconcloud