论文:Language Models are Few-Shot Learners(语言模型是小样本的学习者)
链接:https://arxiv.org/abs/2005.14165
Official Code:https://github.com/openai/gpt-3
1、背景
- 预训练语言模型趋势:NLP系统中预训练语言表示应用渐广,从单层表示到多层RNN,再到预训练Transformer模型直接微调,性能提升显著,但仍需特定任务数据集和微调。
- 元学习与上下文学习:元学习让模型在训练时获多种技能,推理时快速适应新任务,其中上下文学习通过文本输入指定任务,模型依此前文示例完成后续任务。
- 模型规模增长:Transformer语言模型参数不断增加,能力提升,推测上下文学习能力可能随模型规模扩大而增强。
文章内容:在第 1节简述。在第 2 节中,我们描述了训练 GPT-3 并对其进行评估的方法和方法。第 3 节介绍了零、单和少镜头设置中所有任务的结果。第 4 节解决了数据污染(训练 - 测试重叠)的问题。第 5 节讨论了 GPT-3 的局限性。第 6 节讨论了更广泛的影响。第 7 节回顾了相关工作,第 8 节总结了相关工作。
2、meta-learning元学习
2.1本文中解释(推理输入的上下文context )
- 语言模型元学习

图 1.1:语言模型元学习。在无监督的预训练过程中,语言模型会发展出广泛的技能和模式识别能力。然后,它在推理时使用这些能力来快速适应或识别所需的任务。我们使用术语“上下文学习”来描述此过程的内部循环,该过程发生在每个序列的前向传递中。该图中的序列并不是为了代表模型在预训练期间看到的数据,而是为了表明有时在单个序列中嵌入了重复的子任务。
这张图片展示了在无监督预训练期间通过随机梯度下降(SGD)进行学习的过程。主要包含以下内容:
整体架构
outer loop(外循环):指的是整个无监督预训练过程。
inner loop(内循环):在每个序列(sequence)内部进行的操作。
In - context learning(上下文学习):在每个序列内部进行的学习过程。
outer loop:强调的是训练过程,包括梯度下降(前向和反向)
inner loop:强调的是推理过程,没有梯度下降,只有前向传播(强调这一阶段模型的自学习)
推理和上下文学习(推理使用上下文信息进行学习):
-
正向传递(推理):在神经网络(包括语言模型)中,正向传递(forward pass)是指数据从输入层经过隐藏层流向输出层的过程,模型在此过程中对输入数据进行处理并生成预测结果。
-
信息传递与整合
在正向传递过程中,词元向量所包含的信息在模型层之间不断传递和更新。从输入层开始,经过多层的注意力机制和前馈神经网络的处理,每个词元的表示逐渐丰富和细化,包含了更多关于其在句子、段落或整个文本中的语义、语法和上下文关系等信息。
模型层之间的信息传递是通过向量运算和参数矩阵相乘实现的。每个层根据其自身的参数(在训练过程中学习得到)对输入向量进行操作,并将处理后的结果传递给下一层。例如,注意力机制层的参数决定了词元之间的注意力分布,前馈神经网络层的参数则决定了如何对词元向量进行线性和非线性变换。 -
生成预测结果
在正向传递的最后,模型根据任务的要求生成预测结果。例如,在文本生成任务中,模型会输出下一个可能的词元的概率分布,然后可以根据这个概率分布选择一个词元作为生成的文本的下一个单词;在文本分类任务中,模型可能会输出一个表示输入文本属于各个类别(如积极、消极情感类别)的概率向量,通过比较这些概率来确定文本的分类;在阅读理解任务中,模型可能会输出与问题相关的答案或答案的概率分布等。
正向传递是语言模型处理输入数据并生成预测的核心过程,通过对输入文本的词元化、嵌入、多层神经网络处理以及信息整合,模型能够逐步构建起对输入的理解,并生成与任务相关的合理预测结果。这个过程中,模型的架构设计(如注意力机制和前馈神经网络)以及参数设置(在训练中学习得到)起着关键作用,决定了模型对语言的理解和处理能力。 -
“上下文学习”(in - context learning)的定义
文中使用 “上下文学习” 来描述这个过程中的内部循环。在每个序列的前向传播(forward - pass)过程中,模型会根据当前输入序列的上下文信息进行学习和适应。具体来说,模型会关注序列中的每个元素以及它们之间的关系,并利用这些信息来调整自己的预测或决策。例如,在处理一个句子时,模型会根据句子中前面的单词来理解后面单词的含义和可能的接续方式,同时也会根据整个句子的上下文来判断其在特定任务(如情感分析、语义理解等)中的意义。 -
总的来说,这幅图通过展示语言模型元学习的过程,说明了模型如何在无监督预训练中获取通用能力,并在推理时利用这些能力结合上下文信息来处理各种不同的任务,强调了模型的适应性和上下文学习在这个过程中的重要性。
- 相关术语的定义和区别:

在语言模型的语境中,这段话主要解释了一些相关术语的定义和区别,以避免概念混淆,具体内容如下:
为了避免这种混淆,我们使用术语 “元学习 ” 来捕捉一般方法的内循环 / 外环结构,并使用术语 “in context-learning” 来指代元学习的内循环。我们进一步将描述专业化为 “zero-shot”、“one-shot” 或 “few-shot”,具体取决于推理时提供的演示数量。这
-
“zero - shot transfer”(零样本迁移)术语的歧义性
- 此方法被称为“zero - shot”(零样本)是因为在推理过程中不进行梯度更新。通常情况下,传统的机器学习模型在学习新任务时需要通过梯度下降等优化算法来调整模型参数,以适应新的数据分布和任务要求。而这里的“zero - shot transfer”在推理时不涉及这种参数更新过程。
- 然而,它又常常在推理时向模型提供示例(demonstrations)。这意味着模型在处理新任务时并非完全从零开始,而是可以参考这些示例来进行决策或生成输出。例如,在进行文本分类任务时,虽然没有针对该特定分类任务进行梯度更新训练,但可能会给模型提供一些相关的文本示例作为参考,帮助它理解任务的要求和模式。这种情况使得“zero - shot transfer”这个术语有些模糊,因为它不完全符合从真正意义上的零样本(即没有任何示例或先验知识)中学习的概念。
-
“meta - learning”(元学习)术语的引入
- 为了避免上述混淆,作者使用“meta - learning”(元学习)这个术语来描述整个方法的内循环/外循环结构。内循环指的是模型在推理时根据提供的示例快速适应或识别任务的过程,而外循环则是在训练阶段学习各种技能和模式识别能力的过程。 例如,在训练语言模型时,外循环通过大量的文本数据让模型学习语言的基本结构、语义信息等通用知识;在推理阶段(内循环),模型利用这些已学知识结合新任务的示例来处理具体任务。
- “meta - learning”旨在涵盖模型在推理时两种可能的行为:一是从新任务中完全从头学习(from scratch),二是仅仅识别在训练期间见过的模式(recognizes patterns seen during training)。这是一个重要的区别,因为目前还不完全清楚模型在实际执行零样本、单样本或少量样本学习任务时到底是如何运作的,而“meta - learning”这个术语不偏向于任何一种解释,只是描述了这种内外循环的结构框架,为后续讨论模型行为留下了空间。
-
“in context - learning”(上下文学习)术语的定义
- “in context - learning”专门用于指代元学习中的内循环过程。在这个过程中,模型根据输入序列中的上下文信息(包括提供的示例和自然语言指令等)来进行学习和决策。例如,当模型收到一个新的任务描述和几个相关示例时,它会利用这些上下文信息来理解任务的要求,并尝试生成合适的回答或完成任务。这种学习方式强调了模型在特定上下文环境中快速适应和学习的能力,与传统的基于大量训练数据的学习方式有所不同。
-
“zero - shot”、“one - shot”和“few - shot”的进一步描述
- 这些术语根据在推理时提供给模型的示例数量来进一步细分。“zero - shot”表示不提供任何示例,模型仅根据自然语言描述来处理任务;“one - shot”表示除了自然语言描述外,仅提供一个示例;“few - shot”则表示提供少量(通常在模型上下文窗口允许范围内,如10 - 100个)示例。这些术语的重点在于描述模型在不同示例数量条件下的推理过程,而不涉及模型到底是真正在学习新任务还是仅仅识别已有模式,这个问题将在论文后续部分进行深入讨论。通过这样的术语定义,作者试图更精确地描述模型在不同场景下的行为和能力表现,为研究和评估语言模型的少样本学习能力提供了清晰的框架。
2.2 Meta-learning 在GPT和传统方法中区别
-
传统的 Meta-learning 方法:(如 MAML)通常依赖于模型的参数更新。在这种方法中,模型会通过多任务学习来调整其初始化,使其在新任务上能够快速适应。然而,GPT 的 Meta-learning 能力并不依赖于传统的参数更新方式。
-
Meta-learning 与 Prompt Engineering 的结合:
Meta-learning 的思想是让模型在多任务学习中学到如何通过最少的示例或提示快速适应新任务,而在 GPT 中,这种快速适应通常通过 prompt设计 实现。通过对任务进行 prompt 编程,GPT 学会了如何根据给定的提示来推理和生成输出。因此,GPT 的 Meta-learning 主要体现在 prompt 设计和少样本推理能力上。GPT 通过大规模的预训练模型(例如,GPT-3)学会了通过少量示例(或甚至没有示例)理解任务并生成输出。因此,GPT 通过 少样本学习 和 零样本学习 来“模拟” Meta-learning。 -
与传统 Meta-learning 方法的区别:
传统的 Meta-learning 方法(如 MAML)需要在多个任务上反复训练,并通过梯度更新调整模型参数。而 GPT 通过在预训练阶段学到的通用语言知识,能够通过简单的输入提示快速适应新任务,而无需进行梯度更新。
这使得 GPT 在少样本和零样本学习中的表现非常突出,因为它不需要对任务进行专门的训练或重新调整模型参数,而是能够直接利用其预训练的语言知识来解决问题。
Meta-learning 在 GPT 中的应用与传统方法的最大区别在于它不依赖于显式的参数更新或多任务训练过程,而是通过 预训练 和 prompt engineering 来实现任务的快速适应。
2.3 Meta-learning和Zero、One、Few-shot 区别
区别涉及它们在任务学习中的样本使用方式以及是否涉及模型参数的更新。下面详细对比这些概念,并讨论它们是否涉及参数更新。
总结比较:
| 特性 | Zero-shot | One-shot | Few-shot | Meta-learning |
|---|---|---|---|---|
| 定义 | 无任务特定数据,依赖预训练知识 | 仅通过一个示例来完成任务 | 通过少量示例学习任务 | 学会如何从多个任务中快速适应新任务 |
| 任务示例数 | 0 个示例 | 1 个示例 | 2~10 个示例 | 多任务的示例,目标是快速适应新任务 |
| 是否涉及参数更新 | 通常不涉及参数更新 | 通常不更新参数 | 可以微调参数 | 通常涉及参数更新 |
| 模型训练方式 | 使用预训练知识,直接推理 | 通常依赖于迁移学习 | 可能微调已有模型参数 | 在多个任务上训练,学习如何快速适应任务 |
| 目标 | 解决未见过的新任务 | 通过一个示例进行推理 | 在少量样本上快速学习新任务 | 训练模型从多个任务中学习,优化新任务学习 |
| 依赖的能力 | 强烈依赖通用知识和常识 | 依赖于强大的迁移学习能力 | 强烈依赖迁移学习和少量样本推理 | 学习如何调整学习策略并快速适应任务 |
核心区别:
- Zero-shot:依赖模型的预训练知识和常识,通常不更新参数。
- One-shot:依赖一个示例来完成任务,通常不更新参数,但可以进行微调。
- Few-shot:依赖少量示例来完成任务,可能会进行局部微调,更新部分参数。
- Meta-learning:通过在多个任务上训练,学习如何快速适应新任务,通常涉及参数的更新和调整。
Meta-learning (元学习)
- 定义:Meta-learning,也被称为“学习如何学习”,是一种使模型能够从多个任务中学习如何快速适应新任务的策略。模型通过在多个任务上训练来学会如何在面对新任务时迅速调整和优化其学习策略。
- 是否涉及参数更新:通常涉及参数更新。元学习的核心是让模型能够在面对新任务时,通过少量的训练步骤进行调整或微调。这种方法通常会使用一种称为 meta-optimizer 的算法来更新模型的参数,以便它能够更好地从少量样本中学习。常见的元学习方法(如 MAML)会通过多个任务的训练来学习如何进行有效的参数更新。
- 例子:如果一个模型被训练来识别不同类型的水果(任务1),然后再训练识别不同类型的动物(任务2),它学会如何从这两种任务中快速调整自己的学习策略。当模型遇到新的任务(例如,识别汽车)时,它能够在少量样本的帮助下快速适应,并进行有效的分类。
3、模型架构

图1:【左图为gpt1, 右图为gpt2】

图2:gpt3相对gpt2架构的改进
- 继承 GPT - 2 架构:GPT - 3 沿用了 GPT - 2 的模型和架构设计,包括其修改后的初始化方法、预归一化(pre - normalization)技术以及可逆分词(reversible tokenization)策略。这些技术在 GPT - 2 中已经被证明在一定程度上有助于提高模型的性能和训练效率,GPT - 3 在此基础上进一步改进和扩展。
- 注意力机制改进:与 GPT - 2 不同的是,GPT - 3 在 Transformer 层中使用了交替密集(alternating dense)和局部带状稀疏(locally banded sparse)的注意力模式,类似于 Sparse Transformer 中的设计。参考
模型参数说明:


| 参数名称 | 解释 |
|---|---|
| 模型名称(Model Name) | 用于区分GPT - 3的不同版本模型,从小到大依次为“GPT - 3 Small”到“GPT - 3 175B”(即“GPT - 3”),每个名称对应特定的参数配置。 |
| 模型参数数量(nparams) | 衡量模型复杂度和表达能力,指模型中可训练参数的总数,单位为百万(M)或十亿(B)。M(百万Million)=10^6 ; B(十亿Billion)=10^9 。例如“GPT - 3 Small”有1.25亿个参数,参数越多模型学习语言模式的能力越强,但训练资源需求也越高。 |
| 层数(nlayers) | 表示模型中Transformer层的数量,Transformer层对输入文本进行转换和特征提取,层数越多越能捕捉深层次语义和语法结构,但可能面临梯度问题。如“GPT - 3 Small”有12层,“GPT - 3 175B”有96层。 |
| 模型维度(dmodel) | 决定Transformer架构中每个瓶颈层(bottleneck layer)单元数量,影响输入信息表示维度,高维度可表示更丰富信息,但计算成本和内存需求增加。像“GPT - 3 Small”的dmodel为768,“GPT - 3 175B”为12288,且前馈层大小通常是瓶颈层的四倍。 |
| 注意力头数量(nheads) | 代表Transformer架构中多头注意力机制的头数,多头注意力可从多角度关注文本,头数越多捕捉语义关系能力越强,但计算复杂度增加。例如“GPT - 3 Small”有12个注意力头,“GPT - 3 175B”有96个。 |
| 注意力头维度(dhead) | 每个注意力头的维度大小,决定关注信息粒度和表示能力,与模型维度相关(dmodel = nheads * dhead)。如“GPT - 3 Small”和“GPT - 3 Medium”的dhead为64,“GPT - 3 175B”为128。 |
| 批量大小(Batch Size) | 训练时一次迭代使用的样本数量,大的批量大小提高计算效率但需更多内存,小批量可能使梯度估计不稳定但有时利于收敛。如“GPT - 3 Small”和“GPT - 3 Medium”批量大小为0.5M,“GPT - 3 175B”为3.2M。 |
| 学习率(Learning Rate) | 控制模型训练中参数更新步长的超参数,影响收敛速度和性能。大学习率初期收敛快但可能振荡或发散,小学习率训练慢。如“GPT - 3 Small”学习率为6.0x10 - 4,“GPT - 3 175B”为0.6x10 - 4,训练中常结合衰减策略。 |
| dff | 前馈网络(feed - forward network)中的维度,决定了前馈网络内部计算的参数规模,影响模型对信息的转换和传递能力。 |
4、研究方法
4.1 数据集
数据集主要来源为Common Crawl,但发现未过滤或轻过滤版本质量低于精选数据集,因此采取三个改进步骤:下载并过滤Common Crawl(基于与高质量参考语料库相似性)、进行模糊去重(文档级,跨数据集)、添加高质量参考语料库(如扩展WebText、Books1、Books2和Wikipedia)。训练时数据集采样不按大小比例,高质量数据集采样更频繁,接受少量过拟合以换取更高质量训练数据。同时,由于模型训练数据来自互联网,可能存在与测试集重叠问题(数据污染),虽已尽力检测和处理,但仍可能对部分数据集结果有影响,对于受污染严重的数据集,根据情况选择不报告结果或标记星号。

附录A:通用爬取数据(Common Crawl)过滤详情,如 2.2 节所述,我们采用了两种技术来提升通用爬取数据集的质量:(1)对通用爬取数据进行过滤;(2)模糊去重。

表2.2:用于训练GPT-3的数据集。“训练组合中的权重”是指训练期间从给定数据集中抽取的示例的比例,我们故意不使其与数据集的大小成比例。因此,当我们训练3000亿标记时,一些数据集在训练期间最多被看到3.4次,而其他数据集的看到次数不到一次。
| 参数名称 | 解释 |
|---|---|
| Dataset | 列出了用于GPT - 3模型训练的五个数据集,分别是经过过滤的Common Crawl、WebText2、Books1、Books2和Wikipedia,它们共同构成模型的训练数据来源。 |
| Quantity (tokens) | 表示每个数据集的数据规模,以词元(token)为单位。例如Common Crawl(过滤后)有4100亿个词元,数据量最大;Wikipedia有30亿个词元,相对数据量较小。 |
| Weight in training mix | 指每个数据集在训练过程中所占的相对重要性权重。Common Crawl(过滤后)权重最高为60%,意味着模型训练时更多依赖该数据集学习语言模式;Wikipedia权重为3%,相对较低。 |
| Epochs elapsed when training for 300B tokens | 展示在训练达到3000亿词元过程中,每个数据集被使用的轮数。如Common Crawl(过滤后)经过0.44轮,WebText2经过2.9轮,该参数反映数据集在训练中的使用频率和重要性程度。 |
4.2 训练
表 2.1 显示了我们使用的参数设置。为了训练较大的模型而不运行内存溢出,我们在每个矩阵乘法内使用模型并行性的混合,并在网络的各层之间使用模型并行性。所有模型都在 Microsoft 提供的高带宽集群的一部分上的 V100 GPU 上进行了训练。训练过程和超参数设置的详细信息在附录 B 中进行了描述。
训练参数设置:

表 2.1:我们训练的模型的大小、架构和学习超参数(以标记为单位的批量大小和学习率)。所有模型都经过了总共 3000 亿个代币的训练。

附录B:模型训练细节,训练过程和超参数设置的详细信息在附录 B 中进行了描述
4.3 评估
-
少样本学习评估
- 从任务训练集随机抽取K个示例(0 - 2048,取决于任务和模型上下文窗口)作为条件评估测试集,对于LAMBADA和Storycloze(无监督训练集)从开发集抽取示例评估测试集,Winograd(原始版本)直接从其数据集抽取示例。K值通常越大越好,对于有开发集和测试集的任务,先在开发集上实验确定最佳K值再用于测试集;对于一些任务还使用自然语言提示(除示例外或当K = 0时)。
- 在进行少样本学习评估时,对于评估集中的每一个示例,都需要为模型提供一些上下文信息来辅助其进行预测和判断。这里的做法是从该任务对应的训练集中随机抽取 K 个示例,将这些抽取的示例作为条件(conditioning)提供给模型。这些条件示例之间的分隔方式根据任务的不同有所区别,有的任务使用 1 个换行符分隔,有的任务则使用 2 个换行符分隔。这样做的目的是为了让模型在面对评估集中的新示例时,能够参考这些从训练集中抽取的相关示例,从而更好地理解任务要求并做出合理的响应。例如,在一个文本分类任务中,如果要评估一个新句子的类别,从训练集中抽取的 K 个句子(包含类别标签)可以帮助模型学习到不同类别句子的特征和模式,进而对新句子进行分类预测。
- 特殊任务的样本来源
对于 LAMBADA 和 Storycloze 任务,由于没有可用的监督训练集,所以从开发集中抽取条件示例,并在测试集上进行评估。而对于 Winograd(原始版本,非 SuperGLUE 版本)任务,因为只有一个数据集,所以直接从该数据集中抽取条件示例。 - K 值的选择
K 值可以是从 0 到模型上下文窗口允许的最大值之间的任意值,所有模型的上下文窗口大小为 nctx = 2048,通常能容纳 10 到 100 个示例。一般来说,较大的 K 值通常(但不总是)会使模型表现更好,因为更多的示例可以提供更丰富的上下文信息。当有单独的开发集和测试集时,会先在开发集上尝试几个不同的 K 值,通过比较模型在这些 K 值下的性能,选择表现最佳的 K 值,然后将其应用于测试集,以确保在测试集上得到最可靠的评估结果。
-
不同任务类型评估方法
- 选择题任务:提供K个上下文加正确完成示例,后跟一个仅上下文示例,比较每个完成选项的语言模型似然(多数任务按每词元似然比较,少数数据集如ARC、OpenBookQA、RACE通过计算无条件概率归一化似然)。
- 二分类任务:给选项赋予更有语义意义的名称(如“True”或“False”)后按选择题方式处理,有时也采用类似[RSR + 19]的任务框架(详见附录G)。
- 自由形式完成任务:使用与[RSR + 19]相同参数的束搜索(束宽4,长度惩罚α = 0.6),根据数据集标准使用F1相似度分数、BLEU或精确匹配评分。
-
结果报告
- 最终结果在测试集(公开时)上报告,对于模型太大无法在测试服务器运行的情况,报告开发集结果,少数数据集(SuperGLUE、TriviaQA、PiQa)在测试服务器提交结果(仅提交200B少样本结果,其他报告开发集结果)。
4.4计算量和性能关系

图 3.1:使用计算平滑扩展性能。性能(以交叉熵验证损失衡量)随用于训练的计算量遵循幂律趋势。在 [ K M H + 20 ] [KMH+20] [KMH+20] 中观察到的幂律行为继续了另外两个数量级,与预测曲线的偏差很小。对于此图,我们从计算和参数计数中排除了嵌入参数。语言模型的性能遵循幂律(power - law)。
这张图展示了验证损失(Validation Loss)与计

&spm=1001.2101.3001.5002&articleId=144482248&d=1&t=3&u=cf4ff5f29cea4c6783098d8d74227371)

被折叠的 条评论
为什么被折叠?



