上文中我对使用COT技术进行复杂推理做了经典文章的介绍。主要是说明COT技术是一项靠谱、鲁棒、适用多个方面的方法。这篇文章我将就剩余的问题把这个问题彻底交待清楚。比如上文的遗留问题包括为什么模型大了使用COT效果更好些?提示词工程扮演什么角色?COT技术对特定任务有作用没有?等等。耐心看完这一篇,你对GPT应用的底层逻辑将掌握得非常牢固。
1 常见问题
1 为什么增加模型规模会提高思维链提示的效果?
发现成功的思维链推理只在某些模型规模下可预测地出现是有趣的。已经证明,扩大语言模型的规模可以带来诸如提高性能和样本效率等好处(Kaplan等,2020),但思维链推理在成功方面的表现是会涌现的,其成功不能仅通过外推小规模模型的表现来预测,因为对于小于10B参数的大多数模型,思维链实际上会损害其性能。
为什么模型规模会提高思维链提示的效果是一个多方面的问题,我们通过错误分析做了初步的尝试来揭示这个问题。这个小分析涉及手动阅读 PaLM 62B 所犯的 45 个错误,并将它们分为语义理解(20 个错误)、缺少一个步骤(18 个错误)和其他错误(7 个错误)三类。"其他类别"包括幻觉、重复输出和符号映射错误。这个分类是从附录D.2中对LaMDA所做的初始错误分析中借鉴过来的,其中的分类是基于需要做哪些改进来使思维链正确的。
如图9所示,将PaLM规模扩大到540B可以修复所有三类错误的大部分。图10给出了通过将PaLM扩大到540B来纠正语义理解和缺少一个步骤错误的示例。这个结果似乎与一个假设一致,即语言模型在模型规模的函数下获得了一系列的语义理解和逻辑推理技能(尽管请注意,模型规模经常与其他因素(如训练计算量)混淆)。
图9:PaLM 62B错误分析的45个问题。将PaLM扩展到540B可以修复所有类别中的大部分错误。
关于小语言模型失败的原因,还有三个值得注意的点。第一个观察结果是,即使是相对简单的符号映射任务,小语言模型也会失败。如第5节所示,即使是仅需要在同一思路逻辑结构下对新示例进行泛化的符号推理任务,小语言模型仍然失败。第二个观察结果是,小语言模型似乎具有固有的较弱的算术能力,正如Brown等人(2020)所示,进行简单算术运算(没有语义理解)需要足够的模型规模。最后,我们从定性上注意到,小语言模型通常无法生成可解析的最终答案,这要么是由于重复,要么是由于逻辑未达到最终答案。
总之,模型规模决定推理能力的成功是一个复杂的现象,可能涉及各种新兴的能力(语义理解、符号映射、保持主题、算术能力、忠实度等)。未来的研究可以更全面地研究预训练数据、模型架构和优化目标的性质,以确定其对这种推理能力的影响。
图10:通过将PaLM从62B扩展到540B来修复语义理解和一步缺失错误的示例。
2 提示词工程的作用是什么?
提示词工程的一个关键考虑因素是对确切提示的敏感性。有大量的研究表明,提示以意想不到的方式影响语言模型(Min等人,2022年)。我们创建思维链注释的一般方法是从训练集中选取八个示例,并将推理过程分解成多个步骤,导致最终答案。思维链注释的示例在图3中提供,完整提示在附录G中给出。为了分析思维链对提示工程的敏感性,我们进行了针对各种因素的鲁棒性实验。
•不同的注释者。我们首先分析了对三个不同注释者的鲁棒性(第3.4节和图6)。尽管性能存在显著差异(我们稍后将讨论),但在算术、常识和符号推理的八个数据集上,相对于基线,思维链在所有三个注释者中表现更好(表6和表7)。类似于Cobbe等人(2021)的注释过程,注释者没有被给予关于如何编写思路链注释的具体指导,除了简单地写下导致最终答案的逐步推理过程。因此,这些注释是按照每个注释者自己的语言“思路链”写作风格编写的。
• 没有机器学习背景的注释者。GSM8K数据集(Cobbe等人,2021)方便地提供了一个由众包工作者编写的推理链训练集,这使我们能够研究来自机器学习背景独立的独立数据源的推理链是否仍然适用于思路链。因此,我们随机抽样了三组具有思路链的八个样本集合来自GSM8K。这些思路链注释在所有四个算术数据集上也大幅优于基准线(表6),表明思路链并不依赖于特定的注释者组合。
• 不同的示例。上面的不同GSM8K示例实验(表6)还表明,思维链提示对不同的示例集都有效。值得注意的是,我们在所有四个算术数据集上测试每个示例集(而不是从训练集中选择每个数据集的示例),这表明示例不一定必须来自与测试示例相同的数据集分布。
• 不同的示例顺序。先前的研究表明,在某些情况下(例如分类),即使提示的顺序也很重要 - 更改少量示例的排列顺序可能导致GPT-3在SST-2上的准确率从接近机会(54.3%)到接近SOTA(93.4%)(Zhao等人,2021)。我们在表6和表7中展示了来自不同示例的性能标准差。在几乎所有情况下,与提示顺序相关的标准差相对较小。唯一的例外是抛硬币任务,其中示例顺序的标准差很高,可能是因为Zhao等人(2021)提到的原因 - 对于分类,连续出现许多相同类别的示例会使模型输出产生偏差。
• 不同数量的示例。我们还发现,思维链提示通常仍然有效,即使有不同数量的少量示例。这在图11的五个数据集中显示(我们没有计算能力来运行所有数据集)。在初步实验中,我们还发现,进一步增加标准提示中的示例数量并没有带来显着的收益(例如,将示例数量从8增加到16并没有改善标准提示的性能,足以赶上思维链提示)。
• 不同的语言模型。另一个有趣的问题是,是否对于一个模型有效的某些提示对其他大型语言模型也有效。我们发现,在相同的提示下,思维链提示可以提高所有三个模型(LaMDA、GPT-3和PaLM)的性能,除了GPT-3的CSQA和StrategyQA数据集(表1、表4、表5)。思维链带来的收益不能完全转移至其他模型,这是一个局限性;进一步的工作可以研究不同的预训练数据集和模型架构如何影响思维链提示的性能提升。
但是,提示词工程仍然很重要。尽管算术推理的结果相对稳健,我们仍然要明确提示词工程仍然很重要,并且在许多情况下可以显著提高性能。虽然大多数思维链注释优于标准提示,但在许多情况下存在很大的变化。例如,对于抛硬币任务,性能从Annotator A的99.6%到Annotator C的71.4%不等,尽管两者都高于标准提示= 50.0%(请参见表7)。甚至有些任务需要良好的提示工程才能获得良好的性能。在初步实验中,我们尝试使用思维链来使语言模型反转5个项目的顺序。尽管两位共同作者尽了最大努力,但他们都无法编写解决任务的思维链提示,而第三位共同作者则能够编写完美解决任务的思维链提示。
如何以稳健的方式生成思维链注释可能是未来工作的有趣方向。例如,这里的一个想法是使用大型语言模型通过提示自动生成思维链(并在验证集上可能进行优化)。
3 链式思维提示是否能提高我所关心的任务表现?
链式思维提示原则上适用于任何文本到文本的任务,但对某些任务更有帮助。根据本文中的实验,我们的直觉是,在以下三个条件满足时,思维链对于帮助最大:(1)任务具有挑战性,需要多步推理,(2)使用大型语言模型,(3)缩放曲线相对平坦。相反,当不满足其中一个或多个条件时,优势较小。这些直觉或许得到了算术推理结果的支持。
对于 PaLM 540B 在 GSM8K 上(挑战性多步问题,缩放曲线平坦)获得的性能提升最大。这些条件满足了这些条件。对于仅需要一两个步骤(SingleOP、SingleEq 和 AddSub)的 MAWPS 的子集,性能增益很小,因为 PaLM 540B 已经实现了 90% 或更高的性能(并且通常情况下,当性能已经强大时,改进的空间较小)。
虽然本文重点关注多步推理任务(算术、常识和符号) ,但链式思维提示原则上可应用于任何人类使用“思维链”解决的任务(至少在原则上)。我们将链式思维提示在如机器翻译等各种任务中的实证评估留给未来的工作。
4 为什么仅仅用方程式提示对于某些算术推理数据集来说不足够?
仅使用方程式提示作为中间步骤确实有助于许多数据集,特别是当数据集只需要几个推理步骤时(如SVAMP、ASDiv、MAWPS)。但对于GSM8K数据集,仅使用方程式并没有显著提高性能。基于定性分析,我们认为这些问题在语义上太具有挑战性,以至于模型无法直接将其转化为数学方程式。考虑来自LaMDA 137B的以下示例:
问题:Mike打乒乓球40分钟。在前20分钟中,他得了4分。在后20分钟中,他得了25%的额外分数。他一共得了多少分?
仅方程式(错误答案):(4 + 20 * 0.25)= 6。答案是6。
思路链(正确答案):Mike打了40分钟的乒乓球。在前20分钟中,他得了4分。在后20分钟中,他得了25%的额外分数。所以他在后20分钟中得了25%的更多分数。4 x 1.25 = 5。所以他总共得了9分。答案是9。
对于模型来说,直接将所有语义转化为单个方程式很困难,但思路链允许它通过自然语言中的中间步骤更好地推理问题的每个部分。
2 扩展相关工作
思维链提示是一种通用方法,受到多个先前方向的启发,包括提示、自然语言说明、程序合成/执行、数字和逻辑推理以及中间语言步骤。
1 提示
大规模语言模型的最近成功引起了人们对通过提示改进其执行任务能力的兴趣(Brown等人(2020年),请参见Liu等人(2021年)的调查)。本文属于通用提示方法的范畴,其中输入提示被优化以使单个大型语言模型更好地执行各种任务(Li和Liang,2021年;Lester等人,2021年;Reif等人,2022年等)。
最近的一项工作旨在通过提供描述任务的说明来提高语言模型执行任务的能力(Raffel等人,2020年;Wei等人,2022a;Ouyang等人,2022年;Sanh等人,2022年;Wang等人,2022b)。这一领域的工作也与本文相关,因为它还将输入输出对与元数据结合起来。但是,虽然说明增强了任务的输入(说明通常添加到输入之前),但思维链提示增强了语言模型的输出。
另一个相关的方向是顺序地组合语言模型的输出;人机交互(HCI)工作(Wu等人,2022a,b)已经表明,组合语言模型的连续生成可以提高20人用户研究中的任务结果。
2 自然语言解释
另一个密切相关的方向使用自然语言解释(NLE),通常旨在提高模型的可解释性(Zhou等,2020; Wiegreffe和Marasovic´,2021等)。这一工作通常聚焦于自然语言推理(Camburu等,2018; Yordanov等,2021; Bostrom等,2021),并在最终预测之前或同时生成解释(Narang等,2020; Majumder等,2021; Wiegreffe等,2021, 2022)。相比之下,本文考虑的思维链处理发生在最终答案之前。虽然NLE主要旨在提高神经网络的可解释性(Rajagopal等,2021),但思维链提示的目标是允许模型将多跳推理任务分解为多个步骤 - 可解释性只是一个副作用。Marasovic等人(2022)显示,基于提示的微调与NLE提高了NLI和分类性能,尽管他们主要关注评估解释的可信度。相比之下,我们的工作聚焦于需要多跳推理的算术、常识和符号任务范围。
3 程序综合和执行
使用中间推理步骤在程序综合和执行中具有悠久的历史(Zaremba和Sutskever,2014等)。最近的工作沿着这个方向包括许多架构创新(Cai等,2017;Dong等,2019;Yan等,2020),以及使用大型语言模型(Chen等,2021;Austin等,2021)。最接近我们的程序执行工作可能是Nye等人(2021),他们展示了大型语言模型可以执行多达10位数字的加法,求解多项式,并执行Python程序。虽然生成程序然后执行它可以被视为一种推理类型,但我们的工作将这种特定领域的基本原语推广到自然语言中,这是开放领域并且原则上与任何文本到文本NLP任务相关。
4 数字和逻辑推理
数字和逻辑推理一直是机器学习和自然语言处理领域长期研究的任务(Lev等人,2004等)。最近的工作也旨在以各种方式将数字推理能力注入语言模型中,例如利用预定义的可执行操作增强BERT(Andor等人,2019),包括图神经网络(Ran等人,2019),以及使用专门的训练程序(Pi˛ekos等人,2021)。另一条研究路线旨在使语言模型能够执行逻辑或形式推理,通常通过使用语言将自然语言形式规则中的规则变成语言形式(Clark等人,2020;Saeed等人,2021;Liang等人,2021)。
也许与此相关的工作中,最相关的是Recchia (2021)的研究,该研究表明fine-tuning可以实现长手模块操作,这在以前对于表演者来说是困难的。虽然在这个方向上的工作通常是针对特定任务并使用fine-tuning,但我们展示了一种不需要fine-tuning的思路链提示方法,适用于广泛的任务范围。
5 中间语言步骤
以往的工作已经广泛表明,赋予神经网络通过训练或微调产生中间步骤的能力在各种场景下都有不同的好处。例如,已经证明自然语言中间步骤可以提高性能(Zaidan等人,2007;Yao等人,2021;Hase和Bansal,2022;Gu等人,2022),提高鲁棒性(Chen等人,2022),加速训练(Hancock等人,2018),缓解偏差(Dua等人,2020),甚至有助于图像和强化学习设置(Andreas等人,2018)。为了赋予模型产生中间步骤的能力,以前的工作通常通过微调模型来对手动注释的训练数据集进行训练(Camburu等人,2018;Rajani等人,2019,等等)或生成合成数据集(Talmor等人,2020;Zelikman等人,2022)。
与这些训练或微调方法相比,我们的工作表明,可以通过提示来简单地激发足够规模的预训练语言模型中的各种自然语言推理能力。这种提示设置很重要,因为它允许进行中间步骤推理而不需要大量标注的注释,并且因为一个单一的模型可以执行各种推理任务而不需要任何梯度更新。
附录:附加分析
1 正确的思维链分析
正如主文所述,我们分析了来自LaMDA 137B的50个思路链,这些思路链在GSM8K数据集中导致了正确的答案。其中50个中,只有一个通过错误的推理得出了正确的答案(在表9中显示:“仅凭偶然正确”)。其他49个具有正确的逻辑和数学,其中示例显示在表8中。其中五个存在小的缺陷,但仍保持了连贯和可理解的逻辑:
• 其中一个有不充分的陈述(显示在表9中:“正确但陈述不充分”)。
• 其中一个发表了一个无关但正确的声明(显示在表9中:“正确但无关的声明”)。
• 两个具有正确的逻辑,但省略了方程式中的具体步骤,但仍然可以理解(表9中显示:“正确但不完美的方程式”)。
• 其中一个拥有正确的数学,但翻转了语义(在表9中显示:“正确但语义翻转”)。
表8:模型为GSM8K数据集生成的正确思路链示例
尽管我们发现对于最终答案正确的数学问题,思维链推理大多是正确的,但这很可能是因为通过巧合获得正确的最终答案对于自由回答问题来说很难。对于多项选择或二元分类问题,模型更有可能通过不正确的推理路径获得正确答案(例如,我们评估的所有常识推理数据集)。这是一个限制,未来的工作应该对这些思维链的事实性进行分析。
表9:在50个模型正确的示例中,有7个显著的情况,模型生成的思维链是不完美的。
表9显示,在50个模型正确的示例中,有7个显著的情况,模型生成的思维链是不完美的。我们发现其他43个与可能由人类生成的基本事实相等。
2 错误的思维链分析
我们还手动分析了50个在GSM8K上错误的LaMDA 137B模型输出。一个思维链有很多种错误的方式,这使得错误分类的设计变得复杂。我们决定将错误分类为需要进行哪些更改才能使思维链变得正确,目的是阐明未来如何改进该模型。 我们发现,许多思维链可以通过以下三类修改之一使其正确。
• 仅仅是计算器误差。我们发现,有8%的思路链完全正确,除了计算器的误差——换句话说,将外部计算器应用于方程,就像Cobbe等人(2021)所做的那样,将使思路链正确。这种错误类型的示例在表10中展示:“仅计算器误差”。事实上,在LaMDA 137B GSM8K上进行思路链提示的求解率从14.3%提高到17.3%,当我们添加一个Python程序作为外部计算器时,如表2所示。此外,34%的示例中除了其他类型的错误之外还包含计算器错误。然而,我们将其余的错误分类独立于计算器错误进行。
• 符号映射错误。接下来,我们发现16%的思路链是正确的,除了我们所谓的符号映射错误。我们将符号映射错误定义为当思路链除了数字符号之外都是正确的,且仅通过修改方程而不是单词即可使其完全正确。由于有人可能会认为他们可以将正确的最终方程式放入任何思路链中,因此我们将这个类别限制在思路链可以修改为完全正确的推理过程的情况下(不仅仅是最终答案)。这种错误类别的示例在表10中展示:“符号映射错误”。
• 缺少一步错误。我们下一个错误类别是思路链在正确的情况下缺少了一个步骤。换句话说,这些思路链可以通过添加模型遗漏的额外推理步骤来重写为正确的。这种错误类别的示例在表10中展示:“缺少一步错误”。我们发现22%的错误属于这种类别。
表格10:错误思维链的示例,按附录D.2所述进行分类。
我们发现剩余的思路链(50个中的27个;54%)需要大量编辑才能变成正确的思路链。在这里几乎所有情况都涉及到语义理解上的一些错误(参见表11:“语义理解错误”),其中27个中有8个还存在不连贯的思路链,也就是说,在生成的思路链中,有些陈述不符合先前的陈述,或违反了基本的常识(参见表11:“不连贯的思路链错误”)。
表11:错误思路链的示例,按附录D.2所述进行分类。这些思路链存在多个错误,无法通过小的编辑来修正。
总体而言,大型语言模型生成的推理过程是否连贯和事实正确都没有保证,最近的研究评估了语言模型生成和解释的真实性(Maynez等,2020;Rashkin等,2021;Ye和Durrett,2022;Marasovic等,2022;Wiegreffe等,2022)。不正确的推理过程可能导致错误的最终答案,也可能意外地得出正确的最终答案(对于二元分类等任务而言,意外得出正确的最终答案更有可能)。改善语言模型生成的真实性,尤其是在上下文和常识方面,是语言模型研究中的一个重要方向和开放问题,这也有望潜在地提高语言模型的多步推理能力。一种改善解码质量的潜在方法可能涉及生成多个推理路径并用验证器对其进行评分,但这需要训练验证器(Cobbe等,2021;Shen等,2021;Thoppilan等,2022)。