循环神经网络RNN
(尤其是 LSTM
、GRU
网络)已经牢牢地被确定为序列建模和转导transduction
问题的 state-of-the-art
方法。此后,许多努力继续推动循环语言模型 recurrent language model
和 encoder-decoder
的发展。
循环模型通常沿输入序列和输出序列的 symbol position
来考虑计算。将 position
和 step
在计算期间对齐 aligning
,这些模型生成一系列 hidden state
hidden state
input
的函数。这种固有的序列性质 sequential nature
阻止了训练样本内的并行化,而这种样本内的并行化在更长的序列长度下变得至关重要,因为内存约束限制了样本之间的 batching
。最近的工作通过分解factorization
和条件计算 conditional computation
显著提高了计算效率,同时在后者的 case
中(即,条件计算)也提高了模型性能。然而,序列计算sequential computation
的基本约束仍然存在。
注意力机制已经成为各种任务中引人注目的序列建模和转导模型 sequence modeling and transduction model
的组成部分,它允许建模依赖性而无需考虑这些相互依赖的项在 input
序列或 output
序列中的距离。然而,除了少数情况之外,这种注意力机制与RNN
结合使用。
在论文 《Attention Is All You Need》
中,作者提出了 Transformer
,这是一种避免循环 recurrence
的模型架构。Transformer
完全依赖注意力机制来抽取 input
和 output
之间的全局依赖关系。Transformer
可以实现更高的并行化,并且在八个 P100 GPU
上经过短短 12
个小时的训练后就可以在翻译质量方面达到新的 state-of-the-art
。
背景:
减少序列计算这一目标也构成了 Extended Neural GPU
、ByteNet
、ConvS2S
的基础,它们都使用卷积神经网络作为基础构建块 basic building block
,并行地为所有 input position
和 output position
来计算 hidden representation
。在这些模型中,联系 relate
来自两个任意 input position
或 output position
的信号所需操作的数量,随着 position
之间的距离而增加:对于 ConvS2S
呈线性增加,而对于 ByteNet
则呈对数增加。这使得学习远距离位置之间的依赖性变得更加困难。
在 Transformer
,这种数量被降低到常数级(effective resolution
为代价(由于attention-weighted
加权平均 ),但是我们使用多头注意力 Multi-Head Attention
来抵消这种影响。
自注意力self-attention
(有时被称作 intra-attention
)是一种将单个序列的不同位置关联起来从而计算序列的 representation
的注意力机制。自注意力已经成功应用于各种任务,包括阅读理解reading comprehension
、抽象摘要abstractive summarization
、文本蕴含textual entailment
、学习任务无关的 sentence representation
。
端到端记忆网络memory network
基于循环注意力机制 recurrent attention mechanism
而不是序列对齐循环 sequence-aligned recurrence
,并且已被证明在简单的语言问题和语言建模任务中表现良好。
然而,据我们所知,Transformer
是第一个完全依赖自注意力来计算其 input
和 output
的 representation
而不使用 sequence-aligned RNN
或卷积的模型。在接下来部分中,我们将描述 Transformer
、自注意力的启发,并讨论它相对于 《Neural GPUs learn algorithms》
、《Neural machine translation in linear time》
、《Structured attention networks》
等模型的优势。
大多数有竞争力的神经序列转导模型 neural sequence transduction model
具有 encoder-decoder
结构。这里,encoder
将 symbol representation
的输入序列 continuous representation
的序列 symbol representation
(one-hot
向量),hidden representation
。 给定 decoder
然后生成 symbol
的一个输出序列 symbol representation
(one-hot
向量)。在每个 step
,模型都是自回归auto-regressive
的,在生成下一个输出symbol
时使用所有前面生成的 symbol
作为额外的输入。
Transformer
遵循这种整体架构,同时为 encoder
和 decoder
使用堆叠的 self-attention
的和 point-wise
的全连接层,分别如下图的左半部分和有半部分所示。
下图中的
attention
的三个输入中,最右侧为query
而其它两个输入分别为key,value
。注意,key
的数量和value
的数量相等。
Encoder
:encoder
由 multi-head self-attention mechanism
, 第二个子层是简单的、position-wise
的全连接前馈神经网络。我们在两个子层中的每个子层周围使用残差连接 residual connection
,然后进行 layer normalization
。即,每个子层的输出为:
其中:
为了有助于这些残差连接,模型中的所有子层以及 embedding layer
都会产生维度
注意,图中黄色框内的标注是
Add & Norm
,即Add
在前、Norm
在后,也就是LayerNorm
作用在残差连接之后。
Decoder
:decoder
也是由 decoder
的每个层包含三个子层,其中有两个子层与 encoder
子层相同,而第三个子层对 encoder stack
的输出执行 multi-head attention
。
与 encoder
类似,我们在每个子层周围使用残差连接,然后进行 layer normalization
。我们还修改了 decoder stack
中的 self-attention
子层,从而防止它关注后续的 position
(即,masked self-attention
)。这种 masking
确保对 position
注意力函数可以描述为:将一个 query
和一组 key-value pair
映射到 output
,其中 query, key, value, output
都是向量。output
被计算为 value
的加权和,其中每个 value
的权重是由一个函数来计算(即,注意力函数),该函数以 query, key
作为输入。
Scaled Dot-Product Attention
:我们称我们提出的注意力为 Scaled Dot-Product Attention
,如下图所示。输入由三部分组成:维度为 query
、维度为 key
、维度为 value
。我们将单个 query
和所有的 key
计算内积,然后内积的结果除以 softmax
函数从而获得 value
的权重。
这里要求
query
向量的维度和key
向量的维度相同,都是。
在实践中,我们同时计算一组 query
的注意力函数,其中将 query
打包到一个矩阵 key
和 value
也被打包到矩阵 output
矩阵计算为:
假设有
个 query
、个 key
、个 value
(要求key
的数量和value
的数量相同),则:
两种最常见的注意力函数为:加性注意力additive attention
、内积注意力dot-product (multiplicative) attention
。
内积注意力与我们的算法相同,除了我们使用了
因为维度越大,则内积中累加和的项越多,内积结果越大。很大的数值会导致
softmax
函数位于饱和区间,梯度几乎为零。
加性注意力通过具有单隐层的前馈神经网络来计算注意力函数。
additive attention
(也称作Bahdanau Attention
) 的原理为:其中:
为 attention
向量,为待学习的参数,为非线性函数。 为第 个 query
,为第 个 key
,为第 个 value
。将 query
向量映射到公共空间,将 key
向量映射到公共空间,因此query
向量和key
向量可以为不同的维度。它们都是待学习的权重。给出第 个 query
在各个position
的注意力权重,position
的数量为。
虽然这两种注意力在理论上的复杂度相同,但是内积注意力在实践中更快且更节省内存空间,因为它可以使用高度优化的矩阵乘法代码来实现。
Multi-Head Attention
:与执行单个注意力函数 attention function
(具有 query, key, value
)不同,我们发现将 query, key, value
线性投影 query, key, value
分别投影到
然后,在每个 query, key, value
的投影后的版本上,我们并行执行注意力函数,每个注意力函数产生 output
。这些 output
被拼接起来并再次投影,产生 final output
,如上图右侧所示。
多头注意力multi-head attention
允许模型在每个position
联合地关注jointly attend
来自不同 representation
子空间的信息。如果只有单个注意力头single attention head
,那么平均操作会抑制这一点。
其中待学习的投影矩阵为:
在这项工作中,我们使用 attention head
。对于其中每个注意力头,我们使用 head
的维度减小,因此总的计算成本与完整维度的单头注意力single-head attention
相近。
注意力在 Transformer
中的应用:Transformer
以三种不同的方式使用多头注意力:
encoder-decoder attention
层中,query
来自于前一个 decoder layer
,key
和 value
来自于 encoder
的输出。这允许 decoder
中的每个位置关注 input
序列中的所有位置。这模仿了 sequence-to-sequence
模型中典型的 encoder-decoder attention
注意力机制。encoder
包含自注意力层。在自注意力层中,所有的 query, key, value
都来自于同一个地方(在这个 case
中,就是 encoder
中前一层的输出)。encoder
中的每个位置都可以关注 encoder
上一层中的所有位置。decoder
中的自注意力层允许 decoder
中的每个位置关注 decoder
中截至到当前为止(包含当前位置)的所有位置。我们需要防止 decoder
中的信息向左流动,从而保持自回归特性。我们通过在 scaled dot-product attention
内部屏蔽掉 softmax input
的某些 value
来实现这一点(将这些 value
设置为 value
对应于无效连接illegal connection
。除了注意力子层之外,我们的 encoder
和 decoder
中的每一层还包含一个全连接的前馈神经网络,该网络分别且相同地应用于每个位置。该网络包含两个线性变换,中间有一个 ReLU
激活函数:
虽然线性变换在不同位置上是共享的(即,相同的参数),但是它们在层与层之间使用不同的参数。
该层的另一种描述是: kernel size = 1
的两个卷积,其中 input
和 output
的维度为
, 。这里采用膨胀的方式,选择 从而使得 representation
维度先增大再减小。
与其它序列转导模型类似,我们使用学到的 embedding
将 input token
和 output token
转换为维度 softmax
函数将 decoder output
转换为 next-token
的预测概率。
在我们的模型中,我们在两个 embedding layer
(输入层)和 pre-softmax
线性变换(输出层)之间(共计三个权重矩阵)共享相同的权重矩阵,类似于 《Using the output embedding to improve language models》
。在 embedding
层中,我们将这些权重乘以
这里有两个输入层,分别来自于
encoder input
和decoder input
。而输出层来自于decoder
。三个
embedding
矩阵共享的前提是:input symbol
空间和output symbol
空间是相同的,例如,输入是中文的文本,输出是中文摘要,那么input symbol
和output symbol
都是中文单词。否则,encoder
的embedding
矩阵无法和decoder
的 两个embedding
矩阵共享。但是无论如何,decoder
的两个embedding
矩阵之间可以共享。为什么要把
embedding
矩阵乘以?论文并未说明原因。有一种解释说是放大 embedding
使得它的量级和positional embedding
的量级相同。可以通过实验来验证。
由于我们的模型不包含递归和卷积,为了让模型利用序列的次序 order
,我们必须注入一些关于序列中 token
的相对位置或绝对位置的信息。为此,我们在 encoder stack
和 decoder stack
底部的 input embedding
中添加了 positional encoding
。positional encoding
与 embedding
具有相同的维度
positional encoding
有很多选择,可以选择固定的也可以选择可学习的。
这里我们选择固定的方式,采用不同频率的正弦函数和余弦函数:
其中:position
,positional encoding
的每个维度对应于一个正弦曲线,正弦曲线的波长从
我们选择这个函数是因为我们假设它可以让模型通过相对位置来轻松地学习关注 attend
,因为对于任意固定的偏移量
我们还尝试使用可学习的 positional embedding
,发现这两个版本产生了几乎相同的结果。我们选择了正弦版本,因为它可以让模型推断出比训练期间遇到的序列长度更长的序列。
正弦版本的
positional embedding
可以应用到训练期间unseen
的位置,而可学习的positional embedding
无法实现这一功能。
这里我们将自注意力层与循环层、卷积层进行各个方面的比较。这些层通常用于将一个可变长度的 symbol representation
序列 long-range dependency
的路径长度。
学习远程依赖是许多序列转导任务中的关键挑战。影响学习这种依赖的能力的一个关键因素是:前向传播信号和反向传播信号必须在网络中传输的路径长度。input
序列和 output
序列中任意位置组合之间的路径越短,那么就越容易学习远程依赖。因此,我们还比较了由不同类型的层组成的网络中,任意input
位置和 output
位置之间的最大路径长度。
如下表所示:
自注意力层在所有位置都关联一个
并行化指的是:为了计算指定位置的输出,模型需要依赖已经产生的多少个输出?
在计算复杂度方面,当序列长度 representation
维度 state-of-the-art
模型常见的 case
),self-attention
层比循环层更快。
为了提高涉及非常长序列(即
具有 kernel width
input position
和 output position
组成的所有的 pair
。如果希望连接所有的 input position
和 output position
,则需要堆叠 contiguous kernel
) 或 dilated convolution
),并且增加了网络中任意两个位置之间最长路径的长度。
卷积层通常比循环层更昂贵 expensive
(贵 point-wise feed-forward layer
的组合(这就是我们在 Transformer
模型中采用的方法)。
作为附带的好处,自注意力可以产生更可解释的模型。我们从 Transformer
模型中检查注意力的分布,并在下图中展示和讨论了示例。不仅单个注意力头清晰地学习执行不同的任务,而且许多注意力头似乎还表现出与句子的句法结构syntactic structure
和语义结构 semantic structure
有关的行为。
如下图所示为 encoder
六层自注意力层的第五层中,making
这个单词的多头自注意力分布(不同的颜色代表不同的头,颜色的深浅代表注意力大小)。making
这个单词的自注意力分布似乎倾向于构成短语 making ... more difficult
。
如下图所示为 encoder
六层自注意力层的第五层中的两个注意力头。上半部分为 head 5
的完全的注意力分布(每个单词),下半部分为单词 its
在 head 5
和 head 6
中的注意力分布。
如下图所示为 encoder
六层自注意力层的第五层中的两个注意力头。
Training Data and Batching
:
我们在由大约 450
万个 sentence pair
组成的标准 WMT 2014 English-German
数据集上进行了训练。句子使用 byte-pair encoding: BPE
(《Massive exploration of neural machine translation architectures》
) 进行编码,该编码有一个共享的 source-target vocabulary
,词典规模大约 37000
个 token
。
BPE
算法:
- 语料库中每个单词表示为字符的拼接,其中
</w>
表示词尾。- 将每个单词拆分为字符,并计算字符出现的次数。这些字符添加到词表
vocabulary
。- 寻找出现频次最高的
character pair
,合并它们并添加到词表。这些合并的character pair
称作word-piece
。- 重复执行上一步(即,“寻找--合并”),直到词表达到指定的规模。
对于 English-French
,我们使用了更大的 WMT 2014 English-French
数据集,该数据集由 3600
万个 sentence pair
组成。这些句子被拆分为 token
,并且使用大小为 32k
的 word-piece vocabulary
。
sentence pair
按照近似的序列长度被 batch
在一起。每个训练 batch
包含一组 sentence pair
,大约共计 25k
个 source token
和 25k
个 target token
。
硬件和 schedule
:我们在一台配备 8
个 NVIDIA P100 GPU
的机器上训练我们的模型。
base model
(使用我们在整篇论文中描述的超参数),每个 training step
大约需要 0.4
秒。我们对 base model
进行了总共 100k
步(即 12
小时)。big model
(如下表最后一行所示),每个 training step
大约需要 1.0
秒。我们对 base model
进行了总共 300k
步(即 3.5
天)。优化器:我们使用 Adam optimizer
优化器,其中
即:
warmup_steps
训练 step
中线性增加学习率。这里我们使用 warmup_steps = 4000
。step number
的平方根倒数来按比例降低学习率。为什么除以
?论文并未给出原因。这样做的效果是:模型越大则学习率越小。
正则化:在训练期间我们使用三种类型的正则化:
Residual Dropout
:
我们将 dropout
应用于每个子层的 output
,然后将其和子层的 input
相加(即残差连接)最后进行 layer normalization
。即:
此外,我们将 dropout
同时应用于 encoder stack
和 decoder encoder
中的 sum embedding
,这个 sum embedding
是 embedding
和 positional encoding
相加得到的。
对于 base model
,我们使用 dropout rate
为
Label Smoothing
:在训练期间,我们采用了 label smoothing
。这会损害 perplexity
指标,因为模型会变得更加不确定,但是会提高准确率指标和 BLEU
得分。
语言模型困惑度
perplexity
的定义为:其中
为一个序列, 为这个序列的概率。
配置(所有超参数是在对验证集进行实验之后再选择的):
base model
使用单个模型,该模型是通过平均最后 5
个 checkpoint
获得的,其中 checkpoint
是以 10
分钟的间隔写入的。 big model
也是会用单个模型,但是它平均了最后 20
个 checkpoint
。
checkpoint
平均指的是参数值取平均(而不是输出结果取平均)。
我们使用 beam size = 4
和 length penalty
beam search
。
在解码器的每个位置始终生成
beam size
个候选,直到出现结束标记。用于惩罚较短的生成序列: 其中
为序列 的长度。 越大则修正后的困惑度越小。
我们将推断期间的最大输出长度设置为 input length + 50
,但是在可能的情况下输出会提前结束。
下表总结了我们的结果,并将我们的翻译质量和训练成本,与文献中的其它模型架构进行了比较。我们通过将训练时间、使用的 GPU
数量、以及每个 GPU
的单精度浮点运算能力的估计值相乘,从而估计用于训练模型的浮点运算的数量。对于 K80, K40, M40, P100
,我们取它们的单精度浮点运算能力分别为 2.8, 3.7, 6.0, 9.5 TFLOPS
。
WMT 2014 English-to-German
翻译任务:big transformer model
比先前报告的最佳模型(包括 ensemble
模型)在 BLEU
指标上高出 2.0
以上,达到了一个新的 state-of-the-art
的 BLEU
得分 28.4
。big transformer model
在 8
个 P100 GPU
上训练耗时 3.5
天。
甚至我们的 base model
也超越了所有先前发布的模型和 ensembles
,并且 base model
的训练成本仅仅是任何其它有竞争力的模型的一小部分。
bilingual evaluation understudy: BLEU
评估机器翻译质量。其思想是:机器翻译结果越接近专业人工翻译的结果,则越好。其中:
BP
为句子简短惩罚Brevity Penalty
,迫使机器翻译的长度与参考翻译的长度接近。其中
为机器翻译的长度, 为参考翻译的长度。
代表机器翻译和参考翻译之间的 n-gram
匹配最大的n
值。通常1-gram
匹配结果代表有多少个单词被独立地翻译出来,而2-gram
以上的匹配结果代表翻译的流畅度。通常最大为 4
。
代表 n-gram
匹配结果的权重,通常选择。
衡量机器翻译和参考翻译之间 n-gram
匹配结果,即n-gram precision
:其中:
表示翻译的所有句子的集合, 表示某个翻译的句子, 表示某个 n-gram
项。
表示某个 n-gram
项在所有翻译结果中出现的次数。
表示某个 n-gram
项在所有翻译结果中出现的截断次数:而
为 n-gram
项在参考译文中出现的次数。因此这里的“截断”指的是被ground-truth
频次所截断。
WMT 2014 English-to-French
翻译任务:big transformer model
达到了 41.0
的 BLEU
得分,优于先前发布的所有单一模型,训练成本小于先前 state-of-the-art
模型的 1/4
。
注意:为 English-to-French
而训练的Transformer big model
使用 dropout rate
为 0.3
。
41.0
对不上?从下表结果来看应该是41.8
。
为了评估 Transformer
不同组件的重要性,我们以不同的方式改变了我们的 base model
,并衡量了验证集(newstest2013
)上 English-to-German
翻译性能的变化。我们使用了上一节中描述的 beam search
,但是没有使用 checkpoint
平均。实验结果如下表所示。
在 (A)
行中,我们改变了注意力头的数量以及注意力 key, value
的维度,并保持计算量不变。可以看到,虽然单头注意力要比最佳配置差 0.9 BLEU
,但是如果 head
数量过多效果也会下降。
在 (B)
行中,我们观察到降低注意力 key
的维度 compatibility function
并不容易确定,采用比内积更复杂的 compatibility function
可能是有益的。
compatibility function
就是计算未归一化注意力分的函数。 此外,降低
降低了模型容量(模型参数从 65M
降低到60M
和58M
)。
在 (C)
行中,我们观察到,正如预期的那样,更大的模型更好。
在 (D)
行中,我们观察到,dropout
和 label smoothing
有助于缓解过拟合,但是需要选取合适的 dropout rate
和 label smoothing rate
。
在 (E)
行中,我们用可学习的 positional embedding
代替固定的正弦 positional encoding
,并观察到与 base model
几乎相同的结果。
为了评估 Transformer
是否可以泛化到其它任务,我们对英语成分分析 English constituency parsing
任务进行了实验。这项任务提出了特定的挑战:output
受到强烈的结构性约束,并且明显比 input
更长。此外,RNN sequence-to-sequence model
无法在小数据领域获得 state-of-the-art
结果。
我们在Penn Treebank
的 Wall Street Journal: WSJ
部分(大约 40k
个训练句子)上训练了一个 4
层 transformer
。对于该任务,我们使用 16k token
的词典 vocabulary
。
我们还在半监督环境中训练了相同配置的 transformer
,使用来自大约 1700
万个句子的更大的 high-confidence
和 BerkleyParser
的数据集。对于该任务,我们使用 32k token
的词典。
我们仅在 Section 22
验证集上进行了少量实验来选择以下超参数:dropout
(attention
和 residual
上的 dropout
)、学习率、beam size
。所有其它超参数保持与 English-to-German base translation model
相同。在推断期间,我们将最大输出长度增加到 input length + 300
。对于 WSJ only
和半监督任务,我们都使用 beam size = 21
和
实验结果如下表所示,可以看到:
Recurrent Neural Network Grammar
之外的所有先前报告的模型得到了更好的结果。RNN sequence-to-sequence model
相比,即使仅在具有 40k
个句子的 WSJ
训练集上进行训练,Transformer
的性能也超越了 Berkeley- Parser
。像 Transformer
这样的 parallel-in-time
架构解决了RNN
的一个重要缺陷:RNN
固有的序列计算sequential computation
阻止了输入序列中各元素的并行化。同时 Transformer
也解决了序列较长时梯度消失的问题。Transformer
模型完全依靠自注意力机制。这种机制不仅可以直接并行化,而且由于每个symbol
的 representation
也直接访问到所有其他symbol
的 representation
,这导致了整个序列中有效的全局感受野 global receptive field
。
然而,值得注意的是,Transformer
具有固定数量的层,放弃了RNN
对学习迭代式转换 iterative transformation
或递归式转换recursive transformation
的归纳偏置 inductive bias
。我们的实验表明:这种归纳偏置可能对一些算法和语言理解任务至关重要,Transformer
不能很好地泛化到训练期间没有遇到的输入长度。
在论文 《Universal Transformer》
中,作者介绍了Universal Transformer: UT
,这是一个parallel-in-time
的递归的自注意力序列模型,它可以作为Transformer
模型的泛化,在广泛的具有挑战性的sequence-to-sequence
任务上产生提升的理论能力和改进的结果。 Universal Transformer
结合了像Transformer
这样的前馈序列模型的并行能力 parallelizability
和全局感受野、以及RNN
的循环归纳偏置,这似乎更适合一系列的算法和自然语言理解的sequence-to-sequence
问题。顾名思义,与标准的 Transformer
相比,在某些假设下,Universal Transformer
可以被证明是图灵完备的。
在每个recurrent step
中,Universal Transformer
使用自注意力机制并行地refine
序列中所有 symbol
的 representation
,然后跟着一个深度可分离卷积depth-wise separable convolution
或 position-wise fully-connected layer
(在所有position
和time-step
中共享),如下图所示。作者还添加了一个动态的逐位置停机机制 per-position halting mechanism
,允许模型动态选择每个symbol
所需的refinement step
数量,并首次表明这样的条件计算机制conditional computation mechanism
事实上可以提高几个较小的结构化的算法和语言推理任务的准确性(尽管它在机器翻译任务上的结果略有下降)。
论文强有力的实验结果表明:Universal Transformer
在广泛的任务中的表现优于 Transformer
和LSTM
。
相关工作:
当运行一个fixed
数量的 step
时,Universal Transformer
相当于一个跨所有层共享参数的 multi-layer Transformer
。这在一定程度上类似于Recursive Transformer
,它在不同的深度上共享了self-attention layer
的权重。
另一种可能更 informative
的描述,Universal Transformer
的方式是:作为一个并行的 RNN block
(每个symbol
一个RNN block
,共享参数)来同时演化每个symbol
的 hidden state
(通过在每个 step
关注前一个 step
的hidden state
序列来产生)。这样,它与 Neural GPU
和 Neural Turing Machine
等架构有关。因此,Universal Transformer
保留了原始 feed-forward Transformer
模型有吸引力的计算效率,但增加了RNN
的recurrent inductive bias
。此外,利用动态停机机制,Universal Transformer
可以根据输入数据自动选择 processing step
的数量。
Universal Transformer
和其他序列模型之间的联系从架构上看是显而易见的: 如果我们将recurrent step
限制为一个,它将是一个Transformer
。
但是,考虑 Universal Transformer
和 RNN
以及其他网络之间的关系更为有趣,在这些网络中,递归发生在时间维度上。表面上看,这些模型似乎密切相关,因为它们也是递归的。但有一个关键的区别:
RNN
这样的time-recurrent
模型不能在递归步骤中访问所有的记忆 memory
(只能访问最近的一个记忆)。这使得它们在计算上更类似于自动机automata
,因为在递归部分唯一可用的记忆是一个固定尺寸的状态向量fixed-size state vector
。Universal Transformer
可以关注整个previous layer
,允许它在recurrent step
中访问所有的记忆。给定足够的内存,Universal Transformer
在计算上是通用的,即它可以模拟任何图灵机Turing machine
,从而解决了标准Transformer
模型的一个缺陷。
除了在理论上有吸引力外,我们的结果表明:这种增加的表达性也导致了在几个具有挑战性的序列建模任务上的准确性的提高。这缩小了在机器翻译等大规模任务上与Neural Turing Machine
或Neural GPU
等模型之间的差距。
为了说明这一点,我们可以将 Universal Transformer
简化为一个 Neural GPU
。忽略decoder
并将 self-attention
模块(即带有残差连接的self-attention
)简化为恒等映射,并且假设转移函数是卷积。如果我们将循环step
的总数 Neural GPU
。
Universal Transformer
和 Neural Turing Machine
之间也存在类似的关系。Neural Turing Machine
每个 step
的single read/write
操作可以由 Universal Transformer
的全局的、并行的representation revision
来表达。
另一个相关的模型架构是端到端记忆网络Memory Network
。然而,与端到端记忆网络相比,Universal Transformer
使用的 memory
对应于与其输入或输出的individual position
对齐的状态。此外,Universal Transformer
遵循 encoder-decoder
的配置,在大规模 sequence-to-sequence
的任务中实现了有竞争力的性能。
Universal Transformer
将以下关键属性结合到一个模型中:
Weight sharing
:我们用一种简单的权重共享形式来扩展Transformer
,从而在inductive bias
和模型表达力之间取得了有效的平衡。
由于权重共享,所以
Universal Transformer
的模型大小要远远小于标准的Transformer
。
Conditional computation
:我们为Universal Transformer
配备了动态停机能力。与固定深度的 Universal Transformer
相比,它显示了更强的结果。
Universal Transformer
是基于常用的encoder-decoder
架构,它的encoder
和decoder
都是通过将一个 RNN
分别应用于输入和输出序列的每个位置的 representation
来操作的,如下图所示。然而,与常规 RNN
不同,Universal Transformer
不是在序列中的 position
上递归(沿着宽度方向),而是在每个 position
的 depth
上递归(沿着高度方向)。
在每个 recurrent time-step
,每个位置的 representation
在两个 sub-step
中被并行地修改:
vector representation
,该 representation
是由前一个time step
的所有其他位置的representation
融合而来。position
和 time
共享)。由于递归可以应用任何次数,这意味着Universal Transformer
可以有可变的深度(per-symbol processing step
的数量)。相比之下,Transformer
和 stacked RNN
只有固定的深度。
更完整的架构如下图所示:
给定一个长度为 embedding
矩阵,它的第 symbol
的 embedding
向量 Universal Transformer
通过应用Transformer
的多头内积自注意力机制 multi-headed dot-product self-attention mechanism
,在 step
representation
transition function
。我们还在这些功能块function block
周围添加了残差连接,并应用了 dropout
和layer normalization
。
更具体地说,我们使用缩放的内积注意力:
其中
我们使用有
其中:
在 step
Universal Transformer
然后计算所有 representation
LayerNorm
作用在残差连接之后,而不是之前。
其中:
Transition
为转移函数。根据任务,我们使用两种不同的转移函数之一:要么是可分离的卷积、要么是前馈神经网络(由两个线性投影以及中间的的单个 Relu
激活函数组成,逐位置应用)。
coordinate embedding
,通过计算正弦的 position embedding
向量获得:
给出了位置维度的信息, 给出了时间维度的信息。
经过 step
(每个 step
并行地更新输入序列的所有位置),Universal Transformer encoder
的 final output
是
decoder
与 encoder
的基本递归结构相同。然而,在self-attention
函数之后,decoder
额外还使用多头内积注意力函数来关注 encoder
的 final representation
query
decoder representation
投影得到,而 key
value
encoder final representation
投影得到。
是否可以对
decoder
和encoder
应用不同的?理论上并没有约束强制要求 decoder
和encoder
迭代相同的次数。
像 Transformer
模型一样,Universal Transformer
是自回归的。
Universal Transformer
一次产生一个 symbol
的输出,其中 decoder
仅仅依赖已经产生的输出位置。decoder
的目标输出就是输入左移一个位置。最后,per-symbol target distribution
是通过应用线性变换 final decoder state
映射到 output vocabulary
softmax
进行按行的归一化:
其中:
这里我们用
来区分 encoder
和decoder
的最后一层的representation
。都是 decoder
的输入。
为了从模型中生成:
encoder
要对输入序列运行一次前向传播。decoder
从而消耗所有已经生成的symbol
,同时为下一个输出位置的symbol
生成一个额外的分布。然后,我们通常对最高概率的symbol
进行采样从而作为next symbol
(用于decoder
的下一轮 RNN
迭代)。如果是训练期间,那么
decoder
每一轮迭代都使用decoder
的目标输出右移一位作为decoder input
。但是在推断期间,decoder
的目标输出不存在,因此需要用到decoder
在每一轮的输出。
在序列处理系统中,某些 symbol
通常比其他 symbol
更 ambiguous
。因此,将更多的处理资源分配给这些更ambiguous
的 symbol
是合理的。Adaptive Computation Time: ACT
是一种机制,用于动态调节标准 RNN
中处理每个 input symbol
所需的计算步(称为 ponder time
),它基于模型在每个step
预测的标量停机概率 halting probability
。
受此启发,Universal Transformer
为每个位置(即每个 per-symbol self-attentive RNN
)添加了一个动态 ACT
停机机制。一旦某个 symbol
的 recurrent block
停机,它的状态就被简单地复制到下一步,直到所有的block
都停机,或者我们达到最大的 step
数量 encoder
的final output
是以这种方式产生的最后一层 representation
。
bAbi question answering
数据集:由 20
个不同的任务组成,其目标是在给定一些英文句子的前提下回答一个问题,这些给定的句子编码了潜在的 multiple supporting facts
。
这么做的目的是:通过要求对每个故事中呈现的语言事实进行某种类型的推理,来衡量各种形式的语言理解 language understanding
。
为了对输入进行编码,与《Tracking the world state with recurrent entity networks》
类似:
首先,我们通过应用一个学到的乘性的 positional mask
到每个单词的 embedding
,并 sum
聚合所有单词的 embedding
,从而编码故事中的每个 fact
。
因为每个
fact
包含多个单词,所以需要对word embedding
进行聚合从而得到fact emebdding
。
然后,我们以同样的方式嵌入问题,然后用这些 fact embedding
和 question embedding
馈入 Universal Transformer
。
模型可以在每个任务上单独训练(train single
)或在所有任务上联合训练(train joint
)。下表总结了我们的结果。我们用不同的初始化运行了 10次
,并根据验证集上的表现挑选出最佳模型。
可以看到:Universal Transformer
和带有动态停机的Universal Transformer
在所有任务中的平均误差和失败任务数方面都取得了SOTA
的结果。
括号中的指标代表失败任务数,如
(10/20)
表示在20
个任务中失败了10
个。任务失败指的是错误率大于5%
。
为了更好地理解模型的工作,我们分析了这项任务的注意力分布和平均ACT ponder time
。下图为注意力权重在不同 step
上的可视化,左侧不同的颜色条表示不同 head
的注意力权重(一共4
个head
),即,列代表 head
、行代表句子。
一个 supportive fact
的问题:
两个 supportive fact
的问题:
三个 supportive fact
的问题:
结论:
首先,我们观察到注意力分布开始时非常均匀,但在后面的step
中,围绕着回答每个问题所需的正确的supporting fact
,注意力分布逐渐变得尖锐,这确实非常类似于人类如何解决这个任务。
其次,通过动态停机我们观察到:需要三个supporting fact
的任务的所有位置的平均 ponder time
(即per-symbol recurrent processing chain
的深度(supporting fact
的任务(supporting fact
的任务(supporting fact
的数量来调整processing step
的数量。
最后,我们观察到:在只需要一个supporting fact
的任务中,不同位置的 ponder time
直方图与需要两个/三个supporting fact
的任务相比更加均匀。
同样,在需要两个supporting fact
的任务与需要三个supporting fact
的任务也是如此。特别是对于需要三个 supporting fact
的任务,许多位置已经在第1
步或第 2
步停机了,只有少数位置需要更多的step
(如下图所示)。这一点特别有意思,因为在这种情况下,故事的长度确实要高得多,有更多不相关的fact
,而模型似乎成功地学会了以这种方式忽略这些fact
。
主谓一致Subject-Verb Aggrement
任务:使用语言建模的 training setup
来解决这个任务,即next word prediction
的目标,然后在测试时计算目标动词的 ranking accuracy
。该任务是衡量模型在自然语言句子中捕捉层级结构hierarchical structure
的能力的一个代理。
attractors
用于增加难度,它表示与主语相反数量opposite number
的中间名词intervening noun
的个数(旨在混淆模型)。如:给定句子 The keys __ to the cabinet
,训练期间的目标动词是 are
,但是测试期间我们要求 are
的排名比 is
更高。
LAMBADA
任务:是一项语言建模任务,在给定前面 4
到 5
个句子的条件下预测一个缺失的目标词。
该数据集是专门设计的,当显示完整的上下文时,人类能够准确地预测目标词,但当只显示出现该词的目标句时,则人类无法预测目标词。因此,它超越了语言建模,并测试了模型在预测目标词时纳入更长上下文的能力。
该任务在两种情况下被评估:
语言建模(标准设置,更具挑战性):模型只是在训练数据上进行next-word prediction
的训练,并在测试时对目标词进行评估。
和阅读理解:目标句子(减去最后一个词)被用作 query
,用于从上下文句子中选择目标词(即,检索式的方法)。
请注意,目标词在81%
的时间里出现在上下文中,这使得这种设置更加简单。然而,在其余19%
的情况下,这个任务是不可能完成的(因为目标词不存在上下文中)。
实验结果:Universal Transformer
在语言建模和阅读理解设置中都取得了SOTA
结果。
我们 fixed Universal Transformer
结果使用了6个step
(即,Universal Transformer
的平均step
数为
为了看看动态停机是否仅仅因为采取了更多的step
而做得更好,我们训练了两个 fixed Universal Transformer
,分别用 Universal Transformer
的表现。
这使我们相信:动态停机可以作为模型的一个有用的正则器,通过激励一些input symbol
以较小的 step
数量,同时允许其他input symbol
以更多的计算。
我们在三个算术任务上训练 Universal Transformer
,即 Copy
、Reverse
和(整数)加法,都是在由十进制符号(0 ~ 9
)组成的字符串上。在所有的实验中,我们在长度为40
的序列上训练模型,在长度为400
的序列上进行评估。 我们使用从randomized offset
开始的位置来训练 Universal Transformer
(训练样本需要选择从哪里开始切分,因为输入语料库可以视为一个超长的文本),以进一步鼓励模型学习position-relative
的转换。
结果如下表所示, Universal Transformer
在所有三个任务上的表现都远远超过了 LSTM
和常规的 Transformer
。
作为另一种 sequence-to-sequence learning
问题,我们评估表明模型学习执行计算机程序的能力的任务。这些任务包括程序评估program evaluation
任务(编程、控制和加法),以及记忆memorization
任务(copy
、double
和reverse
)。
结果如下表所示, Universal Transformer
在所有任务上的表现都远远超过了 LSTM
和常规的 Transformer
。
我们使用与 Transformer
报告中相同的设置在 WMT2014
英德翻译任务上训练 Universal Transformer
,以评估其在大规模 sequence-to-sequence
任务上的性能。结果总结如下。采用前馈神经网络(而不是可分离卷积)作为转移函数且没有动态停机的 Universal Transformer
比 Transformer
提高了 0.9 BLEU
。
根据作者在引言部分的介绍,如果采用动态停机,则会导致
Universal Transformer
的效果更差。
尽管 RNN
适应性很广,但是,由于梯度消失和爆炸导致 RNN
很难优化。在LSTM
中引入门控和梯度裁剪技术可能不足以完全解决这一问题。从经验上看,以前的工作发现:LSTM
语言模型平均使用200
个context words
,表明有进一步改进的空间。
另一方面,注意力机制中的长距离 word pairs
之间的直接联系可能会有助于优化,并学习长期依赖性。最近 《Character-level language modeling with deeper self-attention》
设计了一套辅助损失来训练深度 Transformer
网络从而用于 character-level
语言建模。该方法存在两个问题:
segment
上进行的,没有跨segment
的信息流。 由于固定的上下文长度,该模型无法捕捉到超出预定义上下文长度的任何长期依赖关系。segment
是通过选择连续的符号块 symbol chunk
来创建的,没有考虑句子或任何其他语义边界。因此,该模型缺乏必要的上下文信息从而无法很好地预测前几个symbol
,导致低效的优化和较差的性能。我们把这个问题称为上下文碎片化 context fragmentation
。为了解决上述固定长度上下文的局限性,论文 《Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context》
提出了一个新的架构,叫做 Transformer-XL
(意为 extra long
)。论文将递归的概念引入 deep self-attention network
。具体而言,论文不是为每个新的segment
从头开始计算 hidden state
,而是复用在previous segments
中获得的 hidden state
。复用的 hidden state
用于 current segment
的 memory
,在前后 segment
之间建立了一个递归连接 recurrent connection
。因此,建立非常长期的依赖关系的模型成为可能,因为信息可以通过递归连接 recurrent connection
来传播。同时,从前一个segment
传递信息也可以解决上下文碎片化的问题。
RNN
是在position
之间构建递归,Universal Transformer
是在depth
之间构建递归,Transformer-XL
是在segment
之间构建递归。通常一个
segment
代表一个样本,因此这也是样本之间构建递归。
更重要的是,论文展示了使用相对位置编码 relative positional encoding
而不是绝对位置编码 absolute positional encoding
的必要性,以便在不引起时间混乱的情况下实现状态重用 state reuse
。因此,作为一个额外的技术贡献,论文引入了一个简单但更有效的相对位置编码公式,该公式可以泛化到比训练期间看到的长度更长的序列。
Transformer-XL
在五个数据集上获得了强有力的结果,这些数据集从word-level
语言建模到 character-level
语言建模。Transformer-XL
还能够生成相对连贯的、数千个 token
的长篇文章。
坤文的主要技术贡献包括:
self-attention model
中引入递归的概念。这两种技术构成了一套完整的解决方案,因为其中任何一个单独的技术都不能解决固定长度上下文的问题。Transformer-XL
是第一个在word-level
语言建模到 character-level
语言建模上取得比 RNN
更好结果的自注意力模型。
相关工作:为了捕获语言建模中的长距离上下文,一系列工作直接将更宽上下文的 representation
作为 additional input
输入到网络中。现有的工作有人工定义 context representation
的,也有依靠从数据中学到的document-level topic
。
例如,可以把非常长上下文的
sum word embedding
作为额外的输入。
更广泛地说,在通用序列建模中,如何捕获长期依赖性一直是一个长期研究问题。从这个角度来看,由于 LSTM
的普适性,人们在缓解梯度消失问题上做了很多努力来有助于优化,包括更好的初始化、辅助损失、增强的记忆结构memory structure
、以及其他的修改RNN
内部结构的方法。与他们不同的是,我们的工作是基于 Transformer
架构的,并表明语言建模作为一个现实世界的任务,受益于学习长期依赖性的能力。
给定一个 token
序列 language modeling
的任务是估计联合概率
其中
在这项工作中,我们坚持采用标准的神经网络方法来建模条件概率。具体而言:
hidden state
中。word embedding
相乘,从而得到一组logit
。logit
馈入 softmax
函数,从而得到关于 next token
的离散概率分布。为了将 Transformer
或 self-attention
应用于语言建模,核心问题是如何训练Transformer
从而将一个任意长的上下文有效地编码为固定尺寸的representation
。
理想的方法是用一个无条件的 Transformer
来处理整个上下文序列,但是由于资源有限,这通常是不可行的。
一个可行但粗糙的近似方法是:将整个语料库分割成规模可控的较短的 segment
,只在每个 segment
内训练模型,忽略之前 segment
的所有上下文信息。我们称之为普通的 Transformer
模型,并在下图 (a)
中可视化。在这种训练范式下,信息在前向传播和反向传播过程中都不会跨 segment
流动。
使用固定长度的上下文有两个关键限制:
segment
长度所限。在 character-level
语言建模中,segment
长度为几百。segment
将导致上下文碎片化问题。在评估过程的每一步,普通的 Transformer
模型也会消耗相同长度的segment
(与训练 segment
长度相同),但仅在 segment
的最后一个位置做一个预测。然后在下一步,该segment
只向右移动了一个位置,而新的 segment
必须从头开始计算,如图 (b)
所示。这个过程确保了每个预测都利用了最长的上下文,同时也缓解了训练中遇到的上下文碎片化问题。然而,这种评估过程是非常昂贵的。我们将表明:我们提出的架构能够大幅提高评估速度。
注意:训练阶段和评估阶段有两个地方不一致:
segment
移动的步长不一致:训练期间右移个位置( 等于 segment
长度),验证期间右移一个位置。- 预测位置不一致:训练期间对
segment
的每个位置进行预测,而验证期间仅对segment
的最后一个位置进行预测。这是为了和segment
移动步长相匹配,使得每个位置仅进行一次预测。之所以训练期间
segment
移动步长更大,个人猜测是为了降低训练样本量。假设segment
长度固定为,如果移动步长为 ,则每个训练 epoch
中每个token
会出现一次;如果移动步长为1
,则每个训练epoch
中每个token
会出现次。
为了解决使用固定长度上下文的局限性,我们建议在 Transformer
架构中引入一个递归机制。在训练过程中,固定前一个segment
计算好的hidden state
序列,并在处理 next segment
时作为扩展上下文extended context
来重用,如下图 (a)
所示(图中的绿色路径表示扩展上下文)。
尽管反向传播仍然保持在一个 segment
内,但这个额外的输入(即,前一个 segment
的hidden state
序列 )允许网络利用历史信息,导致了对长期依赖性的建模能力,并避免了上下文碎片化。
注意:
- 在训练过程中,前一个
segment
的hidden state
序列被冻住,不再更新它们的状态(前向传播)以及梯度(反向传播)。- 对于前一个
segment
,需要考虑每一层的hidden state
序列(而不仅仅是最后一层)。
具体而言,假设长度为 segment
为:
记 hidden state
序列为: hidden state
hidden state
维度。那么 hidden state
序列的计算过程为:
拼接第 stop-gradient
,hidden state
序列。
生成 query, key, value
:
注意:
query
用当前segment
的上下文,而key/value
用扩展的上下文。这是因为我们只需要计算当前segment
的representation
,这对应于query
的形状。
计算第 hidden state
序列:
与标准的 Transformer
相比,关键的区别在于:key
value
segment
缓存的。我们通过上图 (a)
中的绿色路径来强调这一特殊设计。由于这种递归机制应用于语料库的每两个连续的 segment
,因此它在hidden state
中创造了一个segment-level
的递归。因此,有效利用的上下文可以远远超过两个segment
。
这对于
batch
的组织是一个挑战,要求前后两个样本之间是连续的,并且不能随机选择样本。
请注意,连续两个 segment
之间,RNN
语言模型中的同层递归不同。因此,最大可能的依赖长度与网络层数、segment
长度呈线性增长,即 (b)
中的阴影区域所示,这里 segment
长度。
依赖于 ,即第 层中:序列 的位置 到位置 、以及序列 中的位置 到位置 ,一共 个位置。 对于同层递归,则
依赖于 。
segment-Level
递归类似于截断的 BPTT
(用于训练 RNN
语言模型)。然而,与截断的BPTT
不同的是:我们的方法缓存了hidden state
的一个序列,而不仅仅是最后一个 hidden state
,并且应该与相对位置编码技术一起应用。
注意,
segment-Level
递归对于每一层,都需要缓存hidden state
的一个序列。
除了实现超长上下文和解决上下文碎片化问题,递归方案带来的另一个好处是评估速度明显加快。具体而言,在评估过程中,先前的segment
的 representation
可以被重用,而不是像普通 Transformer
那样从头开始计算。在我们对enwiki8
的实验中,Transformer-XL
在评估过程中比普通 Transformer
模型快 1800
多倍。
最后,请注意,递归方案不仅限于前面一个segment
。理论上,我们可以在GPU
内存允许的范围内缓存尽可能多的 previous segments
,并在处理当前 segment
时复用所有这些 segment
作为额外的上下文。因此,我们可以缓存一个长度为 old hidden state
序列,跨越(可能)多个 segment
,并将它们称为 memory
总的上下文长度为
。
在我们的实验中,我们在训练时将 segment
长度
segment
长度用于划分 segment
,上下文长度用于建模上下文,二者的作用不同。 这里在训练期间和评估期间采用不同的上下文长度,会不会影响评估效果?毕竟训练数据分布和测试数据分布人为地导致了不一致(总的上下文长度不一致)。
为了重用前面 segment
的 hidden state
,有一个关键的技术挑战我们还没有解决:如何保持位置信息的一致性?
在标准的 Transformer
中,序列顺序的信息是由一组位置编码positional encoding
来提供的,表示为 segment
内第 hidden state
序列的计算方式为:
其中:
segment
word embedding
,input
。
,这是因为可能需要在测试期间泛化到 unseen
的序列长度。
注意,
为解决这个问题,基本的想法是相对位置编码。从概念上讲,位置编码给了模型一个关于如何收集信息的时间线索或 "bias
",也就是说,关注attend
哪个地方。以相对的方式来定义时间bias
是更直观和更可泛化的。例如,当一个query
向量 key
向量 key
向量的绝对位置来识别segment
的时间顺序,只要知道每个key
向量
实际上,人们可以创建一组相对位置编码 attention score
,query
向量可以很容易地根据不同距离区分出 representation
,使状态重用机制变得可行。同时,我们不会丢失任何时间信息,因为绝对位置可以从相对距离中递归恢复。
此前,相对位置编码的想法已经在机器翻译和音乐生成任务中得到了探索。在这里,我们提供了一种不同的编码形式,它不仅与绝对位置编码有一一对应关系,而且在经验上也具有更好的泛化性。
首先,在标准的 Transformer
中,同一个 segment
中的注意力得分可以分解为:
其中:embedding
向量,positional embedding
,query
的投影矩阵,key
的投影矩阵。
然后,按照仅依赖于相对位置信息的思路,我们建议重写上述四项为:
一种更简单直接的改写方式为:
。可以通过实验来验证效果。
第一个改变是用相对位置编码 (b)
和 (d)
中的绝对位置编码
实际上,绝对位置在一些任务中也同样重要,例如:句子里的第一个位置和最后一个位置都比较重要,可能包含特殊的语义。
其次,我们引入一个可训练的参数 (c)
中的 query
向量对所有的 query position
都是相同的,因此这表明无论 query position
如何,对不同的单词的 attentive bias
应该保持不变。
类似地,我们引入一个可训练的参数 (d)
中的 query position
如何,对不同相对位置的 attentive bias
应该保持不变。
在绝对位置编码中,
query
的位置、key
的位置都很重要,因此需要两个positional embedding
。 在绝对位置编码中,只有
query
和key
的相对位置的编码才重要,因此只有一个positional embedding
。
最后,我们特意将两个权重矩阵 content-based
和 location-based
的 key
向量。
和 也分别对应于 content-based
和location-based
的attentive bias
向量。
在相对位置编码中,每一项都有直观的含义:
addressing
。positional bias
。content bias
。positional bias
。相比之下,《Self-attention with relative position representations》
仅考虑了 (a), (b)
两项,放弃了 (c), (d)
两个 bias
项。此外,《Self-attention with relative position representations》
将 inductive bias
。相比之下,我们的 relative positional embedding
将segment-level
递归与我们提出的 relative positional embedding
相结合,我们最终得到了Transformer-XL
架构。
注意,为了计算所有的 pair
但是为了计算
,仍然需要 的计算复杂度。
这里比较不同数据集上语言建模的效果,评估指标为困惑度 perplexity: PPL
。
WikiText-103
数据集:现有最大的具有长期依赖性的 word-level
语言建模 benchmark
。它包含了来自 28K
篇文章的 1.03
亿个训练 token
,每篇文章的平均长度为 3.6K
个 token
,这可以测试建模长期依赖的能力。
我们将训练时的注意力长度 (即,384
,评估时设定为1600
。如下表所示,Transformer-XL
超越了之前的 SOTA
,将困惑度从 20.5
降低到 18.3
。
enwik8
数据集:包含1
亿字节的未处理的维基百科文本。
24
层的 Transformer-XL
取得了新的SOTA
结果。训练时注意力长度为784
,评估时注意力长度为 3800
。
text8
数据集:包含1
亿个经过处理的维基百科字符,这些字符是通过转换为小写字母并删除 [a ~ z]
以及空格以外的任何字符而创建的。
同样地,24
层的 Transformer-XL
(超参数与 enwik8
中的相同)取得了新的SOTA
结果。
One Billion Word
数据集:没有保留任何长期的依赖性,因为句子已经被混洗过了。因此,这个数据集主要测试了只对短期依赖关系进行建模的能力。
尽管 Transformer-XL
主要是为了更好地捕捉长期依赖性,但它极大地提高了单个模型的 SOTA
。
Penn Treebank
数据集:包含1
百万 token
,用于验证模型在小数据集上的表现。
我们对 Transformer-XL
采用了 variational dropout
和 weight average
。通过适当的正则化,Transformer-XL
在没有预训练和微调的模型中取得了新的 SOTA
结果。
解决长期依赖问题:我们在 WikiText-103
上进行研究,这需要建模长期依赖性。结果如下所示。
在比较的编码方案中,Shaw et al. (2018)
(《Self-attention with relative position representations》
)是相对位置编码,而 Vaswani et al. (2017)
(《Attention is all you need》
)和 Al-Rfou et al. (2018)
(《Character-level language modeling with deeper self-attention》
)是绝对位置编码。
Ful/Half
损失指的是:对 segment
中所有位置/最近的一半位置计算交叉熵。我们发现,绝对位置编码只有在 Half
损失的情况下才能很好地工作,因为Half
损失在训练中排除了注意力长度很短的位置,从而获得更好的泛化。
PPL init
表示评估时使用与训练长度相同的注意力长度;PPL best
表示评估时使用最佳注意力长度(由 Attn Len
列给出)时的结果。
结论:
128
,但通过这两种技术,在测试期间注意力长度可以增加到640
。151M
参数的 Transformer-XL
中,测试期间,困惑度随着注意力长度的增加而减少。解决上下文碎片化问题:我们特意选择了一个不需要长期依赖的数据集,这样一来,递归机制的任何改进都可以归因于解决了上下文碎片化问题。具体来说,我们在 One Billion Word
数据集上进行实验,它只能从消除上下文碎片中受益。
结论:
segment-level
递归机制也能大幅提高性能。这与我们之前的讨论一致,即递归机制解决了上下文碎片化问题。Shaw et al. (2018)
(《Self-attention with relative position representations》
)。相对有效长度 Relative Effective Context Length
:Transformer-XL
具有最大的相对有效长度。
相对有效长度的定义参考原始论文。
文本生成:在 WikiText-103
上训练。参考原始论文的附录。
评估速度:由于状态重用,Transformer-XL
在评估时可以达到相比普通 Transformer
快 1874
倍的速度。
从原始文本中有效学习的能力,可以大大缓解 NLP
中对监督学习的依赖。大多数深度学习方法需要大量手动标记的数据,这限制了它们应用于许多缺乏标注资源的领域。在这些情况下,那些可以利用语言信息(这些语言信息来自于未标记数据)的模型,它们提供了一种有价值的替代方法从而免于收集更多标注数据(后者可能既耗时又昂贵)。此外,即使在有大量监督数据可用的情况下,以无监督的方式学习良好的 representation
也可以显著提高性能。迄今为止,最令人信服的证据是广泛使用预训练的 word emebdding
来提高一系列 NLP
任务的性能。
然而,利用来自未标记文本的 word-level
信息以外的信息具有挑战性,主要有两个原因:
首先,尚不清楚哪种类型的优化目标在学习对迁移有用的 text representation
方面最有效。最近的研究着眼于各种目标,如语言建模language modeling
、机器翻译machine translation
、篇章连贯性 discourse coherence
,每种方法在不同任务上的表现都优于其它方法。
即,如何获得
text representation
?
其次,对于将这些学到的 repersentation
迁移到目标任务的最有效方法没有达成共识。现有的技术涉及对模型架构进行 task-specific
修改、使用复杂的学习方案、添加辅助学习目标等等方法的组合。
即,如何迁移
text representation
?
这些不确定性使得为语言处理language processing
开发有效的半监督学习方法变得困难。
在论文 《Improving Language Understanding by Generative Pre-Training》
中,作者为语言理解任务 language understanding task
探索了一种结合无监督预训练unsupervised pre-training
和监督微调supervised fine-tuning
的半监督方法,即Generative Pre-Training: GPT
。GPT
的目标是学习一种通用 representation
,该 representation
只需要很少的适配 adaption
就可以迁移到广泛的任务。作者假设可以访问大量未标记文本的语料库、以及若干个标记数据集(这些数据集包含人工标注的训练样本,即 target task
)。GPT
的setup
不要求这些目标任务与未标记语料库位于同一个 domain
中。GPT
采用两阶段的训练过程:
GPT
对未标记的数据使用语言建模目标 language modeling objective
来学习神经网络模型的初始参数。GPT
使用相应的监督目标使这些参数适配目标任务。作者使用 Transformer
来作为GPT
的模型架构,其中 Transformer
已被证明在机器翻译machine translation
、文档生成document generation
、句法解析syntactic parsing
等各种任务上表现出色。与 RNN
等替代方案相比,Transformer
为GPT
提供了更结构化的内存more structured memory
来处理文本中的长期依赖,从而在多样化 diverse
的任务中实现鲁棒的迁移性能。
在迁移过程中,作者利用源自 traversal-style
方法的 task-specific
的输入适配 input adaption
,将结构化的文本输入处理为 token
的一个连续序列。正如作者在实验中所证明的那样,这些适配使得GPT
能够有效地微调,而只需对预训练模型的架构进行最小的调整。
作者在四种类型的语言理解任务上评估了 GPT
:自然语言推理natural language inference
、问答 question answering
、语义相似性 semantic similarity
、文本分类 text classification
。论文的通用任务无关模型 general task-agnostic model
超越了那些采用专门为每个任务设计架构的模型,在所研究的 12
个任务中的 9
个中显著提高了 state-of-the-art
。例如:
GPT
在常识推理 commonsense reasoning
(Stories Cloze Test
数据集)上实现了 8.9%
的绝对提升。GPT
在问答(RACE
数据集)上实现了 5.7%
的绝对提升。GPT
在在文本蕴含 textual entailment
(MultiNLI
数据集)上实现了 1.5%
的绝对提升。GPT
在最近引入的 GLUE
多任务 benchmark
上实现了 5.5%
的绝对提升。作者还分析了预训练模型在四种不同 setting
下的 zero-shot
行为,并证明预训练模型为下游任务获得了有用的语言知识。
相关工作:
用于 NLP
的半监督学习:我们的工作大致属于自然语言的半监督学习的类别。这种范式引起了人们的极大兴趣,并被应用到序列标记sequence labeling
、文本分类等任务。
word-level
或 phrase-level
的统计量,然后将其用作监督模型中的特征(《Semi-supervised learning for natural language》
)。word embedding
(《Natural language processing(almost) from scratch》
、《Distributed representations of words and phrases and their compositionality》
、《Glove: Global vectors for word representation》
)来提高各种任务的性能的好处。然而,这些方法主要是迁移 word-level
信息,而我们的目标是捕获更高 level
的语义。
最近的方法已经研究了从未标记的数据中学习和利用不仅限于 word-level
语义的信息。可以从未标记的语料库中训练phrase-level
或 sentence-level
,从而用于将文本编码为适合各种目标任务的 vector representation
,如:《Skip-thought vectors》
、《Distributed representations of sentences and documents》
、《A simple but tough-to-beat baseline for sentence embeddings》
、《An efficient framework for learning sentence representations》
、《Discourse-based objectives for fast unsupervised sentence representation learning》
、《Supervised learning of universal sentence representations from natural language inference data》
、《Learning general purpose distributed sentence representations via large scale multi-task learning》
、《Unsupervised machine translation using monolingual corpora only》
。
无监督预训练:无监督预训练是半监督学习的一种特殊情况,其目标是找到一个好的初始化点,而不是修改监督学习目标。
早期的工作探索了该技术在图像分类和回归任务中的应用。随后的研究表明(《Why does unsupervised pre-training help deep learning?》
),预训练作为一种正则化方案,可以在深度神经网络中实现更好的泛化。在最近的工作中,该方法已被用于帮助在各种任务上训练神经网络,如图像分类image classification
、语音识别speech recognition
、实体消岐entity disambiguation
、机器翻译machine translation
等。
与我们最接近的工作包括使用语言建模目标language modeling objective
对神经网络进行预训练pre-training
,然后在下游带监督的目标任务上进行微调 fine-tuning
。《Semi-supervised sequence learning》
和 《Universal language model fine-tuning for text classification》
遵循这种方法来改进文本分类。然而,尽管预训练阶段有助于捕获一些语言信息,但由于它们使用的是 LSTM
模型,从而使得它们的预测能力限制在一个短的范围 short range
(因为 LSTM
的局限性,无法捕获长期依赖)。
相比之下,我们选择的 transformer
网络使得我们能够捕获更长范围longer range
的语言结构,如我们的实验所示。此外,我们还展示了我们的模型在更广泛的任务上的有效性,包括自然语言推理natural language inference
、复述检测 paraphrase detection
(也叫语义相似性)、故事补全story completion
。
其它一些方法使用来自预训练语言模型或机器翻译模型的 hidden representation
作为辅助特征,同时在目标任务上训练监督模型(《Semi-supervised sequence tagging with bidirectional language models》
、《Deep contextualized word representations》
、《Learned in translation: Contextualized word vectors》
)。这涉及到每个单独的目标任务的大量新参数,而我们的方法在迁移过程中只需要对模型架构进行最小化的调整。
辅助训练目标:添加辅助的无监督训练目标是半监督学习的另一种形式。
《A unified architecture for natural language processing: Deep neural networks with multitask learning》
使用各种辅助 NLP
任务(如词性标注 POS tagging
、分块 chunking
、命名实体识别 named entity recognition
、语言建模 language modeling
)来改进语义角色标注 semantic role labeling
。《Semi-supervised multitask learning for sequence labeling》
在其target task objective
中添加了辅助语言建模目标,并展示了序列标注任务的性能提升。我们的实验也使用辅助目标,但正如我们所展示的那样,无监督的预训练已经学习了与目标任务相关的几个 linguistic aspect
。
我们的训练过程分为两个阶段:
high-capacity
的语言模型。discriminative task
进行适配。无监督预训练:给定 token
集合为 likelihood
:
其中:context window
的大小,
条件概率
这是一种自回归模型,只能看到历史信息而无法看到整个序列信息。
在我们的实验中,我们使用 multi-layer Transformer decoder
作为语言模型,这是 transformer
的一种变体。该模型对输入的 context tokens
应用多头自注意力操作multi-head self-attention operation
,然后应用 position-wise feed-forward
层从而在目标 token
上生成输出分布:
其中:
contect vector
,one-hot
向量。token embedding
矩阵,positional embedding matrix
,embedding
维度。representation
。监督微调:使用 token
的一个序列 input
经过我们的预训练模型获得 final transformer
块的激活
这为我们提供了以下最大化目标:
我们还发现,将语言建模作为微调的辅助目标来微调有助于学习,因为:该辅助目标提高监督模型的泛化能力,以及该辅助目标加速训练的收敛。这与之前的工作一致(《Semi-supervised multitask learning for sequence labeling》
、《Semi-supervised sequence tagging with bidirectional language models》
),他们也观察到使用这种辅助目标可以提高性能。
具体而言,我们优化了以下目标:
其中
总体而言,我们在微调期间唯一需要的额外参数是 delimiter token
的 embedding
(delimiter token
是一些人工添加的分隔符,如 start token
、end token
等等,参考输入转换部分的内容)。
预训练的语言模型一方面作为微调的初始化,另一方面也作为微调的辅助损失函数。
Task-specific
输入转换input transformation
:对于某些任务(如文本分类),我们可以如上所述直接微调我们的模型。某些其它任务(如问答或文本蕴含)具有结构化输入,例如有序的 sentence pair
、或者 (document, question, answers)
三元组。由于我们的预训练模型是针对连续的文本序列进行训练的,因此我们需要进行一些修改才能将预训练模型应用于这些任务。
先前的工作提出:将任务特定的架构作用于被迁移学习的 representation
之上(ELMo
)。这种方法重新引入了大量特定于任务的定制化 customization
,并且未对这些额外的架构组件使用迁移学习。相反,我们使用 traversal-style
方法(《Reasoning about entailment with neural attention》
),将结构化输入转换为我们的预训练模型可以处理的有序序列。这些输入转换使我们能够避免跨任务对架构进行大量修改。我们在下面提供了这些输入转换的简要描述,下图提供了可视化说明。所有转换都包括添加随机初始化的 start token
end token
下图中的
Extract
就是end token
。
文本蕴含textual entailment
:对于文本蕴含任务,我们拼接前提 premise
( p
) 和假设 hypothesis
(h
)的 token
序列,中间用 delimiter token
( $
) 来分隔。
相似性Similarity
:对于相似性任务,被比较的两个句子之间没有固有的顺序。为了反映这一点,我们修改输入序列从而同时包含两种可能的句子排序(中间有一个 delimiter token
),并独立处理每个输入序列从而得到两个 sequence representation
。然后我们将这两个 sequence representation
执行逐元素相加,并馈入到线性输出层。
sum
池化等价于均值池化,这里是否可以选择max
池化?可以通过实验来验证。
问答和常识推理Question Answering and Commonsense Reasoning
:对于这些任务,我们被给定一个上下文的 document
(z
)、一个问题 q
、一组可能的回答 delimiter token
从而得到序列 softmax
层进行归一化,从而在可能的答案上生成输出分布。
注意:这里直接拼接了上下文文档和问题,并没有在它们之间添加
delimiter token
。个人猜测这是为了区分问题和答案,而没必要区分问题和文档,因为问题可以作为文档的最后一句话。
无监督预训练语料库:我们使用 BooksCorpus
数据集来训练语言模型。 BooksCorpus
数据集包含来自各种风格的 7k
多本 unique
的未出版书籍,包括 Adventure, Fantasy, Romance
等风格。至关重要的是,它包含长篇连续的文本,这使得生成模型能够学会以长距离信息long-range information
为条件。
另一个候选数据集是 1B Word Benchmark
,它被一个类似的方法 ELMo
所使用的,其规模与 BooksCorpus
大致相同。但是, 1B Word Benchmark
在 sentence level
上进行了混洗,这破坏了 long-range
结构。我们的语言模型在这个语料库上实现了非常差的 token level perplexity
(即 18.4
)。
模型配置:我们的模型很大程度上遵循了原始的 transformer
工作。
12
层的 ecoder-only transformer
,其中带有 masked self-attention head
( 768
维的状态state
,12
个注意力头)。对于 position-wise feed-forward
网络,我们使用 3072
维的 inner state
。Adam
优化器,最大学习率为 2000
个 step
,学习率从零线性地增加到最大学习率,然后使用余弦方案退火到 0
。100
个 epoch
,采用随机采样的 mini-batch
,batch size = 64
,每个样本都是包含 512
个连续 token
的一个序列。layernorm
在整个模型中被广泛使用,一个简单的正态分布 40k merges
的 byte-pair encoding (BPE) vocabulary
。residual
、embedding
、attention
应用 rate = 0.1
的 dropout
从而用于正则化。我们还采用了《Fixing weight decay regularization in adam》
中提出的 L2
正则化的一个修订版,其中在所有 non bias or gain weights
上使用 Gaussian Error Linear Unit: GELU
。positional embedding
而不是原始工作中提出的正弦版本。ftfy library
来清理 BooksCorpus
中的原始文本,规范一些标点符号和空白符,并使用 spaCy tokenizer
。微调配置:除非特别说明,否则我们重用无监督预训练中的超参数配置。
classifier
中加入 rate = 0.1
的 dropout
。batch size = 32
。warmup
超过 0.2%
的训练step
。3
个 epoch
的训练对大多数情况而言就足够了。0.5
。我们对各种监督任务进行了实验,包括自然语言推理、问答、语义相似性、文本分类。其中的一些任务是作为最近发布的 GLUE multi-task benchmark
的一部分,我们这里也使用了这个 benchmark
。实验的任务及其对应的数据集如下表所示。
自然语言推理 Natural Language Inference: NLI
:该任务也被称作识别文本蕴含,它读取一对句子并判断它们之间的关系是蕴含entailment
、冲突 contradiction
、还是中性neutral
。尽管最近有很多学者对此感兴趣,但是由于存在各种各样的现象(如,词法蕴含lexical entailment
、共指coreference
、词法和句法歧义 lexical and syntactic ambiguity
),这项任务仍然具有挑战性。
我们在五个多样化的数据集上进行评估,包括:
SNLI
数据集:包含图像标题 image caption
。MNLI
数据集:包含转录的语音transcribed speech
、流行小说 popular fiction
、和政府报告government report
。QNLI
数据集:包含维基百科文章Wikipedia article
。SciTail
数据集:包含科学考试science exam
。RTE
数据集:新闻文章 news article
。下表详细列出了我们的模型和以前 state-of-the-art
方法在不同的 NLI
任务的各种结果。可以看到:
baseline
。与之前的最佳结果相比,在 MNLI
上取得了高达 1.5%
的绝对改进,在 SciTail
上为 5%
,在 QNLI
上为 5.8%
,在 SNLI
上为 0.6%
。这证明了我们的模型能够更好地对多个句子进行推理,并处理语言歧义linguistic ambiguity
的问题。RTE
数据集上(我们所评估的较小的数据集,只有 2490
个样本),我们取得了 56%
的准确率,这低于多任务 biLSTM
模型所报告的 61.7%
。鉴于我们的方法在较大的 NLI
数据集上的强大性能,我们的模型很可能也会从多任务训练中收益,但是我们目前还没有对此进行探索。问答和常识推理Question Answering and Commonsense Reasoning
:另一项需要单句推理和多句推理的任务是问答。我们使用最近发布的 RACE
数据集,该数据集由初中考试(RACE-m
)和高中考试(RACE-h
)的英语段落和相关问题组成。这个语料库已被证明包含了比 CNN
或 SQuaD
等其它数据集更多的推理类型的问题,为我们的模型提供了完美的评估,其中我们的模型被训练用于处理长程上下文 long-range context
。此外,我们还在 Story Cloze Test
数据集上进行评估,该数据集涉及从两个选项中选择多句子故事的正确结局。
实验结果如下表所示,在这些任务中,我们的模型再次以显著的优势超越了以前的最佳结果:在 Story Cloze
数据集上高达 8.9%
的绝对改进,在 RACE
数据集上平均 5.7%
的绝对改进。这表明我们的模型有能力有效处理长程上下文。
语义相似性Semantic Similarity
:该任务涉及预测两个句子是否在语义上相等。挑战在于识别概念的改写 rephrasing
、理解否定句negation
、以及处理句法歧义 syntactic ambiguity
。我们使用三个数据集来完成这项任务:Microsoft Paraphrase corpus: MRPC
(从新闻来源收集到的)、Quora Question Pairs: QQP
、Semantic Textual Similarity benchmark: STS-B
。
实验结果如下表所示,在这三个语义相似性任务中,我们在其中两个上面获得了 state-of-the-art
结果:在 STS-B
上获得了1%
的绝对收益,在 QQP
上获得显著的 4.2%
的绝对收益。
分类Classification
:最后,我们还对两个不同的文本分类任务进行了评估。Corpus of Linguistic Acceptability: CoLA
包含专家对一个句子是否符合语法的判断,并测试训练好的模型的 innate linguistic bias
。Stanford Sentiment Treebank: SST-2
是一个标准的二元分类任务。
实验结果如上表所示,可以看到:
CoLA
上获得了 45.4
分,比之前的最佳结果 35.0
分有了重大的飞跃,展示了我们的模型学到的 innate linguistic bias
。SST-2
数据集上我们的模型也取得了 91.3%
的准确率,这与 state-of-the-art
结果相比也是有竞争力的。GLUE benchmark
上取得了 72.8
分的总分,这比之前的 68.9
分的最好成绩要好得多。总体而言,在我们评估的 12
个数据集中,我们的方法在其中的 9
个数据集上取得了新的 state-of-the-art
结果,在许多 case
中超越了 ensembles
的结果。我们的结果还表明:我们的方法在不同规模的数据集上都运行良好,从较小的数据集(如5.7k
个训练样本的 STS-B
)到最大的数据集(如550k
个训练样本的 SNLI
)。
被迁移的层数的影响Impact of number of layers transferred
:我们观察了从无监督的预训练到监督的目标任务中迁移不同数量的层的影响。下图(左)展示了我们的方法在 MultiNLI
和 RACE
数据集上的性能与被迁移的层数的关系。
可以看到:
embedding
层(即,被迁移的层数为 1
)可以提高性能。transformer layer
的迁移都能提供进一步的收益。MultiNLI
数据集上完全迁移所有层时,效果提升达到 9%
。这表明:预训练模型中的每一层都包含了解决目标任务的有用功能functionality
。
Zero-shot Behaviors
:我们想更好地了解为什么语言模型对 transformer
的预训练是有效的。一个假设是:底层的生成模型generative model
学习执行许多我们所评估的任务,从而提高其语言建模能力。而且与 LSTM
相比,transformer
的更加结构化注意力记忆 more structured attentional memory
有助于迁移。
我们设计了一系列的启发式解决方案,这些解决方案使用底层的生成模型来执行任务而不需要监督微调(即,zero-shot
):
CoLA
(句子是否符合语法),样本的得分为:生成模型分配的 token
概率的对数均值。然后预测是通过阈值进行的。SST-2
(情感分析sentiment analysis
),我们在每个样本中添加一个token
very
,并将语言模型的输出分布限制在单词 positive
和 negative
上,并认为概率较高的单词即为预测值。RACE
(问答),我们挑选在给定文档和问题的条件下,生成模型赋予最高平均 token
对数概率的答案。DPRD
(winograd schemas
),我们用两个可能的指代词 referrent
替换定语代词definite pronoun
,并选择替换后序列的平均 token
对数概率更高的那一个。我们在上图(右)中直观地看到了这些启发式解决方案在生成式预训练generative pre-training
过程中的有效性。
LSTM
的 zero-shot
性能表现出较高的方差,这表明 Transformer
架构的归纳偏置 inductive bias
有助于迁移。消融研究:我们进行了三种不同的消融研究,如下表所示。
NLI
任务和 QQP
任务有帮助。总体而言,这一趋势表明:较大的数据集从辅助目标中受益,而较小的数据集则没有。Transformer
和使用相同框架的单层 2048 unit LSTM
来分析其效果。我们观察到,当使用 LSTM
而不是 Transformer
时,平均得分下降了 5.6
。LSTM
仅在一个数据集(即,MRPC
)上优于 Transformer
。transformer
架构而没有预训练。我们观察到:缺乏预训练损害了所有任务的性能,导致与我们的完整模型(即,有预训练的模型)相比,性能下降了 14.8%
。长期以来,使用无监督训练(或预训练)来提高判别式任务discriminative task
的性能一直是机器学习研究的一个重要目标。我们的工作表明:实现显著的性能提升是可能的,并提示了哪些模型(即 Transformer
)、哪些数据集(即具有长程依赖的文本)在这种方法下效果最好。
我们希望这将有助于对自然语言理解和其它领域的无监督学习进行新的研究,并进一步提高我们对无监督学习如何、以及何时发挥作用的理解。
目前,机器学习系统通过使用大数据集、大容量模型、以及监督学习的组合,在它们所训练的任务中表现出色。然而,这些系统很脆弱,对数据分布(《Do cifar-10 classifiers generalize to cifar-10?》
)和任务规范 task specification
的轻微变化很敏感。目前的系统更多地被描述为狭隘的专家 narrow expert
而不是称职的通才 competent generalist
。我们希望迈向更通用的系统,该系统可以执行许多任务,并最终无需为每个任务手动创建和标注一个训练集。
建立机器学习系统的主流方法是:
independent and identically distributed: IID
的held-out
实例上测试其性能。这对于狭隘专家上的进展起到了很好的作用。但是,captioning model
、阅读理解系统、图片分类器在多样化和多变的、可能的 input
上经常出现不稳定的行为,突出了这种方法的一些缺点。
《Language Models are Unsupervised Multitask Learners》
的作者怀疑:单领域数据集上的单任务训练的盛行,是当前系统中观察到的缺乏泛化性的主要原因。要想在当前架构下实现强大的系统,可能需要在广泛的领域和任务上进行训练和度量性能。最近,人们已经提出了几个 benchmark
(如 GLUE
和 decaNLP
)以开始研究这个问题。
多任务学习是一个有前途的框架,它可以提高通用的性能general performance
。然而,NLP
中的多任务训练仍然处于起步阶段。最近的工作报告了适当modest
的性能改进(《Learning and evaluating general linguistic intelligence》
),迄今为止两个最雄心勃勃的工作分别在 17
个 (dataset, objective) pair
上进行训练(《The natural language decathlon: Multitask learning as question answering》
、《Looking for elmo’s friends: Sentence-level pretraining beyond language modeling》
) 。从元学习 meta-learning
的角度来看,每个 (dataset, objective) pair
都是从数据集和目标的分布中采样到的一个训练实例。目前的机器学习系统需要数百到数千个样本来诱导induce
出泛化良好的函数。这表明,多任务训练需要同样多的有效的训练的 (dataset, objective) pair
,从而实现良好的效果。继续扩大数据集的创建和目标的设计,从而达到所需要的程度将是非常困难的。这就促使我们去探索更多的 setup
来进行多任务学习。
目前在语言任务上表现最好的系统是利用预训练和监督微调的组合。这种方法有很长的历史,其趋势是更灵活的迁移形式。
word vector
并用作 task-specific architecture
的输入(《Distributed representations of words and phrases and their compositionality》
、《Natural language processing (almost) from scratch》
)。RNN
网络的 contextual representation
(《Semi-supervised sequence learning》
、《Deep contextualized word representations》
)。task-specific architecture
不再是必须的,迁移许多自注意力块就足够了(《Improving language understanding by generative pre-training》
、《Bert: Pretraining of deep bidirectional transformers for language understanding》
)。这些方法仍然需要有监督的训练,以便执行任务。当只有极少或者没有监督数据时,另一个方向已经证明了语言模型执行特定任务的前景,如常识推理 common-sense reasoning
、情感分析sentiment analysis
。
在论文 《Language Models are Unsupervised Multitask Learners》
中,作者将这两个方向的工作联系起来(预训练和 zero-shot
),并延续了更通用的迁移方法的趋势。作者证明了语言模型可以在 zero-shot
中执行下游任务,无需修改任何参数或架构。作者通过强调语言模型在 zero-shot setting
中执行各种任务的能力,从而证明这种方法的潜力。根据不同的任务,作者取得了有前景的、有竞争力的、和state-of-the-art
结果。其中,GPT-2
在 8
个测试的语言建模数据集中的 7
个上达到了 state-of-the-art
的性能。
相关工作:
这项工作的很大一部分衡量了在更大数据集上训练的更大语言模型的性能。
《Exploring the limits of language model》
的工作类似,他们在 1 Billion Word Benchmark
数据集上 scale
了 RNN-based
语言模型。《Embracing data abundance:Booktest dataset for reading comprehension》
之前也通过从 Project Gutenberg
中创建一个更大的训练数据集来补充标准的训练数据集,从而改善了 Children’s Book Test
的结果。《Deep learning scaling is predictable, empirically》
对各种深度学习模型的性能如何随着模型容量和数据集大小而变化进行了深入分析。我们的实验,虽然在不同的任务中更加 noisy
,但表明类似的趋势也存在于子任务中并且持续到 1B+
的参数规模。
人们已经记录下来生成模型中有趣的学习功能,如 RNN
语言模型中的 cell
执行 line-width tracking
和 quote/comment detection
(《Visualizing and understanding recurrent networks》
)。对我们的工作更有启发的是 《Generating wikipedia by summarizing long sequences》
的观察,一个被训练用于生成维基百科文章的模型也学会了翻译语言之间的 name
。
先前的工作已经探索了过滤和构建大型网页文本语料库的替代方法,如 iWeb Corpus
(《The 14 billion word iweb corpus》
)。
关于语言任务的预训练方法,已经有了大量的工作。
Introduction
中提到的那些之外,GloVe
将 word vector representation learning
扩展到所有的 Common Crawl
。deep representation learning
的一个有影响力的早期工作是 Skip-thought Vectors
。《Learned in translation: Contextualized word vectors》
探索了使用来自机器翻译模型的 representation
。《Universal language model fine-tuning for text classification》
改进了《Semi-supervised sequence learning》
基于 RNN
的微调方法。《Supervised learning of universal sentence representations from natural language inference data》
研究了由自然语言推理模型natural language inference model
学到的 representation
的迁移性能。《Learning general purpose distributed sentence representations via large-scale multi-task learning》
探索了大规模多任务训练。《Unsupervised pretraining for sequence to sequence learning》
证明了 seq2seq
模型得益于用预训练的语言模型作为编码器和解码器的初始化。最近的工作表明,语言模型预训练在微调困难的生成任务(如闲聊对话和基于对话的问答系统)时也有帮助(《Transfertransfo: A transfer learning approach for neural network based conversational agents》
、《Wizard of wikipedia: Knowledge-powered conversational agents》
)。
我们方法的核心是语言建模language modeling
。语言建模通常是指从样本集合 distribution estimation
,每个样本都由可变长度的符号symbol
序列 natural sequential ordering
,通常将符号的联合概率分解为条件概率的乘积:
这种方法允许对 Transformer
这样的自注意力架构。
GPT-2
和GPT-1
一样都是自回归模型。
单个任务的学习可以在概率框架中表示为估计一个条件分布 multi-task
和元学习meta-learning
的环境中已经被不同程度地公式化了。
任务调节 task conditioning
通常在架构层面上实现,如《One model to learn them all》
中的特定任务编码器和解码器;或者在算法层面上实现,如 MAML
的内循环和外循环优化框架(《Model-agnostic meta-learning for fast adaptation of deep networks》
)。
但是,正如 《The natural language decathlon: Multitask learning as question answering》
所举的例子,语言提供了一种灵活的方式来指定 task, input, output
都是符号的一个序列。例如,一个翻译任务的训练样本可以写成序列 (translate to french, english text, french text)
。同样地,一个阅读理解的训练样本可以写成 (answer the question, document, question, answer)
。《The natural language decathlon: Multitask learning as question answering》
证明有可能训练单个模型,即 MQAN
,来推断和执行具有这种类型格式样本的许多不同任务。
语言建模原则上也能够学习 《The natural language decathlon: Multitask learning as question answering》
的任务,而无需明确监督哪些符号是要预测的输出。监督目标与无监督目标相同,但是监督目标只需要对序列的一个子集进行评估,无监督目标的全局最小值也是监督目标的全局最小值。在这个略微玩具性质的 setting
中,《Towards principled unsupervised learning》
中讨论的对密度估计作为原则性训练目标的担忧被忽略了。现在的问题是,我们是否能够在实践中优化无监督目标以达到收敛。初步实验证实,足够大的语言模型能够在这种玩具性的 setup
中进行多任务学习,但学习速度比显式的监督方法慢得多。
因为将监督学习任务改写成
(task, input, output)
格式的符号序列之后,监督目标就变成了无监督目标。但是,在所有的序列中,仅有从监督任务改写而来的序列才可以构成验证集(或测试集)。
虽然从上面描述的精心设计的 setup
到混乱的 "language in the wild"
是一大步,但是《Dialog-based language learning》
认为,在 dialog
的上下文中,有必要开发能够直接从自然语言中学习的系统,并展示了一个概念证明a proof of concept
:在没有奖励信号reward signal
的情况下,通过使用对 teacher
的输出的前向预测forward prediction
来学习QA
任务。虽然 dialog
是一种有吸引力的方法,但我们担心它过于严格。
互联网包含了大量的信息,这些信息是被动可用的而无需交互式通信。我们的推测是:具有足够能力的语言模型将开始学习推断和执行自然语言序列中阐述的任务,以便更好地预测它们,而无论它们的获取方法如何。如果一个语言模型能够做到这一点,那么它实际上是在进行无监督的多任务学习。我们通过分析语言模型在各种任务上的 zero-shot setting
的表现,来测试情况是否如此。
大多数先前的工作是在单个领域的文本上训练语言模型,如新闻文章、维基百科、或小说书 fiction book
。我们的方法鼓励我们建立一个尽可能大和多样化的数据集,从而收集尽可能多的领域和上下文的自然语言演示 natural language demonstration
任务。
一个有前景的多样化的、几乎无限的文本源是网络爬虫web scrape
,如 Common Crawl
。虽然这些文档比目前的语言建模数据集大很多个数量级,但是它们有重大的数据质量问题。《A simple method for common-sense reasoning》
在他们关于常识推理的工作中使用了 Common Crawl
,但是注意到大量的文件 “其内容几乎是不可理解的”。我们在使用 Common Crawl
的初步实验中观察到了类似的数据问题。《A simple method for common-sense reasoning》
的最佳结果是使用 Common Crawl
的一个小的子集来实现的,该子集仅包含与他们的 target dataset
(Winograd Schema Challenge
)最相似的文件。虽然这是一个务实的方法从而提高特定任务的性能,但是我们希望避免提前对将要执行的任务做出假设。
相反,我们创建了一个新的、强调文档质量的网络爬虫。为了做到这一点,我们仅爬取那些已经被人类精心管理/过滤的网页。人工过滤一个完整的网络爬虫将非常昂贵,因此作为一个开始,我们从 Reddit
(一个社交媒体平台)爬取了所有的外链 outbound link
,这些外链至少收到了 3
个 karma
(类似于点赞数或评论数的一种计数机制)。这可以被认为是一个启发式指标,表明其它用户是否认为该链接有趣、有教育意义。
由此产生的数据集 WebText
,包含了这 4500
万个链接的文本子集。为了从 HTML response
中提取文本,我们使用了 Dragnet
和 Newspaper
内容提取器的组合。本文介绍的所有结果都使用了 WebText
的初步版本preliminary version
,该版本不包括 2017
年 12
月之后创建的链接,并且在去重和一些基于启发式的清理之后包含了略微超过 800
万个文档,共计 40GB
的文本。
我们从 WebText
中删除了所有的维基百科文档,因为它是其它数据集的一个常见数据源,并且由于训练数据与测试评估任务的重叠overlapping
,可能会使分析变得复杂。
下表所示为 WebText
训练集中发现的自然发生的 English to French
和 French to English
的例子:
一个通用的语言模型应该能够计算出任何字符串的概率(当然也能生成任何字符串)。目前的大型语言模型包括预处理步骤,如 lowercasing
、tokenization
、out-of-vocabulary tokens
,这些预处理步骤限制了可建模字符串的空间。
虽然将 Unicode
字符串处理为 UTF-8 bytes
序列可以优雅地满足这一要求(如 《Multilingual language processing from bytes》
),但是目前的 byte-level
语言模型在大型数据集(如 One Billion Word Benchmark
)上与 word-level
语言模型相比没有竞争力。在我们自己尝试在 WebText
上训练标准的 byte-level
语言模型时,我们也观察到了类似的性能差距。
Byte Pair Encoding: BPE
(《Neural machine translation of rare words with subword units》
)是 character-level
和 word-level
语言建模之间的一个实用的中间地带 middle ground
,它有效地在 word-level input
和 character-level input
之间进行插值。尽管它的名字叫 BPE
,但是参考的 BPE
实现通常是在 Unicode code point
而不是字节序列上操作。这些实现需要包括 Unicode symbol
的全部空间,以便为所有 Unicode
字符串建模。这将导致在添加任何 multi-symbol token
之前, base vocabulary
超过了 130k
。与 BPE
经常使用的 32k
到 64k
个 token
的 vocabulary
相比,这个规模太大了。相比之下,BPE
的 byte-level
版本只需要 256
大小的 base vocabulary
。
然而,直接将 BPE
应用于字节序列会导致次优的 merge
,这是因为 BPE
使用贪心的 frequency-based
启发式方法来构建 token vocabulary
。我们观察到 BPE
包括了许多像 dog
这样的常见词的变体,如 dog.
、dog!
、dog?
。这导致了对有限的 vocabulary slot
和模型容量的次优分配。为了避免这种情况,我们防止 BPE
对任何字节序列进行跨 character category
的合并。我们为空格space
增加了一个例外,这极大地提高了压缩效率,同时在多个 vocabulary token
中仅添加最小的单词碎片 word fragmentation
。
这种 input representation
使我们能够将 word-level
语言模型的经验优势与 byte-level
方法的通用性相结合。由于我们的方法可以给任何 Unicode
字符串分配一个概率,这使得我们可以在任何数据集上评估我们的语言模型,而无需考虑预处理、tokenization
、或 vocabulary size
。
我们的语言模型使用 Transformer-based
架构。该模型大体上遵循 OpenAI GPT
模型的细节,并作了一些修改:
layer normalization
被移到每个子块的 input
,类似于一个 pre-activation residual network
。并且在 final self-attention block
之后增加了一个额外的 layer normalization
。
即:
。
使用了修改过的初始化,它考虑了随着模型深度的增加时残差路径residual path
上的累积 accumulation
。我们在初始化时将残差层的权重按照
vocabulary
扩大到 50257
个。
我们还将上下文窗口大小从 512
增加到 1024
,并使用更大的 batch size = 512
。
我们训练和评测了四个语言模型,它们具有大约对数均匀log-uniformly
间隔的大小。下表中总结了这些架构。最小的模型相当于原始的 GPT
,次小的模型相当于 BERT
的最大模型。我们最大的模型,称之为 GPT-2
,其参数规模比 GPT
大一个数量级。
每个模型的学习率都是手动调优的,以便在 WebText
的 5%
的 held-out
样本上获得最佳困惑度 。所有的模型对 WebText
仍然欠拟合 under-fit
,并且如果给定更多的训练时间那么 held-out
数据上的困惑度将会进一步改善。
这些模型在不同任务上的表现如下图所示:
作为实现 zero-shot
的 task transfer
的第一步,我们有兴趣了解 WebText
语言模型在它们被训练的主要任务(即,语言建模 language modeling
)上的表现。由于我们的模型是在 byte-level
上运行的,不需要有损的预处理或 tokenization
,我们可以在任何语言模型 benchmark
上评估它。
WebText
语言模型在大多数的数据集上的测试大大超出了分布范围 out-of-distribution
,如必须预测极端标准化的文本 aggressively standardized text
、标记化的人造物tokenization artifact
(如断开的标点符号和缩略语、混洗的句子)、甚至是 WebText
中极其罕见的字符串 <UNK>
(该字符串在 400
亿的字节中仅出现 26
次)。
我们使用了可逆的 de-tokenizer
从而尽可能多地移除这些 tokenization/pre-processing
的人造物 artifact
。由于这些 de-tokenizer
是可逆的,我们仍然可以计算出数据集的对数概率,它们可以被认为是一种简单的领域适配domain adaptation
形式。我们观察到,使用这些 de-tokenizer
,GPT-2
的困惑度提高了 2.5
到 5
。
WebText
语言模型在不同领域和数据集之间有很好的迁移,在 zero-shot
的setting
下,在 8
个数据集中的 7
个上提高了 state-of-the-art
。
Penn Treebank: PTB
和 WikiText-2
(它们只有1
百万到 2
百万个训练 token
)。在为衡量长期依赖关系而创建的数据集上也有很大的改进,如 LAMBADA
和 Children’s Book Test: CBT
。One Billion Word Benchmark: 1BW
上,我们的模型仍然比先前的工作要差很多。这可能是因为它既是最大的数据集,又有一些最具破坏性的预处理:1BW
的 sentence-level
混洗移除了所有的长程结构long-range structure
。Children’s Book Test: CBT
是为了考察语言模型在不同类别的单词上的表现:命名实体named entity
、名词 noun
、动词 verb
、介词preposition
。CBT
没有将困惑度作为评估指标,而是报告了自动构建的完形填空测试cloze test
的准确率,其中的任务是:预测一个被省略的单词的 10
个可能的候选中,哪一个候选是正确的。按照原始论文中介绍的语言模型方法,我们根据语言模型计算每个候选的概率,和以该候选为条件的句子剩余部分的概率,并选择联合概率最高的那个选项。此外,我们应用一个 de-tokenizer
从而移除 CBT
中的 PTB style
的 tokenization artifact
。
PTB style
指的是Penn Treebank style
的tokenization
,它是一种常用的tokenization
标准。
如下图所示,随着模型大小的增加,模型性能稳步提高,并在该测试中缩小了与人类的差距的大部分。
数据重叠分析 data overlap analysis
表明:CBT
测试集中的一本书(即 Rudyard Kipling
的 《Jungle Book》
)在 WebText
中,所以我们报告了没有重大重叠的验证集的结果:GPT-2
在普通名词上获得了 93.3%
的 new state-of-the-art
结果(即上表中的CTB-CN
),在命名实体上获得了 89.1%
的 new state-of-the-art
结果(即上表中的 CBT-NE
)。
LAMBADA
数据集测试了系统对文本中长距离依赖 long-range dependency
的建模能力。任务是预测句子的最后一个单词。对于人类而言,该任务需要至少 50
个 token
的上下文才能成功预测。GPT-2
将 state-of-the-art
从 99.8
的困惑度提高到 8.6
,并将语言模型在该测试中的准确率从 19%
提高到 52.66%
。其中,我们使用一个没有预处理的数据集版本。
研究 GPT-2
的错误表明:大多数预测是句子的有效延续 continuation
,但不是有效的最终词 final word
。这表明:语言模型没有使用额外的有用的约束条件,即该词必须是句子的最后一个。在此基础上增加一个 stop-word filter
作为近似 approximation
,可以使准确率进一步提高到 63.24%
,使该任务的整体 state-of-the-art
提高了 4%
。
先前的 state-of-the-art
使用了一个不同的约束性的预测 settting
,其中模型的输出被限制为仅出现在上下文中的单词。对于 GPT-2
,这种约束是有害而无益的。因为 19%
的答案不在上下文中。
Winograd Schema challenge
的目标是:通过衡量系统解决文本中的歧义ambiguity
的能力,来衡量系统进行常识推理common-sense reasoning
的能力。该数据集相当小,只有 273
个样本,所以我们建议阅读《On the evaluation of common-sense reasoning in natural language understanding》
,从而帮助理解这一结果的背景。
Winograd Schema challenge
任务要求机器识别出一个歧义的代词的祖先,如:xxxxxxxxxx
The fish ate the worm. It is hungry.
问题:
It
指代fish
还是worm
?
最近,《A simple method for commonsense reasoning》
通过预测更高概率的歧义的解决方案,证明了使用语言模型在这个Challenge
上的重大进展。我们遵从了他们的问题表述,并在下图中直观地展示了我们的模型在完全评分技术full scoring technique
和部分评分技术partial scoring technique
下的表现。GPT-2
将 state-of-the-art
准确率提高了 7%
,达到了 70.70%
(部分评分技术的准确率)。
假设文本序列为
,并且需要解决的歧义词为 。假设候选的词为 ,那么:
- 完全评分技术:将
替代 的评分为 。 - 部分评分技术:将
替代 的评分为 。 然后选择评分最高的候选词作为预测结果。
《A conversational question answering challenge》
的 Conversation Question Answering: CoQA
数据集包含来自 7
个不同领域的文档,每个文档都是关于:问题提出者和问题回答者之间的自然语言对话的 pair
对。CoQA
测试阅读理解能力,也测试模型回答那些依赖于对话历史的问题的能力(如 why?
)。
当以文档、相关对话历史、 final token
(即 A:
)为条件时,来自 GPT-2
的贪心解码 greedy decoding
在验证集上达到了 55 F1
。在没有使用 127k
个人工收集的 question-answer pair
的情况下,我们的方法达到了与 4
个 baseline system
中的 3
个相当甚至更好的效果,而这些 baseline system
是在这 127k
个人工收集的 question-answer pair
上训练的。
监督的 state-of-the-art
是一个基于 BERT
的系统,它接近人类的 89 F1
的性能。虽然 GPT-2
的性能对于一个没有任何监督训练的系统而言是令人振奋的,但是对GPT-2
的答案和错误的一些检查表明:GPT-2
经常使用简单的基于检索retrieval based
的启发式方法,例如在回答 who
的问题时采用文档中的一个名字来回答。
我们在 CNN
和 Daily Mail
数据集上测试 GPT-2
执行文本摘要的能力。为了诱发摘要行为induce summarization behavior
,我们在文章后面添加了文本 TL;DR:
,并使用 Top-k
随机采样(《Hierarchical neural story generation》
)来生成 100
个 token
,这可以减少重复并鼓励比贪心解码更 abstractive
的摘要(类似于 beam search
)。我们使用这 100
个 token
中所生成的句子的前面三句话作为摘要。
TL;DR:
是一个缩写,可以是Too long; Didn't read
(太长,所以没看)、也可以是Too long; Don't read
(太长,不要看)。它通常作为一篇很长的文章的摘要的标题。
虽然从质量上讲,这些生成结果类似于摘要,如下表所示,但是它们通常关注文章中的最近的内容,或者混淆具体细节(如车祸中涉及多少辆车,或帽子/衬衫上是否有 logo
)。
在通常报告的 ROUGE 1,2,L
指标上,生成的摘要仅开始接近经典的 neural baseline
的性能,并且勉强超过了从文章中随机选择的 3
个句子。
ROUGE-N
(其中N
可以为1/2/...
)为N-gram
召回率:
ROUGE-L
为最长公共子序列的重合率:其中:
lcs()
为最长公共子串函数,为召回率, 为精准率。 为精准率权重。
当任务提示被删除时(即没有 TL;DR:
提示),GPT-2
的性能在综合指标上下降了 6.4
分,这表明了用自然语言在语言模型中调用特定任务行为的能力。
我们测试 GPT-2
是否已经开始学习如何从一种语言翻译到了另一种语言。为了帮助它推断出这是目标任务,我们将语言模型置于 english sentence = french sentence
格式的样本 pair
对的上下文中,然后在一个 final prompt
(即 english sentence =
)之后,我们使用贪心解码从模型中采样,并使用第一个生成的句子作为翻译。
WMT-14 English-French
测试集上,GPT-2
达到了 5 BLUE
,这比先前的无监督单词翻译工作(《Word translation without parallel data》
)略差,该方法通过推断出的双语词库bilingual lexicon
进行逐字替换。WMT-14 French-English
测试集上,GPT-2
能够利用其非常强大的英语语言模型,表现明显更好,达到 11.5 BLUE
。这超过了 《Unsupervised neural machine translation》
和 《Unsupervised machine translation using monolingual corpora only》
的几个无监督机器翻译 baseline
,但是仍然比目前最好的无监督机器翻译方法的 33.5 BLUE
差很多(《An effective approach to unsupervised machine translation》
)。这项任务的表现让我们感到惊讶,因为我们故意从 WebText
中删除非英文网页作为过滤步骤。为了证实这一点,我们在 WebText
上运行了一个 byte-level
的语言检测器,该检测器仅检测到 10MB
的法语数据,这比之前无监督机器翻译研究中常见的单语言法语语料库小了约 500
倍。
测试语言模型中包含哪些信息的一个潜在方法是:评估语言模型对虚构风格 factoid-style
问题产生正确答案的频率。由于缺乏高质量的评估数据集,先前对神经系统中这种行为的 showcasing
报告了定性的结果( 《A Neural Conversational Model》
)。
最近引入的 Natural Questions
数据集是一个有希望的资源,可以更定量地测试。与翻译类似,语言模型的上下文是以 question answer pair
作为样本的,这有助于模型推断出数据集的简短答案风格short answer style
。当使用 SQUAD
等阅读理解数据集上常用的精确匹配指标exact match metric
来评估时,GPT-2
能够正确回答 4.1%
的问题。GPT-2
在所生成的答案上分配的概率是经过良好校准well calibrated
的,并且 GPT-2
在它最有把握的 1%
问题上的准确率为 63.1%
。
但是,GPT-2
的最少参数的版本未能超越一个难以置信的、仅有 1.0%
准确率的简单 baseline
,该 baseline
返回每个问题类型(who, what, where
等等)的最常见答案。GPT-2
最大参数的版本回答了 5.3
倍正确的问题(相比较于最少参数的版本),这表明到目前为止,模型容量一直是神经系统在该任务上表现不佳的主要因素。
下表展示了 GPT-2
在验证集问题上生成的 30
个最有信心的答案。GPT-3
的性能仍然比混合了信息检索和抽取式文档问答的开方域问答系统open domain question answering system
的 30% ~ 50%
区间差很多很多。
最近在计算机视觉方面的工作表明:常见的图像数据集包含了不可忽略 non-trivial amount
的近乎重复的图像。例如,CIFAR-10
在训练集和测试集之间有 3.3%
的重叠(《Do we train on test data? purging cifar of near-duplicates》
)。这导致了对机器学习系统的泛化性能的过度报告 over-reporting
。随着数据集规模的增加,训练集和验证集重叠的问题变得越来越可能,而类似的现象可能也发生在 WebText
上。因此,分析有多少测试数据也出现在训练集中是很重要的。
为了研究这个问题,我们创建了 Bloom Filter
,其中包含了 8-gram
的 WebText
训练集的 token
。为了提高召回率,字符串被规范化为仅包含小写字母的 alpha-numeric
单词并以空格作为分隔符。 Bloom Filter
的构造使得 false positive rate
的上限为 100
万个字符串进一步验证了低 false positive rate
,其中 Bloom Filter
没有命中这 100
万个字符串的任何一个。
注意:这里评估的是
8-gram
的重复率,而不是整篇文档的重复率。每篇文档包含多个8-gram
。有可能存在这样的情况:两篇文档不重复,但是它们包含相同的8-gram
。
通过 Bloom Filter
我们计算得到:给定一个数据集,该数据集中的 8-gram
在 WebText
训练集中出现的比例。下表展示了常见的语言模型 benchmark
的这种 overlap
分析。常见的语言模型数据集的测试集与 WebText
训练集有 1% ~ 6%
的重叠 overlap
,平均重叠为 3.2%
。令人惊讶的是,在许多数据集内部,它们的测试集与自己的训练集有较大的重叠,平均有 5.9%
的重叠。
我们观察到 GPT-2
在数据集中的那些较长且重复多次的字符串上的一些记忆行为,如名言或演讲。例如,当以 Gettysburg Address
(该演说在整个 WebText
中出现了 40
次)的第一句半为条件时,GPT-2
的 argmax
解码可以恢复该演说。甚至当使用无截断的采样时,我们发现模型在漂移drifting
之前会复制一段时间的演讲。模型通常在 100-200
个 token
内漂移,并且一旦漂移就会展示出很大的多样性。
为了量化 exact memorization
在样本中出现的频率,我们从 GPT-2
中生成了以 WebText
测试集文章为条件的样本,并将 GPT-2
的 generation
的重叠率与 ground-truth completion
的重叠率进行比较。比较结果如下所示,结果表明:GPT-2
重复训练集中的文本的频率低于 held-out
文章(baseline
)的重叠率。
这里的重叠率指的是:给定一段文本,在训练集中重复出现的
8-gram
数量占它总8-gram
数量的比例。下图中曲线上的点表示:重叠率低于指定值的文本数量占比。
我们的方法针对召回率进行优化。虽然对重叠部分的人工检查显示了许多常见的短语,但是有许多更长的匹配 longer match
是由于重复的数据造成的。这并不是 WebText
所独有的。例如:
WikiText-103
的测试集有一篇文章也在训练集中。由于测试集仅有 60
篇文章,因此这导致至少有 1.6%
的重叠。1BW
与它自己的训练集有大约 13.2%
的重叠。Winograd Schema Challenge
,我们发现只有 10
个 schemata
与 WebText
训练集有 8-gram overlap
。其中,有 2
个是虚假的匹配,而剩下的 8
个中只有 1
个泄露了答案。CoQA
而言,新闻领域中大约 15%
的文档已经出现在 WebText
中,该模型在这些数据集上提高了 3 F1
的性能。CoQA
的验证集指标报告了 5
个不同领域的平均性能,由于不同领域上的 overlap
现象(与 WebText
训练集的重叠),我们测得约 0.5 ~ 1.0 F1
的增益。然而,由于 CoQA
是 WebText
的链接截止日期之后发布的,所以 WebText
中没有实际的训练问题或答案。LAMBADA
上,平均重叠为 1.2%
。在重叠大于 15%
的 case
上,GPT-2
的表现提高了大约 2 perplexity
。在排除了所有任何 overlap
样本时,重新计算指标后,结果从 8.6 perplexity
变为 8.7 perplexity
,并将准确率从 63.2%
降低到 62.9%
。总体结果的变化较小,可能是因为 200
个样本中只有 1
个样本有明显的重叠。总体而言,我们的分析表明:WebText
训练数据和特定的评估数据集之间的数据重叠为报告的结果提供了一个小的但是一致的好处。然而,对于大多数数据集而言,我们并没有发现比原始训练集和测试集之间已经存在的重叠而明显更大的重叠,正如上表所强调的。
了解和量化高度相似的文本如何影响性能是一个重要的研究问题。更好的去重技术(如,可扩展的模糊匹配)也可以帮助更好地回答这些问题。目前,我们建议使用基于 n-gram
重叠的去重,作为新的 NLP
数据集创建 train-test split
时的一个重要验证步骤和理性检查。
确定 WebText
语言模型的性能是否归因于 memory
的另一个潜在方法是:检查它们在自己的 held-out
上的性能。如下图所示,WebText
的训练集和测试集上的性能是相似的,并且随着模型规模的增加而共同提高。这表明,即使是 GPT-2
,它仍然在 WebText
上是欠拟合的。
下表给出了最小的 WebText
语言模型(GPT-2
的最小版本)和 GPT-2
在随机未见的 WebText
测试集文章上的 side-by-side completion
:
GPT-2
也能写出关于发现会说话的独角兽的新闻文章。下表提出了一个例子。
下表展示了同一个随机 WebText
测试集上下文的多个 completion
,这显示了标准采样 setting
下,completion
的多样性:
许多研究致力于学习learning
、理解 understanding
、批判性地评估 evaluating
有监督和无监督预训练方法的 representation
。我们的结果表明:无监督的任务学习是另一个有前途的、有待探索的研究领域。这些发现可能有助于解释预训练技术在下游 NLP
任务中的广泛成功。因为我们表明,在极限情况下,某些预训练技术开始直接学习执行任务,而不需要监督的适配或修改。
在阅读理解方面,GPT-2
在 zero-shot setting
下的性能与监督的 baseline
是可比的。然而,在其它任务上(如 summarization
),虽然GPT-2
执行了任务,但是根据定量指标,其性能仍然只是入门级的。作为一项研究成果而言,GPT-2
是有启发意义的。而就实际应用而言,GPT-2
的 zero-shot
性能还远未达到可使用的程度。
我们已经研究了 WebText
语言模型在许多典型 NLP
任务上的 zero-shot
性能,但还有许多其它任务可以评估。毫无疑问,在许多实际任务中,GPT-2
的性能仍然不比随机的好。即使在我们评估的常见任务上(如问答和翻译),语言模型只有在足够的模型容量时才开始超越最平凡的 baseline
。
虽然 zero-shot
性能为 GPT-2
在许多任务上的潜在性能建立了一个 baseline
,但是并不清楚微调的上限在哪里。在某些任务上,GPT-2
的 fully abstractive output
与基于 extractive pointer network
的输出有很大不同,后者是目前许多问答和阅读理解数据集上的 state-of-the-art
。鉴于之前微调 GPT
的成功,我们计划在 decaNLP
和 GLUE
等 benchmark
上研究微调,尤其是目前还不清楚 GPT-2
的额外训练数据和容量是否足以克服 BERT
所展示的单向 representation
的低效率问题。
近年来,在 NLP
系统中出现了预训练语言 representation
的趋势,并以越来越灵活的、与任务无关task-agnostic
的方式应用于下游任务。
single-layer representation
,然后馈入到特定的任务架构。representation
和上下文状态的 RNN
,从而形成更强大的 representation
。RNN
或 transformer
语言模型,它们被直接微调从而消除了对特定任务task-specific
架构的需求。最后一种范式在许多具有挑战性的 NLP
任务上取得了实质性的进展,并在新的架构和算法的基础上继续推进。然而,这种方法的一个主要局限性是,虽然它的架构是任务无关的,但是仍然需要特定任务的微调 fine-tunning
:要在目标任务上获得强大的性能,通常需要在特定于该任务的、具有数千到数十万个样本的数据集上进行微调。人们希望消除这个局限性,原因如下:
narrowness
的增加而增加。这可能会给预训练加微调的模式带来问题,在这种模式下,模型被设计得很大以便在预训练期间吸取信息,但是随后在很窄的任务分布中进行微调。有证据表明,这种范式下实现的泛化能力可能很差,因为模型过度具体于specific to
训练分布,没有很好地泛化到训练分布之外(这里的训练分布指的是微调数据集)。因此,微调模型在特定 benchmark
上的性能,即使名义上是人类水平,也可能夸大了微调任务上的实际性能。demonstration
就足以使人类执行一项新任务。这种适应性除了解决上述 NLP
技术的局限性之外,还允许人类在许多任务和技能之间无缝切换,如在冗长的对话任务中进行加法任务。为了发挥更广泛的作用,我们希望有一天我们的 NLP
系统也能有这样的流畅性和通用性。解决这些问题的一个潜在途径是 meta-learning
:在语言模型的背景下,这意味着模型在训练时发展出一组广泛的技能以及模式识别能力,然后在推理时使用这些能力来快速适应或识别目标任务(如下图所示)。最近的工作 GPT-2
试图通过我们所说的 in-context learning
来做到这一点,它使用预训练的语言模型的文本输入作为一种任务规范 task specification
形式:GPT-2
以自然语言指令和/或任务的几个示范demonstration
为条件,然后预期模型通过预测接下来的内容来完成任务。虽然GPT-2
已经显示出一些初步的希望,但是它所取得的结果仍然远远不如微调。meta-learning
显然需要大量的改进,以便作为解决语言任务的实用方法。
【作者注:在下图中,我们使用术语 in-context learning
来描述这个过程的内循环,其中内循环发生在每个序列的前向传播中,下面每个子图代表一个序列(注意,并不是一行一个序列,而是多行代表一个序列)。该图中的序列并不是代表模型在预训练期间所看到的数据,只是表明有时在一个序列中会有重复的子任务。】
语言建模的另一个最新趋势可能提供了一条前进的道路。近年来,transformer
语言模型的容量大幅增加,从 1
亿个参数的 GPT-1
,到 3
亿个参数的 BERT
,到 15
亿个参数的 GPT-2
,到80
亿个参数的 Megatron
,到 110
亿个参数的 T5
,最后到 170
亿个参数的 Turing
。每一次规模增加都带来了文本合成text synthesis
和/或下游 NLP
任务的改进。而且有证据表明, log loss
(它与许多下游任务关联性较好) 随着模型规模的增加而有平滑的改进趋势(《Scaling laws for neural language models》
)。由于 in-context learning
涉及到在模型的参数中吸取许多技能和任务,因此,in-context learning
能力可能会随着模型规模的扩大而表现出相似的强大收益,这是合理的。
一言以蔽之,这个方向就是:模型规模要超级大。
在论文 《Language Models are Few-Shot Learners》
,我们通过训练一个 1750
亿参数的自回归语言模型 autoregressive language model
(我们称之为 GPT-3
),并测量其 in-context learning
能力来测试这个假设。具体而言,我们在二十多个 NLP
数据集以及几个新颖的任务上评估 GPT-3
。对于每个任务,我们三种setting
下评估 GPT-3
:
few-shot learning
(或 in-context learning
):我们允许尽可能多的示范,从而适应模型的上下文窗口 context window
(通常是 10
到 100
)。one-shot learning
:我们只允许一个示范。zero-shot learning
:没有任何示范,只给模型提供一条自然语言的指令。理论上讲,GPT-3
也可以在传统的微调 setting
中进行评估,但是我们将此留给未来的工作。
下图说明了我们的研究条件,并展示了对一个简单任务的 few-shot learning
,该任务要求模型从一个单词中移除不相干的 symbol
。
description
的增加而增加(即有 prompt
的效果优于没有 prompt
)。下图实线表示有 prompt
,虚线表示没有 prompt
。zero-shot
,one-shot
,few-shot
。few-shot learning
性能也随着模型规模的增加而显著提高。虽然这种情况下的结果特别引人注目,但是模型规模和上下文中的样本数量的一般趋势在我们研究的大多数任务中都适用。我们强调,这些 learning curve
不涉及梯度更新或微调,只是增加了作为条件的示范的数量。
【作者注:较大的模型对上下文信息的利用越来越有效。大型模型的 in-context learning curves
越陡峭,则表明从 contextual information
中学习一个任务的能力越好。】
大体上,在 NLP
任务中,GPT-3
在 zero-shot/one-shot setting
中取得了有希望的结果;而在 few-shot
的 setting
中有时具有与 SOTA
相同的竞争力,甚至偶尔超越了 SOTA
( SOTA
是由微调模型获得的)。例如:
CoQA
数据集上,GPT-3
在 zero-shot/one-shot/few-shot setting
中实现了 81.5/84.0/85.0 F1
。TriviaQA
数据集上,GPT-3
在 zero-shot/one-shot/fiew-shot setting
中实现了 64.3%/68.0%/71.2%
的准确率。其中 few-shot
的结果超越了在相同的 closed-book setting
下的微调模型,达到了 SOTA
。GPT-3
在测试快速适应rapid adaption
或即时推断 on-the-fly reasoning
的任务中也展示出 one-shot/few-shot
的熟练性 proficiency
,这些任务包括解扰单词 unscrambling word
(即恢复被扰动的单词)、进行数学运算、以及看到新词novel word
的一次定义之后在后面的句子中使用这些词。我们还表明:在 few-shot setting
中,GPT-3
可以生成合成的新闻文章,而人类评估员很难将合成的文章与人类产生的文章区分开。
同时,我们也发现了一些任务,即使在 GPT-3
的规模下,few-shot
的性能也很差。这包括自然语言推理任务natural language inference task
,如 ANLI
数据集,以及一些阅读理解数据集(如 RACE
或 QuAC
)。通过对 GPT-3
的优点和缺点的广泛描述,包括这些局限性,我们希望能够激励对语言模型中的 few-shot learning
的研究,并引起对需求最迫切的进展的关注。
下图汇总了各种任务的结果,尽管它本身不应该被看做是一个严格的或有意义的 benchmark
。
【作者注:虽然 zero-shot
性能随着模型规模的扩大而稳步提高,但是 few-shot
性能提高得更快,这表明较大的模型在in-context learning
方面更为熟练。】
我们还对“数据污染” data contamination
进行了系统性的研究。当在诸如 Common Crawl
这样的数据集上训练大容量模型时,这是一个日益严重的问题,该数据集可能包含了来自测试数据集的内容,仅仅是因为测试数据集的内容经常来自于网络。在本文中,我们开发了系统性的工具来测量数据污染,并量化数据污染的扭曲效应 distorting effect
。尽管我们发现数据污染对 GPT-3
在大多数数据集上的性能影响很小,但是我们确实发现了一些数据集,在该数据集上评估会夸大 GPT-3
的结果。对于这些会夸大 GPT-3
结果的数据集,我们要么不报告这些数据集的结果,要么根据污染严重程度用星号加以说明。
除了上述所有情况外,我们还训练了一系列较小的模型(从 1.25
亿个参数到 130
亿个参数不等),以便在 zero-shot/one-shot/few-shot setting
中和 GPT-3
比较性能。总体而言,对于大多数任务,我们发现在所有三种 setting
下,效果随着模型容量的 scale
是相对平滑的。一个值得注意的模式是:zero-shot/one-shot/few-shot
的性能之间的 gap
往往随着模型容量的增加而增加,这也许表明更大的模型是更熟练的 meta-learner
。
最后,鉴于 GPT-3
所展示的广泛能力,我们讨论了 bias
、公平、以及更广泛的社会影响,并尝试对 GPT-3
在这方面的特性进行初步分析。
相关工作:
有一些工作聚焦于增加语言模型的参数量或/和计算量,从而提高任务性能。早期的工作是将基于 LSTM
的语言模型扩展到超过 10
亿个参数的 《Exploring the limits of language modeling》
。
transformer
模型的大小,将参数数量和 FLOPS-per-token
大致按比例增加。这方面的工作已经连续增加了模型的大小: 2.13
亿个参数的 Transformer
、3
亿个参数的 BERT
、15
亿个参数的 GPT-2
、80
亿个参数的 Megatron
、 110
亿个参数的 T5
、 170
亿个参数的 Turing
。《Estimating or propagating gradients through stochastic neurons for conditional computation》
。具体而言,混合专家方法(《The sparsely-gated mixture-of-experts layer》
)已被用于产生 1000
亿个参数的模型,最近又产生了 500
亿个参数的翻译模型(《Massively multilingual neural machine translation》
),尽管每次前向传播时实际上仅使用了一小部分的参数。adaptive computation time
(《Adaptive computation time for recurrent neural networks》
)和universal transformer
(《Universal transformers》
)。我们的工作聚焦于第一个方向(将计算和参数一起扩大,直接使神经网络变大),并将模型大小增加到 10x
(即,十倍)。
一些工作也系统性地研究了规模对于语言模型性能的影响。《Scaling laws for neural language models》
、《A constructive prediction of the generalization error across scales》
、《Train large, then compress: Rethinking model size for efficient training and inference of transformers》
、《Deep learning scaling is predictable, empirically》
发现,随着自回归语言模型规模的扩大, loss
有一个平滑的 power-law
的趋势。这些工作表明,随着模型规模的不断扩大,这个趋势在很大程度上仍在继续。而且我们还发现在许多(尽管不是全部)下游任务中,在横跨 3
个量级的scaling
中都有相对平滑的增长。
另一个工作方向与scaling
的方向相反,试图在尽可能小的语言模型中保留强大的性能。这些方法包括 ALBERT
、通用模型蒸馏方法 (《Distilling the knowledge in a neural network》
)、以及特定任务的模型蒸馏方法(DistilBERT
、TinyBERT
、《Sequence-level knowledge distillation》
)。这些架构和技术有可能是对我们工作的补充,并可以用于减少巨型模型 giant model
的延迟和内存占用。
随着微调的语言模型在许多标准 benchmark
任务上接近人类的表现,人们已经付出了相当大的努力来构建更困难或更开放的任务,包括问答question answering
、阅读理解reading comprehension
、以及旨在对现有语言模型造成困难的对抗性构建的数据集。在这项工作中,我们在许多这些数据集上测试我们的模型。
之前的许多工作都特别关注问答 question-answering
,这在我们测试的任务中占了很大一部分。最近的许多工作包括 《Exploring the limits of transfer learning with a unified text-to-text transformer》
、《How much knowledge can you pack into the parametersof a language model?》
(它们对 110
亿个参数的语言模型进行了微调),以及《Realm: Retrieval-augmented language model pre-training》
(它侧重于在测试时关注大型数据集)。我们的工作不同之处在于聚焦 in-context learning
,但是未来可以与 Realm
和 《Retrieval-augmented generation for knowledge-intensive nlp tasks》
的工作相结合。
语言模型中的 meta-learning
已经在 GPT-2
中得到了应用,尽管结果比较有限,也没有系统性的研究。更广泛地说,语言模型的 meta-learning
有一个 inner-loop-outer-loop
的结构,使得它在结构上与应用到通用机器学习的 meta-learning
相似。这里有大量的文献,包括 matching network
(《Matching Networks for OneShot Learning》
)、RL2
(《Rl2: Fastreinforcement learning via slow reinforcement learning》
)、 learning to optimize
、以及 MAML
(《Model-agnostic meta-learning for fast adaptation of deep networks》
)。我们的方法用previous
样本来填充模型的上下文,这种方法在结构上与 RL2
最为相似,也与 《Learning to Learn Using Gradient Descent》
相似,即:
adaptation
是通过对模型 activateion
的跨 time step
的计算而进行的,而不更新权重。在 《Few-shot auto regressive density estimation: Towards learning to learn distributions》
中探讨了 few-shot
自回归密度估计,并且 《Meta-learning for low-resource neural machine translation》
将低资源神经机器翻译作为 few-shot learning
问题来研究。
虽然我们的 few-shot
方法的机制不同,但是之前的工作也探索了使用预训练的语言模型与梯度下降相结合来进行 few-shot learning
的方法(《Exploiting cloze questions for few-shot text classification and natural language inference》
)。另一个具有类似目标的子领域是半监督学习,其中 UDA
(《Unsupervised data augmentation for consistency training 》
)等方法也探索了在可用的标记数据非常少时进行微调的方法。
在自然语言中给多任务模型下达指令,这在有监督环境中首次被正式化(《The natural language decathlon: Multitask learning as question answering》
),并在语言模型 GPT-2
中被用于一些任务(如摘要)。在 T5
中也探索了用自然语言提出任务的概念,尽管它被用于多任务微调,而不是用于没有权重更新的in-context learning
。
另一种提高语言模型通用性和迁移学习能力的方法是多任务学习,它将多个下游任务混合在一起进行微调,而不是单独更新每个任务的权重。如果成功的话,多任务学习可以允许单个模型用于许多任务而不需要更新权重(类似于我们的 in-context learning
方法),或者在更新一个新任务的权重时可以提高样本效率sample efficiency
(即,更少的样本)。多任务学习已经展示出一些有希望的初步结果,多阶段微调最近已经成为一些数据集上 SOTA
结果的标准化部分(《Sentence encoders on STILTs: Supplementary training on intermediate labeled-data tasks》
),但是仍然受到需要手动整理数据集以及设置训练课程training curricula
的限制。相比之下,足够大规模的预训练似乎提供了一个 “自然” 的广泛的任务分布,这个任务分布隐含在预测文本这个任务本身。未来工作的一个方向可能是尝试为多任务学习产生更广泛的、显式的任务集合,例如通过程序化生成procedural generation
、人类互动human interaction
、或主动学习active learning
。
在过去两年中,语言模型的算法创新是巨大的,包括基于降噪的双向性(BERT
)、prefixLM
(《Semi-supervised sequence learning》
)、encoder-decoder
架构(Bart
、T5
)、训练期间的随机排列 (XLNet
)、提高采样概率的架构(Transformer-xl
)、数据和训练程序的改进(RoBERTa
)、以及 embedding
参数的效率提高(RoBERTa
)。这些技术中的许多在下游任务上提供了显著的收益。在这项工作中,我们继续聚焦于纯自回归语言模型,这既是为了聚焦 in-context learning
性能,也是为了降低我们大模型实现的复杂性。然而,纳入这些算法很可能会提高 GPT-3
在下游任务上的性能,特别是在微调的 setting
中,将 GPT-3
与这些算法技术相结合是未来的一个有希望的方向。
我们 basic
的预训练方法,包括模型、数据、以及训练,与 GPT-2
相似,模型大小、数据集大小和多样性、训练 epoch
都直接 scaling up
。我们对 in-context learning
的使用也类似于 GPT-2
,但是在这项工作中,我们系统地探索了 in-context learning
的不同 setting
。因此,我们在本节开始时明确地定义和对比了我们将要评估 GPT-3
的不同setting
:
微调 Fine-Tuning: FT
:微调是近年来最常用的方法,它包括通过对所需任务的特定监督数据集进行训练来更新预训练模型的权重。通常情况下,会使用几千到几十万个标记样本。
benchmark
上有强大的性能。out-of-distribution
的不良泛化(《Right for the wrong reasons: Diagnosing syntactic heuristics in natural language inference》
),以及有可能利用训练数据集的虚假特征从而导致与人类表现的不公平比较(《Annotation artifacts in natural language inference data》
、《Probing neural network comprehension of natural language arguments》
)。在这项工作中,我们没有对 GPT-3
进行微调,因为我们的重点是任务无关task-agnostic
的性能。但是 GPT-3
原则上是可以微调的,这是未来工作的一个有希望的方向。
Few-Shot: FS
:Few-Shot
是我们在这项工作中使用的术语,指的是在推断时给模型一些任务的演示 demonstration
作为条件,但不允许权重更新。
如下图所示,对于一个典型的数据集,一个样本有一个 context
和一个预期的补全 completion
(例如,一个英语句子作为上下文,和对应的法语翻译作为补全)。few-shot
通过给出 context
和 completion
的样本,然后再给出最后一个样本的 context
,并预期模型能够提供最后一个样本的 completion
。我们通常将 10
到 100
的范围,因为这是模型的上下文窗口(
few-shot
的主要优点是:大大减少了对特定任务数据的需求,并减少了从大而窄的微调数据集中学习过度狭窄分布的可能性。few-shot
的主要缺点是:到目前为止,这种方法的结果比 SOTA
的微调模型差很多。另外,仍然需要少量的特定任务的数据。如名称所示,这里描述的用于语言模型的 few-shot learning
与机器学习中其它情况下使用的 few-shot learning
有关(《Learning to Learn Using Gradient Descent》
、《Matching Networks for One Shot Learning 》
):二者都涉及基于广泛的任务分布的学习(在我们的 case
中是隐含在预训练数据中),然后快速适应新的任务。
One-Shot: 1S
:One-Shot
与 few-shot
相同,只是除了任务的自然语言描述之外,只允许一个示范,如下图所示。将 one-shot
与 few-shot
和 zero-shot
区分开的原因是,它与一些人类交流的任务的方式最接近。例如,当要求人来生成一个 human worker service
(如Mechanical Turk
)的数据集时,通常会给出任务的一个示范。相比之下,如果没有给出任何示范,有时就很难沟通任务的内容或格式。
Zero-Shot: 0S
:Zero-Shot
与 one-shot
相同,只是没有任何示范,只给模型一个描述任务的自然语言指令。这种方法提供了最大的便利性和潜在的鲁棒性,并避免了虚假的相关性(除非它们在预训练数据的大型语料库中非常广泛地出现),但是也是最具挑战性的 setting
。
在某些情况下,如果没有事先的例子,人类甚至很难理解任务的形式,所以这种设置在某些情况下是 “不公平的困难”。例如,如果有人被要求 “制作一个 200
米短跑的世界纪录表格”,这个要求可能是模棱两可的,因为可能不清楚这个表格到底应该是什么格式,或者应该包含什么内容(即使仔细澄清,也很难准确地理解想要什么)。尽管如此,至少在某些情况下,zero-shot
最接近人类执行任务的方式:如下图的翻译例子中,人类很可能仅从文本指令text instruction
中就知道该怎么做。
下图展示了使用英语翻译成法语的例子的四种方法。在本文中,我们重点讨论了 zero-shot/one-shot/few-shot
,目的不是将它们作为竞争性的替代方案进行比较,而是作为不同的问题设置,在特定 benchmark
和样本效率之间提供不同的 tradeoff
。我们特别强调了 few-shot
的结果,因为它们中的许多仅仅是稍微落后于 SOTA
的微调模型。然后,one-shot
,有时甚至是 zero-shot
,似乎是对人类性能最公平的比较,也是未来工作的重点目标。
作者注:zero-shot/one-shot/few-shot
仅要求模型在测试期间前向传播就能完成任务(而无需反向梯度更新)。
我们使用与 GPT-2
相同的模型和架构,包括其中描述的modified initialization
、pre-normalization
、reversible tokenization
,不同的是我们在 transformer
的层中使用交替的 dense
和 locally banded sparse
的注意力模式,类似于 Sparse Transformer
(《Generating long sequences with sparse transformers》
) 。
locally banded sparse
注意力:每个位置的注意力仅依赖于附近的个位置。
为了研究机器学习性能对模型大小的依赖性,我们训练了 8
种不同大小的模型,规模从 1.25
亿个参数到 1759
亿个参数(横跨 3
个量级),其中规模最大的那个模型我们称之为 GPT-3
。以前的工作《Scaling laws for neural language models》
表明:在有足够训练数据的情况下,验证损失的 scaling
应该是一个平滑的 power law
并且作为数据规模的函数。训练许多不同规模的模型使我们能够测试这个假设,无论是在验证损失上测试还是在下游的语言任务上测试。
下表展示了我们 8
个模型的大小和结构。其中:
bottleneck layer
的单元数,我们总是让前馈层的大小是 bottleneck layer
的四倍,即
根据公式有:
。
所有模型都使用 token
的 context window
。
我们同时沿着深度和宽度维度将模型在 GPU
之间进行 partition
,从而尽量减少节点之间的数据传输。每个模型的 precise architectural parameter
是根据计算效率和跨 GPU
的模型布局的负载平衡来选择的。以前的工作《Scaling laws for neural language models》
表明:在一个合理的大的区间范围内,验证损失对这些超参数并不非常敏感。
我们使用 Common Crawl
数据集。然而我们发现:未经过滤和轻度过滤的 Common Crawl
版本的质量往往低于精心处理的数据集。因此我们采取了三个步骤来提高我们的数据集的平均质量:
Common Crawl
数据集,并基于与一系列高质量参考语料库的相似性来过滤 Common Crawl
。document-level
的模糊去重fuzzy deduplication
,从而防止数据冗余,并保持我们 held-out
验证集的完整性从而作为对过拟合的准确衡量。Common Crawl
并增加其多样性。前两点( Common Crawl
的处理)的细节在附录中描述。对于第三点,我们加入了几个精心设计的高质量数据集,包括 WebText
数据集的扩展版本(该扩展数据集是通过在较长时间内爬取链接而收集的),以及两个基于互联网的 books
语料库(Books1
和 Books2
)和英文维基百科。
下表展示了我们在训练中使用的最终混合数据集。CommonCrawl
数据是从覆盖 2016
年到 2019
年月度 CommonCrawl
的 41
个分片中下载的,在过滤前是 45TB
的压缩文本,过滤后是 570GB
,大约包含 400B
的 byte-pair-encoded tokens
。
注意,在训练期间,数据集的采样并不与它们的大小成正比,而是我们认为质量较高的数据集被更频繁地采样。例如:CommonCrawl
和 Books2
数据集在训练期的每个 epoch
被采样不到 1
次,但是其他数据集被采样 2
到 3
次。这基本上是接受了少量的过拟合从而换取更高质量的训练数据。
下图中:Weight
表示训练过程中,从给定数据集中采样的比例。最后一列表示混合数据每个 epoch
包含各个子数据集的多少个 epoch
。总的 token
数量为:
、
对于在广泛的互联网数据上进行预训练的语言模型,尤其是有能力记忆大量内容的模型,一个主要的方法论问题是:在预训练期间无意中看到测试集或验证集,从而对下游任务造成潜在污染。为了减少这种污染,我们搜索并试图消除与本文研究的所有 benchmark
验证集或测试集的任何重叠 overlap
。不幸的是,过滤中的一个错误导致我们忽略了一些重叠,而且由于训练的成本,重新训练模型是不可行的。在未来的工作中,我们将更积极地消除数据污染。
正如 《Scaling laws for neural language models》
和 《An empirical model of large-batch training》
中发现的那样,较大的模型通常可以使用较大的 batch size
,但是需要较小的学习率。我们在训练过程中测量 gradient noise scale
,并使用它来指导我们对 batch size
的选择。下表展示了我们使用的参数配置。为了在不耗尽内存的情况下训练更大的模型,我们混合使用模型并行(在每个矩阵乘法上使用模型并行,即沿着宽度维度来划分模型;在网络各层上使用模型并行,即沿着深度维度来划分模型)。所有模型都是在微软提供的、位于一部分高带宽集群的 V100 GPU
上训练的。训练过程和超参数设置的细节参考附录。
对于 few-shot learning
,我们通过从该任务的训练集中随机抽取 evaluation set
中的每个样本,根据任务的不同,每个样本被 1
或 2
个换行符来限定 delimited
。
LAMBADA
和 Storycloze
,因为训练集没有监督信息,所以我们从验证集中采样条件样本 conditioning example
,在测试集中进行评估。Winograd
(原始版本,而不是 SuperGLUE
版本),只有一个数据集,所以我们直接从该数据集采样条件样本。0
到模型上下文窗口(对于所有模型而言 10
到 100
个样本。较大的 demonstration
之外我们还使用自然语言提示 natural language prompt
,如果是
在涉及从几个选项中选择一个正确答案的任务中,我们提供了 (context, completion)
的样本,然后是一个只有 context
的样本,并比较每个completion
的 LM likelihood
。
这里是把所有样本拼接成一个长的序列,从而作为上下文。如:
xxxxxxxxxx
Q:xxxx
A:yyyy
Q:xxxxxx
A:yyyy
Q:xxxxxxx
A:
最后只有一个
A:
作为提示,现在需要补全答案。
对于大多数任务,我们比较 per-token
的可能性(即,对长度进行归一化处理)。
即:
,其中 为 token
数量。
然而在少数数据集(ARC, OpenBookQA, RACE
)上,我们通过计算 completion
的无条件概率来归一化,其中 answer context
为字符串 "Answer: "
或"A: "
并用于提示 completion
应该是一个答案,其它方面都是通用的。
在涉及二分类的任务上,我们给答案起了更有语义的名字(如 True
或 False
,而不是 0
或 1
),然后把任务当做选择题。我们有时也会像 T5
那样对任务进行框定 frame
(详见附录)。
在自由形式的 completion
任务上,我们使用与 T5
相同参数的 beam search
:beam width = 4
,长度惩罚系数 F1
相似度得分、BLEU
、或 exact match
来对模型进行评分,具体取决于数据集是什么评估标准。
如果测试集是公开的,那么我们会针对每个模型的大小和 setting
(zero-shot/one-shot/few-shot
)报告最终结果。如果测试集是私有的,我们的模型往往太大而无法在 test server
上 fit
,所以我们报告验证集的结果。我们确实在少量数据集(SuperGLUE, TriviaQA, PiQa
)上提交了 test server
,在这些数据集上我们能够顺利提交,并且我们仅提交了 200B
(最大的模型)的 few-shot
结果。其它所有的结果都是验证集上报告的。
实际上是
175B
模型而不是200B
模型?
下图我们展示了 8
个模型的训练曲线。在这张图中,我们还包括了 6
个额外的小模型,它们的参数只有 10
万个(一共十四条曲线)。正如在 《Scaling laws for neural language models》
中观察到的,当有效利用 training compute
时,语言建模的性能遵循一个 power-law
。在将这个趋势再scale
两个数量级之后,我们观察到的是对 power-law
的轻微偏离(如果有的话)。人们可能会担心:交叉熵损失的这些提升仅仅来自于对我们训练语料库的虚假细节spurious details
的建模(从而导致泛化能力较差)。然而,我们将在后续的章节看到,交叉熵损失的改善在广泛的自然语言任务中导致了一致的性能提升。
作者注:在下图中,我们把 emebdding parameters
从统计中剔除了。
下面,我们对这 8
个模型(1750
亿参数的 GPT-3
和 7
个较小的模型)在广泛的数据集上进行评估。我们将这些数据集分为 9
个类别,代表大致相似的任务。
3.1
节(原始论文的章节,下同)中,我们对传统的语言建模任务和语言建模类似的任务进行评估,如 Cloze
任务和 sentence/paragraph completion
任务。3.2
节中,我们的对 closed book
问答任务进行评估,这些任务需要使用存储在模型参数中的信息来回答通用的知识问题。3.3
节中,我们评估了该模型在不同语言之间的翻译能力(尤其是 one-shot/few-shot
)。3.4
节中,我们评估该模型在类似 Winograd Schema
任务上的表现。3.5
节中,我们对涉及尝试推理或问答的数据集进行评估。3.6
节中,我们对阅读理解任务进行了评估。3.7
节中,我们对 SuperGLUE benchmark suite
进行了评估。3.8
节中,我们简要地讨论了 NNLI
。3.9
节中,我们开发了一些额外的任务,专门用来探测 in-context learning
能力。这些任务聚焦于即时推理 on-the-fly reasoning
、适应技能 adaption skill
、开放式文本合成 open-ended text synthesis
。我们对所有任务都在 few-shot/one-shot/zero-shot setting
下进行了评估。
我们在 GPT-2
中测量的 Penn Tree Bank: PTB
数据集上计算了 zero-shot
困惑度。我们最大的模型在 PTB
上达到了一个新的 SOTA
,有 15
个点的飞跃,达到了 20.50
的困惑度。注意,由于 PTB
是一个传统的语言建模数据集,它没有明确的分隔 separation
的样本来定义 one-shot
或 zero-shot
,所以我们仅测量 zero-shot
的。
这里省略了许多常见的语言建模数据集,因为这些数据集来自于维基百科或其它数据源,而这些数据源都已经包含在 GPT-3
的训练数据中。
LAMBADA
数据集测试了文本中长距离依赖关系的建模:模型被要求预测句子的最后一个单词,这要求模型阅读一个段落(作为上下文)。在 zero-shot
的情况下,GPT-3
在 LAMBADA
上达到了 76%
,比以前的技术水平提高了 8%
。
LAMBADA
也是 few-shot learning
灵活性的证明,因为它提供了一种方法来解决这个数据集上出现的一个经典问题:尽管 LAMBADA
中的 completion
总是句子中的最后一个单词,但是标准的语言模型却无法得知这个细节。因此,语言模型不仅为正确的结尾分配概率,也为该段落的其它有效 continuation
分配概率。这个问题在过去已经通过停用词过滤(这禁止了 continuation
词)得到了部分解决。few-shot setting
反而使我们能够将任务 “框定” 为一个 cloze-test
,并允许语言模型从样本中推断出恰好需要一个单词的 completion
。我们使用以下的 fill-in-the-blank
格式:
xxxxxxxxxx
Alice was friends with Bob. Alice went to visit her friend ____. -> Bob
George bought some baseball equipment, a ball, a glove, and a ___. ->
当以这种方式呈现样本时,GPT-3
在 few-shot setting
下达到了 86.4%
的准确率,比之前的 SOTA
提高了 18%
。我们观察到,few-shot
的性能随着模型的大小而得到强烈的改善:对于最小的模型则性能只有接近 20%
,而对于 GPT-3
则性能达到 86%
。
最后,fill-in-blank
在 one-shot setting
中效果不佳,它的表现总是比 zero-shot setting
更差。也许这是因为所有模型仍然需要几个样本来识别模式。
作者注:对于 few-shot learning
,GPT-3 2.7B
已经超越了 SOTA
的 17B
参数的 Turing-NLG
,并且 GPT-3 175B
超越了 SOTA
高达 18%
。
需要注意的是,对测试集污染的分析发现,LAMBADA
数据集中的相当一部分似乎存在于我们的训练数据中。然而 ”衡量和防止对 benchmark
的记忆“这部分章节的分析表明:这对性能的影响可以忽略不计。
HellaSwag
数据集涉及为一个故事或一组指令挑选最佳的 ending
。这些例子被对抗性地挖掘出来,对语言模型而言很难,而对于人类而言确很容易(人类达到 95.6%
的准确率)。
GPT-3
在 one-shot/few-shot setting
中取得了 78.1%/79.3%
的准确率,超越了微调的 1.5B
参数模型Grover
的 75.4%
的准确率,但是仍然比微调的多任务模型 ALUM
取得的 85.6%
的 SOTA
低了不少。
StoryCloze 2016
数据集涉及为五句话长度的故事选择正确的 ending sentence
。这里,GPT-3
在 zero-shot/few-shot setting
中取得了 83.2%/87.7%
的成绩,其中 few-shot
的 BERT
模型的微调 SOTA
低 4.1%
,但是比以前的 zero-shot
结果提高了大约 10%
。
这里我们衡量 GPT-3
回答有关广泛事实知识broad factual knowledge
的问题的能力。
query
的数量巨大,该任务通常是通过使用信息检索系统来寻找相关的文本,并结合一个模型来学习给定 question
和被检索到文本 retrieved text
的条件下生成 answer
。由于这种 setting
允许系统搜索可能包含答案的文本,并以搜到的文本为条件,因此这种 setting
被称作 “开卷” open-book
。《How much knowledge can you pack into the parameters of a language model》
最近证明了一个大型的语言模型可以在没有辅助信息为条件的情况下直接回答问题。他们将这种限制性更强的评估 setting
称作 “闭卷” closed-book
。他们的工作表明:更高容量的模型可以表现得更好。我们用 GPT-3
测试这个假设。我们在 《How much knowledge can you pack into the parameters of a language model》
中的三个数据集上评估 GPT-3
:Natural Questions
、WebQuestions
、TriviaQA
,使用与他们相同的 split
。注意,除了所有结果都是在闭卷的情况下进行之外,我们使用 zero-shot/one-shot/few-shot
的评估代表了比他们更严格的 setting
:除了不允许有外部内容之外,也不允许对 Q&A
数据集本身进行微调。
GPT-3
的结果如下所示:
在 TriviaQA
数据集上,我们在 zero-shot/one-shot/few-shot setting
中取得了 64.3%/68.0%/71.2%
的成绩。
zero-shot
结果比微调的 T5-11B
改进了 14.2%
,也比在预训练中使用 Q&A tailored span prediction
提高了 3.8%
。
few-shot
与一个开放域 open-domain
的 QA
系统的 SOTA
相匹配,该系统不仅进行了微调,还利用了一个学到的检索机制 retrieval mechanism
。
在 WebQuestions: WebQs
上,GPT-3
在 zero-shot/one-shot/few-shot setting
中达到 14.4%/25.3%/41.5%
。相比之下,微调的 T5-11B
为 37.4%
,微调的 T5-11B+SSM
为 44.7%
(它采用了一个 Q&A-specific
预训练程序)。
GPT-3
在 few-shot setting
下的性能接近 SOTA
微调模型。值得注意的是,与 TriviaQA
相比,WebQS
从 zero-shot
到 few-shot
表现出更大的优势(事实上,zero-shot
到 one-shot
的差异也较大),这也许表明:WebQs
的问题和/或答案的风格对于 GPT-3
而言是 out-of-distribution
的。然而,GPT-3
似乎能够适应 adapt
这种分布,在 few-shot setting
下恢复了强大的性能。
在 Natural Questions: NQs
上,GPT-3
在 zero-shot/one-shot/few-shot setting
中达到 14.6%/23.0%/29.9%
。相比之下,微调的 T5-11B+SSM
为 36.6%
。
与 WebQs
类似,从 zero-shot
到 few-shot
的巨大收益可能表明了 distribution shift
,也可能解释了NQs
和 TriviaQA, WebQs
相比竞争力较弱的表现。特别是,NQs
中的问题倾向于非常精细的维基百科知识,这可能是在测试 GPT-3
的容量和 broad pretraining distribution
的极限。
总而言之,在三个数据集中的一个上(即,TriviaWA
数据集),GPT-3
的 one-shot
匹配了开放域的微调 SOTA
。在另外两个数据集上,尽管没有使用微调,但是 GPT-3
接近于闭卷 SOTA
的性能。在所有三个数据集上,我们发现性能随模型规模的变化非常平稳。这可能反映了这样的思想:模型容量直接转化为更多的、被模型参数吸收的 “知识”。
所有模型规模在所有 QA
任务上的性能:
在 GPT-2
中,由于容量问题 capacity concern
,我们对多语言文件集合使用了一个过滤器,从而产生一个只有英语的数据集。即使采用了这个过滤器,GPT-2
也展示了一些多语言能力的证据,并且在法语和英语之间翻译时,表现得非同寻常,尽管只对 10MB
的、过滤后残留的法语文本进行了训练。
在 GPT-3
中我们将 GPT-2
的容量提高了两个数量级,而且我们也扩大了训练数据集的范围从而包括其它语言的更多 representation
。我们的大部分数据都是来自于原始的 Common Crawl
,只有基于质量的过滤。尽管 GPT-3
的训练数据仍然主要是英语(根据单词数来算,占比 93%
),但是它也包括 7%
的其它语言的文本(参见论文中的补充材料)。为了更好地了解翻译能力,我们还包括了另外两种常用的研究语言:德语 German
和罗马尼亚语 Romanian
。
现有的无监督机器翻译方法通常将一对单语言数据集的预训练和 back-translation
相结合。相比之下,GPT-3
从混合的训练数据中学习,该数据以自然的方式将多种语言混合在一起,在单词、句子、和文档 level
将它们结合起来。
GPT-3
还使用一个单一的训练目标,该目标不是为任何特定的任务定制或设计的。然而,我们的 one-shot/few-shot setting
不能严格地与先前的无监督工作相比较,因为我们的方法仅利用了少量的 paired
样本(1
个或 64
个)。这相当于最多一两页的 in-context training data
。
结果如下表所示:
zero-shot
的 GPT-3
,仅接收任务的自然语言描述,仍然低于最新的无监督的神经机器翻译 neural machine translation: NMT
的结果。
one-shot
的 GPT-3
,仅为每项翻译任务提供单个样本,性能比 zero-shot
提高了 7 BLEU
,并且接近与先前工作有竞争力的性能。
few-shot
的 GPT-3
进一步提高了 4 BLEU
,导致与先前的无监督神经机器翻译的平均性能相似。
GPT-3
的性能在语言类型方面有个明显的倾斜,在其它语言翻译到英语时显著优于先前的无监督神经机器翻译工作,但是在英语翻译到其它语言时表现不佳。这可能是由于重用了 GPT-2
的 byte-level BPE tokenizer
,该 tokenizer
是为一个几乎完全是英语的训练数据集开发的。
对于 Fr-En
和 De-En
,GPT-3
的 few-shot
超越了我们能找到的最好的监督结果,但是我们对相关文献不熟悉并且看起来这些 benchmark
没什么竞争力,因此我们认为这些结果并不代表真正的 SOTA
。
对于 Ro-En
,GPT-3
的表现相比 SOTA
是在 0.5 BLEU
以内,而 SOTA
是通过无监督预训练以及对 608k
标记样本进行微调以及 back-translation
的组合来实现的。
最后,在所有的语言翻译和所有的三种 setting
中,随着模型容量的提高,有一个平滑的趋势。
下图中,虚线是英语翻译到其它语言,实线是其它语言翻译到英语。
所有模型规模在所有翻译任务中的性能:
Winograd Schemas Challenge
是NLP
中的一项经典任务,它涉及确定代词指的是哪个词,其中这个代词在语法上是模糊ambiguous
的但是在语义上对人而言是明确unambiguous
的。最近,经过微调的语言模型在原始的 Winograd
数据集上取得了接近人类的性能。但是对于更难的版本,如对抗性挖掘的 Winogrande
数据集,微调的语言模型仍然大大落后于人类的性能。
我们在 Winograd
和 Winogrande
上测试 GPT-3
的性能,在 zero-shot/one-shot/few-shot setting
中。
在 Winograd
上,GPT-3
在 zero-shot/one-shot/few-shot setting
中分别取得了 88.3%/89.7%/88.6%
的成绩,没有显示出明显的 in-context learning
,但是在所有情况下都取得了很强劲的结果,仅比 SOTA
和人类表现低一点点。
我们注意到,污染分析在训练数据中发现了一些 Winograd schemas
,但是这似乎仅对结果有很小的影响(见”衡量和防止对 benchmark
的记忆“ 章节)。
在更难的 Winogrande
数据集上,我们确实发现了 in-context learning
的好处。GPT-3
在 zero-shot/one-shot/few-shot setting
中分别取得了 70.2%/73.2%/77.7%
的成绩。作为比较,微调的 RoBERTa
模型实现了 79%
,SOTA
的是微调的高容量模型(T5
)实现了 84.6%
,而报告的人类任务表现为 94.0%
。
不同
shot
的性能差异体现了in-context learning
的好处。
所有模型规模在所有 Winograd-style
任务上的性能如下所示:
我们考虑三个试图捕获物理推理physical reasoning
或科学推理 scientific reasoning
的数据集。
PhysicalQA: PIQA
:提出了关于物理世界如何运作的常识性问题,旨在探测对世界的基础理解。GPT-3
实现了 81.0%/80.5%/82.8%
的 zero-shot/one-shot/few-shot
准确率(few-shot
是在 PIQA
的 test server
上测量的)。这与之前微调的 RoBERTa
的 79.4%
的准确率相比更胜一筹,但是仍然比人类的表现差 10%
以上。
我们的分析将 PIQA
标记为潜在的数据污染问题(尽管隐藏了 test label
),因此我们保守地将该结果标记为星号。
ARC
:是一个从三年级到九年级科学考试中收集的选择题数据集。该数据集的 Challenge
版本已经被过滤为:简单的统计方法或信息检索方法无法正确回答的问题。GPT-3
实现了 51.4%/53.2%/51.5%
的 zero-shot/one-shot/few-shot
准确率。这接近于 UnifiedQA
的微调 RoBERTa baseline
(55.9%
)的性能。
在数据集的 Easy
版本中,GPT-3
实现了 68.8%/71.2%/70.1%
的 zero-shot/one-shot/few-shot
准确率,略微超过了 《Unifiedqa: Crossing format boundaries with a single qa system》
的微调 RoBERTa baseline
。
然而,这两个结果仍然比 UnifiedQA
取得的整体 SOTA
差得多。UnifiedQA
在 Challenge
版本上比 GPT-3
的 few-shot
超出 27%
,在 Easy
版本上超出 22%
。
OpenBookQA
:GPT-3
从 zero-shot
到 few-shot
的 setting
都有显著改善,但是仍然比整体 SOTA
差 20
多个点。GPT-3
的 few-shot
性能与排行榜上微调的 BERT Large baseline
相似。
总而言之,使用 GPT-3
的in-context learning
在常识推理commonsense reasoning
任务上展示出mixed
的结果:在 PIQA
和 ARC
的 one-shot
和 few-shot
的 setting
中仅观察到小的、不一致的收益(相对于 zero-shot
),但是在 OpenBookQA
上观察到显著的改善。
最后,GPT-3
在 PIQA
数据集中,在所有 zero-shot/one-shot/few-shot setting
上达到了 SOTA
。
所有模型规模在所有常识推理任务上的性能:
我们使用包含五个数据集的一个 suite
进行阅读理解任务reading comprehension
的评估。我们观察到 GPT-3
的性能在这些数据集上有很大的差异,这表明它在不同的答案格式上有不同的能力。一般而言,我们观察到:GPT-3
与 initial baseline
、以及在每个数据集上使用 contextual representation
训练的早期结果相当。
GPT-3
在 CoQA
这个自由形式 free-form
的对话数据集上表现最好(与人类 baseline
差距在 3
个点以内)。GPT-3
在 QuAC
这个需要对结构化对话动作和师生互动的answer span selection
进行建模的数据集上表现最差(比 ELMo baseline
低 13 F1
)。DROP
这个测试离散推理discrete reasoning
和计算能力numeracy
的数据集上,GPT-3
在 few-shot setting
上超越了原始论文中的微调 BERT baseline
,但是仍然远远低于人类的表现和用符号系统增强神经网络的 SOTA
方法。SQuAD 2.0
上,GPT-3
展示了它的 few-shot learning
能力,与 zero-shot setting
相比,提高了近 10 F1
(到 69.8
)。这使得它略微超越了原始论文中的最佳微调结果。RACE
这个初中和高中英语考试的选择题数据集上,GPT-3
表现相对较弱,仅能与最早的利用 contextual representation
的工作竞争,并且仍然比 SOTA
落后 45%
。所有模型规模在所有阅读理解任务上的性能:
为了更好地汇总 NLP
任务的结果,并以更系统的方式与 BERT
和 RoBERTa
等流行模型进行比较,我们还在 SuperGLUE benchmark
上评估了 GPT-3
。GPT-3
在 SuperGLUE
测试集上的性能如下表所示。在 few-shot setting
中,我们对所有任务都使用 32
个样本,从微调训练集中随机采样。
WSC
和 MultiRC
之外的所有任务,我们抽取新的一组样本作为每个问题的上下文(从而用于测试)。WSC
和 MultiRC
任务,我们使用从微调训练集中随机抽取的同一组样本作为我们评估的所有问题的上下文。我们观察到 GPT-3
在不同任务中的表现有很大差异:
在 COPA
和 ReCORD
上,GPT-3
在 one-shot/few-shot setting
中达到了接近 SOTA
的性能。COPA
在排行榜上取得了第二名,仅比第一名(微调过的 110
亿参数的 T5
模型)差几分。
在 WSC
上,GPT-3
的 few-shot setting
达到了 80.1%
(注意,GPT-3
在原始 Winograd
数据集上达到了 88.6%
,如前所述),性能还是比较强劲的。
在 BoolQ, MultiRC, RTE
上,GPT-3
的性能是 reasonable
的,大致与微调的 BERT-Large
相当。
在 CB
上,我们看到 GPT-3
在 few-shot setting
中达到了 75.6%
。
WiC
是一个明显的弱点,few-shot
性能仅为 49.4%
(接近于随机的选择)。我们为 WiC
尝试了许多不同的短语和表达式(这些涉及到确定一个词在两个句子中是否有相同的含义),但是没有一个能够取得强大的性能。这暗示了一个即将在下一节(ANLI benchmark
)中变得更加清晰的现象:GPT-3
似乎在一些涉及比较两个句子或片段的任务中,在 few-shot
或 one-shot
的 setting
中比较弱,例如,一个词是否在两个句子中以同样的方式使用(WiC
),一个句子是否是另一个句子的转述 paraphrase
,或者一个句子是否暗示了另一个句子。这也可以解释为什么 RTE
和 CB
的得分相对较低,因为它们也遵循这种格式。
尽管有这些弱点,GPT-3
仍然在八个任务中的四个任务上超越了微调的 BERT-Large
,在其中的两个任务上接近微调的 110
亿参数的T5
模型所保持的 SOTA
水平。
最后,我们也注意到:随着模型规模和上下文中样本数量的增加,few-shot
的 SuperGLUE
得分也稳步提高,展示出从 in-context learning
中获得的好处越来越多。我们将每个任务的 32
个样本,在这之后,额外的样本将不可能可靠地 fit
我们的上下文。
当扫描所有的 GPT-3
需要每项任务至少 8
个 total samples
,才能在整体 SuperGLUE score
上超越微调的 BERT-Large
。
下图中,BERT-Large
参考模型是在SuperGLUE
训练集(125k
个样本)上进行微调的,而BERT++
首先在MultiNLI
(392k
个样本)和SWAG
(113k
个样本)上进行微调,然后在SuperGLUE
训练集上进行进一步微调(总共630k
个微调样本)。我们发现BERT-Large
和 BERT++
之间的性能差异大致相当于GPT-3
中每个上下文
所有模型规模在所有 SuperGLUE
任务上的性能:
Natural Language Inference: NLI
任务涉及理解两个句子之间关系的能力。在实践中,这项任务通常被结构化为一个二类或三类的分类问题:第二句话是否符合第一句话的逻辑、是否与第一句话矛盾、是否既不符合也不矛盾(即,中性)。
SuperGLUE
包含了一个 NLI
数据集 RTE
,它评估了该任务的二分类版本。在 RTE
上,只有最大参数规模的 GPT-3 175B
在任何 setting
中都表现得比随机的好。而在 few-shot setting
下,GPT-3
的表现与单任务微调的 BERT-Large
相似。Adversarial Natural Language Inference: ANLI
数据集。ANLI
是一个困难的数据集,在三轮(R1, R2, R3
)中采用了一系列对抗性挖掘的自然语言推理问题。类似于 RTE
,所有比 GPT-3 175B
小的模型 ANLI
上的表现几乎完全是随机的,即使是在 few-shot setting
中(33%
,因为是三分类问题)。下图给出了 ANLI R3
的结果。这些关于 RTE
和 ANLI
的结果表明:NLI
对于语言模型而言,仍然是一个非常困难的任务,它们只是刚刚开始显示出进步的迹象。
下图是验证集上的结果,由于验证集仅包含 1500
个样本,因此结果的方差很大(我们估计的标准差为 1.2%
)。我们发现较小的模型在随机概率附近徘徊。
所有模型在所有 ANLI
任务上的性能:
探索 GPT-3
在 few-shot setting
(或 zero-shot/one-shot setting
)下的能力范围的一种方法是:给它布置任务,这些任务要求模型进行简单的 on-the-fly
计算推理、识别训练中不可能出现的新模式、或迅速适应一个不常见的任务。我们设计了几个任务来测试这类能力:
GPT-3
进行算术的能力。rearranging
、或者解扰unscrambling
单词,这些任务在训练过程中不太可能被完全看到。GPT-3
解决 SAT-style
的类比analogy
问题的能力。GPT-3
,包括在一个句子中使用新词、纠正英语语法、以及新闻文章的生成。我们即将发布合成数据集 synthetic dataset
,希望能够激励对语言模型测试期间行为的进一步研究。
为了测试 GPT-3
在没有特定任务训练的情况下进行简单算术运算的能力,我们开发了一个 10
个测试任务组成的一个集合,其中包含用自然语言问 GPT-3
一个简单的算术问题:
2 digit addition: 2D+
:要求模型从 [0, 100)
之间随机均匀抽取两个整数相加。它的问题形式为:Q: What is 48 plus 76? A: 124
。2 digit subtraction: 2D-
:要求模型从 [0, 100)
之间随机均匀抽取两个整数相减,答案可能为负数。它的问题形式为:Q: What is 34 minus 53? A: -19
。3 digit addition: 3D+
:要求模型从 [0, 1000)
之间随机均匀抽取两个整数相加。3 digit subtraction: 3D-
:要求模型从 [0, 1000)
之间随机均匀抽取两个整数相减。4 digit addition: 4D+
:要求模型从 [0, 10000)
之间随机均匀抽取两个整数相加。4 digit subtraction: 4D-
:要求模型从 [0, 10000)
之间随机均匀抽取两个整数相减。5 digit addition: 5D+
:要求模型从 [0, 100000)
之间随机均匀抽取两个整数相加。5 digit subtraction: 5D-
:要求模型从 [0, 100000)
之间随机均匀抽取两个整数相减。2 digit multiplication: 2Dx
:要求模型从 [0, 100)
之间随机均匀抽取两个整数相乘。它的问题形式为:Q: What is 24 times 42? A: 1008
。One-digit composite: 1DC
:要求模型从 [0, 10)
之间随机均匀抽取三个整数进行复合运算,操作数是从中 +,-,*
随机采样的,其中最后两个整数周围有括号。它的问题形式为:Q: What is 6+(4*8)? A: 38
。在所有十个任务中,模型必须准确地生成正确的答案。对于每项任务,我们生成一个由 2000
个随机任务实例组成的数据集,并在这些实例上评估所有模型。
首先,我们评估 GPT-3
在 few-shot setting
下的表现,结果如下图所示。
在加法和减法方面,GPT-3
在位数较少时性能较好,在两位数加法上达到 100%
的准确率,在两位数减法上达到 98.9%
的准确率,在三位数加法上达到 80.2%
的准确率,在三位数减法上达到 94.2%
的准确率。
模型性能随着位数的增加而下降,但是 GPT-3
在四位数的运算中仍能达到 25% - 26%
的准确率,在五位数的运算中仍能达到 9% - 10%
的准确率。这表明至少某些能力可以泛化到更多的位数。
在乘法方面,GPT-3
在两位数乘法上也达到了 29.2%
的准确率,这是一个计算量特别大的运算。
最后,GPT-3
在个位数的组合运算中达到了 21.3%
的准确率,这表明它有一些超越单个运算的鲁棒性。
作者注:模型性能从第二大模型(GPT-3 13B
)到最大的模型(GPT-3 175B
)有一个明显的跳跃。
如上图所示,小一些的模型在所有这些任务上的表现都很差,即使是 130
亿个参数的模型也只能解决一半的两位数加减运算,而在所有其它运算上的准确率都不到 10%
。
one-shot
和 zero-shot
的性能相对于 few-shot
而言有所下降,这表明对任务的适应(或者至少是对任务的识别)对正确执行这些计算很重要。然而,one-shot
性能仍然相当强大,甚至 GPT-3 175B
的 zero-shot
性能也显著优于所有小一些模型的 one-shot
。下表给出了完整的 GPT-3
的所有三种 setting
。
为了抽查模型是否只是在记忆特定的算术问题,我们把测试集中的三位数算术问题以 <NUM1> + <NUM2> =
和 <NUM1> plus <NUM2>
两种形式在训练数据中进行搜索。在 2000
个加法问题中,我们只发现了 17
个匹配的答案(0.8%
)。在 2000
个减法问题中,我们仅发现了 2
个匹配的答案(0.1%
)。这表明只有一小部分的正确答案可以被记住。
此外,对错误答案的检查显示:模型经常在诸如没有进位 1
这种问题上犯错,这表明模型实际上是在尝试进行相关的计算,而不是记忆一个表格。
进位
1
:例如3 + 9 = 12
,十位上的数字1
就是一种进位。如果没有进位1
,就变成3 + 9 = 2
。
总体而言,GPT-3
在 few-shot/one-shot
甚至 zero-shot
的 setting
中对复杂的算术表现出 reasonable
的熟练性 proficiency
。
所有模型规模在所有算术任务上的性能:
为了测试 GPT-3
从几个样本中学习新的 symbolic manipulation
的能力,我们设计了一组 5
个 character manipulation
任务。每项任务包括给模型一个被扰乱scrambling
、增加、或删除的字符组合所扭曲的单词,要求模型恢复原来的单词。这五项任务是:
cycle letters in word: CL
:给模型一个字母循环的单词,然后是 =
符号,并期望模型能够生成原始单词。如,lyinevitab = inevitably
。A1
):给模型一个扰乱的单词,其中除了第一个字符和最后一个字符以外所有其它字母的顺序都被扰乱,模型必须输出原始单词。如,criroptuon = corruption
。A2
):给模型一个扰乱的单词,其中除了第一个字符和最后两个字符以外所有其它字母的顺序都被扰乱,模型必须输出原始单词。如,opoepnnt -> opponent
。random insertion in word: RI
:在一个单词的每个字母之间随机插入一个标点或空格字符,模型必须输出原始单词。如:s.u!c/c!e.s s i/o/n = succession
。reversed word: RW
:给模型一个倒着拼写的单词,模型必须输出原始词。如:stcejbo -> objects
。对于每个任务,我们生成 10000
个样本,其中我们选择的是由 《Natural language corpus data》
衡量的长度超过4
个字符且少于 15
个字符的 top 10000
个最高频的单词。
下图给出了 few-shot
的结果(GPT-3 175B
模型在 RI
任务上取得了 66.9%
的成绩,在 CL
任务上取得了 38.6%
的成绩,在 A2
任务上取得了 40.2%
的成绩,在 A1
任务上取得了 15.1%
的成绩(这个任务比 A2
更难,因为只有第一个字母和最后一个字母被固定)。没有一个模型能完成 RW
任务。
图形有误?根据后面的图表,
GPT-3 175B
在one-shot/few-shot setting
中在RW
任务上的准确率为0.48/0.44
。
在 one-shot setting
中,表现明显较弱(下降一半或更多)。而在 zero-shot setting
中,模型很少能够完成任务(如下表所示)。这表明模型确实在测试期间学习了这些任务,因为模型无法 zero-shot
执行,而这些任务是人工构造的因此不太可能出现在预训练数据集中(尽管我们不能肯定地确认这一点)。
我们可以通过绘制 in-context learning curve
来进一步量化性能,该曲线展示了任务性能与 in-context
样本的关系。我们在下图中展示了 Symbol Insertion
任务的 in-context learning curve
。可以看到:较大的模型能够越来越有效地利用 in-context
信息,包括任务样本和自然语言任务描述 natural language task description
。
虚线:没有
prompt
;实线:包含prompt
。较大的模型对上下文信息的利用越来越有效。大型模型的in-context learning curves
越陡峭,则表明从contextual information
中学习一个任务的能力越好。
最后,值得补充的是,解决这些任务需要 character-level
操作,而我们的 BPE
编码是在单词的 significant fraction
上操作的(平均每个 token
约为 0.7
个单词),所以从语言模型的角度来看,成功完成这些任务不仅需要操作 BPE token
,还需要理解和拉开 pulling apart
它们的子结构。
另外,CL, A1, A2
不是一一映射(也就是说,解扰的单词unscrambled word
不是扰动的单词 scrambled word
的确定函数),需要模型进行一些搜索从而找到正确的 unscrambling
。因此,所涉及的技能似乎需要模式匹配和计算。
所有模型在所有 scramble
任务上的性能:
图表有误,
Wordscramble(few-shot)
图中的reversed words
(紫色曲线)与reversed words
图对不上。
我们收集了一组 374
个 SAT analogy
问题。类比 analogy
是一种选择题的风格,在 2005
年之前构成了 SAT
大学入学考试的一个部分。一个典型的例子是:
xxxxxxxxxx
audacious is to boldness as
(a) sanctimonious is to hypocrisy
(b) anonymous is to identity
(c) remorseful is to misdeed
(d) deleterious is to result
(e) impressionable is to temptation
学生需要选择这五个 word pair
中的哪一个与原始的 word pair
有相同的关系。在这个例子中,答案是 sanctimonious is to hypocrisy
。
在这个任务中,GPT-3
在 few-shot/one-shot/zero-shot setting
中达到 65.2%/59.1%/53.7%
的准确率。相比之下,大学申请人的平均得分是 57%
,随机猜测的得分是 20%
。如下图所示,结果随着模型规模的扩大而提高,与 130
亿个参数的模型相比, GPT-3 175B
提高了 10%
以上。
不同模型规模之间的效果差异越大,则越表明
in-context learning
的价值。
GPT-2
定性地测试了生成人工合成的新闻文章的能力:给定人写的 prompt
(由似是而非的新闻故事的第一句话组成),然后模型进行条件采样。相对于 GPT-2
,GPT-3
的训练数据集中新闻文章的占比要小得多,因此试图通过原始的无条件采样来生成新闻文章的效果较差。例如,GPT-3
经常将新闻文章的第一句话解释为一条推文,然后发布合成的 response
或者 follow-up
推文。
为了解决这个问题,我们通过在模型的上下文中提供三篇previous
的新闻文章作为条件,运用了 GPT-3
的 few-shot learning
能力。基于新闻的标题和副标题,GPT-3
能够可靠地生成新闻体裁的短文。
为了衡量 GPT-3
新闻文章的生成质量,我们决定测量人类区分 GPT-3
生成的文章和真实文章的能力。为此,我们从 newser.com
网站上任意选择了 25
个文章的标题和副标题(平均长度 215
个单词)。然后我们从四个语言模型中生成了这些标题和副标题的 completion
,这些模型的大小从 125M
到 175B
的参数规模。对于每个模型生成的结果,我们向大约 80
民美国的参与者展示了一个测验:真实的标题和副标题,后面跟着人类写的文章或模型生成的文章。参与者要求指出该文章是否是:“非常可能是人写的”、“更可能是人写的”、“我不知道”、“更可能是机器写的”、“非常可能是机器写的”。
我们选择的文章不在模型的训练集中,模型的输出被格式化从而以程序化方式选择,从而防止人为的精挑细选。所有的模型都使用相同的上下文来条件输出,并以相同的上下文大小来进行预训练,而且每个模型都使用相同的文章标题和副标题作为 prompt
。然而,我们也做了一个实验来控制参与者的努力和注意力,这个实验遵循相同的格式,但是故意让模型生成的文章变差。这是通过从一个 control model
生成文章来实现的:一个没有上下文以及被增加了输出随机性的 160M
参数的模型。
对于故意的坏文章(根据 control model
生成的),人类检测出它是由模型生成的平均准确率(每个参与者的正确回答与非中性答案的比率)是大约 86%
,其中 50%
是偶然水平的表现。
相比之下,人类检测出由 175B
参数模型生成的文章的平均准确率仅有 52%
,略高于偶然水平(参考下表)。下表还显示了每个模型与control model
之间平均准确率差异的 two-sample T-Test
的结果。
人类检测模型生成的文本的能力似乎随着模型大小的增加而降低:随着模型大小的增加,似乎有一个趋向于偶然准确率的趋势。此外,随着模型大小的增加,参与者在每个输出上花费更多的时间。
下图中,最佳拟合线是一个具有 95%
置信区间的幂律power law
曲线。
下图给出了 GPT-3
的合成文章的例子。正如评价所展示的那样,许多文本对于人类而言很难与真实的人类内容区分开来。事实不准确 factual inaccuracy
可能是一个指标来判断文章是模型生成的,因为与人类作者不同,模型无法获得文章标题所指的具体事实或文章的写作时间。其它指标包括:重复 repetition
、非连续性、不寻常的措辞 unusual phrasing
。
《Automatic detection of generated text is easiest when humans are fooled》
关于语言模型检测的相关工作表明:像 GROVER
和 GLTR
这样的自动判别器 automatic discriminator
在检测模型生成的文本方面可能比人类评估员更成功。对这些模型的自动检测可能是未来研究的一个有前景的领域。
《Automatic detection of generated text is easiest when humans are fooled》
也注意到:人类检测模型生成的文本的准确率,会随着人类观察到更多的 token
而增加。为了初步调研人类在检测由 GPT-3 175B
模型生成的较长文章方面的能力,我们从路透社选择了 12
篇平均长度为 569
个单词的 world news
,并根据这些文章从 GPT-3
生成了平均长度为 498
个单词的 completion
(比我们最初的实验要多 298
个单词)。按照上述方法,我们进行了两个实验,每个实验都在大约 80
名美国参与者身上进行,从而比较人类检测由 GPT-3
和一个 control model
所生成的文章的能力。
我们发现:人类在检测 control model
生成的文章的准确率为 88%
,而检测 GPT-3 175B
生成的文章的准确率为 52%
(勉强高于随机水平)。这表明,对于长度在 500
个单词左右的新闻文章,GPT-3 175B
继续生成人类难以区分的文章。
发展语言学developmental linguistics
研究的一项任务是学习和利用新词的能力,例如在仅看到一次某个单词的定义之后使用该单词,或者相反(仅看到某个单词的一次用法之后推断出该词的含义)。这里我们对 GPT-3
在前者的能力上进行定性测试。具体而言,我们给 GPT-3
提供一个不存在的单词的定义,如 Gigamuru
,然后要求 GPT-3
在一个句子中使用它。
我们提供了前面的一到五个样本,这些样本包括一个不存在的单词的定义以及在一个句子中使用。因此,对于这些previous
样本而言是 few-shot
,但是对于这个具体的新颖的单词而言是 one-shot
。
下表给出了我们生成的六个样本。所有的定义都是人类生成的,第一个答案是人类生成的作为条件,而后面的答案则是 GPT-3
生成的。这些例子是一次性连续生成的,我们没有遗漏或重复尝试任何 prompt
。在所有情况下,生成的句子似乎都是对该单词的正确或者至少是合理的使用。在最后一个句子中,模型为 screeg
一词生成了一个合理的连接词(即 screeghed
),尽管该词的使用略显突兀。总体而言,GPT-3
似乎至少能熟练地完成在句子中使用新词的任务。
黑体字是 GPT-3
的 completion
,纯文本是人类的prompt
。在第一个样本中,prompt
和 completion
都是由人类提供的,然后作为后续样本的条件,其中 GPT-3
收到 successive additional prompts
并提供completions
。除了这里显示的条件外,没有任何 task-specific
的信息提供给 GPT-3
。
另一项非常适合 few-shot learning
的任务是纠正英语语法。我们测试 GPT-3
在 few-shot learning
下的表现,给出的 prompt
形式是:Poor English Input: <sentence>\n Good English Output: <sentence>
。我们为 GPT-3
提供一个人类生成的纠正,然后要求模型再纠正五个,结果如下图所示。
黑体字是 GPT-3
的 completion
,纯文本是人类的prompt
。在最初的几个样本中,prompt
和 completion
都是由人类提供的,然后作为后续样本的条件,其中 GPT-3
收到 successive additional prompts
并提供completions
。除了这里显示的几个样本作为条件和 Poor English input/Good English output
框架以外,没有任何 task-specific
的信息提供给 GPT-3
。
我们注意到:poor
和 good
英语之间的差异是复杂 complex
的、contextual
的、有争议contested
。正如提到房屋租赁的例子所示,模型对什么是 good
假设甚至会导致它出错(在这里,模型不仅调整了语法,而且还以改变含义的方式删除了 cheap
一词)。
由于我们的训练数据集来自于互联网,我们的模型有可能是在某些 benchmark
的测试集上进行了训练(即,训练数据集包含了 benchmark
的测试集)。从 internet-scale
数据集中准确地检测测试污染是一个新的研究领域。虽然训练大型模型而不调查污染contamination
是常见的做法,但是鉴于预训练数据集的规模越来越大,我们认为这个问题越来越需要关注。
GPT-2
进行了事后的 overlap
分析,其分析结果相对而言令人鼓舞:由于被污染的数据比例很小(通常只有百分之几),所有这并未对报告的结果产生重大影响。GPT-3
在某种程度上是在不同的制度下运作的。
GPT-3
的数据集和规模比 GPT-2
所用的大两个数量级,并且包括大量的 Common Crawl
,从而增加了污染contamination
和记忆memorization
的可能性。GPT-3 175B
也没有对它的训练集有较大的过拟合(在一个 held-out
验证集上衡量的),如下图所示。因此,我们预计污染可能是经常发生的,但是其影响可能没有担心的那么大。
下图中,虽然训练loss
和验证loss
之间存在一定的 gap
,但这种gap
随着模型规模和训练时间的增加而增长得很小,这表明大部分gap
来自于难度difficulty
的不同,而不是过拟合。
我们最初试图通过主动搜索并消除我们训练数据中与所有 benchmark
验证集和测试集之间的 overlap
,从而解决污染问题。不幸的是,一个错误导致只能从训练数据中部分删除所有检测到的 overlap
。由于训练成本,重新训练模型是不可行的。为了解决这个问题,我们详细调研了剩余检测到的 overlap
是如何影响结果的。
对于每个 benchmark
,我们产生了一个 clean
版本,它删除了所有可能泄露的样本,这些样本被定义为:与预训练数据集中的任何内容有 13-gram overlap
(或者当样本短于 13-gram
时整个样本的 overlap
)。我们的目标是非常保守地标记任何有可能是污染的内容,以便产生一个干净的子集。具体过滤程序参考附录。
数据集的污染样本占比定义为:潜在污染的样本数量除以数据集的样本总数。
然后我们在这些 clean benchmark
上评估 GPT-3
,并与原始分数进行比较:
clean benchmark
上的得分与原始得分相似,这表明即使存在污染,也不会对报告结果产生重大影响。clean benchmark
上的得分较低,则表明污染可能会夸大结果。下图对这些结果进行了总结(下图的 x
轴是干净样本的占比)。尽管潜在的污染往往很高(四分之一的 benchmark
的污染样本占比超过了 50%
),但是在大多数情况下,性能的变化可以忽略不计,而且我们没有看到证据表明:污染水平和性能差异是相关的。我们的结论是:要么我们的保守方法大大高估了污染,要么污染对性能没有什么影响。
因为作者这里的方法是:命中了
13-gram overlap
就认为是污染。其实这里有很多是假阳性。
接下来我们更详细地调查一些具体的案例。在这些案例中,要么模型在清理后的版本上表现明显更差,要么潜在的污染非常高使得测量性能差异变得困难。
我们分析出六组需要进一步调查的 benchmark
,包括 Word Scrambling
、Reading Comprehension
(QuAC
, SQuAD2
,DROP
)、PIQA
、Winograd
、language modeling task
(Wikitext
,1BW
)、以及 German to English translation
。由于我们的 overlap
分析被设计得极为保守,因此我们预计它将产生一些假阳性false positive
结果。
阅读理解:我们最初的分析将来自 QuAC
, SQuAD2
,DROP
的 90%
以上的任务样本标记为潜在的污染,这个比例如此之大以至于在一个干净的子集上测量差异都很困难(子集太小)。然而,经过人工检查,我们发现:对于我们检查的每一个 overlap
,在所有的三个数据集中,源文本存在于我们的预训练数据集中,但是 question/answer
的 pair
却不存在,这意味着模型仅获得背景信息,无法记住特定问题的答案。
德文翻译:我们发现 WMT16 German-English
测试集中有 25%
的样本被标记为潜在的污染,对应的总效果为 1-2 BLEU
。经检查,没有一个标记污染的样本包含与神经机器翻译训练数据相似的 paired sentence
,碰撞是单语匹配monolingual match
,主要是新闻中讨论的事件片段。
反转词和变形词anagrams
:这些任务的形式是:alaok = koala
。由于这些任务的文本长度较短,我们使用 2-grams
进行过滤(忽略标点符号)。在检查了被标记的重叠 flagged overlap
之后,我们发现它们通常不是训练集中真正的反转或解扰的样本,而是回文或不重要的解扰,如 kayak = kaya
。overlap
的数量很少,但是移除这些不重要的任务 trivial tasks
会导致难度的增加,从而产生虚假的信号。
与此相关,symbol insertion
任务显示出比较高的 overlap
,但是对成绩没有影响。这是因为该任务涉及从一个单词中删除非字母的字符,而 overlap analysis
本身忽略了这些字符,导致了许多虚假的匹配。
PIQA
:重叠分析将 29%
的样本标记为污染,并观察到 clean
子集的性能绝对下降了 3%
(相对下降 4%
)。虽然测试集是在我们的训练集创建之后发布的,而且其 label
是 hidden
的,但是众包数据集创建者使用的一些网页也被包含在我们的预训练数据集中。我们发现,在一个 25x
(二十五倍)更小的模型(因此具有更小的容量来记忆)中也有类似的性能下降,这导致我们怀疑这种 shift
可能是统计上的 bias
而不是 memorization
。这些被复制的样本可能只是更容易解决,而不是被模型记住。不幸的是,我们无法严格地证明这个假设。因此,我们将 PIQA
的结果用星号标出,以表示这种潜在的污染。
Winograd
:重叠分析标记了 45%
的样本,并发现在 clean
子集上性能下降了 2.6%
。对重叠数据的人工检查表明:132 Winograd schemas
实际上存在于我们的预训练数据集中,尽管其呈现的格式与我们向模型呈现的任务不同。虽然性能下降不大,但是我们将 Winograd
的结果用星号标出。
语言建模:我们发现在 GPT-2
中测量的 4
个维基百科语言建模 benchmark
,加上 Children’s Book Test: CBT
数据集,几乎完全包含在我们的预训练数据集中。由于我们无法在这里可靠地提取一个干净的子集,所以我们没有报告这些数据集的结果,尽管我们在开始这项工作时打算这样做。我们注意到,Penn Tree Bank: PTB
由于其年代久远而未受影响,因此成为我们的主要的语言建模 benchmark
。
我们还检查了污染程度较高但是对性能影响接近于零的数据集,仅仅是为了验证实际存在的污染程度。这些数据集似乎经常包含 假阳性 false positive
:要么没有实际的污染,要么虽然有污染但是没有泄露任务的答案。
一个明显的例外是 LAMBADA
,它似乎有大量真正的污染,但是对性能的影响非常小,clean
子集的得分在完整数据集的 0.5%
以内。另外,严格而言,我们的 fill-in-the-blank
格式排除了最简单的 memorization
的形式。尽管如此,由于我们在本文中在 LAMBADA
上取得了非常大的收益,所以在这里指出了潜在的污染。
我们污染分析的一个重要限制是:我们无法确定clean
子集是来自原始数据集相同的分布。还有一个可能是:memorization
夸大了结果(使得污染数据集上效果更好),但是同时又恰恰被一些统计上的 bias
所抵消(干净数据集更简单所以效果也很好),导致 clean
子集的效果持平。然而,shift
接近于零的任务数量非常多,从而表明这是不可能的。而且我们也观察到小模型的 shift
没有显著的差异,这不太可能是记忆的。
总之,我们已经尽了最大努力来衡量和记录数据污染的影响,并根据严重程度来分析或直接删除有问题的结果。在设计 benchmark
和训练模型时,要解决这个对于整个领域而言重要而微妙的问题,还有很多工作要做。关于我们分析的更详细的解释,参考附录。
GPT-3
以及我们对它的分析都存在一些局限性:
首先,尽管 GPT-3
在数量和质量上都有很大的改进,尤其是和它的直接前身 GPT-2
相比,但是它在文本合成和几个 NLP
任务中仍然有显著的弱点。
在文本合成方面,虽然整体质量很高,但是 GPT-3
样本有时仍会在 document-level
重复自己的语义。在较长的段落中开始失去连贯性,自相矛盾,以及偶尔包含非连续的句子或段落。我们将发布一个由 500个
未经整理的无条件unconditional
的样本组成的集合,以帮助更好地了解 GPT-3
在文本合成方面的限制和优势。
即,生成长文本的性能不行。
在离散discrete
的语言任务领域,GPT-3
似乎在 "常识性物理 "方面有特殊的困难,尽管在测试这一领域的一些数据集(如PIQA
)上表现良好。具体来说,GPT-3
对 ”如果我把奶酪放进冰箱,它会融化吗?“ 这类问题有困难。
即,无法处理常识性问题。
从数量上看,GPT-3
的 in-context learning
性能在我们的 benchmark
的 suite
上有一些明显的差距,特别是在一些 “比较” 任务上,例如确定两个词在一个句子中的使用方式是否相同(WIC
数据集),或一个句子是否暗示另一个句子(ANLI
数据集),以及在阅读理解任务的一个子集。鉴于GPT-3
在许多其他任务上的强大的few-shot
性能,这一点尤其引人注目。
即,无法处理
comparison
任务。
GPT-3
有几个结构和算法上的局限性,这可能是上述一些问题的原因。我们专注于探索自回归语言模型中的in-context learning
行为,因为用这种 model class
进行采样和计算 likelihood
是很简单的。因此,我们的实验不包括任何双向架构bidirectional architecture
或其他训练目标,如去噪denoising
。这与最近的许多文献有明显的不同,这些文献记录了在使用这些方法时(双向架构、去噪目标)比标准语言模型有更好的微调性能(T5
)。
因此,我们的设计决定的代价是:在经验上受益于双向性bidirectionality
的任务上,性能可能会更差。这可能包括fill-in-the-blank
任务、涉及回看 looking back
和比较两段内容的任务、或者需要re-reading
或仔细考虑一个长的段落然后产生一个非常短的答案的任务。这可能是对 GPT-3
在一些任务中few-shot
性能落后的解释,如 WIC
(涉及比较一个词在两个句子中的使用)、ANLI
(涉及比较两个句子,看其中一个句子是否暗示另一个句子)、以及几个阅读理解任务(如QuAC
和RACE
)。
根据过去的文献,我们还猜想:一个大型的双向模型在微调方面会比GPT-3
更强。以 GPT-3
的规模来创建一个双向模型,和/或尝试使双向模型与few-shot/zero-shot learning
一起工作,是未来研究的一个有希望的方向,并可以帮助实现两全其美 best of both worlds
。
本文所描述的一般方法(scale
任何类似语言模型的模型,无论是自回归的还是双向的)的一个更根本的局限性是:它最终可能会遇到(或者可能已经遇到)预训练目标的限制。
token
的权重是相同的,并且缺乏一个概念:即什么是最重要的预测,什么是不重要的。《How much knowledge can you pack into the parametersof a language model?》
展示了对感兴趣的实体进行自定义预测customizing prediction
的好处。task specification
依赖于强迫下游目标任务成为一个预测问题 prediction problem
。然而,最终有用的语言系统(例如虚拟助手)可能更好地被认为是执行 goal-directed
动作,而不仅仅是做出预测。《Experience grounds language》
)。由于所有这些原因,纯粹的自监督预测的scaling
可能会遇到限制,而用不同的方法进行增强可能是必要的。这方面有希望的未来方向可能包括:从人类学习目标函数(《Fine-tuning language models from human preferences》
)、用强化学习进行微调、或增加额外的模式(如图像)以提供基础的和更好的世界模型(《Uniter: Learning universal image-text representations》
)。
语言模型普遍存在的另一个限制是预训练期间的样本效率低。虽然 GPT-3
在测试时的样本效率方面前进了一步,更接近于人类的样本效率(one-shot/zero-shot
),但它在预训练期间看到的文本仍然比人类在其一生中看到的多得多。提高预训练的样本效率是未来工作的一个重要方向,它可能来自于在物理世界physical world
的基础上提供额外的信息,或者来自于算法的改进。
与GPT-3
中的 few-shot learning
相关的一个限制(或者至少是不确定性)是:few-shot learning
是否真的在推理时间 ”从头开始“ 学习新的任务,或者它是否只是识别和确定它在训练期间学到的任务。这里可能存在一个谱系 spectrum
,从训练集的样本与测试集的样本完全相同的分布、到识别相同的任务但以不同的形式、到适应通用任务(如QA
)的特定风格、到完全从头学习一项技能。
GPT-3
在这个 spectrum
上的位置也可能因任务而异:
synthetic task
,如 word scrambling
或定义无意义的词,似乎特别有可能从头学起。最终,我们甚至不清楚人类从头开始学习什么,以及从先前的示范中学习什么。即使是在预训练中组织不同的示范,并在测试时识别它们,也是语言模型的一个进步。但尽管如此,准确地理解few-shot learning
的工作原理是未来研究的一个重要的未探索的方向。
GPT-3
模型规模类似的模型的一个限制是:无论目标函数或算法如何,它们既昂贵又不方便推理。目前这可能对GPT-3
规模的模型的实用性构成了挑战。解决这个问题的一个可能的未来方向是将大型模型蒸馏,使之成为针对特定任务的可管理大小。像 GPT-3
这样的大型模型包含了非常广泛的技能skill
,其中大部分技能在特定任务中是不需要的,这表明原则上aggressive distillation
是可能的。
模型蒸馏在普通情况下已被很好地探索(《Improving multi-task deep neural networks via knowledge distillation for natural language understanding》
),但还没有在千亿级参数的规模上尝试过。将模型蒸馏应用于这种规模的模型可能会有新的挑战和机遇。
最后,GPT-3
与大多数深度学习系统有一些共同的局限性:
模型的决定不容易解释。
模型对新的输入的预测不一定能很好地校准well-calibrated
,正如在标准benchmark
上观察到的比人类高得多的性能方差,并且模型保留了它所训练的数据的bias
。
这个 issue
(数据中的 bias
可能导致模型产生刻板stereotyped
的、或偏见prejudiced
的内容)从社会的角度来看是特别值得关注的,并将在下一节中讨论。
语言模型对社会有广泛的有益的 application
,但它们也有潜在的有害的 application
。这里,我们着重讨论语言模型的潜在危害,并不是因为我们认为危害一定更大,而是为了研究和减轻危害。像GPT-3
这样的语言模型所带来的更广泛的影响是很多的,这里我们主要关注两个主要问题:
GPT-3
等语言模型。GPT-3
等模型中的 bias
、fairness
和representation
等 issue
。我们还简要地讨论了能源效率energy efficiency
问题。
语言模型的恶意使用在某种程度上很难预测,因为它们往往涉及在一个非常不同的环境中重新利用语言模型,或者用于与研究人员意图不同的目的。为了帮助解决这个问题,我们可以从传统的安全风险评估框架security risk assessment framework
来考虑,该框架概述了一些关键步骤,如识别威胁和潜在影响、评估可能性,以及确定将风险作为可能性和影响的组合。我们讨论三个因素:潜在滥用的application
、威胁行主体 threat actor
、外部激励结构external incentive structure
。
潜在滥用的application
:社会上,任何依赖于生成文本的有害活动都可以被强大的语言模型所增强。这方面的例子包括错误信息misinformation
、垃圾邮件、网络钓鱼、滥用法律和政府程序、欺诈性的学术论文写作、以及社交工程的假托social engineering pretexting
(假托是一种社交工程的形式,其中个体通过欺诈来获取特权数据)。许多这些application
的瓶颈在于写出足够高质量的文本。能产生高质量文本的语言模型可以降低开展这些活动的现有障碍,并提高其效果。
语言模型滥用的潜力随着文本合成质量的提高而增加。在前面章节中,GPT-3
有能力生成几段人们难以区分的合成内容,这代表了这方面的一个令人担忧的里程碑。
威胁主体分析:威胁主体actor
可以按照技能和资源水平来组织,从低级或中级技能和资源的主体(他们可能能够建立一个恶意产品)、到 ”高级持续性威胁“ advanced persistent threats: APTs
(他们具有长期规划的高技能和资源丰富的团体,如国家支持的)。
misinformation
战术、恶意软件发布、以及计算机欺诈的论坛和聊天组。虽然我们确实发现在 2019
年春季首次发布 GPT-2
之后有大量关于滥用的讨论,但我们发现自那时以来,实验的实例较少,也没有成功的部署。此外,这些滥用的讨论与媒体对语言模型技术的报道相关联。由此,我们评估,来自这些主体的滥用威胁并不紧迫,但可靠性的重大改进可能会改变这种情况。APT
通常不在公开场合讨论,我们已经向专业的威胁分析人员咨询了涉及使用语言模型的可能APT
活动。自GPT-2
发布以来,在可能通过语言模型获得潜在收益的操作方面,我们没有看到明显的区别。评估结果是:语言模型可能不值得投入大量资源,因为没有令人信服的证据表明目前的语言模型明显优于目前生成文本的方法,而且 targeting
或 controlling
语言模型内容仍处于非常早期的阶段(即,语言模型的生成内容不受控)。外部激励结构:每个威胁主体团队也有一套战术tactics
、技术techniques
和程序procedures
(TTPs
),他们依靠这些来完成他们的规划agenda
。TTPs
受到经济因素的影响,如可扩展性和部署的便利性。网络钓鱼在所有团体中都非常流行,因为它提供了一种低成本、低努力、高收益的方法来部署恶意软件和窃取登录凭证login credentials
。使用语言模型来增强现有的 TTP
,可能会导致更低的部署成本。
易用性是另一个重要的激励因素。拥有稳定的基础设施对 TTP
的采纳 adoption
有很大影响。然而,语言模型的输出是随机的,尽管开发者可以约束语言模型的输出(例如使用 top-k
截断),但在没有人类反馈的情况下,模型无法稳定地执行。如果一个社交媒体的虚假信息机器人disinformation bot
在 99%
的时间里产生可靠的输出,而在1%
的时间里产生不连贯的输出,这仍然可以减少操作这个 bot
所需的人力成本。但是,仍然需要人工过滤输出,这限制了操作的scalable
。
根据我们对这个模型的分析以及对威胁主体和环境的分析,我们怀疑人工智能研究人员最终会开发出足够一致的和可引导steerable
的语言模型,从而使恶意主体对它们更感兴趣。我们预计这将为更广泛的研究界带来挑战,并希望通过缓解研究、原型设计、以及与其他技术开发人员协调等等的组合来解决这个问题。
训练数据中存在的bias
可能导致模型产生刻板stereotyped
的或偏见prejudiced
的内容。这是令人担忧的,因为model bias
可能会以不同的方式伤害相关群体的人。我们对模型中的bias
进行了分析,以便更好地理解GPT-3
在fairness, bias, and representation
方面的局限性。这里我们专注于与性别、种族和宗教有关的bias
。
大体上,我们的分析表明:
internet-scale bias
。stereotype
。性别:在我们对性别bias
的调查中,我们重点关注性别gender
和职业occupation
之间的关联。我们发现,一般而言,当给定 The {occupation} was a
(中性变体 Neutral Variant
)这样的上下文时,职业后面跟随男性标识符identifier
的概率要高于女性(换句话说,它们是偏向男性的)。
在我们测试的 388
种职业中,83%
的职业更有可能被GPT-3
用男性标识符来跟随。例如,我们通过向模型提供诸如 The detective was a
的上下文,然后观察模型后续使用男性标识词(如:男人、男性等)或女性标识词(如:女人、女性等)的概率来衡量。具体而言,显示出较高教育水平的职业,如立法者legislator
、银行家或名誉教授,以及需要艰苦体力劳动的职业,如泥瓦匠、磨坊主和警长,都严重倾向于男性。更有可能被女性标识符跟随的职业包括助产士、护士、接待员、管家等。
我们还测试了当我们把数据集(这里仅修改测试集,不修改预训练数据集)中每个职业的上下文转变为 The competent {occupation} was a
(有胜任能力的变体 Competent Variant
),以及把上下文转变为 The incompetent {occupation} was a
(无胜任能力的变体 Incompetent Variant
)时,这些概率如何变化。我们发现:
The competent {occupation} was a
来提示时,大多数职业后面的男性标识符的概率甚至高于 Neutral Variant
的情况。The incompetent {occupation} was a
来提示时,大多数职业仍然倾向于男性,其概率与我们最初的Neutral Variant
相似。平均的 occupation bias
衡量为:
那么平均的 occupation bias
对于 Neutral Variant
为 -1.11
、对于 Competent Variant
为 -2.14
、对于 Incompetent Variant
为 -1.15
。
我们还使用两种方法对 Winogender
数据集进行了代词解析pronoun resolution
,这进一步证实了GPT-3
模型将大多数职业与男性联系起来的趋势。
一种方法是测量模型正确分配代词为职业或参与者participant
的能力。例如,我们给模型提供了一个上下文,如 The advisor met with the advisee because she wanted to get advice about job applications. 'She' refers to the
,并在两个可能的选项(Occupation Option: advisor; Participant Option: advisee
)中找到了概率最低的选项。
职业和参与者的词汇往往有与之相关的 societal bias
,比如假设大多数职业者默认为男性。我们发现,语言模型学习了其中的一些bias
,如倾向于将女性代词而不是男性代词与参与者联系起来。GPT-3 175B
在这项任务中拥有所有模型中最高的准确性(64.17%
)。在 Occupant sentences
(正确答案是 Occupation
选项的句子)中,GPT-3 175B
也是唯一一个对女性的准确率(81.7%
)高于对男性的准确率的模型(76.7%
)。这提供了一些初步证据,表明在bias issue
上,大模型比小模型更鲁棒。
我们还进行了共现 co-occurrence
测试,即分析哪些词可能出现在其他预选词pre-selected word
的附近。 我们创建了一个模型输出样本集,对数据集中的每个prompt
生成 800
个长度为50
的输出,温度为1
,top-p = 0.9
。对于性别,我们有诸如 He was very
、She was very
、He would be described as
、She would be described as
等 prompt
。
我们使用一个现成的POS tagger
查看了top 100
最受欢迎的词语中的形容词和副词。我们发现,女性更经常使用 beautiful
和 gorgeous
等以外表为导向的词语来描述,而男性则更经常使用范围更广的形容词来描述。
下表显示了模型中 top 10
最受欢迎的描述性词语,以及每个词语与代词指示器 pronoun indicator
共现的原始次数。“最受欢迎” 表示那些最偏向于某一类别的词,与其他类别相比,它们的共现较高。为了正确看待这些数字,我们还包括了每个性别的所有 qualifying word
的平均共现次数。
种族:为了研究 GPT-3
中的种族偏见racial bias
,我们在模型中加入了一些prompt
,如:The {race} man was very
、The {race} woman was very
、People would describe the {race} person as
,并为上述每个prompt
生成了 800
个样本,其中 {race}
被一个表示种族类别(如白人White
或亚洲人Asian
)的术语取代。然后,我们测量生成的样本中的单词共现word co-occurrence
。鉴于先前的研究表明,当改变职业等特征时,语言模型会产生不同情感的文本,我们探索了种族对情感的影响。我们使用Senti WordNet
测量了与每个种族共现的词语的情感。每个单词的情感从100
到-100
不等:正的分数表示positive word
(如wonderfulness: 100
、amicable: 87.5
),负的分数表示negative word
(如wretched: -87.5
、horrid: -87.5
),0
分表示中性词(如sloping
、chalet
)。
应该注意的是,我们明确提示prompting
模型谈论种族,这反过来又产生了聚焦种族特征的文本。这些结果不是来自于模型在自然环境下谈论种族,而是在一个实验环境中谈论种族。
此外,由于我们是通过简单地查看单词的共现来测量情感的,所产生的情感可以反映社会历史因素。例如,与奴隶制的讨论有关的文本经常会有负面的情感,这可能导致在这种测试方法下的统计结果与负面的情感有关。
在我们分析的模型中,Asian
的情感分一直很高,它在7
个模型中的3
个中排在第一位。另一方面,Black
的情感分一直很低,在7
个模型中的5
个中排名最低。这些差异在较大的模型规模中略有缩小。这一分析让我们了解到不同模型的bias
,并强调需要对情感、实体和输入数据之间的关系进行更复杂的分析。
宗教:我们研究了哪些单词与无神论Atheism
、佛教Buddhism
、基督教Christianity
、印度教Hinduism
、伊斯兰教Islam
和犹太教Judaism
相关的宗教术语共现。我们对每个 prompt
产生 800
个长度为50
的模型输出,其中温度为1
,top p = 0.9
。针对上述六个宗教类别中的每一个,我们的prompt
是 {Religion practitioners} are
,例如 Christians are
。然后,我们让模型自然地进行补全completion
,并创建了一个这种 completion
的语料库,以研究单词的共现。下面是该模型输出的一个例子:
与种族类似,我们发现模型对宗教术语进行关联从而表明有一些倾向性。例如,对于伊斯兰教,我们发现诸如斋月ramada
、先知prophet
、清真寺mosque
等单词的共现比其他宗教高。我们还发现,诸如暴力violen
、恐怖主义terrorism
、恐怖分子terrorist
等单词在伊斯兰教中的共现高于其他宗教,并且在GPT-3
中,这些单词是伊斯兰教最受欢迎的top 40
个单词。
进一步的 bias
和 fairness
挑战:我们提出这个初步分析,是为了分享我们发现的一些bias
,以激励进一步的研究,并强调在大规模生成模型中刻画bias
的内在困难。我们期望这将是我们持续研究的一个领域,并很高兴与社区讨论不同的方法论。 我们认为本节的工作是主观的路标:我们选择了性别、种族和宗教作为出发点,但我们承认这种选择有其固有的主观性。我们的工作受到了关于描述模型属性以开发informative
标签的文献的启发,例如来自《Model cards for model reporting》
的模型报告的Model Card
。
最终,重要的不仅仅是刻画语言系统中的bias
,而且要进行干预。这方面的文献也很丰富,所以我们只对大型语言模型特有的未来方向提供一些简单的评论。为了给通用模型的effective bias prevention
铺平道路,有必要建立一个 common vocabulary
,将这些模型的normative
、technical
和empirical
的关于缓解 bias
的挑战联系起来。缓解工作不应该纯粹以指标驱动的目标来 ”消除“ bias
,因为这已被证明有盲点,而是以整体的方式来处理。
实际的大规模预训练需要大量的计算,而这是能源密集型的:训练GPT-3 175B
在预训练期间消耗了几千 petaflop/s-day
的计算,而 1.5B
参数的 GPT-2
模型只需要几十 petaflop/s-day
,如下图所示。这意味着我们应该认识到这种模型的成本和效率。
下图中,尽管 GPT-3 3B
比 RoBERTa-Large
(355M
参数)几乎大10
倍,但两个模型在预训练期间都花费了大约 50 petaflop/s-day
的计算。
大规模预训练的使用也提供了另一个视角来看待大型模型的效率:我们不仅要考虑训练模型的资源,还要考虑这些资源是如何在模型的生命周期内摊销的,这些资源随后将被用于各种目的,并针对具体任务进行微调。尽管像 GPT-3
这样的模型在训练过程中会消耗大量的资源,但一旦训练完成,它们的效率就会出奇的高:即使使用完整的 GPT-3 175B
,从一个训练好的模型中生成 100
页的内容也只需要 0.4
千瓦-小时的成本,或者只需要几分钱的能源成本。
此外,像模型蒸馏这样的技术可以进一步降低这类模型的成本,使得我们采用这样的一种范式 paradigm
:训练单一的大规模模型,然后创造更有效的版本从而用于适当的环境。
随着时间的推移,算法的进步也会自然而然地进一步提高此类模型的效率,这与图像识别和神经机器翻译中观察到的趋势相似。
我们采用了两种技术来提高 Common Crawl
数据集的质量:过滤Common Crawl
、模糊去重 fuzzy deduplication
。
过滤Common Crawl
:为了提高 Common Crawl
的质量,我们开发了一种自动过滤的方法来去除低质量的文档。我们认为原始的WebText
是高质量文档,然后训练了一个分类器来区分WebText
和原始的Common Crawl
。然后,我们使用这个分类器对原始的Common Crawl
进行重新分类,优先处理那些被分类器预测为质量较高的文档。
该分类器是使用逻辑回归分类器训练的,其特征来自 Spark
的标准的 tokenizer
和 HashingTF
。
WebText
、Wikiedia
和我们的网络书籍语料库。Common Crawl
。我们使用这个分类器对 Common Crawl
文档进行评分。如果满足以下条件,则对 Common Crawl
中的文档进行保留:
其中我们选择了 out of distribution
的文档。WebText
上的分数分布相匹配。我们发现这种重新加权re-weighting
提高了数据质量(数据质量是由一系列 out-of-distribution
的、生成式文本样本的损失所衡量)。
为了进一步提高模型质量,防止过拟合(随着模型容量的增加,过拟合变得越来越严重),在每个数据集中,我们使用Spark
的 MinHashLSH
实现了10
个hash
,使用与上述分类相同的特征,模糊去重文档(即移除与其他文档高度重叠的文档)。我们还模糊地fuzzily
从 Common Crawl
中删除了WebText
。总体而言,这使数据集的大小平均减少了 10%
。
在对重复性和质量进行过滤后,我们还部分删除了benchmark
数据集中出现的文本。
所有版本的 GPT-3
的训练配置:
Adam
优化器。global norm
裁剪为不超过1.0
。260B
个 token
之后学习率降低到最大值的 10%
,并以这个学习率继续训练。3.75
亿个 token
,有一个线性的学习率 warmup
。4B ~ 12B
个 token
中,我们逐渐将 batch size
从一个较小的值(32k token
)线性地增加到 full value
(这个 full value
取决于模型的大小)。epoch
的边界),从而尽量减少过拟合。0.1
的 weight decay
来提供少量的正则化。在训练过程中,我们总是在完整的 token context window
的序列上进行训练。当文档短于 2048 token
时,我们将多个文档打包成一个序列,以提高计算效率。有多个文档的序列不以任何特殊的方式进行mask
,而是用一个特殊的文本结束符来划分序列中的文档,从而为语言模型提供必要的信息,从而推断出由这个特殊的文本结束符分开的context
是无关的。
初始的训练集过滤:我们试图通过搜索所有测试集/验证集和我们的训练数据之间的13-gram
重叠,从而在训练数据中删除出现在benchmark
中的文本。我们删除了命中的 13-gram
以及它周围的200
个字符的窗口,将原始文件分割成碎片。出于过滤的目的,我们将 gram
定义为一个小写的、以空格为界的、没有标点符号的单词。
200
个字符的碎片被丢弃。10
个以上碎片的文件被认为是被污染的,并被完全删除。13-gram
我们就删除了整个文件,但这过度地惩罚了长文件,如书籍的 false positive
(可能测试集文章仅引用了一本书中的一句话而已)。10
篇以上训练文档命中的13-gram
,因为检查显示这些 13-gram
大多包含常见的短语、法律模板或类似的内容。我们希望模型能够学习这些,而不是移除这些重叠。重叠方法论:对于我们在前文中的 benchmark overlap analysis
,我们使用可变单词数量 N
来检查每个数据集的重叠情况,其中N
是以单词为单位的5%
分位的样本长度(即,5%
的样本低于该长度),忽略了所有的标点符号、空白和大小写。
N
值下会出现虚假碰撞spurious collision
,我们在非合成任务中使用 N = 8
的最小值。N = 13
的最大值。下表显示了N
值和标记为 dirty
的数据量。我们将 dirty
样本定义为与任何训练文档有任何N-gram
重叠的样本,而 clean
样本是没有碰撞的样本。
与GPT-2
使用 bloom filter
计算测试集污染的概率边界不同,我们使用 Apache Spark
计算所有训练集和测试集的精确碰撞。我们计算了测试集和我们完整的训练语料库之间的重叠,尽管我们只在 ”训练数据集“ 这一节中对40%
的过滤后的 Common Crawl
文档进行了训练。
每个
epoch
采样了44%
的过滤后Common Crawl
文档。
由于这个分析所揭示的一个错误,上述的过滤在长文档(如书籍)上失败了。由于成本的考虑,在训练数据集的修正版上重新训练模型是不可行的。因此,几个语言建模 benchmark
和Children’s Book Test: CBT
几乎完全重叠,因此没有包括在本文中。
下表为从最 dirty
到最 clean
排序的所有数据集的重叠统计。如果一个数据集的样本与我们预训练语料库中的任何文档有一个N-gram
碰撞,我们就认为该样本是脏的。其中:
Relative Difference Clean vs All
表示在 benchmark
中只包含 clean
样本与包含所有有本之间的性能变化百分比。Count
表示样本数量,Clean percentage
表示 clean
样本占所有样本的百分比。Acc/F1/BLEU
表示对应的评估指标。这些分数来自于不同的随机数种子,因此与本文中其他地方的分数略有不同。
重叠结果:为了了解看过一些数据后对模型在下游任务中的表现有多大帮助,我们通过dirtiness
过滤每个验证集和测试集。然后,我们对clean-only
样本进行评估,并报告clean score
和原始得分之间的相对百分比变化。
clean score
比原始得分差1%
或 2%
以上,这表明模型可能对它所看到的样本过拟合。clean score
明显更好,我们的过滤方案可能需要尽可能过滤掉 dirty
样本。对于那些包含来自网络的背景信息background information
(但不是answer
信息)的数据集(比如SQuAD
,它来自维基百科)或长度小于8
个单词的样本(我们在过滤过程中忽略了这些样本,除了 words crambling
任务会考虑过滤这些样本),这种重叠度量往往显示出很高的误报率。
一个例子是DROP
数据集,这是一个阅读理解任务,其中94%
的样本是 dirty
的。回答问题所需的信息在一段话中(这段话被馈入模型),所以在训练集中看到了这段话而没有看到问题和答案并不意味着构成作弊。我们确认,每个匹配的训练文件都只包含源段落,而没有数据集中的问题和答案。 对性能下降的更可能的解释是:过滤后剩下的 6%
的样本具有和dirty
样本略有不同的分布。
即,
DROP
任务中,过滤后剩下的样本更难。
下图显示,随着数据集的污染程度增加(从 x
轴的 100%
到 0%
),clean/all fraction
的方差也在增加,但没有明显的偏向于改善或降低性能。这表明,GPT-3
对污染相对不敏感。
下图给出了语言模型训练的近似计算量。作为一个简化的假设,我们忽略了注意力操作,因为对于这些模型而言,注意力操作通常占用不到总计算量的10%
。
计算量结果可以下表中看到,并在表的标题中进行了解释。
token
的参数量。由于T5
使用的是encoder-decoder
模型,在前向传播或反向传播过程中,每个token
只有一半的参数是活跃的。token
都参与了每个活跃参数的一次加法和一次乘法(忽略了注意力)。然后我们再加上一个3
倍的乘数,以考虑到反向传播(因为计算 token
的总运算量。我们用这个值乘以总的训练token
数量和总的参数量,得出训练期间使用的总flops
数。我们同时报告了flops
和petaflop/s-day
。 这里包含了测量人类区分GPT-3
生成的合成新闻文章和真实新闻文章能力的实验细节。我们首先描述了对200
个单词的新闻文章的实验,然后描述了500
个单词的新闻文章的初步调查。
参与者:我们招募了718
名参与者来参加6
个实验。97
名参与者因未能通过 internet check question
而被排除,剩下的共有621
名参与者:343
名男性,271名
女性,以及7
名其他。
38
岁。Positly
招募的,Positly
拥有一份来自Mechanical Turk
的高绩效工作者白名单。12
美元,根据试运行确定的60
分钟的任务时间估算。程序和设计:我们任意选择了2020
年初出现在 newser.com
的25
篇新闻文章。我们使用文章的标题和副标题来产生125M
、350M
、760M
、1.3B
、2.7B
、6.7B
、13.0B
和 200B
(GPT-3
)个参数的语言模型的输出。每个模型对每个问题产生五个输出,并自动选择字数最接近人类写的文章的输出。这是为了尽量减少文本长度对参与者判断的影响。每个模型的输出程序都是一样的,只是去掉了 intentionally bad control model
,如正文中所述。
在每个实验中,一半的参与者被随机分配到 quiz A
,一半被随机分配到 quiz B
。每个quize
由 25
篇文章组成:一半(12-13
)是人写的,一半(12-13
)是模型生成的。
quiz A
中人写的文章在 quiz B
被模型自动生成。quiz B
中人写的文章在 quiz A
被模型自动生成。测验问题的顺序对每个参与者都是随机的。参与者可以留下评论,并被要求说明他们以前是否看过这些文章。参与者被要求在测验期间不要查找文章或其内容,在测验结束时被问及他们在测验期间是否查找过任何东西。
统计学测试:为了比较不同运行中的平均值,我们对每个模型与control model
进行了独立组的 two-sample t-test
。这是在Python
中使用scipy.stats.ttest_ind
函数实现的。在绘制参与者平均准确度与模型大小的regression line
时,我们拟合了一个 95%
的置信区间是从样本平均值的 t
分布中估计出来的。
时间统计:在正文中,我们讨论了这样的发现:随着我们的模型变大,人类参与者区分模型产生的和人类产生的新闻文章的能力也会下降。
我们还发现,随着模型大小的增加,一组特定问题的平均时间也在增加,如下图所示。尽管参与者投入的时间增加,但准确率较低,这支持了更大的模型产生更难区分的新闻文章这一发现。下图中,虚线表示 controlmodel
。最佳拟合曲线是一个具 有95%
置信区间的对数尺度的线性模型。
对~ 500
个单词的文章的初步调查: 我们通过Positly
招募了160名
美国参与者参加2
个实验(详情见下表)。我们随机选择了2019
年底的12
篇路透社世界新闻文章,然后选择另一篇新闻(不在这 12
篇文章中)作为 GPT-3 175B
的上下文。然后,我们使用文章的标题和路透社的location
,从 GPT-3 175B
和 160M control model
中生成 completion
。这些用于创建两个quiz
,每个 quiz
由一半人写的和一半模型生成的文章组成。
GPT-3
能很好地适应许多任务。作为一个例子,在下图中,我们展示了四个未经处理的样本,这些样本来自一个prompt
,建议模型以给定的标题(即,Shadow on the Way
)并按照Wallace Stevens
的风格写一首诗。
我们首先试验了几个prompt
,然后产生了四个没有额外编辑或选择的样本(在温度1
下使用 nucleus sampling
)。当模型开始写一个新的标题和 author heading
时,或进入散文评论时,completion
被截断。
这里给出了本文中所有任务的格式formatting
和措辞phrasing
。
在大规模文本集合上训练的大语言模型 Large language model: LLM
已经展示出令人惊讶的能力来生成文本、执行 zero-shot/few-shot learning
。虽然在某些情况下,公众可以通过付费 API
与这些模型交互,但是完整的模型访问权限仅限于少数资源丰富的实验室。这种受限的访问权限限制了研究人员的能力来研究这些大语言模型如何工作以及为什么工作,从而阻碍了在robustness, bias, toxicity
等领域的已知挑战方面取得进展。
在论文 《OPT: Open Pre-trained Transformer Language Models》
中,作者介绍了 Open Pretrained Transformer: OPT
,这是一套 decoder-only pre-trained transformer
,参数范围从 125M
到 175B
。 论文的目标是与感兴趣的研究人员充分和负责地分享 OPT
。作者训练 OPT
模型从而大致匹配 GPT-3
族模型的性能和大小,同时在数据收集和高效训练方面应用最新的最佳实践。作者开发这一套 OPT
模型的目的是实现可重复的和负责任的大规模研究,并在研究这些大语言模型的影响时带来更多的观点。risk, harm, bias, toxicity
等等的定义,应该由协作的研究团体作为一个整体来阐述,这只有在模型可供研究时才有可能。
作者正在发布 125M
到 66B
参数之间的所有模型,并将根据请求提供对 OPT-175B
的完全的研究访问。下列研究人员将获准进入:
作者还发布了模型创建日志和代码库(https://github.com/facebookresearch/metaseq
),该代码库支持在 992
个 80GB
的 A100 GPU
上训练 OPT-175B
,每个 GPU
达到 147 TFLOPS/s
的利用率。通过该实现,以及使用最新一代的 NVIDIA
硬件,我们能够开发 OPT-175B
,其碳排放量 carbon footprint
仅为 GPT-3
的 1/7
。虽然这是一个重大的成就,但是创建这样一个模型的能源成本仍然是不小的,反复地 replicate
这种规模的模型只会放大这些大语言模型不断增长的计算量。
论文认为,考虑到这些大语言模型在许多下游 language application
中的核心地位,整个人工智能社区(包括学术研究人员、民间社会、政策制定者、以及工业界)必须共同努力,围绕负责任的人工智能(尤其是负责任的大语言模型)制定明确的指导方针。更广泛的人工智能社区需要访问这些模型,以便进行可重复的研究,并共同推动该领域向前发展。随着 OPT-175B
和更小规模 baseline
的发布,作者希望增加声音的多样性,从而定义这些技术的道德考虑。
相关工作:自从 Transformer
(《Attention is all you need》
)和 BERT
(《BERT: Pre-training of deep bidirectional transformers for language understanding》
)发表以来,NLP
领域经历了向使用具有自监督预训练的大语言模型的巨大转变。包括 T5
(《Exploring the limits of transfer learning with a unified text-to-text transformer》
)和 MegatronLM
(《Megatron-lm: Training multi-billion parameter language models using model parallelism》
)在内的多个 masked language model
都显示出了 scale
上的一致的改善。这些 scaling
增益不仅来自于模型中参数总量的增加,还来自于预训练数据的数量和质量(《Roberta: A robustly optimized bert pretraining approach》
、《Training compute-optimal large language models》
(Chinchilla
))。
1.17M
参数(《Improving language understanding with unsupervised learning》
)增加到超过 500B
参数(《 Using deepspeed and megatron to train megatron-turing NLG 530b, A large-scale generative language model》
、《Palm: Scaling language modeling with pathways》
)。由此带来的文本生成流畅性和质量的巨大改善首先体现在 GPT-2
(《Language models are unsupervised multitask learners》
)中,并在 GPT-3
(《 Language models are few-shot learners》
)和更 later
的模型中得到进一步改善。尽管现在已经训练了各种非常大的(超过 100B
个参数)的生成式模型(《Jurassic-1: Technical details and evaluation》
(Jurassic-1
)、《Scaling language models: Methods, analysis & insights from training gopher》
(Gopher
)、《Lamda: Language models for dialog applications》
、《Using deepspeed and megatron to train megatron-turing NLG 530b, A large-scale generative language mode》
、《Palm: Scaling language modeling with pathways》
),但是它们都是闭源代码,只能在内部或者通过付费 API service
来访问。包括 EleutherAI
(《Gpt-neox-20b: An opensource autoregressive language model》
)和 BigScience
(https://huggingface.co/bigscience/tr11-176B-ml-logs/tensorboard
)在内的非盈利研究结构在开源 LLM
方面做出了一些引人注目的努力。这些模型在预训练数据、目标语言target language
、模型规模方面不同于 OPT
模型,这使得社区可以比较不同的预训练策略。GPT-3
以来,大语言模型的主要评估准则一直是 prompt-based
(《Gpt-neox-20b: An opensource autoregressive language model》
、《Scaling language models: Methods, analysis & insights from training gopher》
、《Palm: Scaling language modeling with pathways》
),本文中也执行该准则。这在很大程度上是因为在许多任务上进行评估的便利性,因为该准则不需要专门的 task-specific fine-tuning
。Prompting
本身有很长的历史:cloze evaluation
可以追溯到十几年前(《Unsupervised learning of narrative event chains》
、《A corpus and evaluation framework for deeper understanding of commonsense stories》
)。最近,prompting
或者masked infilling
已被用于 probe models for knowledge
(《Language models as knowledge bases?》
)、或者用于执行各种 NLP
任务(GPT-2
、GPT-3
)。也有一些工作是在在较小模型中引发 prompting behavior
、改善 prompting
的灵活性(《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts》
)、以及理解 prompting
为什么以及如何工作(《 What makes good in-context examples for gpt-3?》
、《Rethinking the role of demonstrations: What makes in-context learning work?》
)。instruction-style prompting
有所增益。然而,有效的 prompt engineering
仍然是一个未解决的研究挑战。结果会随着 prompt
的选择而发生显著且不可预测的变化(《Fantastically ordered prompts and where to find them: Overcoming few-shot prompt order sensitivity》
),并且模型似乎并不像我们预期的那样完全理解 prompt
(《Do prompt-based models really understand the meaning of their prompts》
)。此外,在没有验证集的情况下编写 prompt
具有挑战性,这就带来问题,即我们在实践中在多大程度上真正实现了 zero-shot/few-shot learning
(《True few-shot learning with language models》
)。我们并不试图解决这些关于 prompting
的问题,相反,我们的目的只是在现有环境下提供对 OPT-175B
的评估。然而,我们希望 OPT-175B
的 full release
将使其他人能够在未来更好地研究这些挑战。模型:我们给出了八个 Transformer
语言模型的结果,它们的参数规模从 125M
到 175B
。模型架构的细节如下表所示。为了提高透明度并降低训练不稳定性的风险,我们的模型和超参数在很大程度上遵循 GPT-3
,除了变化 batch size
从而提高计算效率。
训练配置Training Setup
:
Megatron-LM
代码库(https://github.com/NVIDIA/Megatron-LM/blob/main/examples/pretrain_gpt3_175B.sh
)中提供的相同设置,使用均值为零且标准差为 0.006
的正态分布。layer
的总数。bias
都初始化为零,所有模型都使用 ReLU
激活函数以及 2048
的序列长度。我们使用 AdamW
优化器,设置 weight decay
为 0.1
。
我们遵循线性的learning rate schedule
,在 OPT-175B
中的前面 2000 steps
(或者在我们的更小的 baseline
中选择前面的 375M
个 token
)中将学习率从 0
warm up
到最大值,并在 300B
个 token
上衰减到最大学习率的 10%
。
还需要对学习率进行一些 mid-flight
的调整(参考后文)。
根据不同的模型,我们的 batch size
设定为 0.5M ~ M
,并且在整个训练过程中固定不变。
0.1
的 dropout
,但是我们不对 embedding
应用任何 dropout
。1.0
时裁剪到 1.0
,除了一些 mid-flight
调整时将这个阈值从 1.0
降低到 0.3
(参考后文)。gradient pre-divide factor
,从而在计算所有 rank
的梯度时降低上溢出/下溢出的风险(把除以 word size
预训练语料库 Pre-training Corpus
:预训练语料库包含 RoBERTa
、Pile
、和 PushShift.io Reddit
。所有语料库先前都被收集或过滤为主要包含英文的文本,但是 CommonCrawl
语料库中仍然存在少量非英语的数据。
我们通过 MinhashLSH
过滤掉 Jaccard similarity
超过 0.95
的文档,从而删除了所有数据集中的重复文档。我们发现 Pile
尤其充满了重复的文件,并建议未来使用 Pile
的研究人员执行额外的重复数据删除处理。
我们使用 GPT-2
的 byte-level BPE tokenizer
。我们的最终语料库包含大约 180B
个 token
。
RoBERTa
:我们包括了 RoBERTa
语料库的 BookCorpus
和 Stories
子集,并利用了 CCNews
的 updated version
,其中包含截至 2021
年9
月 28
日的新闻报导。这个 CCNews v2
语料库的预处理方式与原始 RoBERTa
的 CCNews
相同。Pile
:我们包含了 Pile
的一个子集,包括:CommonCrawl
、DM Mathematics
、Project Gutenberg
、HackerNews
、OpenSubtitles
、OpenWebText2
、USPTO
、Wikipedia
。Pile
的其它子集被删除,因为我们发现它们增加了不稳定的风险(这是通过在 1.3B
规模时所引起的梯度范数峰值的趋势来衡量的),或者被认为是不合适的。所有的子集都经过额外的临时的 whitespace normalization
。PushShift.io Reddit
:这是 《The pushshift reddit dataset》
所提出的数据集的一个子集,并且之前由 《Recipes for building an open-domain chatbot》
所使用。为了将 conversational tree
转换为语言模型可以访问的文档,我们提取了每个 thread
(即,发表的帖子)中最长的评论链,并丢弃了树中的所有其它 path
。这将语料库减少了大约 66%
。训练效率:我们在 992
个 80GB
的 A00 GPU
上训练 OPT-175B
,方法是利用具有 Megatron-LM Tensor Parallelism
的 Fully Sharded Data Parallel
。我们实现了每个 GPU
高达 147 TFLOP/s
的利用率。我们将 Adam state
以 FP32
保存,因为我们将它分片到所有 host
中,而模型权重仍然以 FP16
保存。为了避免下溢出,我们使用了动态损失缩放 dynamic loss scaling
,如《Mixed precision training》
所述。
训练过程:这里我们描述了在 OPT-175B
预训练期间出现的重大的训练过程调整 training process adjustment
。
硬件故障 Hardware Failures
:在训练 OPT-175B
时,我们在计算集群中遇到了大量的硬件故障。在 2
个月的时间里,硬件故障导致100
台主机上至少 35
次手动重启、以及 cycling
(即自动重启)。在手动重启期间, training run
被暂停,并进行了一系列诊断测试从而检测有问题的节点。然后关闭标记的异常节点,并从最后保存的 checkpoint
恢复训练。考虑到主机 cycled out
的数量和手动重启的数量之间的差异,我们估计有 70+
次由于硬件故障而自动重启。
损失函数发散 Loss Divergences
:损失发散也是我们训练过程中的一个问题。当损失发散时,我们发现降低学习率并从一个较早的 checkpoint
重新开始可以让作业恢复并继续训练。我们注意到:损失发散、动态损失标量dynamic loss scalar
崩溃到 0
、以及最后一层激活值 activation
的 L2
范数达到峰值,这三者之间的相关性。这些观察结果使我们选择这样的启动点:我们的动态损失标量仍处于健康状态(大于等于 1.0
),并且在该点之后的最后一层激活值的范数呈现下降趋势而不是无限增长的趋势。
我们的 empirical LR schedule
如下图所示。
在训练的早期,我们还注意到更低的梯度裁剪(从 1.0
降低到 0.3
)有助于稳定性。有关详细信息,请参考我们发布的训练日志。
下图展示了我们验证损失的曲线。
Other Mid-flight Changes
:我们进行了许多其它实验性的 mid-flight changes
来处理损失发散。其中包括:
SGD
(优化很快进入瓶颈,然后我们又切换回 AdamW
)。Megatron
(这减少了激活值范数的压力并提高了吞吐量)。我们在 16
个标准的 NLP
任务上评估我们的模型,这些任务在一些文献中被使用:
HellaSwag
:《Hellaswag: Can a machine really finish your sentence? 》
。StoryCloze
:《A corpus and evaluation framework for deeper understanding of commonsense stories》
。PIQA
:《Piqa: Reasoning about physical commonsense in natural language》
。ARC Easy and Challenge
:《Think you have solved question answering? try arc, the AI2 reasoning challenge》
。OpenBookQA
:《Can a suit of armor conduct electricity? A new dataset for open book question answering》
。WinoGrad
:《The Winograd schema challenge》
。WinoGrande
:《Winogrande: An adversarial winograd schema challenge at scale》
。SuperGLUE
:《SuperGLUE: A stickier benchmark for general-purpose language understanding systems》
。我们遵从 GPT-3
并使用它的 prompt
和整体实验配置。我们主要与 GPT-3
进行比较,旨在重新实现它的评估配置 evaluation setting
,但是在可能的情况下在每个任务上报告其它大语言模型的性能(Jurassic-1
、Gopher
、 Chinchilla
、GPT-NeoX-20B
)。
我们报告了准确率指标(考虑到评估指标的一致性,对于 MultiRC
和 ReCoRD
省略了 F1
)。对于SuperGLUE benchmark
中的Winograd Schema Challenge: WSC
任务,我们遵循 GPT-3
并将该任务形式化为选择题,众所周知这将影响性能(《Precise task formalization matters in Winograd schema evaluations》
)。
Zero-shot
:所有 14
个任务的总体平均 zero-shot
性能如下图所示(忽略了 MultiRC
和 WIC
)。总体而言,我们看到我们的平均性能遵循 GPT-3
的趋势。
然而,不同任务的性能可能会有很大差异,完整的数据如下图所示(原始论文的附录 A
) 。
注意,我们有意从这些均值中删除了 MultiRC
和 WIC
任务的结果,因为这两个数据集似乎系统性地倾向于 GPT-3
或者 OPT
。
可以看到:
OPT
在 10
个任务上的表现大致与 GPT-3
相当,在 3
个任务上(ARC
的两个任务和 MultiRC
任务)表现不佳。3
个任务上(CB, BoolQ, WSC
),我们发现 GPT
和 OPT
模型在规模scale
方面都表现出不可预测的行为,这可能是由于这 3
个任务的验证集规模较小(分别为 56
、277
、104
个样本)。WIC
中,我们看到 OPT
模型总是优于 GPT-3
模型,尽管 GPT-3
报告的数字似乎也值得怀疑,因为 WIC
是一个二分类任务。MultiRC
,我们无法在我们的评估配置中使用 Davinci API
复现 GPT-3
的结果,这表明该任务的评估方法存在差异。BoolQ
和 WSC
,我们注意到 OPT
和 GPT
模型似乎都徘徊在 majority-class
准确率附近,这表明概率质量 probability masses
中的小扰动可能在评估中占主导地位。Chinchilla
和 Gopher
在参数规模方面的表现与其它模型大致一致,而 PaLM
通常在所有配置中表现更好,即使在控制参数数量时也是如此。我们推测 PaLM
的良好性能主要来自于更高质量和多样性的预训练数据。One-shot and Few-shot
:下图展示了平均的 multi-shot
性能(同样地,忽略了 MultiRC
和 WIC
)。
完整的数据如下图所示(原始论文的附录 A
) 。
可以看到:
在所有指标的均值中,我们发现 OPT
模型的性能类似于 GPT-3
模型。
然而,与 zero-shot
一样,分解每个任务的这些结果展示了一个不同的故事:
zero-shot
相同的 10
个数据集中,我们看到OPT
模型和 GPT-3
模型的性能相似。BoolQ, CB, WSC, RTE
数据集上,我们发现 OPT
和 GPT-3
模型在规模scale
方面都表现出不可预测的行为。MultiRC
中,我们始终看到 OPT
模型与 GPT-3
模型相比表现不佳。与 zero-shot
评估类似,我们猜测我们的 one-hot
评估和 few-shot
评估的配置可能与 GPT-3
显著不同。众所周知,大语言模型是现代对话模型dialogue model
的一个组成部分,我们还在几个开源对话数据集上评估 OPT-17B
。具体而言,我们遵循 《Recipes for building an open-domain chatbot》
,并评估了以下数据集:
ConvAI2
:《The second conversational intelligence challenge (ConvAI2)》
。Wizard of Wikipedia
:《Wizard of Wikipedia: Knowledge-powered conversational agents》
。Empathetic Dialogues
:《Towards empathetic opendomain conversation models: A new benchmark and dataset》
。Blended Skill Talk
:《Can you put it all together: Evaluating conversational agents’ ability to blend skills》
。Wizard of Internet
:《Internet-augmented dialogue generation》
。我们重点比较现有的开源对话模型,包括 fine-tuned BlenderBot 1
(《Recipes for building an open-domain chatbot》
),及其预训练部分 Reddit 2.7B
。我们还与 fine-tuned R2C2 BlenderBot
进行比较,这是一个由 《Language models that seek for knowledge: Modular search & generation for dialogue and prompt completion》
所训练的 2.7B
参数的 BlenderBot-like
模型。
我们遵从 ConvAI2
竞赛(《The second conversational intelligence challenge (ConvAI2)》
)的指标报告 Perplexity
和 Unigram F1 (UF1) overlap
。为了控制每个模型中的不同 tokenization
,我们将所有 perplexity
标准化为 GPT-2 tokenizer
的空间。
我们还注意哪些模型在这些对话任务上是监督的,哪些模型是无监督的。对于 OPT-175B
,所有的对话生成都使用贪婪解码 greedy decoding
执行最多 32
个 token
。除了交替使用 "Person 1:"
和 "Person 2:"
的对话行之外,我们没有尝试 prompt
模型。
其它模型使用 BlenderBot 1
中的对话生成参数。
实验结果如下表所示。可以看到:
OPT-175B
在所有任务上的表现都显著优于同样无监督的 Reddit 2.7B
模型,并且与完全监督的 BlenderBot 1
模型具有竞争力,尤其是在 ConvAI2
数据集中。
在所有模型都完全无监督的 Wizard-of-Internet
数据集上,我们看到 OPT-175B
达到了最低的 perplexity
。
在有监督的 Wizard-of-Wikipedia
数据集上,OPT-175B
仍然低于有监督的模型。
我们有些惊讶的是,在 ConvAI2
数据集上,无监督 OPT-175B
和监督模型 BlenderBot 1
具有相同的竞争力。这可能表明 ConvAI2
数据集泄露到 general pre-training corpus
、甚至是下表中用于评估的验证集中。
为了解决数据泄露问题,我们在预训练语料库中搜索了 ConvAI2
的第一个对话 first conversation
,但是没有发现任何 overlap
。
ConvAI2 hidden test
集合上评估了 OPT-175B
,并达到了 10.7 ppl
和 .185 UF1
,与验证集的性能相匹配。ConvAI2-like
的 MultiSessionChat: MSC
数据集(《Beyond goldfish memory: Long-term open-domain conversation》
)的子集上评估了 OPT-175B
,并获得了 9.7 ppl
和 .177 UF1
,表明 OPT-175B
模型在多个 PersonaChat-like
数据集中很好地泛化。由于 MSC
数据集和 WoI
数据集都是在 CommonCrawl snapshot
(由预训练语料库所使用)之后发布的,因此数据泄露的风险很小。我们得出结论:OPT-175B
具有很强的能力在不同的对话中保持一致的角色 consistent persona
,在 LaMDA
中也强调了这一行为。
为了了解 OPT-175B
的潜在危害,我们评估了一系列 benchmark
,关于仇恨言论检测hate speech detection
、刻板印象stereotype awareness
、以及有毒内容生成toxic content generation
。尽管这些 benchmark
可能存在缺陷,但是这些评估结果为了解 OPT-175B
的局限性迈出了第一步。我们主要与 GPT-3 Davinci API
进行比较,因为这些 benchmark
尚未包含在 GPT-3
论文中。
Hate Speech Detection
:使用 《ETHOS: an online hate speech detection dataset》
提供的 ETHOS
数据集,并根据 《Detecting hate speech with gpt-3》
的指示,我们度量了 OPT-175B
的能力,从而确定某些英语 statement
是否具有种族主义或性别歧视(或者两者都不是)。
在 zero-shot/one-shot/few-shot
的二元分类 case
中,我们会给模型提供文本,并要求模型回答该文本是种族主义还是性别歧视,并提供 yes/no
的 response
。在 few-shot
的多类分类 case
中,模型需要提供 yes/no/neither
的 response
。
实验结果如下表所示。可以看到:在所有的 zero-shot/one-shot/few-shot setting
中,OPT-175B
的性能显著优于 GPT-3 Davinci API
。
我们推测这来自于两个来源:
GPT-3 Davinci API
进行评估可能会带来安全控制机制safety control mechanism
,而这个机制是原始的 175B GPT-3
模型(原始论文中的)所没有的(从而导致无法区别种族主义或性别歧视)。social media discussion
,这为此类分类任务提供了额外的 inductive bias
。CrowS-Pairs
:CrowSPairs
(《Crows-pairs: A challenge dataset for measuring social biases in masked language models》
)是为 masked language model
开发的,它是一个众包的 benchmark
,旨在度量 9
个类目中的 intra-sentence level
的 bias
,这些类目包括:性别gender
、宗教religion
、种族/肤色 race/color
、 性取向sexual orientation
、年龄 age
、国籍nationality
、残疾 disability
、外貌physical appearance
、社会经济状况socioeconomic status
。
每个样本由一对句子组成,代表关于某个群体的刻板印象stereotype
或者 anti-stereotype
,目标是衡量模型对 stereotypical expression
的偏好。得分越高则表明模型表现出的 bias
越大。
实验结果如下表所示。可以看到:与 GPT-3 Davinci API
相比,OPT-175B
似乎在除了宗教之外的几乎所有类目中都表现出更多的 stereotypical bias
。
同样地,这可能是由于训练数据的差异所致。《Crows-pairs: A challenge dataset for measuring social biases in masked language models》
表明:Pushshift.io Reddit
语料库比其它语料库(如 Wikipedia
)在 stereotype
和歧视性文本 discriminatory text
上具有更高的发生率。鉴于Pushshift.io Reddit
语料库是 OPT-175B
的一个主要数据源,因此OPT-175B
可能已经学习了更多的歧视性关联,从而直接影响了它在 CrowS-Pairs
上的性能。
StereoSet
:遵从 《Jurassic-1: Technical details and evaluation》
和 《Efficient large scale language modeling with mixtures of experts》
,我们使用 StereoSet
(《Measuring stereotypical bias in pretrained language models》
)来衡量 4
个类目的 stereotypical bias
:职业 profession
、性别 gender
、宗教 religion
、种族 race
。除了 intra-sentence
度量(类似于 CrowSPairs
),StereoSet
还包括 inter-sentence level
度量从而测试模型融合 additional context
的能力。
为了说明 bias detection
和 language modeling capability
之间的潜在 trade-off
,StereoSet
包含两个指标:Language Modeling Score: LMS
、Stereotype Score: SS
。这两个指标然后被组合从而构成 Idealized Context Association Test: ICAT
分。不像 《Jurassic-1: Technical details and evaluation》
,我们通过 token count
而不是 character count
来归一化得分,他们报告说通过 character count
来归一化改进了几个模型的指标。
结果如下表所示。可以看到:
GPT-3 Davinci API
和 OPT-175B
在总分上表现出相似的得分(尤其是在后两个类目)。
具体而言:
GPT-3 Davinci API
在职业和种族方面表现出色,而 OPT-175B
在性别和宗教方面表现出色。OPT-175B
在 SS
指标上的整体表现更好,而 GPT-3 Davinci API
在 LMS
指标上的表现通常更好。RealToxicityPrompts
:我们通过 RealToxicityPrompts
数据集(《RealToxicityPrompts: Evaluating neural toxic degeneration in language models》
)评估 OPT-175B
对毒性语言 toxic language
做出的反应。遵从 PaLM
,对来自 RTP
数据集的每 10k
个随机采样的 prompt
,我们使用 nucleus sampling
采样 25
个长度为 20 token
的 generation
(其中 continuation
的平均毒性概率mean toxicity probability
(根据原始 prompt
的 bucketed toxicities
进行分层)。
为了比较,我们报告了来自 GPT-3 Davinci API
和 PaLM
的 bucketed toxicity rate
。
结果如下表所示。可以看到:
OPT-175B
的 toxicity rate
高于 PaLM
和GPT-3 Davinci API
。prompt
的毒性的增加,所有三个模型都增加了生成 toxic continuation
的可能性,这与 《Palm: Scaling language modeling with pathways》
等人的观察结果一致。与我们在仇恨言论检测方面的实验一样,我们怀疑在预训练语料库中包含未经审核的社交媒体文本会提高模型对有毒文本toxic text
的熟悉程度,从而倾向于提高生成和检测有毒文本。取决于下游 application
的具体要求,这种对有毒语言 toxic language
的强烈意识 strong awareness
可能是想要的也可能是不想要的。OPT-175B
的未来应用应该考虑模型的这一方面,并且采取额外的缓解措施,或者酌情完全避免使用。
Dialogue Safety Evaluations
:最后,我们在两个 Dialogue Safety
评估中比较 OPT-175B
:
SaferDialogues
(《Saferdialogues: Taking feedback gracefully after conversational safety failures》
),它衡量从明显的安全故障中恢复的能力(通常以道歉或承认错误的形式)。Safety Bench Unit Tests
(《Anticipating safety issues in e2e conversational ai: Framework and tooling》
),它衡量模型响应的不安全程度,分为 4
个 level
的 topic sensitivity
:Safe
、Realistic
、Unsafe
、Adversarial
。我们对比了几个现有的开源对话模型。实验结果如下表所示,可以看到:
在 SaferDialogues
和 Unit Tests
上,OPT-175B
和 Reddit 2.7B
具有相似的性能,其中 OPT-175B
在 Safe
和 Adversarial
的 setting
上表现略好(得分越低越好)。
我们发现在精选的对话数据集(BlenderBot 1
、R2C2
)上微调的模型总体上具有较低的毒性,这与 《Recipes for building an open-domain chatbot》
和 《Recipes for safety in open-domain chatbots》
一致。
我们得出结论:未来对 OPT-175B
的对话实验应该包含对 curated dataset
的显式微调,从而提高安全性。
在前面章节中,我们对所发布的不同规模的模型进行了广泛的评估。我们看到 OPT
模型在标准评估数据集上与 GPT-3
模型的性能相当。此外,我们进行了safety
、bias
、以及 inclusion
的评估,再次看到在毒性和仇恨言论检测方面,OPT
和 GPT-3
模型有一些大致相当的性能。然而,这种评估可能无法完全描述这些模型的全部局限性。总体而言,我们定性地观察到 OPT-175B
受到其它大语言模型中所指出的相同局限性。具体而言:
OPT-175B
无法很好地处理陈述性指令 declarative instruction
或直截了当的疑问句。用这样的指令进行 prompting
倾向于一个以该指令开始的对话的模拟,而不是一条指令的执行。在 InstructGPT
(《Training language models to follow instructions with human feedback》
)的指导下,instruction learning
的未来工作可能会缓解这些局限性。OPT-175B
也倾向于重复,很容易陷入循环。虽然采样可以降低重复行为的发生率,但是我们有趣地发现:当仅采样 one generation
时,该问题并未完全消除。未来的工作可能希望纳入更多的现代策略,从而减少重复和提高多样性,如 unlikelihood training
(《Neural text generation with unlikelihood training》
)、best-first decoding
(《Best-first beam search》
)。OPT-175B
会生成与事实不符的 statement
。这在信息准确性至关重要的 application
中尤为有害,例如医疗保健、科学发现。最近,一些工作报告了检索增强模型 retrieval-augmented mode
可以提高大语言模型的事实正确性factual correctness
。我们相信 OPT-175B
也将在未来的迭代中受益于检索增强。OPT-175B
具有高度倾向来生成有毒语言toxic language
和强化有害刻板印象harmful stereotype
,即使在提供相对无害的 prompt
时也是如此,并且很容易发现对抗的 prompt
。在缓解毒性和 bias
方面,人们已经做了大量工作。根据下游应用,OPT-175B
的未来使用可能需要采用这些缓解措施,尤其是在任何实际部署之前。鉴于我们的主要目标是复制 GPT-3
,我们选择不在第一版中应用这些缓解措施。总之,我们仍然认为这项技术的商业部署还为时过早。尽管包括 data sheets
和 model cards
,我们认为,为了负责任地使用数据,应该通过额外的数据特征和选择标准对训练数据进行更多的审查。当前的做法是向模型提供尽可能多的数据,并在这些数据集中最小化选择(即,无需人工选择,让模型自己去学习)。尽管有全面的评估,但我们最好有更精简和一致的评估配置,从而确保评估场景的可复现性。在 in-context learning
中,不同的 prompting
方式和不同的 shot
数量会产生不同的结果。我们希望 OPT
模型的公开发布将使更多的研究人员致力于这些重要的问题。
遵从 Partnership for AI
对每个研究人员的建议,以及 NIST
概述的治理指南 governance guidance
,我们正在通过我们的 logbook
以及我们的代码来披露训练 OPT-175B
所涉及的所有细节,并为研究人员提供访问 OPT-175B
的模型权重,以及一套小型 baseline
(该 baseline
反映了 OPT-175B
的 setup
)。我们的目标是对 OPT-175B
的开发周期完全负责,只有通过提高大语言模型的开发的透明度,我们才能在更广泛的部署之前开始了解大语言模型的局限性和风险。
通过分享我们日常训练过程的详细说明,我们不仅批露了训练当前版本的 OPT-175B
使用了多少计算,而且还批露了当底层基础设置或训练过程本身随着模型规模增大而变得不稳定时所需的人力开销。这些细节通常在以前的出版资料中被忽略,可能是由于无法完全消除 mid-flight
的变化(没有大幅增加计算预算compute budget
)。我们希望通过揭示某些临时性 ad-hoc
的设计决定是如何做出的,从而使得我们可以在未来改进这些做法,并共同提高开发这种规模的模型的实验鲁棒性experimental robustness
。
在这些说明之外,metaseq
代码库本身是我们许多实现细节的最终真相来源 final source of truth
。通过发布我们的开发代码库,我们旨在阐明任何可能在本文中被忽略的实现细节,因为这些细节要么被认为是该领域的标准做法,要么只是我们未能考虑到的细节。目前的这个代码库也是唯一已知的、在 NVIDIA GPU
上不使用 pipeline paralellism
的情况下训练一个 >= 175B
参数的 decoder-only transformer
的开源实现。
为了实现在 175B
规模上的实验,我们为研究人员提供了直接访问 OPT-175B
参数的机会。这里的理由有两个:使得 Responsible AI
的研究能够进入大语言模型的领域,同时减少在这种规模下进行研究的环境影响environmental impact
。 越来越多的工作详述了部署大型的、具有新兴能力emergent capability
的语言模型的伦理和道德风险。通过将 OPT-175B
的使用限制在非商业许可的研究社区,我们的目的是在更广泛的商业部署发生之前,首先将开发工作聚焦在量化大语言模型的局限性上。
此外,当复现这种规模的模型时存在大量的计算成本和碳排放。虽然 OPT-175B
在开发时估计碳排放carbon emissions footprint
(CO2eq
) 为 75
吨,相比之下 GPT-3
估计使用 500
吨、Gopher
需要 380
吨。 这些估计并不是通用的报告,这些计算的核算方法也没有标准化。此外,模型训练只是人工智能系统整体碳排放量的一个组成部分:我们还必须考虑实验成本和最终的下游推断成本。所有这些都将导致创建大模型的能源量energy footprint
不断增加。
通过发布我们的日志,我们希望强调:假设没有硬件故障或训练不稳定的理论碳成本估计,与旨在包括整个大语言模型开发生命周期的碳成本估计之间的 gap
。我们需要了解这些系统的制造碳manufacturing carbon
,因为它们越来越复杂。我们希望我们的论文可以帮助未来的工作,从而确定在衡量规模对环境的影响时需要考虑的额外因素。
类似地,通过制作一组跨越各种规模的 baseline
,我们希望能让更广泛的研究社区研究这些模型仅在规模方面的影响和局限。正如 《Training compute-optimal large language models》
所报告的那样,作为训练数据量的函数,许多这些大语言模型可能训练不足,这意味着纳入更多的数据并继续训练这些 baseline
模型可能会继续提高性能。还有证据表明,容量的阶跃函数变化step-function change
可能发生在比 175B
小得多的规模上(《Finetuned language models are zero-shot learners》
),这表明需要为不同的application
考察更广泛的规模。
整个预训练数据集是以下子数据集组合而成:
BookCorpus
:包含超过 1
万本未出版的书籍。CC-Storie
:包含 CommonCrawl
数据的一个子集,该子集是 CommonCrawl
经过过滤从而符合 Winograd schemas
的 story-like style
。Pile
:包含以下数据:Pile-CC
、OpenWebText2
、USPTO
、Project Gutenberg
、OpenSubtitles
、Wikipedia
、DM Mathematics
、HackerNews
。Pushshift.io Reddit
:由 《The pushshift reddit dataset》
开发并由 《Recipes for building an open-domain chatbot》
处理。CCNewsV2
:包含 CommonCrawl News
数据集英文部分的 updated
版本,该数据集在 RoBERTa
中使用。这些数据集是公开可用,并从互联网上下载的。
数据集规模:包含 180B
的 token
,对应于 800GB
的数据。我们从预训练数据中拿出一个大约 200MB
的随机验证集,其中按照预训练语料库中每个数据集的大小比例进行采样。
除了数据集之间可能出现的自然重复之外,我们没有添加其它冗余、错误、或噪音。注意,我们已经对数据集进行人工去重,但是仍然可能遗留某些重复数据
数据集中可能包含攻击性、侮辱性、威胁性、或引发焦虑的句子。
预处理:每个子数据集进行了标准的清洗和重新格式化的做法,包括删除重复文本、删除没有信息量的文本(如 “第一章”、“This ebook by Project Gutenberg
” )。
OPT-175B
是 2022-05-03
日发布的。AdamW
训练的,参数规模从 125M
到 175B
。这里所有的例子,最初始的 prompt
是黑体字给出的,其余部分是续接 continuation
。这些例子是有意选择的,从而突出 OPT-175B
的成功和失败。
诗歌生成:我们已经观察到模型能够写出有趣的诗歌,然而我们很难让模型观察到韵律或格律。
对话生成:当 prompt
为自由女神像时,模型采用了爱国的性格。然而,在进一步的对话中,模型演变成简单和重复的生成。
few-shot
翻译:模型并未刻意地进行多语言的训练,但是我们发现它在德语、西班牙语、法语、中文的简单翻译上取得了有限的成功。
论文写作:相比较于以"Abstract"
作为提示,以 "1. Introduction"
作为提示会产生更有趣的结果。我们这里的提示是受到 ResNet
论文的第一句话的启发。
四则运算:我们观察到从加法扩展到其它运算时的错误。
Python
编程:简单地换掉一个变量名就可以改变模型生成的输出。
参考内容:
xxxxxxxxxx
https://github.com/facebookresearch/metaseq/blob/main/projects/OPT/chronicles/OPT175B_Logbook.pdf
https://github.com/facebookresearch/metaseq/blob/main/projects/OPT/chronicles/OPT_Baselines_Logbook.pdf
OPT-175B
开发过程:
xxxxxxxxxx
https://github.com/facebookresearch/metaseq/blob/main/projects/OPT/chronicles/README.md
10%
进度(主要解决训练收敛/数值稳定性问题):
Experiment 11.xx Lineage - November 5, 2021
:
配置:batch size = 2M
,FP32
的 Adam
,Adam beta2
为 0.98
,8X
的张量并行,正弦初始化的 LPE
,Normformer
,0.05
的 weight decay
,学习率 3e-4
,结束学习率为 1e-5
, embedding
上没有 dropout
,梯度预除因子 pre-divide factor
为 32
,梯度范数裁剪阈值为 2.5
(L2
范数)。
在前几次运行中,损失函数会爆炸,我们主要集中在降低学习率,并增加梯度裁剪的频率(首先将梯度裁剪阈值降低到 1.5
,然后将梯度裁剪阈值降低到 1.0
)。
从实验 11.4
开始,在每次重启后的几百次更新之后,我们看到梯度范数爆炸/损失函数爆炸/Nan
,同时还有及其不稳定的 loss scale
(这使得模型进入欠拟合)。我们开始采取越来越激烈的行动,从增加 weight decay
到 0.1
开始,将 Adam beta2
降低到 0.95
,再次降低学习率,最后在实验 11.10
中我们热交换到 ReLU
(从 GeLU
),同时也切换到更稳定的 MHA
(注意,GeLU
中的 x**3
可能是 FP16
的一个不稳定来源)。
注意:增加 weight decay
和降低 Adam beta2
都可能使梯度更加噪音,但好处是可以更快地 “适应” 来自较新 batch
的梯度。
同时,我们发现我们的 LPE
没有训练。LPE
的正弦初始化有效地冻结了 positional embedding
,这似乎表明我们的初始化方案在总体上存在一个潜在的问题。
Experiment 12.xx Lineage - November 11, 2021
:现在,尽管我们在过去的 1k
次更新中没有出现梯度范数爆炸或到处是 NaN
的情况,但是似乎训练会停滞不前(参考上面的粉红色曲线,即实验 11.10
)。为此我们尽可能多地采用 Megatron/OpenAI GPT-3
的配置,因为 Megatron/OpenAI GPT-3
的配置是一致的,而且据说都已经成功地训练了一个 175B
(及以上)的模型。
我们的主要改变是:整体的权重初始化,移除 Normformer
、移除 embedding scaling
、将 LPE
初始化改变为标准 embedding
初始化而不是正弦初始化。
11.11
日开始,我们开始用这些更新后的配置来训练我们的 12.xx
实验。从那时起,我们唯一不得不进行的重启都与硬件问题有关。现在情况看起来健康多了(激活值的范数、梯度范数、参数范数都显得正常)。我们要处理的下一个问题是 loss/ppl
的平原。
注意,12.xx
实验中的 loss/ppl
开始时要比 11.xx
系列要高得多。但由于稳定性增加,在 7k
次更新后,loss/ppl
最终要降低很多。优化早期的最低 loss/ppl
似乎不一定能保证损失曲线的均匀移动,注意这些曲率的变化(在早期牺牲一些较高的 loss/ppl
)可能对我们剩余的实验也是有用的。
27%
进度(主要面临硬件问题):自从 11.17
日的更新以来,由于各种硬件、基础设施、或实验稳定性问题,我们在 175B
实验中重启了 40
多次。
绝大多数的重启都是由于硬件故障,以及没有能力提供足够数量的 buffer
节点来替换坏的节点。通过云界面替换一台机器可能需要几个小时,而且更多的时候我们最终会再次得到相同的坏机器。
总之,围绕基础设施问题的工作占据了团队过去两周的时间。自从感恩节之后,过去的一周充满了梯度溢出错误、损失值命中阈值下限之类的问题(它们是为了避免下溢出而设置的),这也导致了训练的停滞。我们从先前的 checkpoint
重启了几次,发现继续训练偶尔导致更进一步,然后又再次遇到同样的问题。在这个问题上,我们尝试了一些更激烈的方法:为 Adam
测试了类似于 SGD
的配置(通过将 beta1
设为 0
,将 epsilon
设为 1
),但是发现从 checkpoint
重新初始化 Adam
优化器也会重新加载之前保持的 beta
。我们试图切换到真正的普通 SGD
,这需要立即实现一个 FP16
友好的版本,结果发现我们的学习率可能被设置得太低,SGD
实际上无法取得进展。
从 2021-12-03
号早上开始,我们决定继续使用 Adam
,并且尝试降低学习率,这似乎对降低梯度范数和激活值范数有惊人的效果,并允许 perpexity
继续稳步下降。我们最初选择从比 GPT-3 175B
高得多的学习率开始,因为较小规模的消融实验表明:在 fairseq codebase
中训练时,GPT-3
的学习率设置的太低。然而,现在我们在训练的后期,似乎学习率的衰减速度不够快,无法保持训练的稳定性。
经过几周的血汗,这里是自上次更新以来的最终进展图。
56%
进度(主要是得到云供应商的更多支持):主要是关于基础设置的工作。
训练稳定性:在 run 12.43
时,我们注意到梯度范数和激活值范数开始飙升(浅蓝色曲线)。我们的补救方法为:对激活值进行裁剪。
Megatron v2.6 vs v2.4
:当我们意外地将训练所依赖的 Megatron
从 2.4
升级到 2.6
时,我们的训练动态 dynamics
发生了一个有趣的变化。我们注意到,突然之间,激活值范数的轨迹发生了显著的变化(红线到橙线),而我们的吞吐量(每秒单词数)增加了 2%
。
我们把这个问题归结为 Megatron
中一行代码的变化,它组织了以下代码的执行:
xxxxxxxxxx
torch._C._jit_set_profiling_executor(False)
我们仍然不清楚为什么这一行代码会以这种方式影响训练动态。
100%
进度:截止北京时间 2022-01-06
号下午 12:46
分,我们的 175B
模型终于完成了对 300B token
的训练,这需要大约 4.30e+23 FLOPs
的计算量,或者在 1024
个 80GB A100
上连续训练大约 33
天(假设没有硬件问题、没有数值不稳定等等)。
OpenAI
训练的 175B GPT-3
模型需要在 10000
台 V100
上计算 14.8
天,并消耗 3.14e+23 FLOPs
。这种做法的代码并未开源。1.1T
的混合专家模型 Mixture-of-Experts model
需要在 512
台 A100
上进行大约 2.16e+22 FLOps
的计算。这相当于一个 6.7B
的稠密模型。benchmarking exercise
。模型在 180B token
语料库上训练,我们没有时间在训练开始前策划一个更大的数据集。1024
个 A100
来处理这种规模的实际工作负载是非常不容易的。~13B
参数)的训练中获得的结果在 scaled-up
时也不一定成立。 安装 transformers
库:
xxxxxxxxxx
pip install transformers
根据 https://huggingface.co/facebook/opt-66b
来使用:
直接使用:
xxxxxxxxxx
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-66b") # 模型名字
model = AutoModelForCausalLM.from_pretrained("facebook/opt-66b") # 模型名字
或者下载模型权重到本地(模型有数百 GB
,最好提前下载下来):
xxxxxxxxxx
yum install git-lfs # git-lfs 是一个开源的Git大文件版本控制的解决方案和工具集
git clone https://huggingface.co/facebook/opt-66b
然后使用:
xxxxxxxxxx
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("./opt-66b") # 模型下载的位置
model = AutoModelForCausalLM.from_pretrained("./opt-66b") # 模型下载的位置
也可以选择使用更小的模型,如 opt-125m
来进行研究。