语境学习(in-context-learning)

(高级机器学习的作业,反正写了干脆搬过来)

 

4.1 引言

请考虑这样一句话“该公司预计其营业利润会有所改善。”

可以发现,这句话的情感是积极向上的。我们期待如果把这句话输入给大语言模型,它能够返回“积极(Positive)”这样的词汇。

然而,如果我们直接把这句话输入给大模型,可以预见的是,模型很难理解我们给出这句话的意图。它也许会表示赞同,也许会进行续写,也许会做出其他意料之外的回答。

那么我们如何让模型理解我们的意图,或者说任务需求呢?

一个直观的思路或许是预训练或者微调。我们只要在训练数据中加入足够多的对话情感识别数据,模型就有希望在遇见该公司预计其营业利润会有所改善。”这句话时返回“积极(Positive)”。

不过,训练的开销可能是无法承受的。训练需要获取足够多的数据,消耗一定的计算资源和时间。此外,如果换成另外一个任务——例如预测这句话所描述事实的类别——那么就需要重新训练了,这些开销都是难以接受的。

所以,单纯依赖预先的训练或者微调,无法涵盖所有的情形。对于这样需求频繁变化的、和语境(context)紧密相关的任务,模型是很难出色完成的。

既然某些问题需要依赖特定的语境,那么是否可以有这样一种方式,让模型通过上下文或语境判断此时应当做出的回复?这便是本章要介绍的语境学习(in-context Learning)

语境学习(in-context Learning)能让模型在推理过程中学习。通过简单的任务说明或少量的标签数据即可以灵活地处理不同的任务。

比如,当我们期待模型完成情感识别任务时,可以额外增添几个例子。能够让模型通过类比的方式把握任务内容。当我们期待模型完成语句分类任务时,同样可以使用其他的例子,让模型意识到需要输出语句对应的类别,而不是做出其他回复。

整个流程可以用下图表示

可以发现,对于同样的内容,通过不同的语境信息进行引导,模型便有可能通过语境内容进行学习,得出用户所期待的回复。

而这些例子只要和最后的“该公司预计其营业利润会有所改善”一并输入即可,无需额外的训练开销,对于频繁更改需求的场景,这显然是有巨大价值的。

 

除了语境学习之外,本章也会探讨大模型的预训练方法,并通过GLM-130B模型作为案例逐一解读大模型预训练的各个步骤。

 

4.2 语境学习的概念

实际上,引言中的例子里,我们已经把语境学习的相关过程已经涉及一二。

语境学习,实质上是一种通过类比进行学习的手段。使用时,只需要提供构造好的语境,模型便可以根据提供的语境学习得到任务目标以及任务意图。换言之,语境学习通过构造语境来辅助定义任务,以举例的方式让模型更好地完成特定的任务。

值得指出的是,语境学习的“学习”,与通常机器学习算法中的“学习”有些不同。通常意义下,机器学习中的“学习”需要经过数据训练,以反向传播等方式更新有关模型参数。而语境学习中的“学习”,并非要修改模型的参数,而是把“训练”要用的数据和待推理的问题合并作为输入,全部送入大模型中。

所以,语境学习是在推理过程中的学习并不需要额外的训练阶段,从宏观模型使用上来看,与直接做推理并无二至。语境学习与传统意义上需要训练参数的学习相同之处在于,均需要构建一定的数据。只是前者无需训练过程。

提及数据,还应当说明的是,在传统机器学习中,往往需要构建足够多的数据集(这甚至可能需要百万条),才能获得优秀的效果;而语境学习中,仅需要很少量数据(往往个位数),甚至无需数据,便可以较好的达到所期待的目标。

使用少量数据进行语境学习的方法称为“few-shot”,而无需数据直接推理的方法称为“zero-shot”. 关于语境学习中,few-shot与zero-shot为什么有效的话题,我们放在后面的章节进行讨论。

 

4.3 语境构建

4.3.1 输入模板

构建语境时,可以包含如下内容:

①任务描述(可选)

②举例(作为样例)

③提示词(问题描述)

一个可行的例子如下图:

4.3.2 样例选取

样例选取应当兼顾正确性,多样性,同时应当考虑输入-输出映射的影响,以及语境示例的偏置。

事实上,在这些因素中,保证样例-提示词数据分布一致性非常重要的因为这能模型指引正确标签空间更多的样例数据总体上能够带来收益这也并不绝对更多的样例数据也可能带来负面作用参考4.3.1实验分析而且更多的样例也对模型的上下文提取能力做出了更高的要求在这两点基础上如果样例能够提供正确的标签那么这将模型能力带来进一步提升

除了上述技巧外如何通过提示词设计模型的语境学习推理能力获得更好的提升思维链(Chain of thought)或许是一种可行的方法

4.3.3 样例设计与思维链

1.  思维链

朴素的few-shot方法需要强大推理能力任务上表现不尽如人意比如对于如下场景

提示词中是一道需要计算的数学题目样例中简单地提供另外一道数学题的答案可以想到的是这种样例模型语境学习能力提升十分有限的模型难以从样例中获取较多灵感提示词问题进行准确的回复

思维链的语境设计方式则是通过自然语言的形式对样例中的答案获得过程做出解释,或者说阐述为什么问题应当对应该答案

上述数学题为例样例答案环节增加计算过程模型解释为什么能够计算得到11这个答案实验结果来看,在语境中增加了思维链模型给出了正确的回复以及理由

总而言之思维链通过元数据”(即推理过程)做引导的方式,提升了语言模型处理更复杂问题能力

2.  思维链下的语境学习

在Few-shot方式下,使用思维链语境构建示例和输入输出流程由下图所示

输入若干条样例,其中的每一条包含问题理由推理过程答案三个部分最后输入咨询问题期待情况下模型给出推理过程以及相应答案

Zero-shot方式下可以通过在咨询的问题后添加一步一步作为引导激活模型的推理能力使用思维链语境构建示例和输入输出流程可由下图所示

实验验证表明了思维链方法的确可以激活模型推理能力很大程度上提升了模型在多步骤推理任务上表现

 

4.4 语境学习的理解

探究语境学习的效果受哪些因素影响。可能的因素包括:样例标签准确性,样例数据和训练数据的分布是否一致,样例数据的数量,输入语境格式等。

4.4.1.实验测试

Meta发表的文章Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? 对语境学习有效的原因做出了探讨,并通过大量的实验进行了探究。

实验发现,即使样例的标签是随机生成的,大模型仍然能有一定概率分类正确。相比于提供正确的标签,精度上仅有细微的下降。而不提供标签的情况下,模型回答精度则下降较为明显。这种现象在不同大小的模型上均有所体现。

此外,样例的数目也会影响模型回答的准确程度。可以看到,无论是分类任务还是多选任务,即使仅仅使用4各样例,仍然能够大幅度提升模型的回答准确度。此外,当k大于等于8时,样例数目增长带来的提升就不那么明显了。同时,通过比较标签是随机的还是完全正确的这两条折线,依然可以发现样例标签的准确性似乎对模型能力的影响不是很大。

所以可以初步得出如下的结论:语境学习主要获益于对标签空间的监控,或者说激活了预训练/微调时标签空间相关的参数。而至于其他方面,比如标签的正确性等,则较容易从训练时习得的数据中还原出来。

 

进一步地,为了探究样例数据分布和提示词中的问题分布是否一致对模型预测准确度的影响,该论文使用分布上不同的数据作为样例进行了测试。实验结果如下(这里ppt上的图错了,我从原文找了图)

比较图中红色与浅紫色的柱形可以发现,在同样使用随机标签的情况下,使用和提示词数据分布不同(Out-of-Distribution,OOD)的数据作为样例,会导致于精度的显著下降(除了MetaICL)。

 

随后,该文章探究了语境输入格式对回复精度的影响,从下图中可以看到,如果不保持规范的输入格式,整体上模型的表现会更差。

 

4.4.2 理论推导

进行理论推导首先让我们回顾语境学习微调方式关联性

通过对比可以发现微调实际上样例更新模型参数语境学习样例激活模型参数微调之所以成功是因为反向传播时的梯度下降方法恰当更新了模型的参数实际上,语境学习过程也可以类比梯度下降

文章Why can gpt learn in-context? language models implicitly perform gradient descent as meta-optimizers对此进行了阐述

语境学习中的注意力模块计算公式如下

其中X'为语境学习中输入的样例,X则为提示词中出现的问题。而q可以认为是当前阶段查询token.

忽略softmax函数以及标准化处理可以规约为下面的式子

Wzsl表示Zero-shot涉及权重,ΔWICL表示通过增添样例带来的权重变化

微调后使用Zero-shot计算方式可以写作下式

其中Wzsl仍然表示Zero-shot涉及权重ΔWFT表示在初始模型基础上经过微调带来的权重变化

通过类比观察可知微调语境学习参数激活角度殊途同归所以,已知使用梯度下降的微调更新参数方式能够带来性能上的提升那么通过语境学习中的样例激活相关的参数便同样能获得性能上的改善

 

4.5 模型涌现能力

4.5.1 规模增长带来的收益

可以看到GPT-3和LaMDA等模型表明,随着模型和计算规模扩大,性能持续提高,在多个任务上展现出更强能力。此外,仍然可以发现,在某些任务上,模型在达到一定规模前性能随机,之后显著提升,且一个基础模型有潜力处理多种任务。

大模型(约100B参数或1023FLOPs)的这种能力被称作涌现能力在较小模型中不存在但在大模型中出现的能力

对于数学能力指令遵循多步推理,程序执行更困难的任务模型数据量的增长依然可以带来性能提升,而且一定范围内,能力可以呈指数级上涨。仍然是涌现能力体现

4.5.2 涌现能力的来源

可以看到,当模型参数规模上涨到一定程度时,在某些任务上的预测精度陡然提升,模型瞬间获得了解决这种问题的能力。此外,这种能力的获得也是不可预测的,发生精度陡然提升时所需要的模型参数随着任务的不同而不同。

这种涌现能力从何而来呢

文章Understanding Emergent Abilities of Language Models from the Loss Perspective对此进行了讨论

文章中作者训练一系列具有不同大小和训练标记的语言模型,发现不同大小的数据点和训练token在很大程度上落在相同的趋势曲线上。换句话说,无论token计数和模型大小如何,具有相同预训练损失的语言模型在不同的语言、任务和提示格式上表现出相同的性能。

参数量更大的模型能够训练损失进一步降低从而获得性能上的提升

如上图所示,再进一步分析模型效果训练损失可以发现训练前损失减小到2.2左右之前,三种不同规模的模型性能都在随机水平上。而当损失降到2.2及以下时,模型能力陡然攀升。受参数规模影响,蓝色点所代表的小模型无法进一步降低损失,停留在了随机预测的水平;而绿色橙色代表更大的模型通过不断训练降低了损失从而获得了涌现能力

这同样说明损失函数相同的情形下不同规模模型预测能力相近更大的模型更好地学习训练数据降低了损失从而提升了性能涌现能力认识大大指导了模型训练过程

4.5.2 语境学习能力与规模

本节介绍了不同数据规模/参数规模情况下语境学习能力以及相关因素给预测精度带来影响

1 标签翻转与参数量规模

语境中的样例标签发生翻转时(即二分类任务,标签取反),参数规模越大模型预测精度受影响越大且当所有的标签全部翻转后,62B540BPaLM模型甚至预测精度低于50%随机猜测准确度8B小模型仍然能够保持大于50%预测精度水平

说明虽然模型具备一定的纠错能力,但参数量越大的模型会优先考虑语境提供的内容容易受到语境样例错误标签影响

2 思维链与参数量规模

下图中的实验展示了随参数量规模增长思维链方式带来的提升情况可以看到,当参数量规模增长时,相比于普通的提示词设计方式Standard prompt,思维链方式获得的提升更为显著

posted @ 2025-01-10 00:07  *Miracle*  阅读(190)  评论(2编辑  收藏  举报