Press "Enter" to skip to content

大型语言模型中的上下文学习方法

简单而强大的技术,使LLMs能够在推理时学习新任务

介绍

语言建模(LM)旨在对单词序列的生成可能性进行建模,以预测未来(或缺失)标记的概率。近年来,语言模型在自然语言处理(NLP)领域取得了革命性的进展。众所周知,增加语言模型的规模(如训练计算、模型参数等)可以提高各种下游NLP任务的性能和样本效率。调查论文《大型语言模型调查》[1]涵盖了大型语言模型几乎每个方面的内容。该论文对LLMs的文献进行了最新的综述,详细介绍了类似预训练方法的训练机制以及指令调整技术和最新的RLHF方法进行的进一步对齐训练。指令调整和对齐调整的方法可用于根据特定目标调整LLMs。

在预训练或适应调整之后,使用LLMs的主要方法是设计适合解决各种任务的提示策略。一种典型的提示方法,也称为上下文学习(ICL),以自然语言文本的形式构建任务描述和/或演示(示例)。

上下文学习

LLMs展示了上下文学习(ICL)的能力,即从上下文中学习。许多研究表明,LLMs可以通过ICL执行一系列复杂的任务,例如解决数学推理问题。

上下文学习的关键思想是通过类比进行学习。下图是一个例子,描述了语言模型如何通过ICL进行决策。首先,ICL需要一些示例来形成演示上下文。这些示例通常以自然语言模板的形式编写。然后,ICL将查询问题和一段演示上下文连接在一起,形成提示,然后将其输入语言模型进行预测[2]。

上下文学习示例

与需要使用反向梯度更新模型参数的监督学习不同,ICL不进行参数更新,而是直接在预训练的语言模型上进行预测。期望模型能够从演示中学习到隐藏的模式,并作出正确的预测。

是什么使ICL如此有吸引力?

  1. 以自然语言编写的示例提供了一种可解释的界面,可用于与LLMs进行交流。这种范式通过更改示例和模板,使将人类知识纳入LLMs变得更加容易。
  2. 它类似于人类的决策过程,通过类比进行学习。
  3. 与监督训练相比,ICL是一个无需训练的学习框架。这不仅极大地减少了将模型调整到新任务所需的计算成本,还使得语言模型作为服务成为可能,并且可以轻松应用于大规模的实际任务。

但是这是如何工作的?

在预训练之后,LLMs可以展示出令人着迷的ICL能力(新兴能力),而无需更新[3]。虽然直观上合理,但ICL的工作机制仍不清楚,很少有研究对这两个问题提供了初步解释。

预训练如何影响ICL能力?

研究人员建议,当预训练模型达到大规模预训练步骤或模型参数时,预训练模型将获得一些新兴的ICL能力[3]。一些研究还表明,随着LLMs的参数从10亿增加到1750亿,ICL能力也在增长。研究表明,训练任务的设计是影响LLMs的ICL能力的重要因素。除了训练任务外,最近的研究还调查了ICL与预训练语料库之间的关系。研究表明,ICL的性能在很大程度上取决于预训练语料库的来源,而不是规模。

LLMs在推理过程中如何执行ICL?

在论文《为什么GPT能够学习上下文?》[4]中,研究人员找到了Transformer注意力和梯度下降之间的双重形式,并进一步提出了将ICL理解为隐式微调的方法。他们将基于GPT的ICL与实际任务上的显式微调进行了比较,并发现从多个角度来看,ICL的行为与微调类似。在这个框架下,ICL过程可以解释如下:通过正向计算,LLMs生成与演示相关的元梯度,并通过注意机制隐式执行梯度下降。

斯坦福研究 [5] 从另一个角度解释了“上下文学习作为隐式贝叶斯推理”。作者提供了一个框架,其中语言模型通过使用提示来“定位”它在预训练期间学习到的相关概念来进行上下文学习以完成任务。从理论上讲,我们可以将这视为在提示条件下潜在概念的贝叶斯推理,而这种能力来自预训练数据中的结构(长期的一致性)。

尽管已经有一些答案,但这项研究仍在不断发展,以更好地理解其机制和根本原因。

上下文学习方法

现在让我们探索一些流行的上下文学习方法。

  • 思维链(COT)
  • 自洽思维链
  • 思维树

思维链(COT)

观察到标准提示技术(也称为一般输入输出提示)在复杂的推理任务(如算术推理、常识推理和符号推理)上表现不佳。COT是一种改进的提示策略,可以提高语言模型在涉及推理的非平凡情况下的性能 [6]。与上下文学习中的输入输出对一样,COT将可以导致最终输出的中间推理步骤融入到提示中。如下面的示例所示。

Reference[6]

上图显示了一个模型生成用于解决数学问题的思维链的示例,否则它将得到错误的答案。在左侧的上下文学习中,模型提供了数学推理问题的示例或演示以及直接答案。但是模型无法预测出正确答案。

在右侧的COT中,模型在提示中提供了一个中间步骤,以帮助得出给定示例/演示的答案。我们可以看到,当模型现在被问到一个类似的推理问题时,它能够正确预测答案,从而证明了COT方法在这种用例中的有效性。

如果你注意到,COT或上下文学习通常提供一些示例来演示用例,这称为“少样本(少示例)”。还有一篇论文 [7] 提出了有趣的提示“让我们逐步思考..”来演示用例,而不需要任何示例,这称为“零样本(无示例)”。

在“零样本COT”中,首先通过提示“让我们逐步思考”来激发LLM生成推理步骤,然后通过提示“因此,答案是”来得出最终答案。研究发现,这种策略在模型规模超过一定大小时显著提升性能,但对于小规模模型来说并不有效,显示出一种显著的新兴能力模式。

Reference[7]

上图:GPT-3的示例输入和输出,包括(a)标准少样本(上下文学习),(b)少样本COT,(c)标准零样本(上下文学习)和(d)我们的零样本COT。

与少样本COT类似,零样本COT促进了多步推理(蓝色文本)并达到正确答案,而标准提示则失败。与少样本COT不同,零样本不需要任何示例,只需在所有任务(算术、符号、常识和其他逻辑推理任务)中使用相同的提示“让我们逐步思考”。

这项研究表明,通过添加一个简单的提示“让我们逐步思考”,LLM在零样本推理方面表现不错,可以在回答每个问题之前促进逐步思考。

让我们看看底层发生了什么:

虽然零样本COT在概念上很简单,但它使用两次提示来提取推理和答案,如下图所示。

Reference[7]

该过程涉及两个步骤:首先进行“推理提示提取”,从语言模型中提取出完整的推理路径,然后使用第二个“答案提示提取”从推理文本中以正确的格式提取出答案。

第一个提示 – 推理提取

在这一步骤中,首先使用一个简单的模板将输入问题x修改为提示x’,模板为“Q:[X]。A:[T]”,其中[X]是x的输入槽,[T]是一个手工制作的触发句子t的槽,该句子可以提取出回答问题x的思路。例如,如果我们使用“让我们逐步思考”作为触发句子,提示x’将是“Q:[X]。A:让我们逐步思考。”然后将提示文本x’输入到语言模型中,并生成后续句子z。我们可以使用任何解码策略。

以下是一些其他示例提示:

让我们从逻辑上思考一下。

让我们将这个问题分解成几个步骤来解决。

让我们像侦探一样逐步思考。

在我们深入回答之前。

第二个提示 – 答案提取

在第二步中,使用生成的句子z以及提示句子x’从语言模型中提取最终答案。具体来说,将三个元素简单连接起来,格式为“[X’] [Z] [A]”:[X’],其中[X’]是第一个提示x’,[Z]是第一步生成的句子z,[A]是一个触发句子,用于提取答案。由于提示包含了相同语言模型生成的句子z,因此这一步的提示是自我增强的。在实验中,作者根据答案的格式使用略有不同的答案触发句子。

例如,在多项选择问答中使用“因此,在A到E中,答案是”,在需要数值答案的数学问题中使用“因此,答案(阿拉伯数字)是”。

[11]这篇论文提出了一些有趣的想法,例如各种提示的性能等,请阅读以获取更多细节。

何时CoT适用于LLMs?

它只对足够大的模型产生积极影响(例如,通常包含10亿个或更多参数的模型),而对小型模型没有影响。这种现象被称为大型语言模型的“紧急能力”。如果某个能力不在较小的模型中存在,但在较大的模型中存在,则认为该能力是紧急的[3]。

  • 它主要有效地改进那些需要逐步推理的任务,如算术推理、常识推理和符号推理。
  • 对于不依赖于复杂推理的其他任务,它可能表现出比标准提示更差的性能。有趣的是,似乎只有在标准提示产生较差结果时,CoT提示才能带来显著的性能提升。

为什么LLMs能进行CoT推理?

  • 普遍的假设是这可以归因于对代码的训练,因为在训练过程中,模型表现出强大的推理能力。直观地说,代码数据具有良好的组织结构,有着算法逻辑和编程流程,这可能有助于提高LLMs的推理性能。然而,这个假设仍缺乏公开报道的有关消融实验(有与无代码训练)的证据。
  • CoT提示和标准提示之间的主要区别是在最终答案之前加入了推理路径。因此,一些研究人员研究了推理路径中不同组成部分的影响。具体而言,最近的一项研究确定了CoT提示中的三个关键组成部分,即符号(例如算术推理中的数值数量)、模式(例如算术推理中的方程式)和文本(即不是符号或模式的其余标记)。结果显示,后两部分(即模式和文本)对模型性能至关重要,删除其中任何一个都会导致显著的性能下降。

总之,这是一个活跃的研究领域。要深入讨论,请阅读[2]。还有一项有趣的研究[8]讨论了变压器模型中的上下文学习的可能原因。

自洽性COT

作者在[9]中提出了一种称为自洽性的解码策略,用于取代COT中的贪婪解码策略,进一步显著提高语言模型的推理性能。自洽性利用了复杂推理任务通常允许多个推理路径达到正确答案的直觉。对于需要深思熟虑的问题,需要进行更多的思考和分析,推理路径的多样性也就越大。

首先,使用链式思维提示对语言模型进行提示,然后作者提出了“采样和边缘化”解码过程,而不是贪婪地解码最优推理路径。

下图以一个例子说明了自洽性方法。

参考文献[9]

首先从语言模型的解码器中采样,生成一组多样化的推理路径;每个推理路径可能会导致一个不同的最终答案,因此通过边缘化采样的推理路径,找到最一致的答案来确定最优答案。换句话说,通过对答案进行多数投票,从模型的解码器中得出在最终答案集中最“一致”的答案。

多数投票示例

这种方法类似于人类的经验,即如果多种不同的思考方式导致相同的答案,那么人们对最终答案的正确性更有信心。与其他解码方法相比,自洽性避免了贪婪解码的重复性和局部最优性问题,同时减轻了单次采样生成的随机性。

广泛的实证评估表明,自洽性显著提升了链式思维提示在一系列流行的算术和常识推理基准上的性能,包括GSM8K(+17.9%),SVAMP(+11.0%),AQuA(+12.2%),StrategyQA(+6.4%)和ARC-challenge(+3.9%)。

自洽性的一个限制是它增加了更多的计算成本。在实践中,人们可以尝试使用少量的路径(例如5个或10个)作为起点,实现大部分收益,同时不会增加太多成本,因为在大多数情况下,性能会很快饱和。

思维树

作者在[10]中提出了一种称为“思维树”(ToT)的方法,它将提示语言模型的“链式思维”方法泛化,并能够探索作为解决问题的中间步骤的连贯文本单元(“思维”)。ToT允许语言模型通过考虑多种不同的推理路径和自我评估选择来进行深思熟虑的决策,并在必要时向前或向后跟踪以进行全局选择。结果/实验表明,ToT在需要复杂规划或搜索的三个新颖任务(24点游戏,创意写作和迷你填字游戏)上显著增强了语言模型的问题解决能力。

示意图说明各种提示方法,每个矩形框代表一个思维

思维树(ToT)允许语言模型在思维上探索多个推理路径(上图)。ToT将任何问题框架化为对树的搜索,其中每个节点是表示具有输入x和迄今为止的思维序列zi的部分解决方案的状态s = [x, z1···i]。ToT执行4个任务:思维分解、思维生成器、状态评估器和搜索算法

1. 思维分解:将中间过程分解为思维步骤:

CoT在没有明确分解的情况下,连贯地采样思考,而ToT利用问题属性来设计和分解中间思考步骤。如表1所示,根据不同的问题,一个思考可以是几个单词(纵横填字谜),一个方程式(24点游戏),或者是一个完整的写作计划段落(创意写作)。就像你把问题分成几个任务一样。每个任务都是我们讨论的步骤Zn。请注意,这部分只是将问题分解为任务的过程。就像计划一样,我们在这部分实际上不做任何思考。

参考文献[10]

2. 思考生成:所以在我们为思考分解的每个步骤定义任务之后,我们现在实际上要生成这些思考。我们尝试生成k个思考作为给定步骤Zn的候选项。有两种生成思考的方法:采样和提议。

a. 从CoT提示中对思考进行i.i.d.采样。我们独立地重复生成过程k次。当思考空间丰富时(例如每个思考都是一段话),通过i.i.d.采样可以获得多样性。

随机选择的创意写作任务中的有意搜索步骤。

在上图中,随机选择的创意写作任务中的有意搜索步骤。给定输入,语言模型(LM)生成5个不同的计划,然后进行5次投票以决定哪个计划最好。多数选择用来随后使用相同的样本-投票过程写出输出段落。

b. 使用“提议提示”逐个提出思考。当思考空间更受限制时(例如每个思考只是一个单词或一行),在相同的上下文中提出不同的思考可以避免重复。在这种情况下,我们一次推断生成k个思考。因此,这些k个思考可能不是独立的。

3. 评估状态:在这部分中,我们定义了一个状态评估函数:v(s)。为了扩展树,我们使用这个函数来找出好的路径,就像在国际象棋编程中一样。我们评估给定树的路径s=[x, z1…i]。有两种定义评估函数的方法:

  • 独立地评估每个状态:每个状态’s’(或路径)将被独立评估。[示例:24点游戏]
  • 跨状态进行投票:给定所有状态S的集合,评估每个状态’s’。就像在自洽性CoT中将S中的状态相互比较一样。[示例:创意写作任务]

示例:24点游戏

24点游戏是一个数学推理挑战,目标是使用4个数字和基本算术运算(+-*/)获取24。例如,给定输入“4 9 10 13”,一个解决方案的输出可能是“(10–4) * (13–9) = 24”。

‘24点游戏’ ToT分解。语言模型被提示进行(a)思考生成和(b)评估。

为了将“24点游戏”转化为ToT,我们将思考分解为3个步骤,每个步骤都是一个中间方程式。如上图(a)所示,在每个树节点上,我们提取“left”数字并提示LM提出一些可能的下一步。相同的“提议提示”用于所有3个思考步骤,尽管它只有一个具有4个输入数字的示例。在ToT中,我们进行广度优先搜索(BFS),在每个步骤中保留最佳的b = 5个候选项。如图(b)所示,在ToT中进行有意的BFS,我们提示LM评估每个思考候选项,以确定其对于达到24的可能性,评估结果为“sure/maybe/impossible”。目的是促进可以在少数向前试验中得出结论的正确部分解,根据“太大/太小”的常识消除不可能的部分解,并保留其余的“maybe”。每个思考采样3次。

4. 搜索算法:我们尝试扩展树。对于每个叶子节点,我们使用状态评估函数对其进行评估。为了选择要评估的叶子节点,我们使用搜索算法。可以根据树的结构选择不同的搜索算法,如广度优先搜索和深度优先搜索。

从概念上讲,ToT 作为一种使用语言模型进行通用问题求解的方法具有以下几个优点:

  • 通用性:IO、CoT、CoT-SC 和自我改进可以看作是 ToT 的特殊情况(即有限深度和广度的树)
  • 模块化:基础语言模型以及思考分解、生成、评估和搜索过程都可以独立变化。
  • 适应性:可以适应不同的问题属性、语言模型能力和资源限制。
  • 方便性:无需额外的训练,只需一个预训练的语言模型就足够了。

ToT 框架使语言模型能够更自主、更智能地做出决策和解决问题。

局限性:为了提高任务性能,ToT 需要更多的资源(例如模型 API 成本)比抽样方法,但是 ToT 的模块化灵活性使用户可以自定义性能成本权衡,并且正在进行的开源工作将在不久的将来大大降低这些成本。

自动提示技术

提示工程是一门经验科学,提示工程方法的效果在不同模型之间可能会有很大的差异,因此需要大量的实验和启发式方法。我们能否自动化提示工程的过程?这是一个活跃的研究领域,下面的部分将讨论一些自动提示设计方法的尝试。

自动提示增强和选择 COT

在题为“使用标记数据的思维链自动提示增强和选择”[11]的论文中,大多数 CoT 研究依赖于精心设计的人工注释的合理链路来提示语言模型,这对于带有标记训练数据但没有人工注释的合理链路的实际应用提出了挑战。为了自动构建思维链提示,作者建议采用增强-修剪-选择的三步过程:

  1. 增强:使用少样本或零样本的 CoT 提示生成多个伪思维链;
  2. 修剪:根据生成的答案是否与真实答案匹配来修剪伪链。
  3. 选择:应用方差减少的策略梯度方法,学习选择示例的概率分布,同时考虑示例的概率分布作为策略,以及验证集准确性作为奖励。

自动 CoT:自动思维链提示

在题为“大型语言模型中的自动思维链提示”[12]的论文中,作者提出了自动 CoT 范式,用于自动生成带有问题和推理链的演示。在这种技术中,作者采用聚类技术对问题进行抽样,然后生成链路。他们观察到语言模型往往会犯一些类型的错误。一种类型的错误可能在嵌入空间中相似,因此会被分组在一起。通过只从频繁错误簇中抽样一个或几个,我们可以防止出现太多关于某一类错误的错误演示,并收集到多样的示例。

自动 CoT:自动思维链提示

自动 CoT 包括以下主要阶段:

  1. 问题聚类:对给定的问题集合 Q 进行聚类分析。首先,使用 Sentence-BERT 为 Q 中的每个问题计算一个向量表示。上下文化的向量被平均以形成固定大小的问题表示。然后,通过 k-means 聚类算法处理问题表示,生成 k 个问题簇。
  2. 演示选择:从每个簇中选择一组代表性问题;即从一个簇中选择一个演示。每个簇中的样本按与簇中心的距离排序,距离较近的优先选择。
  3. 推理生成:使用零样本 CoT 为选定的问题生成推理链,并构建少样本提示以进行推理。

LLMs展示了与CoT提示相结合的推理能力。Manual-CoT的卓越性能依赖于手工设计的示范。为了消除这种手动设计,提出了Auto-CoT自动构建示范的方法。它通过多样性抽样问题并生成推理链来构建示范。在推理数据集上的实验结果显示,使用GPT-3,Auto-CoT始终能够与需要手动设计示范的CoT模式的性能相匹配或超越。

结论

上下文学习或提示有助于与LLM进行交流,以引导其行为以获得期望的结果。它是一种吸引人的信息提取方法,因为您不需要大量的离线训练集,也不需要离线访问模型,并且即使对非工程师来说,它也感觉直观。提示工程旨在利用提示作为构建实际应用可靠功能的方法。它是一门经验科学,提示工程方法的效果在模型之间可能会有很大的差异,因此需要进行大量的实验和启发式方法。提示需要人力投入来创建和适应新的数据集。注释过程并不简单,因为人们不仅需要选择问题,还需要仔细设计每个问题的推理步骤,因此有必要自动化提示技术。

参考文献

[1] 大型语言模型综述, https://arxiv.org/pdf/2303.18223.pdf

[2] 上下文学习综述, https://arxiv.org/pdf/2301.00234.pdf

[3] 大型语言模型的新兴能力, https://arxiv.org/pdf/2206.07682.pdf

[4] GPT为何能够学习上下文?语言模型隐式地执行梯度下降作为元优化器, https://arxiv.org/pdf/2212.10559.pdf

[5] 理解上下文学习的隐式贝叶斯推断解释, http://ai.stanford.edu/blog/understanding-incontext/

[6] Chain-of-Thought提示引发大型语言模型的推理, https://arxiv.org/pdf/2201.11903.pdf

[7] 大型语言模型是零样本推理器, https://arxiv.org/pdf/2205.11916.pdf

[8] 上下文学习和归纳头部。Transformer Circuits, 2022. https://transformer-circuits.pub/2022/in-context-learning-and-induction-heads/index.html .

[9] 自一致性改进LLM的思维链推理, https://arxiv.org/pdf/2203.11171.pdf

[10] 思维树, https://arxiv.org/pdf/2305.10601.pdf

[11] 从标记数据中使用链式思维进行自动提示增强和选择, https://arxiv.org/pdf/2302.12822.pdf

[12] 大型语言模型中的自动链式思维提示, https://arxiv.org/pdf/2210.03493.pdf

[13] 大型语言模型可以自我改进, https://www.arxiv-vanity.com/papers/2210.11610/

Leave a Reply

Your email address will not be published. Required fields are marked *