介绍
语言建模(LM)旨在对词序列的生成可能性进行建模,从而预测未来(或缺失)标记的概率。近年来,语言模型已经彻底改变了自然语言处理(NLP)。现在众所周知,增加语言模型的规模(例如,训练计算,模型参数等)可以在一系列下游NLP任务上带来更好的性能和样本效率。论文“A survey of Large Language Models”[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]。也有研究表明,随着LLM的参数从1亿增加到1750亿,ICL的能力也在增长。研究表明,训练任务的设计是影响LLMS的ICL能力的重要因素。除了训练任务,最近的研究还探讨了ICL与训练前语料库之间的关系。研究表明,ICL的性能在很大程度上取决于预训练语料库的来源,而不是规模。
LLM如何在推理期间执行ICL ?
在论文《为什么GPT能够学习上下文?》[4]中,研究人员发现了Transformer注意力和梯度下降之间的双重形式,并进一步提出将ICL理解为隐式微调。他们在实际任务上比较了基于GPT的ICL和显式微调,并发现从多个角度来看,ICL的行为类似于微调。在这个框架下,ICL过程可以解释如下:通过前向计算,LLMs生成相对于示范的元梯度,并通过注意力机制隐式地进行梯度下降。
斯坦福大学研究[5]的另一个观点解释了“情境学习作为隐式贝叶斯推理”。作者提供了一个框架,在这个框架中,LM通过使用提示来“定位”它在预训练中学习到的相关概念来完成任务,从而进行上下文学习。理论上,我们可以将其视为基于提示条件的潜在概念的贝叶斯推理,这种能力来自于预训练数据中的结构(长期一致性)。
尽管有一些答案,但这项研究仍在不断发展,以更好地了解其机制和潜在原因。
情境学习方法
现在让我们来探讨一些流行的ICL方法。
1. 思维链(COT)
2. 自洽COT
3. 思想之树
思维链(COT)
可以观察到,标准提示技术(也称为一般输入-输出提示)在复杂的推理任务中表现不佳,例如算术推理、常识推理和符号推理。CoT是一种改进的提示策略,用于提高LLM在涉及推理的重要案例情况下的性能[6]。与ICL中简单地使用输入-输出对构造提示不同,CoT在提示中加入了中间推理步骤,这些步骤可以导致最终输出。从下面的例子可以看出。
上图显示了一个模型的例子,该模型产生了解决数学应用题的一系列思路,否则它就会出错。左边,在ICL中,模型提供数学推理问题的示例或演示以及直接答案。但是这个模型不能预测出正确的答案。
右边,在COT中,模型提供了一个中间步骤,以帮助得到给出的示例/演示的答案。我们可以看到,当模型现在被问及类似的推理问题时,它能够正确地预测答案,从而证明COT方法对此类用例的有效性。
如果您看到,COT或ICL通常会提供一些示例来演示用例,这称为few - shot(少量示例)。还有一篇论文[7]提出了一个有趣的提示“让我们一步一步地思考……”,没有任何示例来演示用例,这被称为Zero-short(没有示例)。
在Zero-shot CoT中,LLM首先由“Let 's think step by step”提示生成推理步骤,然后由“so, the answer is”提示导出最终答案。他们发现,当模型规模超过一定规模时,这种策略会大幅提高性能,但对于小规模模型则无效,表现出显著的突现能力模式。
上图:GPT-3的输入输出示例(a)标准Few-shot (ICL), (b) Few-shot- cot, (c)标准Zero-shot (ICL), (d) our (Zero-shot- cot)。
与Few-shot-CoT类似,Zero-shot-CoT有助于多步推理(蓝色文本),并在标准提示失败时得出正确答案。与Few-shot-CoT在每个任务中使用分步推理示例不同,Zero-Shot不需要任何示例,只是在所有任务(算术、符号、常识和其他逻辑推理任务)中使用相同的提示“让我们一步一步地思考”。
这项研究表明,LLM在回答每个问题之前,通过添加一个简单的提示“让我们一步一步地思考”(Let 's think step by step),这是不错的零概率推理者。
让我们看看下面发生了什么:
虽然Zero-shot-CoT在概念上很简单,但它使用两次提示来提取推理和答案,如下图所示。
该过程包括两个步骤:第一步“
推理提示提取”,从语言模型中提取完整的推理路径,然后使用第二步“
答案提示提取”,从推理文本中提取正确格式的答案。
第一个提示——推理提取
在这一步中,首先使用简单的模板“Q: [x]”将输入问题x修改为提示x。A: [T]”,其中[X]是X的输入槽,[T]是手工制作的触发句T的槽,该触发句T将提取思维链来回答问题X。例如,如果我们使用“Let ' s think step by step”作为触发句,那么提示符X '将是“Q: [X]”。A:让我们一步一步来考虑。”然后将提示文本x’输入语言模型并生成后续句子z。我们可以使用任何解码策略。
这类提示的其他一些例子:
1. 让我们从逻辑上思考这个问题。
2. 我们把这个问题分成几个步骤来解决。
3. 让我们像侦探一样一步一步地思考。
4. 在我们深入研究答案之前。
第二提示——答案提取
在第二步中,使用生成的句子z和提示的句子x '从语言模型中提取最终答案。具体来说,只需将三个元素连接起来,如“[X '] [Z] [A]”:[X ']表示第一个提示X ', [Z]表示第一步生成的句子Z, [A]表示提取答案的触发句子。此步骤的提示符是自增强的,因为提示符包含由同一语言模型生成的句子z。在实验中,根据答案格式使用略有不同的答案触发器。
例如,在多选题QA中使用“因此,在A到E之间,答案是”,在需要数字答案的数学问题中使用“因此,答案(阿拉伯数字)是”。
CoT何时适用于LLM?
它只对足够大的模型(例如,通常包含10B或更多参数)有积极的影响,而对小模型则没有。这种现象被称为大型语言模型的“涌现能力”。如果一种能力不存在于较小的模型中,但存在于较大的模型中,则被认为是突发性的[3]。
1. 主要有效地改进了需要逐步推理的任务,如算术推理、常识推理和符号推理。
2. 对于其他不依赖于复杂推理的任务,它的表现可能比标准差。有趣的是,似乎只有当标准提示产生较差的结果时,CoT提示带来的性能增益才会显著。
为什么LLM可以进行CoT推理?
人们普遍认为,这可以归因于对代码的训练,因为在代码上训练的模型显示出很强的推理能力。直观上,代码数据被算法逻辑和编程流程组织得很好,这可能有助于提高LLM的推理性能。然而,这一假设仍然缺乏公开报道的消融实验证据(有或没有对代码训练)。
CoT提示和标准提示之间的主要区别是在最终答案之前结合了推理路径。因此,一些研究者研究了不同成分在推理路径中的影响。具体来说,最近的一项研究确定了CoT提示的三个关键组成部分,即符号(例如,算术推理中的数字数量),模式(例如,算术推理中的方程)和文本(即不是符号或模式的其余标记)。结果表明,后两部分(即模式和文本)对模型性能至关重要,删除其中任何一部分都会导致显著的性能下降。
自洽COT
在COT中,[9]没有使用贪心解码策略,而是提出了另一种称为自一致性的解码策略来取代思维链提示中使用的贪心解码策略,从而进一步显著提高了语言模型的推理性能。自洽利用了一种直觉,即复杂的推理任务通常承认有多种推理路径可以得到正确答案。问题越需要深思熟虑的思考和分析,就越需要多种多样的推理路径来找到答案。
首先,用思维链提示对语言模型进行提示,然后提出“抽样-边缘”解码程序,而不是贪婪地解码最优推理路径。
下图通过一个例子说明了自一致性方法。
首先从语言模型的解码器中抽取样本,生成一组不同的推理路径;每个推理路径可能导致不同的最终答案,因此通过边缘化抽样推理路径来确定最优答案,以在最终答案集中找到最一致的答案。或者换句话说,从模型的解码器中,通过对答案进行多数投票,我们得到最终答案集中最“一致”的答案。
这种方法类似于人类的经验,如果多种不同的思维方式导致相同的答案,人们更有信心确定答案是正确的。与其他解码方法相比,自一致性避免了贪婪解码的重复性和局部最优性,同时减轻了单采样生成的随机性。
广泛的实证评估表明,自一致性在一系列流行的算术和常识性推理基准上提高了思维链提示的性能,包括GSM8K(+17.9%)、SVAMP(+11.0%)、AQuA(+12.2%)、StrategyQA(+6.4%)和ARC-challenge(+3.9%)。
自一致性的一个限制是它会产生更多的计算成本。在实践中,人们可以尝试少量的路径(例如,5或10)作为起点,在不产生太多成本的情况下实现大部分收益,因为在大多数情况下,性能很快就会饱和。
思想之树
[10]提出了“思想树”(ToT),它概括了“思想链”方法来提示语言模型,并允许探索文本的连贯单位(“思想”),作为解决问题的中间步骤。ToT允许LM通过考虑多种不同的推理路径和自我评估选择来执行深思熟虑的决策,以决定下一步的行动方针,以及在必要时向前看或后退以做出全局选择。结果/实验表明,ToT显著提高了语言模型在三个需要非琐碎计划或搜索的新任务上的解决问题能力:24小时游戏、创意写作和迷你填字游戏。
思想树(ToT)允许LM在思想上探索多种推理路径(上图)。ToT将任何问题都视为在树上的搜索,其中每个节点都是一个状态s = [x, z1···i],表示输入x和迄今为止思想序列zi的部分解。ToT做4件事:思想分解、思想生成器、状态评估器和搜索算法。
1. 思想分解:将中间过程分解为思想步骤:
虽然CoT在没有明确分解的情况下连贯地采样思想,但ToT利用问题属性来设计和分解中间的思想步骤。如下表所示,根据不同的问题,一个想法可以是几个单词(填字游戏),一行方程(24小时游戏),或一整段写作计划(创意写作)。这就像你如何把问题分成几个任务。每个任务都是我们讨论的一个步骤。注意,这部分只是把问题分解成任务。这就像计划,我们实际上在这部分没有做任何思考。
2. 思想生成:在我们为思想分解的每个步骤定义了任务之后。我们现在实际上产生了这些想法。我们尝试生成k个想法作为给定步骤Zn的候选。产生想法的方法有两种:抽样和提议。
a. 从CoT提示中取样iid想法。我们独立地重复生成过程k次。当思想空间丰富时(例如,每个思想都是一个段落),iid样本会导致多样性,这种方法会更有效。
在上图中,在一个随机选择的创意写作任务中故意搜索的步骤。给定输入,LM对5个不同的计划进行抽样,然后投票5次以决定哪个计划是最好的。因此,多数选择用于使用相同的抽样投票过程编写输出通道。
b. 按顺序使用“建议提示”提出想法。当思维空间受限时(例如,每个想法只有一个词或一行字),这种方法效果更好,所以在相同的语境中提出不同的想法可以避免重复。在这种情况下,我们在一次推理中产生k个想法。所以,这k个想法可能不是独立的。
3.评估状态:在这一部分中,我们定义了一个状态评估函数v(s)。为了扩展树,我们使用这个函数来找到好的路径,就像在象棋编程中一样。我们计算给定树的路径s=[x, z1…i]。有两种方法来定义评价函数:
独立地评估每个状态:每个状态(或路径)将被独立地评估。[例子:24人游戏]
跨州投票:每个州的' s '将根据所有州s的集合进行评估,就像你在自洽COT中比较s中的各州一样。[示例:创意写作任务]
24人游戏示例:
游戏24是一个数学推理挑战,其目标是使用4个数字和基本的算术运算(+-*/)来获得24。例如,给定输入“4 9 10 13”,解输出可能是“(10 - 4)*(13 - 9)= 24”。
为了将“Game of 24”构建为ToT,我们将想法分解为3个步骤,每个步骤都是一个中间方程。如上图(a)所示,在每个树节点上,我们确定“左”数,并提示LM提出一些可能的下一步步骤。同样的“建议提示”用于所有3个思考步骤,尽管它只有一个包含4个输入数字的示例。我们在ToT中执行广度优先搜索(BFS),在每一步中我们保留最好的b = 5个候选者。为了在ToT中执行深思熟虑的BFS,如图(b)所示,我们提示LM评估每个思想候选人达到24的“肯定/可能/不可能”。其目的是促进可以在几次前瞻性试验中确定的正确的部分解决方案,并消除基于“太大/太小”常识的不可能的部分解决方案,并保留其余的“可能”。我们对每个想法采样3次。
4. 搜索算法:我们尝试展开树。对于每个叶节点,我们用状态评估函数对其进行评估。为了选择要评估的叶节点,我们使用搜索算法。它可以是广度优先搜索,也可以是深度优先搜索。我们可以根据树的结构插入和播放不同的搜索算法。
从概念上讲,ToT作为LM的一般问题解决方法有几个好处:
1. 通用性:IO、CoT、CoT-SC和自细化可以看作是ToT的特殊情况(即深度和宽度有限的树)
2. 模块化:基本LM以及思想分解、生成、评估和搜索过程都可以独立变化。
3. 适应性:可以适应不同的问题属性、LM功能和资源约束。
4. 方便:不需要额外的训练,只需要一个预训练的LM就足够了。
ToT框架使LM能够更加自主和智能地做出决策和解决问题。
局限性:为了提高任务性能,ToT比采样方法需要更多的资源(例如模型API成本),但是ToT的模块化灵活性允许用户自定义这种性能成本权衡,并且正在进行的开源工作应该在不久的将来很容易降低这种成本。
自动提示技术
提示工程是一门经验科学,提示工程方法的效果在不同的模型中可能会有很大的差异,因此需要大量的实验和启发式。我们能自动化这个快速工程的过程吗?这是一个活跃的研究领域,下面的部分讨论了自动提示设计方法的一些尝试。
自动提示增强和选择COT
在题为“基于标签数据的思维链的自动提示增强与选择”的论文中[11]。大多数CoT研究依赖于精心设计的人类注释的理性链来提示语言模型,这对现实世界的应用提出了挑战,在现实世界中,没有人类注释的理性链就可以获得标记的训练数据。为了自动构建思维链提示,建议采用“扩增-修剪-选择”的三步流程:
1. 增强:使用少样本或零样本的CoT提示生成给定问题的多个伪思维链;
2. 修剪:根据生成的答案是否符合基本事实来修剪伪链。
3. 选择:应用方差减少策略梯度策略学习所选样本的概率分布,同时将样本的概率分布作为策略,将验证集的准确性作为奖励。
Auto-CoT:自动思维链提示
在“大型语言模型中的自动思维链提示”[12]中,提出了Auto-CoT范式来自动构建带有问题和推理链的演示。在该技术中,作者采用聚类技术对问题进行抽样,然后生成链。他们观察到LLM倾向于犯某些类型的错误。一种类型的错误可能在嵌入空间中相似,因此被分组在一起。通过只从经常出错的集群中抽取一个或几个样本,我们可以防止对一种错误类型进行过多的错误演示,并收集不同的示例集。
Auto-CoT包括以下几个主要阶段:
1. 问题聚类:对给定的一组问题Q执行聚类分析。首先,通过Sentence-BERT为Q中的每个问题计算一个向量表示。对上下文化向量进行平均,形成固定大小的问题表示。然后,通过k-means聚类算法对问题表示进行处理,生成k个问题聚类。
2. 示范选择:从每个聚类中选择一组具有代表性的问题:即一个集群的一个演示。每个聚类中的样本根据到聚类质心的距离进行排序,离质心较近的样本被优先选择。
3. 基本原理生成:使用零样本CoT对选定的问题生成推理链,构建少样本提示进行推理。
LLM在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] Thought Chain Prompting引发大型语言模型的推理, 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] 自洽性改善大型语言模型的链式推理, 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/
来源:https://towardsdatascience.com/in-context-learning-approaches-in-large-language-models-9c0c53b116a1