In-Context Learning玩法大全

news2025/1/12 9:00:07

卷友们好,我是rumor。

虽然ChatGPT在大众眼里的热度可能已经过去了,但它prompt出了我的焦虑,于是最近一直在补大模型相关的工作。比起小模型,大模型有一个很重要的涌现能力(Emergent ability)就是In-Context Learning(ICL),也是一种新的范式,指在不进行参数更新的情况下,只在输入中加入几个示例就能让模型进行学习,如下图中用ICL做情感分析任务的栗子:

efe315d26f027920f097584ee4258799.png

忽略大模型的贵,这个范式具备不少优势:

  1. 输入的形式是自然语言,可以让我们可以更好地跟语言模型交互,通过修改模版和示例说明我们想要什么,甚至可以把一些知识直接输入给模型

  2. 这种学习方式更接近人类,即通过几个例子去类比,而不是像精调一样从大量语料中统计出规律

  3. 相比于监督学习,ICL不需要进行训练,降低了模型适配新任务的成本,同时也提升了language-model-as-a-service这种模式的可行性

是不是开始觉得有些香了,甚至想动手试一试?但又觉得跟自己以前会玩的精调有很大区别,不知道从何下手炼丹?

下面就给大家推荐一篇北大出品的综述,可以在一定程度上减少大家入门ICL的痛苦:

题目:A Survey for In-context Learning
链接:https://arxiv.org/abs/2301.00234

这篇文章非常系统地从精调、推理两个方向上给出了ICL的几种优化方法,接下来我们一一学习:

36bfedfd8e924bb3bdf9bba17eae0f60.png

通过精调优化ICL效果

虽然预训练后的语言模型已经初步具备ICL能力,但预训练的MLM目标和下游ICL目标还是存在gap的,怎样精调才能把模型预热(warmup)、提升ICL效果是一个重要的研究方向。注:这里的「精调」、「预热」不是为了让模型适配某个下游任务,而是让模型具备更好的通用ICL能力

有监督ICL训练

第一类方法非常直觉,既然要消除gap,我直接在有监督的ICL数据上训练不就好了?MetaICL[1]就直接把很多任务整合成了ICL的形式精调模型,在52个数据集上取得了比肩直接精调的效果。

另外还有部分研究专注于Instruction tuning,构建更好的任务描述让模型去理解,而不是只给几个例子(demonstration),比如LaMDA-PT[2]、FLAN[3]

自监督ICL训练

有监督的数据毕竟是有限的,于是开始有研究者思考能不能借鉴预训练的方式,自监督地进行ICL训练。比如MetaAI的一篇工作[4]就很巧妙地把语言模型的一些任务转化成了ICL形式:

b66c211f11b8bccaed1c84dc59fb3f82.png

从上述两种训练方法来看,语言模型的ICL能力还有不少提升空间,因此建议大家使用ICL前最好先进行模型预热。不过也不用太多数据,因为上述的研究显示,随着预热的数据增多,模型的提升会到达一个瓶颈

在推理阶段优化ICL效果

作者把推理阶段的优化方法分为Prompt设计和打分函数(Scoring Function)设计两种。

Prompt设计

作为激发大模型能力的输入,Prompt对ICL的效果影响很大。作者认为可以从组织方式和格式来进行Prompt的设计。组织方式是指如何选择数据样本并排序,格式是指怎么去写Prompt

74b4bf67aa7af9adef2e6de858088d68.png

对于数据样本的选取,可以有以下方法:

  • 无监督:比如直接通过文本表示、互信息选取相近的结果;也有研究通过perplexity或者其他指标进行选取;甚至可以直接让语言模型自己生成[5]

  • 有监督:既然选取不同的样本能得到不同的效果,那可以直接构造监督模型,去判别效果更好的样本;甚至有研究把样本选择建模成序列决策任务,把最终效果当作reward,用强化学习去做[6]

对于数据样本的排序,目前的研究并不多,有两个思路:

  1. 基于一些距离度量,把跟输入相近的排在后面(靠近输入)。

  2. 在Lu等人[7]的研究中,他们找到了信息熵和ICL效果的联系,因此根据熵来决定最佳排序。

对于Prompt的格式,常见有两种:指令(Instruction)和推理步骤(Reasoning Steps)说明。

  • Instruction:任务的指令描述非常依赖人工,不过也可以尝试让语言模型自动生成描述并选择。

  • Reasoning Steps:对于更复杂的任务,可以人工显示地把推理步骤写出来,比如Chain-of-thought(CoT),来启发模型的推理能力。除了纯人工撰写外,还有以下方法:

    • 让模型自己生成推理步骤

    • Multi-stage ICL:分多个步骤来完成任务,每一步都设计不同的子问题,让模型一步步解答。比如Self-Ask[8]这篇工作甚至让模型自己问自己。再比如Least-to-Most Prompting这篇工作先让模型把大问题拆成多个子问题,再挨个回答。

从上述Prompt设计的工作来看,作者认为有以下可以探索或注意的点:

  1. 目前大多数样例选择的策略都是围绕单个样本展开的,但语料级别的选择还没有人研究过。

  2. 对于k个样本,搜索空间是k!,怎样找到最优解还是一个很有挑战的问题

  3. 虽然增加CoT可以提升推理效果,但怎样优化CoT还有待研究

  4. 人工去写prompt的消耗还是很大的,可以尽量依靠语言模型去生成

打分函数(Scoring Function)

目前有几种方法:

  1. Direct[9]:直接取答案的条件概率,这种方法的缺点是只能衡量固定模式的答案(答案y在输入x后面)

  2. Perplexity:再用语言模型过一遍句子,这种方法可以解决上述固定模式的问题,但计算量增加了

  3. Channel[10]:评估P(x|y)的条件概率(用贝叶斯推一下),这种方法在不平衡数据下表现较好

这三种方法的对比如下:

ceb62bfcc163c7c13f678cb2f600e2cc.png

目前关于如何用打分策略来校准偏差、降低模型敏感度的研究还是比较少,有兴趣的同学可以探索。

还有什么会影响ICL表现?

除了上述提到的方法外,作者还调研到一些LM预训练阶段影响ICL效果的因素,比如:

  1. 预训练语料的多样性比数量更重要,增加多种来源的数据可能会提升ICL表现[11]

  2. 用下游任务的数据预训练不一定能提升ICL表现,并且PPL更低的模型也不一定表现更好[12]

  3. 当LM到达一定规模的预训练步数、尺寸后,会涌现出ICL能力[13],且ICL效果跟参数量正相关[14]

为什么ICL有效果?

目前的一些研究猜测有以下原因:

  1. 跟训练数据的分布相关:比如训练数据有很多样例[15],也有学者认为ICL可能是隐式的Bayesian inference[16]

  2. 跟学习机制相关:有学者猜测LM可能自己就具备学习的能力,在做ICL的时候学到了这些知识[17],或者隐式直接精调了自己[18]

  3. 跟Transformer中的模块相关:有学者发现Transformer里的某些注意力头会通过拷贝固定的模式来预测下一个token[19]

上述大部分研究虽然都有数据来证实自己的猜想,但还是停留在很简单的任务或者小模型上,对于为什么ICL会有效还有待进一步的解释。

之后的研究方向

  1. 新的预训练策略:毕竟目前LM的预训练目前跟ICL并不完全一致

  2. 把ICL能力蒸馏到更小的模型

  3. 在语言模型上进行知识增强和更新

  4. 对于样例的鲁棒性

总结

对于大模型小样本的新数据集和落地应用,作者也介绍了不少新工作,推荐大家去原文查看。

关于为什么大模型会涌现出那么多能力,个人更倾向第一种,即模型本身就从训练数据中学到了这些,Prompt只不过是把这个能力激发,告诉模型怎么做而已。但为什么模型必须要达到一定尺寸才能具备ICL?目前还没看到好的解答,23年马上GPT4也要推出了,这个世界会越来越魔幻。

参考资料

[1]

MetaICL: Learning to Learn In Context: https://aclanthology.org/2022.naacl-main.201/

[2]

LaMDA: Language Models for Dialog Applications: https://arxiv.org/abs/2201.08239

[3]

Finetuned Language Models are Zero-Shot Learners: https://openreview.net/forum?id=gEZrGCozdqR

[4]

Improving In-Context Few-Shot Learning via Self-Supervised Training: https://aclanthology.org/2022.naacl-main.260/

[5]

Self-Generated In-Context Learning: Leveraging Auto-regressive Language Models as a Demonstration Generator: https://arxiv.org/abs/2206.08082

[6]

Active Example Selection for In-Context Learning: https://arxiv.org/abs/2211.04486

[7]

Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity: https://aclanthology.org/2022.acl-long.556/

[8]

Measuring and Narrowing the Compositionality Gap in Language Models: https://doi.org/10.48550/arXiv.2210.03350

[9]

Language models are few-shot learners.: https://arxiv.org/abs/2005.14165

[10]

Noisy Channel Language Model Prompting for Few-Shot Text Classification: https://aclanthology.org/2022.acl-long.365/

[11]

On the Effect of Pretraining Corpora on In-context Learning by a Large-scale Language Model: https://aclanthology.org/2022.naacl-main.380/

[12]

On the Effect of Pretraining Corpora on In-context Learning by a Large-scale Language Model: https://aclanthology.org/2022.naacl-main.380/

[13]

Emergent abilities of large language models.: https://arxiv.org/abs/2206.07682

[14]

Language models are few-shot learners.: https://arxiv.org/abs/2005.14165

[15]

Data distributional properties drive emergent in-context learning in transformers.: https://arxiv.org/abs/2205.05055

[16]

An explanation of in-context learning as implicit bayesian inference: https://arxiv.org/abs/2111.02080

[17]

What can transformers learn in-context? A case study of simple function classes.: https://arxiv.org/abs/2208.01066

[18]

Transformers learn in-context by gradient descent.: https://arxiv.org/abs/2212.07677

[19]

In-context learning and induction heads: https://arxiv.org/abs/2209.11895

03cb4156a6227722bacebb91bcd350b3.jpeg


我是朋克又极客的AI算法小姐姐rumor

北航本硕,NLP算法工程师,谷歌开发者专家

欢迎关注我,带你学习带你肝

一起在人工智能时代旋转跳跃眨巴眼

「2023,请对我好一点」c2f890c9d46759f72e3e828253165ae3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CORS 跨域资源共享 与 JSONP

CORS 1、接口的跨域问题 我们使用express编写的 GET 和 POST接口,存在一个很严重的问题:不支持跨域请求。 解决接口跨域问题的方案主要有两种: CORS(主流的解决方案,推荐使用)JSONP(有缺陷的…

excel查重技巧:如何用组合函数快速统计重复数据(下)

数据源照旧,如下图所示,要求统计出不重复的客户数:在上期我们掌握了破解公式的方法后,今天我们再来看看计算不重复数据个数的第二个公式套路。套路2:COUNT和MATCH的组合这个公式的难度就稍微有点大了,一起看…

Word控件Spire.Doc 【Table】教程(3):如何在C#、VB.NET中设置Word表格样式

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

聊聊帮助别人这件事--爱摸鱼的美工(12)

年近了,上班途中依然匆忙 看女孩子们渐渐开始倒腾 做了新发型,做了美美的指甲 换上了新衣服,买了新包 电话里讨论着 去哪里过年,买什么年货 好像以前的我也这样 今年挣得少了,不想添新衣(不能) …

基于QWidget和QImage的水印添加实现

目录 1. 基于QWidget的屏幕阅读水印的添加 1.1 平铺 1.1.1 核心代码 1.1.2 构造函数中设置透明度和鼠标穿透 1.1.3 调用 1.1.4 效果展示 1.2 指定位置添加水印 1.2.1 核心代码 1.2.2 设置水印透明度和鼠标穿透 1.2.3 调用 1.2.4 效果展示 2、基于QImage的屏幕水印的…

QT 学习笔记(十四)

文章目录一、TCP/IP 通信过程简介1. Socket 通信2. Linux 下的 TCP/IP 通信过程3. QT 下的 TCP/IP 通信过程3.1 在 QT 中实现 TCP/IP 服务器端通信的流程3.2 客户端通信流程二、TCP/IP 通信过程操作实现1. 服务器端2. 客户端三、服务器端和客户端实现代码1. 主函数 main.c2. 服…

重装系统重新分区方法教程

对电脑进行系统重装以后,若是想电脑使用起来更稳定舒适,就要对电脑硬盘进行系统分区,但是许多用户都不知道怎样分区,今天小编就来为大家详细介绍一下重装系统重新分区方法教程。 工具/原料: 系统版本:win1…

11 个非常实用的 Python 和 Shell 拿来就用脚本实例!

我工作中用到的几个脚本,主要分为:Python和Shell两个部分。 Python 脚本部分实例:企业微信告警、FTP 客户端、SSH 客户端、Saltstack 客户端、vCenter 客户端、获取域名 ssl 证书过期时间、发送今天的天气预报以及未来的天气趋势图&#xff…

Verilog语法笔记(夏宇闻第三版)-赋值语句和块语句

目录 赋值语句: (1).非阻塞(Non_Blocking)赋值方式( 如 b < a; ): (2).阻塞(Blocking)赋值方式( 如 b a; ): 例&#xff1a; 块语句&#xff1a; 顺序块&#xff1a; 例&#xff1a; 并行块&#xff1a; 例&#xff1a; ​编辑 块名&#xff1a; 起始时间和结束…

php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02

php运算符&#xff0c;类型转换&#xff0c;打印输出语句相较于其他语言的特殊部分php运算符php的类型转换php打印输出语句php运算符 1.php运算符与其他高级语言相同的部分 算术运算符&#xff08;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%&#xff09;&#xff0…

使用Flask快速部署PyTorch模型

对于数据科学项目来说&#xff0c;我们一直都很关注模型的训练和表现&#xff0c;但是在实际工作中如何启动和运行我们的模型是模型上线的最后一步也是最重要的工作。 今天我将通过一个简单的案例&#xff1a;部署一个PyTorch图像分类模型&#xff0c;介绍这个最重要的步骤。 …

OAK-PoE设备故障排查详解

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

Linux小黑板(5):磁盘与文件系统

"这月蹦迪没我" 一、浅谈磁盘 磁盘作为计算机硬件里&#xff0c;唯一的机械设备。在数据存储的领域&#xff0c;有着不可磨灭的作用。相较于&#xff0c;保持通电情况下具有保持数据的不丢失的内存&#xff0c;磁盘能够"永久性"地存储 数据。 磁盘是计算机…

1. R语言介绍、Rstudio的基本使用、【R包的安装与使用】、帮助命令、内置数据集

课程视频链接&#xff1a;https://www.bilibili.com/video/BV19x411X7C6?p1 本笔记参照该视频&#xff0c;笔记顺序做了些调整【个人感觉逻辑顺畅】&#xff0c;并删掉一些不重要的内容 系列笔记目录【持续更新】&#xff1a;https://blog.csdn.net/weixin_42214698/category_…

【Linux】进程控制:父进程与子进程

目录1 进程创建1.1 认识fork1.2 进程创建的目的1.3 写时拷贝1.4 进程创建失败的场景2 进程退出2.1 进程退出状态2.2 进程退出的方式2.3 exit、_exit、return2.3.1 概念2.3.2 区别3 进程等待3.1 理解进程等待3.2 进程等待的方式3.2.1 wait和waitpid3.2.2 status位图结构3.3 阻塞…

【一起从0开始学习人工智能0x04】python相关AI复习【超全面】【收藏】

基础小结 数据类型&#xff1a;Numbers、String、list、tuple、dict字符编码&#xff1a;可以直接.encode&#xff08;‘utf-8’&#xff09;、.decode(ascii)循环&#xff1a;for-in迭代器、whilelist列表-最频繁的数据类型。-完成大多数集合类的数据结构实现。它支持字符&am…

十六、状态管理——Vuex(4)

本章概要 表单处理Vuex 与组合 API模块 16.8 表单处理 在表单控件上通常会使用 v-model 指令进行数据绑定&#xff0c;如果绑定的数据是 Vuex 中的状态数据&#xff0c;就会遇到一些问题。看以下代码&#xff1a; form.html <div id"app"><my-component&…

一场衍生于产业的深度变革正在上演,总结起来就是产业互联网的变革

毫无疑问的是&#xff0c;一场衍生于产业的深度变革正在上演。在这样一场深度变革之中&#xff0c;曾经看似无法改变的存在&#xff0c;有了进化的可能性&#xff1b;曾经让玩家们望而却步的领域&#xff0c;有了进军的可能性。如果对这样一场深度变革进行一次总结的话&#xf…

vanishing point detection in autopilot

1. 概述 消失点一种直观的解释是图像中的平行线的交点&#xff0c;也就如下图中路面边界绘制的直线在图像中的交点。 这样的点在自动驾驶场景下可以为解析车辆状态提供一些信息&#xff0c;比如较为常规的运用便是用于车辆的pitch角度。在传统方法中会通过如霍夫算子检测图片…

2022稳定学习年度研究进展系列报告丨精华观点总结

近年来&#xff0c;在独立分布假设的前提下&#xff0c;机器学习模型的表现越来越好。但在实际应用场景中&#xff0c;数据本身却具有很强的异质性和差异性&#xff0c;这就对模型的泛化能力产生了较高的要求。为了解决分布外泛化问题&#xff0c;稳定学习应运而生。12月28日&a…