GPT-3:大语言模型小样本学习

论文标题:Language Models are Few-Shot Learners

论文链接:https://arxiv.org/abs/2005.14165

论文来源:OpenAI

一、概述

自然语言处理已经从学习特定任务的表示和设计特定任务的架构转变为使用任务无关的预训练和任务无关的架构。这种转变导致了许多具有挑战性的NLP任务的实质性进展,如阅读理解、问题回答、文本蕴涵等。虽然目前模型架构和初始表示是任务无关的,但最终仍然有一个特定于任务的步骤,也就是在一个较大的标注数据集上微调以使得预训练模型能够执行特定的任务。

GPT-2的研究表明这个最终的步骤或许不是必要的。GPT-2能够以zero-shot的设置来迁移执行标准的自然语言处理任务,并不需要在一个数据集上进行微调。虽然这项工作看似很有前景,但最好的情况下其性能只与单个数据集上的一些有监督baseline相当。在大多数任务中,GPT-2的性能甚至远未达到简单的监督baseline的水平。不过GPT-2也展示出一个潜在的前进方向。这项研究展示了在模型规模跨域一个数量级时模型在迁移任务和语言模型损失上表现出的相对一致的log线性趋势。《Scaling Laws for Neural Language Models》这篇文章则以更加严谨的研究确认了这一趋势。在本文的研究中,我们测试了更高的数量级上是否仍然符合这个趋势。我们训练了一个最高1750亿规模参数量的自回归语言模型,即GPT-3,并且度量了其迁移学习的能力。

在本文的研究中,我们也明确和系统化了GPT-2中的方法。虽然GPT-2将他们的工作描述为“zero-shot任务迁移”,但他们有时会在上下文中提供相关任务的示例。由于使用的是有效的训练示例,这些情况更好地描述为“one-shot”或“few-shot”转移。本文调研了语言模型在one-shot、few-shot和zero-shot的设置下的表现。研究结果如下图所示。可以观察到one-shot和few-shot的性能优于真正的zero-shot设置的性能,基于这一想象,作者认为语言模型可以被理解为是一个元学习器(meta-learner),它将慢速的外循环基于梯度下降的学习与快速的“上下文内”学习相结合。这里的“外循环梯度下降学习”指的是模型在训练过程中通过大量数据进行梯度下降优化的过程,也就是模型在训练时学习到的知识和概念。而“上下文内学习”是指模型在执行任务时,通过给定的上下文信息(例如,任务描述和示例)快速调整其预测的过程。在zero-shot学习中,模型在没有任何特定任务示例的情况下,需要直接根据给定的输入来解决问题。而在one-shot和few-shot学习中,模型会在输入中获得一个或几个任务示例,这使得模型可以更好地理解和适应任务要求,从而实现更高的性能。将语言模型视为元学习器有助于解释它们在one-shot和few-shot学习中的表现。这种观点强调了语言模型在利用给定的任务示例和上下文信息中的快速学习能力,这有望推动未来的研究和应用。

f5df135aac3c5402c461864bf84bbec4.png
对比结果

如上面第三个折线图所示,本文还训练了一系列更小的模型(从1.25亿到130亿),在one-shot、few-shot和zero-shot的设置下对比他们的性能。在这三种设置下,模型在大多数任务上的性能与模型的容量之间保持平滑的递增关系。另外one-shot、few-shot和zero-shot的性能「差距」都会随模型容量的增大而递增,这或许表明更大的模型是更好的元学习器。

二、方法

GPT-3的模型、数据和训练过程都类似于GPT-2,不同的是模型的大小、数据的规模和多样性以及训练的长度。GPT-3在特定任务上的学习(in-context learning)也类似于GPT-2,只不过GPT-3更系统化地探索了不同的设置,包括:

「微调(Fine-Tuning, FT)」:通过在成百上千的特定任务的有监督数据上训练以更新预训练模型的参数。微调方法的主要优点是在多个benchmark上的强大性能,主要的缺点是需要特定于任务的额外大数据集、可能在分布之外(out-of-distribution)的数据上泛化能力较差、可能导致模型利用训练数据中的伪相关特征从而影响模型的实际性能。GPT-3主要关注语言模型任务无关的性能,没有进行微调实验。

「小样本(Few-Shot, FS)」:模型在推断阶段被给予一些相关任务的示例,但不会更新模型参数。一个典型的示例包括上下文和期望的补全(例如,一个英文句子和它的法文翻译)。少数示例学习通过提供K个上下文和补全的示例,然后给出一个最终的上下文示例,模型需要提供相应的补全。作者将设置在到的范围内,因为模型的上下文窗口()可以容纳这么多示例。小样本设置的优点是大大减少了对特定任务数据的需求,缺点是迄今为止,这种方法的结果要比最先进的微调模型差很多,另外仍然需要少量的任务特定数据。这里的小样本学习与其他机器学习领域的小样本学习是相关的,它们都涉及基于广泛任务分布的学习,然后快速适应新任务。

「单样本(One-Shot, 1S)」:与小样本类似但是。

「零样本(Zero-Shot, 0S)」:与小样本类似但是不提供任何示例而是提供任务的自然语言描述。

GPT-3主要探究语言模型在one-shot、few-shot和zero-shot的设置下的表现。

  1. 模型架构

GPT-3沿用了GPT-2的模型结构和架构,包括修改后的初始化、预归一化和可逆的分词方法。不同之处在于GPT-3在Transformer的层中采用了交替的密集(dense)和局部带状稀疏(locally banded sparse)注意力模式,这与Sparse Transformer类似。了研究机器学习性能与模型大小之间的依赖关系,作者训练了8种不同大小的模型,从1.25亿个参数到1750亿个参数。最大的模型被称为GPT-3。通过这个参数范围,作者可以测试《Scaling Laws for Neural Language Models》论文中引入的规模定律。

  1. 训练数据集

本文按照以下方式创建了GPT-3的训练数据集: 

①下载和筛选:作者下载了一个CommonCrawl版本,并基于与一系列高质量参考语料库的相似性进行筛选。CommonCrawl是一个包含了大量网页抓取数据的数据集。 

②模糊去重:为了避免冗余并保持验证集作为过拟合准确度量的完整性,作者在数据集内部和跨数据集之间对文档级别进行了模糊去重。 

③添加高质量参考语料库:为了提高训练数据的质量和多样性,作者将已知的高质量参考语料库添加到了训练数据中。这些参考语料库包括:1). 扩展版的WebText数据集:通过在更长时间内抓取链接收集到的数据,该数据集首次出现在《Scaling Laws for Neural Language Models》论文中。2). 两个基于互联网的图书语料库(Books1和Books2)。3). 英语维基百科。

  1. 训练过程

研究表明更大的模型通常可以使用更大的batch size,但需要较小的学习率。作者在训练过程中测量梯度噪声尺度,并用它指导批量大小的选择。为了在不耗尽内存的情况下训练更大的模型,作者采用了混合的模型并行方式,包括在每个矩阵乘法中的模型并行和在网络层之间的模型并行。所有模型都在V100 GPU上进行训练,这些GPU是高带宽集群的一部分。

  1. 评估

对于few-shot设置,评估时,从任务训练集中随机抽取个示例作为条件,根据任务需要,使用或个换行符分隔。LAMBADA和Storycloze没有监督训练集,因此从开发集中抽取条件示例,并在测试集上进行评估。有时,除了(或者在时,代替)示例,作者还使用自然语言prompt。在自由形式补全任务上,作者使用与eam search,beam width为,长度惩罚因子α。当测试集公开时,作者报告每个模型大小和学习设置(one-shot、few-shot和zero-shot)在测试集上的结果。当测试集为私有时,由于模型通常太大而无法放在测试服务器上,作者报告在开发集上的结果。

三、实验

  1. 语言建模、完形填空和补全任务

8bc359ea41467095eef5211ed4009be6.png
实验
  1. 问答任务

cc95bc79e852713d5e86643ef1a44490.png
实验
484620123cc5f342911c7bbbc335c635.png
实验
  1. 翻译

b3b1abd8659bbae965781de47f2a6331.png
实验
  1. SuperGLUE

f52a00a161ec25bd8a2b8db520b68661.png
实验

四、局限性

本文讨论了GPT-3的五个主要局限性: 

①文本生成的问题:GPT-3生成的文本样本有时在文档层面上语义重复,较长篇幅的文本可能会失去连贯性,自相矛盾,或偶尔包含无关紧要的句子或段落。 

②实验范围局限:作者的实验没有涉及双向架构(bidirectional architectures)或其他训练目标,如去噪(denoising)。这种设计决策可能导致在那些从双向性中获益的任务上性能较差,例如填空任务、需要回顾并比较两部分内容的任务(ANLI,WIC)或需要重新阅读或仔细思考长篇幅后生成简短答案的任务(QuAC,RACE)。 

③目标函数的局限性:GPT-3的目标函数将每个token视为同等重要,缺乏区分重要性的概念。有研究表明,针对感兴趣的实体定制预测可能有益。此外,对于自监督目标,任务规范依赖于将期望的任务强制转化为预测问题。然而,有用的语言系统(如虚拟助手)可能更适合执行目标导向的行为,而不仅仅是预测。最后,大型预训练语言模型没有在其他领域(如视频或真实世界的物理互动)中建立基础,因此缺乏大量关于世界的上下文信息。 

④纯自监督预测的限制:由于上述原因,纯自监督预测的扩展可能会遇到瓶颈,需要采用不同的方法进行补充。有希望的未来方向可能包括从人类那里学习目标函数、通过强化学习进行微调,或将图像等其他模态添加到模型中,以便提供基础和更好的世界模型。 

⑤模型的部署:GPT-3的尺寸使得部署变得具有挑战性。在这种规模下,任务特定的蒸馏(Task-specific distillation)值得探讨。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python - Huffman Tree 霍夫曼树实现与应用

目录 一.引言 二.Huffman Tree 理论 1.定义 2.结构 3.构造 三.Huffman Tree 实现 1.生成霍夫曼树 2.编码霍夫曼编码 3.解码霍夫曼编码 4.霍夫曼树编码解码实践 四.总结 一.引言 上篇 Word2vec 的文章中指出每次计算词库 N 个单词的 Softmax 计算量很大,…

办公工具-latex

一、排版总论 1.1 缺省权力 ​ 首先,最重要最需要强调的是,排版是一个信息量极大的工程。字体,格式,对齐方式,页眉页脚,都只是排版的冰山一角,可以说,一个人是没有办法完全控制一个…

JVM 运行时数据区概述及线程

当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区。 运行时数据区结构 内存概念: 内存…

leetcode:只出现一次的数字 Ⅲ(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任…

Qt界面编程(三)—— 父子关系、对象树、信号和槽(自定义信号和槽、Qt5与Qt4的写法)

一、Qt按钮小程序 1. 按钮的创建和父子关系 在Qt程序中&#xff0c;最常用的控件之一就是按钮了&#xff0c;首先我们来看下如何创建一个按钮&#xff1a; #include <QPushButton>QPushButton * btn new QPushButton; //设置父亲btn->setParent(this);//设置文字b…

接口测试-postman使用总结

一、为何使用postman postman是一款简单高效的接口测试工具&#xff0c;能够很方便发送接口请求&#xff0c;易于保存接口请求脚本&#xff0c;postman提供接口响应数据比对功能&#xff0c;可以设置预期结果作断言&#xff0c;还能把测试用例放在一个集合中批量执行&#xff…

【JavaWeb】9—监听器

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

torchvision.transforms 常用方法解析(含图例代码以及参数解释)

本文代码和图片完全源于 官方文档: TRANSFORMING AND AUGMENTING IMAGES 中的 Illustration of transforms&#xff0c;参数介绍源自函数对应的官方文档。 代码中的变换仅仅使用了最简单的参数&#xff1a;pad&#xff0c;size 等&#xff0c;这里展现的只是简单的变换&#xf…

C/C++每日一练(20230408)

目录 1. 删除无效的括号 &#x1f31f;&#x1f31f;&#x1f31f; 2. 合并K个升序链表 &#x1f31f;&#x1f31f;&#x1f31f; 3. 四数之和 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 …

SQL Server用户定义的函数(UDF)使用详解

SQL Server用户定义的函数一、背景知识1.1、用户定义函数的优点1.2、函数类型1.3、指引1.4、函数中的有效语句1.5、架构绑定函数1.6、指定参数二、创建用户定义函数2.1、限制和权限2.2、标量函数示例&#xff08;标量 UDF&#xff09;2.3、表值函数示例2.3.1、内联表值函数 &am…

项目管理软件调度的优势有哪些?

如果没有项目时间表&#xff0c;要跟踪在何时以及必须使用哪些资源之前需要完成什么是非常困难和耗时的。时间表是一个时间表&#xff0c;它概述了所有项目任务和需要完成的里程碑的开始和结束日期。 项目进度中的任务将具有依赖性&#xff0c;这意味着如果完成数据在一项活动上…

Redis7高级之Redlock算法和Redisson的使用(十)

10.1 Redlock 红锁算法 1.解决手写分布式锁的单点故障问题 Redis 提供了 Redlock 算法&#xff0c;用来实现基于多个实例的分布式锁锁变量由多个实例维护&#xff0c;即使有实例发生了故障&#xff0c;锁变量仍然是存在的&#xff0c;客户端还是可以完成锁操作Redlock算法是实…

计算机网络考试复习——第一章 1.5 1.6

1.5 计算机网络的类别 1.5.1计算机网络的定义&#xff1a; 系统集合&#xff0c;连接起来&#xff0c;协议工作&#xff0c;资源共享 计算机网络主要是由一些通用的、可编程的硬件互连而成的&#xff0c;而这些硬件并非专门用来实现某一特定目的&#xff08;例如&#xff0…

Java源码(一)ThreadLocal、SpringBoot Jar 启动原理

思维导图 一、ThreadLocal 1.场景 项目采用SSMShiro登录认证&#xff0c;改造需求如下&#xff1a; 后台管理员登录需要限制&#xff0c;同一个用户的不同IP需要通过过自定义验证后才能登录。 2.问题 在完成需求后发现有管理员用户&#xff08;这里就用A&#xff09;通过验…

Android build.gradle配置详解

Android Studio是采用gradle来构建项目的&#xff0c;gradle是基于groovy语言的&#xff0c;如果只是用它构建普通Android项目的话&#xff0c;是可以不去学groovy的。当我们创建一个Android项目时会包含两个Android build.gradle配置详解文件&#xff0c;如下图&#xff1a; 一…

区块链3链(TRC ERC BSC)授权持币生息源码

分享一款3链&#xff08;TRC ERC BSC&#xff09;授权持币生息源码、来自群友投稿的资源、据说是运营级的。简单的看了下没有问题什么大问题、有能力的可以拿来二开其他的模板。 搭建非常简单&#xff0c;教程就不写了、环境NGINX1.2PHP7.2MYSQL5.6TP默认伪静态 此类源码需要…

【Python】数学 - 用 Python 自动化求解函数 f(x) 的值

目录 1、缘起 2、求以下函数的值 3、代码清单 3.1、求解 f(0)、f(1)、 f(​编辑)、f(​编辑) 3.2、求解 g(0)、g(1)、g(​编辑)、g(​编辑) 3.3、求解 h(0)、h(1)、h(​编辑)、h(​编辑) 4、总结 1、缘起 Python 是一种强大的编程语言&#xff0c;它具有广泛的应用领域。…

Python模拟星空

文章目录前言Turtle基础1.1 Turtle画板1.2 Turtle画笔1.3 Turtle画图1.4 Turtle填色1.5 Turtle写字模拟星空模拟星球浪漫星空尾声前言 Python模拟星空&#xff0c;你值得拥有&#xff01;uu们一周不见啦&#xff0c;本周博主参考网上大佬们的星空&#xff0c;给大家带来了属于…

C语言操作符优先级

在平时写代码时&#xff0c;经常会用到操作符&#xff0c;但是如果不了解这些操作符的优先级&#xff0c;可能会让程序的执行效果和我们预期的不一样。 例如&#xff1a; int a 2;int b 3;int c 4;//int ret a b * c;//我们想要执行的顺序是ab的值再乘c//如果了解操作符优…

chat GPT人工智能写论文-怎么用chatGpt写论文

用chatGPT写文章会重复吗 使用 ChatGPT 写文章可能会出现重复的情况。因为 ChatGPT 是基于机器学习的自然语言处理技术&#xff0c;它并不具备人类的创造性思维&#xff0c;其生成的文本内容是基于已有语言数据的统计模型而产生的。 当输入信息重复、语言结构复杂或指定主题较…