摘要
大型语言模型(LLMs)通过扩大模型和数据规模,展现了不断增强的上下文学习能力。尽管取得了这一进展,LLMs仍然无法解决算法推理问题。尽管在提供最终答案的同时给出解释促进了在多步骤推理问题上的进一步改进,但Anil等人(2022年)指出,即使是简单的算法推理任务,比如奇偶性判断,也远未得到解决。在这项工作中,我们识别并研究了成功教授LLMs算法推理的四个关键阶段:(1)将算法表述为技能,(2)同时教授多个技能(技能累积),(3)教授如何结合技能(技能组合)以及(4)教授如何将技能作为工具使用。我们表明,通过上下文学习,可以教授LLMs算法推理,我们称之为算法提示。我们在各种算术和定量推理任务上评估了我们的方法,并在性能上显著超过了现有的提示技术。特别是对于长序列的奇偶性判断、加法、乘法和减法,我们相较于最佳可用基线分别实现了大约10倍、9倍、5倍和2倍的错误率降低。
1 引言
大型语言模型(LLMs)近年来取得了令人印象深刻的进展,这得益于模型规模和训练数据量的扩大(Kaplan等人,2020年;Wei等人,2022a年;Hoffmann等人,2022年),这导致了性能和样本效率的提高(Brown等人,2020年;Chen等人,2021年;Chowdhery等人,2022年)。一个有显著提升空间的领域是LLMs执行复杂推理任务的能力。在这个领域中,数学推理(Saxton等人,2019年)作为一个领域提供了独特的挑战。它要求具备解析能力,能够逻辑地将问题分解为子问题并重新组合它们,以及应用规则、变换、过程和公理的知识。
提供最终答案的同时给出解释的想法最初由Ling等人(2017年)提出,最近以scratchpad(Nye等人,2021年)和chain-of-thought(Wei等人,2022b年)的形式为LLMs复兴。这已经在多步骤推理问题(Wang等人,2019年)如算术、常识和符号推理任务(Nye等人,2021年;Wei等人,2022b年;Lewkowycz等人,2022a年;Wang等人,2022a,b年;Anil等人,2022年;Zhou等人,2022年)上带来了性能提升。然而,尽管取得了重大进展,这些模型在推理任务上的非分布(OOD)泛化仍然存在困难(Nogueira等人,2021年;Kim等人,2021年;Anil等人,2022年)。
要在许多这些推理任务上成功地进行非分布泛化,模型需要学习解决任务的底层算法。我们将这种行为称为算法推理(Kaiser和Sutskever,2015年;Velicković和Blundell,2021年)。虽然遵循算法可以被视为一种遵循指示的形式,但算法通常更复杂,步骤更多,尽管算法的每个步骤可能比典型的指示更简单、更简洁。能够学习算法的好处在于,由于它们本质上与输入无关,因此在正确执行时不会受到OOD性能下降的影响。此外,算法可以明确无误地指定,因此提供了一个很好的测试平台来探测模型能力。
LLMs的一个令人惊讶的能力是上下文学习(Brown等人,2020年),这指的是从提示中呈现的几个示例中学习任务的能力。上下文学习不需要任何权重更新,并为专业化技能获取提供了一个强大的平台,而不会丧失底层模型的通用性。此外,各种提示策略在解决某些类型的推理问题上显示了显著的潜力(Jung等人,2022年;Zhou等人,2022年;Wei等人,2022b年;Kojima等人,2022年)。尽管如此,Anil等人(2022年)考虑了两个算法推理任务,并表明尽管基于解释的提示允许LLMs泛化到更长的问题实例,但它们在解决简单的算法任务(如奇偶性判断)方面仍然相去甚远。
在这项工作中,我们探讨了如何通过上下文学习将算法及其组合教授给LLMs。这种设置让人联想到在学校教授孩子类似技能的方式。我们识别并探索了将算法作为技能教授给LLMs的四个关键阶段(图1)。我们从研究现有方法的不足并提出缓解方法开始。我们专注于加法、减法和乘法等算术算法,因为它们已经被广泛地作为基准测试(Saxton等人,2019年;Hendrycks等人,2021年),并且在MATH基准测试中即使是表现最好的模型也著名地无法进行非分布泛化(Lewkowycz等人,2022b年)。尽管可以通过使用外部工具如计算器(Cobbe等人,2021年)来避免学习这些算法,但这种方法无法扩展到需要模型使用“软算法”并在不同情况下灵活应用某些步骤的更高抽象层次。
贡献:我们的主要贡献如下:
- 我们引入了算法提示(Algorithmic Prompting),它涉及在运行示例上提供算法执行的详细描述,并使用明确的解释和自然语言指令来消除歧义。有关算法提示与现有提示技术的比较,请参见第2节和表1。
- 我们证明了算法提示在多个算法任务上的表现显著优于现有的提示技术。特别是对于长序列的奇偶性判断、加法、乘法和减法,我们与最佳可用基线相比,错误率分别降低了大约10倍、9倍、5倍和2倍(第3节和表2)。
- 我们的消融研究揭示了非歧义解释的影响,并表明与其他提示方法不同,算法示例中的错误显著影响性能(第3.1节)。
- 我们研究了模型通过单个提示同时学习多个算法的能力,以及它将学到的算法组合起来解决更复杂任务的能力(第4节和第5节)。
- 我们探索了各种方法,利用学到的算法作为工具来解决
2 算法提示
Nye等人(2021年)提出了一个想法,即让模型展示其工作过程,即分解问题并要求模型输出在解决问题时使用的中间步骤。作者们表明,通过对这类数据进行微调——他们称之为scratchpad——可以大大提高模型在多步骤计算问题上的性能。Wei等人(2022b年)将这一方法进一步应用于上下文学习设置中,他们展示了在提示中提供解释可以显著提高模型解决多步骤推理问题的能力。他们将这种方法称为chain-of-thought。scratchpad方法背后的主要直觉是,通过在输出中包含中间计算,模型可以直接参考它们,而不必依赖于其内部表示空间进行这些计算。对于chain-of-thought,一个假设是解释为模型提供了一个松散的“思考模式”,在解决问题时可以参考。通过鼓励模型在输出答案的同时输出解释,我们引导它通过将问题分解为逻辑上相互跟随的步骤来解决问题。受这些观点的启发,我们假设如果我们增加这些思考模式的具体性和适用性,我们也可以增加模型在解决问题时遵循这些模式的程度。正如我们将展示的,这种方法利用了scratchpad展示中间计算的想法和chain-of-thought为每一步提供解释的想法。
作为一个激励性的例子,考虑标准的加法算法。这种方法将两个要相加的数字右对齐,并从右到左计算每个数字中单个数字对的和。对于每一对数字,都有一个可能的需要加到下一个数字和上的进位。如果我们使用scratchpad风格的插图,那么对于像182 + 376这样的问题,模型会看到数字和2 + 6产生了0的进位,而8 + 7产生了1的进位。然而,仅从这个例子来看,进位的规则是非常模糊的。理想情况下,我们期望模型得出结论,当a + b > 9时,它产生1的进位,当a + b ≤ 9时,它产生0的进位。但是,从scratchpad风格的例子中,模型可能得出了每当我们将两个偶数数字相加时进位为1,否则为0的结论,或者得出了第一对数字产生1的进位,第二对数字产生0的进位,等等。为了使模型能够推断出正确的模式,它必须以这样的方式偏置,即一般且正确的规则是默认的解释。然而,这种对齐不能可靠地期望于当前模型。
我们假设现有的提示方法未能足够地限制模型对提示信息的解释,导致在需要精确算法推理的任务上出现了意外和不受欢迎的模型行为。我们通过在解释中大幅增加细节的数量,同时在这个信息中指定算法的步骤,来推动基于解释的提示的极限。我们将这种策略称为算法提示(Algorithmic Prompting),并在表1中将其与其他类型进行了对比。我们展示了它可以在几个算法推理任务上实现显著的系统泛化,并将我们的探索建立在图1中确定的四种能力上。
2.1 实验设置
基线比较:在我们的实验中,我们将提出的算法提示与少量样本(few-shot)和链式思考(chain-of-thought)基线进行了比较。少量样本基线指的是一种简单的方法,即呈现问题和答案对的示例,而不提供额外的解释。链式思考基线在少量样本示例中提供了最终答案的同时,还提供了解释。为了生成各种任务的解释,我们遵循Kojima等人(2022年)引入的方法,并使用短语“让我们一步一步思考”来为少量样本示例获取模型生成的解释。
评估指标:我们在所有实验中测量了分布内(in-distribution)和分布外(OOD)的性能。对于本文考虑的上下文学习设置,数据分布由提示示例中的答案长度决定。因此,答案长度落在提示中看到的范围内的题目被认为是分布内的,而答案长度更长的题目被认为是分布外的。长度的选择是自然的,因为在我们考虑的任务中,它是复杂性的一个度量,而且长度泛化作为系统性泛化(Csordas等人,2021年;Anil等人,2022年)的衡量有着丰富的历史。因此,长度泛化提供了一个很好的指标,用来判断模型是否学到了潜在的算法。
实验设置:本文中的所有实验,我们使用了来自OpenAI的Codex模型code-davinci-002(Chen等人,2021年)。该模型的最大上下文长度为8000个令牌。任务示例在每个长度上均匀采样。所有结果都是使用温度为0和其他超参数的默认设置一次性采样得到的。有关任务细节,请参见第A.2节。
3 将算法作为技能进行教学
3.1 两数加法
我们通过研究两数相加的任务开始我们的分析,并探讨了不同模糊程度的各种提示策略的有效性。加法问题形式为 a + b = c,其中 a、b 和 c 都是正整数。
我们为加法提供了一个算法提示,并将其性能与少量样本、链式思考、仅指示和草稿纸方法进行了比较。这些提示策略在加法中的示例展示在图10中,具体的提示可以在第B.1节找到。对于所有加法实验,我们使用了3个提示示例,并将这些示例的答案长度限制在最多5位数字。然后我们在答案长度达到19位数字的问题上进行评估。选择19这个长度是因为在这个水平之后,模型开始出现上下文不足的情况。对于第3节中考虑的所有算法,都使用了类似的选择。
图2(a)展示了算法提示与现有方法在加法问题上的性能。这些结果表明,算法提示在加法上实现了近乎完美的性能和OOD泛化,而少量样本、链式思考和仅指示方法随着答案长度的增加性能逐渐下降。这些结果说明了在我们的提示中结合算法步骤、明确解释和运行示例演示的好处。在第A.3节中,我们对算法提示进行了详细的错误分析。我们观察到,大多数错误发生在算法的早期步骤中,此时还有更多的数字需要处理,而不是在后期步骤中,模型需要扩展到更长的长度。
明确解释的影响:图2(b)比较了使用草稿纸和详细草稿纸作为提示的性能。在详细草稿纸中,我们增加了更多的中间步骤来说明答案值(A)和进位值(C)是如何得出的(见图10)。我们进一步包括了一个额外的版本,将数字从空格分隔转换为逗号分隔,因为我们观察到逗号对于Codex来说是一个更有效的分隔符。我们发现,草稿纸模板作为提示的表现极其糟糕,但包括额外的细节可以显著提高性能。我们推测,草稿纸作为少量样本提示的糟糕表现是由于解决方案格式的结构足够规范,使得模型偏离其记忆的解决方案,但又不足以让模型提取真正的潜在规则并将其适应到新的示例。
我们还比较了算法提示与两个较少详细信息的变体。一个版本(非显式计算)省略了显示进位值如何得出的显式方程。这与原始的激励示例具有相同的直觉。第二个版本(非常见操作)要求模型为给定的步骤索引正确的数字。在变量位置上索引数字比每次都在相同位置上索引数字是一种更不常见的操作。在我们的最终加法提示中,我们引入了一个机制,允许模型通过将未处理的数字复制到每个步骤并始终取最后一个数字来避免索引操作。图3(a)展示了来自这两个算法方面歧义的相对增益。用于歧义消融研究的提示可以在第B.2节找到。在第A.3节中,我们研究了自然语言在算法提示中的作用,并发现包括自然语言描述比仅使用中间计算能带来明显的性能提升。
模型是否真的通过上下文学习来学习算法?Min等人(2022年)已经表明,在少量样本提示中提供正确的问题-答案配对并不是必要的,这表明模型并不依赖演示本身来找出解决给定任务的正确方法。然而,为了声称我们是在上下文中教授算法,我们希望了解模型是否真的按照提示中规定的算法进行操作。为此,我们验证了1)中间输出步骤中的错误会导致最终答案的错误,以及2)提示中的错误会显著影响性能。
我们首先查看模型犯的错误。我们发现,对于每个最终答案正确的加法问题,所有中间步骤也都是正确的。接下来,我们分析了在提示中引入算法步骤错误时模型的性能。我们在计算步骤的第二位数字(digit1 + digit2 + carry = answer)中引入错误,并保持其他元素与之前相同。我们考虑两种类型的错误:不规则错误,其中只有部分步骤包含错误,以及系统性错误,其中提示中呈现的所有步骤都包含错误。在不规则错误(提示在第B.2.3节展示)的情况下,模型仍然有机会根据未改变的步骤推断出正确的规则。在系统性错误(提示在第B.2.4节展示)的情况下,如果模型真的是从上下文中学习,而不是简单地映射到输出格式并用其预训练中学到的内容覆盖各个步骤,那么模型不应该推导出正确的规则。图3(b)显示,在不规则错误的情况下,性能略有下降,而在系统性错误的情况下,准确率几乎降至0%,从而确认了一个真正在上下文中学习的模型的行为符合预期。这与提供混乱目标(Min等人,2022年)或链式思考中错误模式(Madaan和Yazdanbakhsh,2022年)的研究发现不同,后者并没有实质性地影响模型的性能。因此,算法提示与其他方法不同,它限制了模型的行为,使其符合实际上在上下文中教授的内容。
3.2 使用算法提示进行其他算法的教学
为了验证算法提示的性能并不仅限于两数相加,我们在其他三个算法上评估了模型的性能:减法、乘法和奇偶性判断。与加法类似,本节中评估的最大长度是基于算法提示能够适应上下文的长度。
减法:我们遵循与加法相似的策略。我们在第4节中更详细地讨论了减法算法的特异之处,其中我们结合了加法和减法问题。长度为14的性能总结在表2中。我们看到算法提示显著优于少量样本基线。
乘法:对于乘法,我们考虑形式为 a × b = c 的问题。如果我们使用类似于加法算法的策略,后者需要 O(n) 步骤,那么乘法需要 O(n^2) 步骤。受到这个复杂性的启发,我们探索是否可以利用模型的现有零样本或少量样本能力与算法提示结合使用,以减少所需指令的复杂性。因此,我们不是在每一步中使用单数字乘法,而是直接计算 1位数 × n位数的数字。对于两个 n位数,我们现在只需要执行 n 步的 1 × n位数乘法,而不是 n^2 次单数字计算。为了为这个实验选择一个合理的 n 值,我们评估了模型在 1 × n位数乘法中的零样本准确率(如图13所示)。我们看到,在 n > 3 之后,零样本性能急剧下降。因此,我们限制 n ≤ 3。如果一个数字超过 3 位,我们将它分解成 ≤ 3 位的组,并适当地添加结果子组件。为了简单起见,我们考虑至少 a 和 b 中有一个小于 1000 的问题,这样我们只需要对两个数字中的一个执行分组拆分。更多细节可以在第A.4节找到。长度为7的性能显示在表2中,不同长度的性能显示在图4中。我们看到,乘法算法提示与其少量样本和链式思考对应项相比表现良好,从而展示了在更结构化的算法指令框架内利用模型固有能力的潜力。
奇偶性判断:我们考虑计算给定二进制列表奇偶性的问题。这个任务在 Anil 等人(2022年)中已经被广泛研究,尽管算法本身本质上很简单,但它远未得到解决。长度为20的性能显示在表2中。我们看到算法提示在此任务上的性能显著优于随机猜测,甚至超过了 Anil 等人(2022年)报告的少量样本性能。更多细节可以在图14和第A.4节找到。
4 技能积累
到目前为止,我们已经展示了通过上下文学习教授单一算法的能力。在本节中,我们研究了模型同时学习多个算法并在解决问题时选择适用算法的能力,我们称之为技能积累。为此,我们使用了加法-减法任务。我们将加法问题扩展为允许正数和负数。因此,问题现在有四种可能性:a + b, −a + b, −a − b, a − b。我们将形式为 a + b 的问题称为仅加法问题,其余称为仅减法问题。对于减法问题,两个数字的顺序很重要。例如,考虑 43 − 250 = −207 和 543 − 250 = 293。当我们从右向左处理数字时,答案取决于第一个数字的绝对值是否大于或小于第二个数字,而不仅仅是两个数字的值。因此,减法需要一个不同但相似的算法来处理加法。为了了解两个设置相对复杂性的大小,请注意我们使用的减法算法需要 2n 步骤,而加法算法只需要 n 步骤。
为了在这个任务上取得成功,模型需要展示在问题是加法或减法时遵循不同处理路径的能力。图5显示了组合加法-减法提示的性能,准确率按问题类型分解。我们看到模型能够根据单个问题有效地执行正确的算法。与仅加法问题相比,模型在减法问题上的准确率较低,反映了减法算法的复杂性增加。将仅加法问题的性能与第3.1节中的加法提示进行比较,我们发现尽管提示中存在额外的算法,但性能几乎没有变化。尽管如此,我们注意到这个任务的提示开发并不简单,最佳性能需要添加正负数字的所有组合。因此,扩展到更多算法可能需要更有效的策略。
为了进一步研究在减法的同时教授加法的效果,我们评估了两个仅减法的提示。第一个是从组合加法-减法提示中移除仅加法提示示例。在组合提示中,提供了6个示例,其中2个是仅加法示例。移除仅加法示例后,提示中剩下4个仅减法示例。第二个仅减法提示与原始组合提示的样本数量相匹配,但所有6个示例都仅包含减法示例。结果如图6(a)所示。我们看到仅使用4个仅减法提示示例(组合算法,仅减法示例)与组合算法提示相比,性能显著下降。然而,当我们能够匹配与组合提示相同的样本数量(6个)(仅减法算法)时,我们可以恢复原始性能。这证明了当同时学习具有相似性的算法时,存在协同效应和积极转移。作为对照实验,我们还观察到在图6(b)中,向仅加法提示添加更多样本并不会提高性能,这支持了使用组合提示的仅加法性能不会因同一提示中的其他算法而受损的结论。
6 把技能当作工具
在本节中,我们研究了模型在将给定算法作为解决更大数学推理问题步骤时的行为。这类问题(例如GSM8k基准测试(Cobbe等人,2021年))通常包含两个部分:1)非正式数学推理部分,需要模型根据问题中提供的信息得出正确的解决步骤以得出答案;2)在解决步骤中使用的算术运算的计算。先前的工作主要集中在改进非正式数学推理部分(Wei等人,2022b年;Wang等人,2022b年;Zelikman等人,2022年;Kojima等人,2022年),并选择通过使用外部计算器(Cobbe等人,2021年)或通过改进LLM本身的预训练(Lewkowycz等人,2022b年)来提高计算准确性。在本文中,我们研究了模型如何利用学到的算法来提高第二部分的质量,即在更广泛的推理过程中的算术运算。虽然在这种情况下可以使用外部计算器,但对于更抽象的技能,例如简化数学方程,这通常是不可能的。
数据集:我们考虑以下两个数学问题数据集:GSM8k和GSM8k-Hard。GSM8k(Cobbe等人,2021年)由高质量的数学推理问题组成,这些问题以自然语言问题呈现。图8显示了GSM8k中的一个示例问题及其答案对,以及链式思考的理由。为了研究在解决GSM8k问题时使用加法算法的能力,我们通过筛选解决方案仅包含加法步骤的GSM8k子集来简化任务。筛选过程产生了108个纯加法的GSM8k问题。为了进一步说明利用技能作为工具使用的潜力,我们创建了一个困难数据集,称为GSM8k-Hard,它由GSM8k纯加法子集中的50个示例组成。在这个数据集中,我们增加了问题中使用的数值,从而使任务对模型来说更加困难。答案中的数字位数从3位到12位不等,平均长度为7.2位。在原始的GSM8k仅加法子集中,数字位数从1位到5位不等,平均长度为2.4位。一个示例呈现在图9(b)中。
我们首先评估将算法提示嵌入链式思考中对性能的影响。然后我们展示了算法提示如何作为工具使用(Parisi等人,2022年),其中一个模型查询另一个源以获取特定类型的信息。
6.1 扩充非正式数学推理
在本节中,我们评估链式思考提示是否可以与加法运算的算法提示相结合。为此,我们使用单个提示来展示非正式数学推理技能和加法技能。具体来说,每当解决方案需要计算数字之和时,我们就在链式思考解决方案中嵌入加法算法。将算法提示增加到链式思考提示中存在两个挑战:1)由于链式思考示例中存在许多加法实例,这个提示将占用大量令牌;2)我们之前看到,在同一提示中结合类似的技能,如加法和减法,并没有导致任何干扰(有积极转移的证据),但由于非正式数学推理和算术操作是截然不同的技能,这种情况可能不再成立。
为了解决第一个挑战(冗长的提示),我们只在提示示例的子集中嵌入加法算法,并通过<ALGO>标志指示这些增强的示例,而其余示例使用<NONALGO>标志。这些标志允许我们控制模型是否应该使用算法进行加法运算,或者通过直接计算。因此,对于每个设置,我们通过将<ALGO>或<NONALGO>标志附加到测试问题来运行两个实验。关于这种方法的具体细节,请参见第A.7节。
对于第二个挑战(干扰),我们假设明确呈现解决方案的摘要可能有助于区分这两种技能(即非正式数学推理和算术操作)。因此,我们探索了一种链式思考的版本,其中答案以解决方案步骤的总体计划/摘要开始,然后再解释各个步骤。我们将这个版本称为“带计划”,而将没有摘要的基线版本称为“无计划”。实际的提示显示在第B.13节。
图9(a)展示了使用这种方法的结果。首先,我们通过比较链式思考基线(“无计划无算法”)和包含算法输出(“无计划带算法”)的加法问题,来评估在提示中包含算法输出的影响。我们发现,在<ALGO>实验中,在示例中包含算法输出显著干扰了模型的非正式数学推理能力,但<NONALGO>性能相对不变。这证明了这两种技能之间存在干扰。我们推测,这种情况发生在我们在同一上下文中混合高度不同的技能时。非正式数学推理部分依赖于模型的预训练知识,而算法部分则是规范化的,需要模型遵循特定的指令,这两种技能的不同性质和格式似乎干扰了它们的性能。接下来,我们评估在输出开始处有解决方案计划的影响。比较“带计划带算法”和“无计划带算法”的性能,我们看到解决方案计划缓解了<ALGO>实验中看到的一些干扰。尽管如此,性能仍然比没有算法输出的同一版本(“带计划无算法”)差很多。总之,我们确定了一个干扰现象,当在同一上下文中结合不同种类的技能时可能会发生,并发现使用提示中的标志可以是一种简单的引导模型注意力的方式,因为<NONALGO>实验并没有像<ALGO>实验那样遭受干扰。
6.2 算法提示作为工具使用
受上下文长度限制和我们已经识别出的干扰问题的启发,我们提出了一种通过不同提示加载的模型之间的对话式交互来缓解这些问题的方法。在这种方法中,我们利用一个模型进行非正式数学推理步骤,而另一个独立的模型进行算法加法计算。为了实现对话式交互,我们教会第一个模型输出特定的令牌,以指示何时应咨询另一个模型。参见图9(b)了解这些令牌是如何使用的示例。
然后,我们使用这些令牌提取加法问题,并将其发送到加载了加法算法提示的第二个模型,该模型执行加法算法并将答案返回给第一个模型。第一个模型然后可以继续回答的其余部分,而无需在其上下文中保留算法输出。Creswell和Shanahan(2022年)在推理问题中使用类似的多模型和多提示策略,以将选择从推理中分离出来。这种方法可以被视为一种工具使用(Parisi等人,2022年),其中一个模型查询另一个源以获取特定类型的信息。
GSM8k-Hard数据集上的性能显示在表3中。逻辑准确性指的是解决方案设置的准确性,而加法准确性指的是解决方案设置中计算步骤的正确性。我们看到,尽管从第一个模型的上下文中移除了算法输出,我们仍然观察到来自非正式自然语言解决方案步骤中使用特定令牌的干扰。尽管如此,利用算法工具使用的方法仍然实现了比没有算法提示的基线链式思考方法准确率高出两倍。最后,这个结果展示了基于对话的工具使用能够绕过上下文长度限制的能力,因为单个模型无法在其上下文中容纳所有输出。在第A.6节中,我们展示了利用这种基于对话的工具使用的可能性,从第5节的技能组合设置中,并演示了模型在更复杂的算法中调用先前学习的算法作为子程序的能力,同时解决上下文长度限制的问题。
7 结论与未来工作
受上下文学习作为LLMs中组合技能获取的一般机制的潜力启发,我们研究了通过上下文学习教授算法推理。我们识别并研究了实现这一目标的基本构建块,并调查了四种设置:将算法作为技能教授、技能积累、技能组合和使用技能作为工具。我们研究了现有方法的不足,并提出了算法提示来缓解这些问题,显示它在各种算法推理任务中显著提高了性能。
我们的工作表明,通过提供更全面的解决方案示例,可能将更长的上下文长度转换为更好的推理性能。这突出了利用长上下文(通过增加上下文长度或其他手段,如实现递归或外部记忆)并生成更有信息量的解释作为有前景的研究方向。
我们识别了工具使用应用中的干扰现象,并研究了不同的方法来减少其影响。关于干扰的观察表明,教授模型在解决特定问题时检索或选择性关注特定指令的能力是一个重要的未来方向。此外,鉴于社区正在努力增加LLMs的上下文长度,设计更具有挑战性的任务以针对引入的四种设置中的每一种,并研究当拥有极长的上下文长度时可以教授给LLMs哪些能力,这是非常有兴趣的。