Transformer

一、Transformer[2017]

  1. 循环神经网络RNN (尤其是 LSTMGRU 网络)已经牢牢地被确定为序列建模和转导transduction 问题的 state-of-the-art 方法。此后,许多努力继续推动循环语言模型 recurrent language modelencoder-decoder 的发展。

    循环模型通常沿输入序列和输出序列的 symbol position 来考虑计算。将 positionstep 在计算期间对齐 aligning ,这些模型生成一系列 hidden state ht ,其中 ht 是前一个hidden state ht1t 时刻 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 完全依赖注意力机制来抽取 inputoutput 之间的全局依赖关系。Transformer 可以实现更高的并行化,并且在八个 P100 GPU 上经过短短 12 个小时的训练后就可以在翻译质量方面达到新的 state-of-the-art

  2. 背景:

    • 减少序列计算这一目标也构成了 Extended Neural GPUByteNetConvS2S 的基础,它们都使用卷积神经网络作为基础构建块 basic building block ,并行地为所有 input positionoutput position 来计算 hidden representation 。在这些模型中,联系 relate 来自两个任意 input positionoutput position 的信号所需操作的数量,随着 position 之间的距离而增加:对于 ConvS2S 呈线性增加,而对于 ByteNet 则呈对数增加。这使得学习远距离位置之间的依赖性变得更加困难。

      Transformer ,这种数量被降低到常数级(O(1)),尽管以降低有效分辨率 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 是第一个完全依赖自注意力来计算其 inputoutputrepresentation 而不使用 sequence-aligned RNN 或卷积的模型。在接下来部分中,我们将描述 Transformer、自注意力的启发,并讨论它相对于 《Neural GPUs learn algorithms》《Neural machine translation in linear time》《Structured attention networks》 等模型的优势。

1.1 模型

1.1.1 模型架构

  1. 大多数有竞争力的神经序列转导模型 neural sequence transduction model 具有 encoder-decoder 结构。这里,encodersymbol representation 的输入序列 x=(x1,x2,,xn) 映射到 continuous representation 的序列 z=(z1,,zn),其中 n 为输入序列长度,xi 为第 i 个输入 symbol representationone-hot 向量),zi 为第 ihidden representation 。 给定 zdecoder 然后生成 symbol 的一个输出序列 (y1,y2,,ym) ,一次输出一个元素,其中 m 为输出序列长度,yj 为第 j 个输出 symbol representationone-hot 向量)。在每个 step,模型都是自回归auto-regressive的,在生成下一个输出symbol 时使用所有前面生成的 symbol 作为额外的输入。

    Transformer 遵循这种整体架构,同时为 encoderdecoder 使用堆叠的 self-attention的和 point-wise 的全连接层,分别如下图的左半部分和有半部分所示。

    下图中的 attention 的三个输入中,最右侧为 query 而其它两个输入分别为 key,value 。注意,key 的数量和 value 的数量相等。

  2. EncoderencoderN=6 个相同的层堆叠而成。每个层有两个子层:第一个子层是多头注意力机制 multi-head self-attention mechanism, 第二个子层是简单的、position-wise 的全连接前馈神经网络。我们在两个子层中的每个子层周围使用残差连接 residual connection ,然后进行 layer normalization 。即,每个子层的输出为:

    LayerNorm(x+Sublayer(x))

    其中:Sublayer(x) 是子层自己实现的函数。

    为了有助于这些残差连接,模型中的所有子层以及 embedding layer 都会产生维度 dmodel=512 的输出。

    注意,图中黄色框内的标注是 Add & Norm ,即 Add 在前、Norm 在后,也就是 LayerNorm 作用在残差连接之后。

  3. Decoderdecoder 也是由 N=6 个相同的层堆叠而成。decoder 的每个层包含三个子层,其中有两个子层与 encoder 子层相同,而第三个子层对 encoder stack 的输出执行 multi-head attention

    encoder 类似,我们在每个子层周围使用残差连接,然后进行 layer normalization 。我们还修改了 decoder stack 中的 self-attention 子层,从而防止它关注后续的 position (即,masked self-attention)。这种 masking 确保对 position i 的预测只能依赖于位置小于 i 的已知输出。

1.1.2 Attention

  1. 注意力函数可以描述为:将一个 query 和一组 key-value pair 映射到 output ,其中 query, key, value, output 都是向量。output 被计算为 value 的加权和,其中每个 value 的权重是由一个函数来计算(即,注意力函数),该函数以 query, key 作为输入。

  2. Scaled Dot-Product Attention:我们称我们提出的注意力为 Scaled Dot-Product Attention ,如下图所示。输入由三部分组成:维度为 dkquery、维度为 dkkey、维度为 dvvalue 。我们将单个 query 和所有的 key 计算内积,然后内积的结果除以 dk ,然后对这些内积结果应用 softmax 函数从而获得 value 的权重。

    这里要求 query 向量的维度和 key 向量的维度相同,都是 dk

    在实践中,我们同时计算一组 query 的注意力函数,其中将 query 打包到一个矩阵 Q 中。keyvalue 也被打包到矩阵 KV 中。我们将 output 矩阵计算为:

    Attention(Q,K,V)=softmax(QKdk)V

    假设有 nqquerynvkeynvvalue (要求 key 的数量和 value 的数量相同),则:

    QRnq×dk,KRnv×dk,VRnv×dv,QKRnq×nv,Attention(Q,K,V)Rnq×dv

    两种最常见的注意力函数为:加性注意力additive attention、内积注意力dot-product (multiplicative) attention

    • 内积注意力与我们的算法相同,除了我们使用了 1/dk 的缩放因子。

      因为维度越大,则内积中累加和的项越多,内积结果越大。很大的数值会导致 softmax 函数位于饱和区间,梯度几乎为零。

    • 加性注意力通过具有单隐层的前馈神经网络来计算注意力函数。

      additive attention(也称作 Bahdanau Attention ) 的原理为:

      si,j=wσ(Wqqi+Wkkj)αi,j=softmax(si,j)=exp(si,j)jexp(si,j)vi=j=1αi,jvj

      其中:

      • wattention 向量,为待学习的参数,σ() 为非线性函数。
      • qi 为第 iquerykj 为第 jkeyvj 为第 jvalue
      • Wqquery 向量映射到公共空间,Wkkey 向量映射到公共空间,因此 query 向量和 key 向量可以为不同的维度。它们都是待学习的权重。
      • αi,j 给出第 iquery 在各个 position 的注意力权重,position 的数量为 nv

    虽然这两种注意力在理论上的复杂度相同,但是内积注意力在实践中更快且更节省内存空间,因为它可以使用高度优化的矩阵乘法代码来实现。

  3. Multi-Head Attention:与执行单个注意力函数 attention function (具有 dmodel 维的 query, key, value )不同,我们发现将 query, key, value 线性投影 h 次是有益的,其中每次线性投影都是不同的并且将 query, key, value 分别投影到 dk,dk,dv 维。

    然后,在每个 query, key, value 的投影后的版本上,我们并行执行注意力函数,每个注意力函数产生 dv 维的 output 。这些 output 被拼接起来并再次投影,产生 final output ,如上图右侧所示。

    多头注意力multi-head attention 允许模型在每个position 联合地关注jointly attend 来自不同 representation 子空间的信息。如果只有单个注意力头single attention head,那么平均操作会抑制这一点。

    MultiHead(Q,K,V)=Concat(head1,head2,,headh)WOheadi=Attention(QWiQ,KWiK,VWiV)

    其中待学习的投影矩阵为:WiQRdmodel×dkWiKRdmodel×dkWiVRdmodel×dvWOR(hdv)×dmodel

    在这项工作中,我们使用 h=8 个注意力头 attention head 。对于其中每个注意力头,我们使用 dk=dv=dmodel/h=64 。由于每个 head 的维度减小,因此总的计算成本与完整维度的单头注意力single-head attention 相近。

  4. 注意力在 Transformer 中的应用:Transformer 以三种不同的方式使用多头注意力:

    • encoder-decoder attention 层中,query 来自于前一个 decoder layerkeyvalue 来自于 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

1.1.3 Position-wise Feed-Forward Networks

  1. 除了注意力子层之外,我们的 encoderdecoder 中的每一层还包含一个全连接的前馈神经网络,该网络分别且相同地应用于每个位置。该网络包含两个线性变换,中间有一个 ReLU 激活函数:

    FFN(x)=max(0,xW1+b1)W2+b2

    虽然线性变换在不同位置上是共享的(即,相同的参数),但是它们在层与层之间使用不同的参数。

    该层的另一种描述是: kernel size = 1 的两个卷积,其中 inputoutput 的维度为 dmodel=512,而内层的维度为 dff=2048

    W1Rdmodel×dffW2Rdff×dmodel 。这里采用膨胀的方式,选择 dff>dmodel 从而使得 representation 维度先增大再减小。

1.1.4 Embeddings and Softmax

  1. 与其它序列转导模型类似,我们使用学到的 embeddinginput tokenoutput token 转换为维度 dmodel 的向量。我们还使用学到的线性变换和 softmax 函数将 decoder output 转换为 next-token 的预测概率。

    在我们的模型中,我们在两个 embedding layer (输入层)和 pre-softmax 线性变换(输出层)之间(共计三个权重矩阵)共享相同的权重矩阵,类似于 《Using the output embedding to improve language models》。在 embedding 层中,我们将这些权重乘以 dmodel

    这里有两个输入层,分别来自于 encoder inputdecoder input。而输出层来自于 decoder

    三个 embedding 矩阵共享的前提是:input symbol 空间和 output symbol 空间是相同的,例如,输入是中文的文本,输出是中文摘要,那么input symboloutput symbol 都是中文单词。否则,encoderembedding 矩阵无法和 decoder 的 两个 embedding 矩阵共享。但是无论如何,decoder 的两个 embedding 矩阵之间可以共享。

    为什么要把 embedding 矩阵乘以 dmodel ?论文并未说明原因。有一种解释说是放大 embedding 使得它的量级和 positional embedding 的量级相同。可以通过实验来验证。

1.1.5 position embedding

  1. 由于我们的模型不包含递归和卷积,为了让模型利用序列的次序 order,我们必须注入一些关于序列中 token 的相对位置或绝对位置的信息。为此,我们在 encoder stackdecoder stack 底部的 input embedding 中添加了 positional encodingpositional encodingembedding 具有相同的维度 dmodel ,因此可以将二者相加。

    positional encoding 有很多选择,可以选择固定的也可以选择可学习的。

    • 这里我们选择固定的方式,采用不同频率的正弦函数和余弦函数:

      pj=(PE(j,1),PE(j,2),,PE(j,dmodel))PEj,2i=sin(j100002i/dmodel),PEj,2i+1=cos(j100002i/dmodel)

      其中:j 表示 positioni 表示维度。即,positional encoding 的每个维度对应于一个正弦曲线,正弦曲线的波长从 2π (当维度 i=0 时)到 10000×2π (当维度 2i=dmodel 时)。

      我们选择这个函数是因为我们假设它可以让模型通过相对位置来轻松地学习关注 attend ,因为对于任意固定的偏移量 kpj+k 可以表示为 pj 的线性函数。

    • 我们还尝试使用可学习的 positional embedding,发现这两个版本产生了几乎相同的结果。我们选择了正弦版本,因为它可以让模型推断出比训练期间遇到的序列长度更长的序列。

      正弦版本的 positional embedding 可以应用到训练期间 unseen 的位置,而可学习的 positional embedding 无法实现这一功能。

1.1.6 Why Self-Attention

  1. 这里我们将自注意力层与循环层、卷积层进行各个方面的比较。这些层通常用于将一个可变长度的 symbol representation 序列 (x1,,xn) 映射到另一个等长序列 (z1,,zn),其中 x,ziRd 。 为了启发我们使用自注意力,我们考虑了三个方面:每层的总计算复杂度、可并行化的计算量(以所需的最少的序列操作数量来衡量)、网络中远程依赖long-range dependency的路径长度。

    学习远程依赖是许多序列转导任务中的关键挑战。影响学习这种依赖的能力的一个关键因素是:前向传播信号和反向传播信号必须在网络中传输的路径长度。input 序列和 output 序列中任意位置组合之间的路径越短,那么就越容易学习远程依赖。因此,我们还比较了由不同类型的层组成的网络中,任意input 位置和 output 位置之间的最大路径长度。

    如下表所示:

    • 自注意力层在所有位置都关联一个 O(1) 数量的序列操作(即具有最大程度的并行化),而循环层需要 O(n) 数量的序列操作(即几乎完全无法并行化)。

      并行化指的是:为了计算指定位置的输出,模型需要依赖已经产生的多少个输出?

    • 在计算复杂度方面,当序列长度 n 小于 representation 维度 d 时(机器翻译中 state-of-the-art 模型常见的 case ),self-attention 层比循环层更快。

      为了提高涉及非常长序列(即 n 非常大)的任务的计算性能,可以将自注意力限制为仅考虑输入序列中的局部区域,这个局部区域是以输出位置对应处为中心、大小为 r 的邻域。这会将最大路径长度增加到 O(n/r) ,同时每层的计算复杂度降低到 O(rnd)。我们计划在未来的工作中进一步研究这种方法。

    • 具有 kernel width k<n 的单个卷积层无法连接 input positionoutput position 组成的所有的 pair 。如果希望连接所有的 input positionoutput position,则需要堆叠 O(n/k) 个卷积层(连续核 contiguous kernel) 或 O(logk(n)) 个卷积层(空洞卷积 dilated convolution ),并且增加了网络中任意两个位置之间最长路径的长度。

      卷积层通常比循环层更昂贵 expensive (贵 k 倍)。然而,可分离卷积将计算复杂度显著降低到 O(k×n×d+n×d2) 。当 k=n 时,可分离卷积的复杂度就等于一个自注意力层和一个point-wise feed-forward layer 的组合(这就是我们在 Transformer 模型中采用的方法)。

  2. 作为附带的好处,自注意力可以产生更可解释的模型。我们从 Transformer 模型中检查注意力的分布,并在下图中展示和讨论了示例。不仅单个注意力头清晰地学习执行不同的任务,而且许多注意力头似乎还表现出与句子的句法结构syntactic structure和语义结构 semantic structure 有关的行为。

    • 如下图所示为 encoder 六层自注意力层的第五层中,making 这个单词的多头自注意力分布(不同的颜色代表不同的头,颜色的深浅代表注意力大小)。making 这个单词的自注意力分布似乎倾向于构成短语 making ... more difficult

    • 如下图所示为 encoder 六层自注意力层的第五层中的两个注意力头。上半部分为 head 5 的完全的注意力分布(每个单词),下半部分为单词 itshead 5head 6 中的注意力分布。

    • 如下图所示为 encoder 六层自注意力层的第五层中的两个注意力头。

1.1.7 训练

  1. 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,词典规模大约 37000token

      BPE 算法:

      • 语料库中每个单词表示为字符的拼接,其中 </w> 表示词尾。
      • 将每个单词拆分为字符,并计算字符出现的次数。这些字符添加到词表 vocabulary
      • 寻找出现频次最高的 character pair,合并它们并添加到词表。这些合并的 character pair 称作 word-piece
      • 重复执行上一步(即,“寻找--合并”),直到词表达到指定的规模。
    • 对于 English-French,我们使用了更大的 WMT 2014 English-French 数据集,该数据集由 3600 万个 sentence pair 组成。这些句子被拆分为 token,并且使用大小为 32kword-piece vocabulary

    sentence pair 按照近似的序列长度被 batch 在一起。每个训练 batch 包含一组 sentence pair,大约共计 25ksource token25ktarget token

  2. 硬件和 schedule:我们在一台配备 8NVIDIA P100 GPU 的机器上训练我们的模型。

    • 对于我们的base model(使用我们在整篇论文中描述的超参数),每个 training step 大约需要 0.4 秒。我们对 base model 进行了总共 100k 步(即 12 小时)。
    • 对于我们的 big model (如下表最后一行所示),每个 training step 大约需要 1.0 秒。我们对 base model 进行了总共 300k 步(即 3.5 天)。

  3. 优化器:我们使用 Adam optimizer 优化器,其中 β1=0.9,β2=0.98,ϵ=109 。我们根据以下公式来调整训练期间的学习率:

    lr=1dmodel×min(1step-num,step-numwarmup-steps1.5)

    即:

    • 在开头的 warmup_steps 训练 step 中线性增加学习率。这里我们使用 warmup_steps = 4000
    • 然后根据 step number 的平方根倒数来按比例降低学习率。

    为什么除以 dmodel ?论文并未给出原因。这样做的效果是:模型越大则学习率越小。

  4. 正则化:在训练期间我们使用三种类型的正则化:

    • Residual Dropout

      • 我们将 dropout 应用于每个子层的 output,然后将其和子层的 input 相加(即残差连接)最后进行 layer normalization 。即:

        LayerNorm(x+Dropout(Sublayer(x)))
      • 此外,我们将 dropout 同时应用于 encoder stackdecoder encoder 中的 sum embedding,这个 sum embeddingembeddingpositional encoding 相加得到的。

      对于 base model,我们使用 dropout ratePdrop=0.1

    • Label Smoothing:在训练期间,我们采用了 ϵls=0.1label smoothing 。这会损害 perplexity 指标,因为模型会变得更加不确定,但是会提高准确率指标和 BLEU 得分。

      语言模型困惑度perplexity 的定义为:

      perplexity(W)=1P(w1,w2,,wn)n

      其中 W 为一个序列,P(W)=P(w1,w2,,wn) 为这个序列的概率。

1.2 实验

1.2.1 机器翻译

  1. 配置(所有超参数是在对验证集进行实验之后再选择的):

    • base model 使用单个模型,该模型是通过平均最后 5checkpoint 获得的,其中 checkpoint 是以 10 分钟的间隔写入的。 big model 也是会用单个模型,但是它平均了最后 20checkpoint

      checkpoint 平均指的是参数值取平均(而不是输出结果取平均)。

    • 我们使用 beam size = 4length penalty α=0.6beam search

      在解码器的每个位置始终生成 beam size 个候选,直到出现结束标记。α 用于惩罚较短的生成序列:

      score(w1,,wn)=1nα×perplexity(W)

      其中 n 为序列 W=(w1,,wn) 的长度。n 越大则修正后的困惑度越小。

    • 我们将推断期间的最大输出长度设置为 input length + 50 ,但是在可能的情况下输出会提前结束。

  2. 下表总结了我们的结果,并将我们的翻译质量和训练成本,与文献中的其它模型架构进行了比较。我们通过将训练时间、使用的 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-artBLEU 得分 28.4big transformer model8P100 GPU 上训练耗时 3.5 天。

      甚至我们的 base model 也超越了所有先前发布的模型和 ensembles ,并且 base model 的训练成本仅仅是任何其它有竞争力的模型的一小部分。

      bilingual evaluation understudy: BLEU 评估机器翻译质量。其思想是:机器翻译结果越接近专业人工翻译的结果,则越好。

      BLEU=BP×exp(n=1Nwn×logpn)

      其中:

      • BP 为句子简短惩罚Brevity Penalty,迫使机器翻译的长度与参考翻译的长度接近。

        BP={1if c>rexp(1r/c)else

        其中 c 为机器翻译的长度,r 为参考翻译的长度。

      • N 代表机器翻译和参考翻译之间的 n-gram 匹配最大的 n 值。通常 1-gram 匹配结果代表有多少个单词被独立地翻译出来,而 2-gram 以上的匹配结果代表翻译的流畅度。通常 N 最大为 4

      • wn 代表 n-gram 匹配结果的权重,通常选择 wn=1N

      • pn 衡量机器翻译和参考翻译之间 n-gram 匹配结果,即 n-gram precision

        pn=CCandidatesgramnCcount-clip(gramn)CCandidatesgramnCcount(gramn)

        其中:

        • Candidates 表示翻译的所有句子的集合,C 表示某个翻译的句子,gramn 表示某个 n-gram 项。

        • count() 表示某个 n-gram 项在所有翻译结果中出现的次数。

        • count-clip() 表示某个 n-gram 项在所有翻译结果中出现的截断次数:

          count-clip(gramn)=min(count(gramn),ground-truth(gramn))

          ground-truth(gramn)n-gram 项在参考译文中出现的次数。因此这里的“截断”指的是被 ground-truth频次所截断。

    • WMT 2014 English-to-French 翻译任务:big transformer model 达到了 41.0BLEU 得分,优于先前发布的所有单一模型,训练成本小于先前 state-of-the-art 模型的 1/4

      注意:为 English-to-French 而训练的Transformer big model 使用 dropout ratePdrop=0.1 ,而不是 0.3

      41.0 对不上?从下表结果来看应该是 41.8

1.2.2 模型变体

  1. 为了评估 Transformer 不同组件的重要性,我们以不同的方式改变了我们的 base model,并衡量了验证集(newstest2013 )上 English-to-German 翻译性能的变化。我们使用了上一节中描述的 beam search,但是没有使用 checkpoint 平均。实验结果如下表所示。

    • (A) 行中,我们改变了注意力头的数量以及注意力 key, value 的维度,并保持计算量不变。可以看到,虽然单头注意力要比最佳配置差 0.9 BLEU,但是如果 head 数量过多效果也会下降。

    • (B) 行中,我们观察到降低注意力 key 的维度 dk 会损害模型质量。这表明确定 compatibility function 并不容易确定,采用比内积更复杂的 compatibility function 可能是有益的。

      compatibility function 就是计算未归一化注意力分的函数 si,j=qikj

      此外,降低 dk 降低了模型容量(模型参数从 65M 降低到 60M58M)。

    • (C) 行中,我们观察到,正如预期的那样,更大的模型更好。

    • (D) 行中,我们观察到,dropoutlabel smoothing 有助于缓解过拟合,但是需要选取合适的 dropout ratelabel smoothing rate

    • (E) 行中,我们用可学习的 positional embedding 代替固定的正弦 positional encoding ,并观察到与 base model 几乎相同的结果。

1.2.3 English Constituency Parsing

  1. 为了评估 Transformer 是否可以泛化到其它任务,我们对英语成分分析 English constituency parsing 任务进行了实验。这项任务提出了特定的挑战:output 受到强烈的结构性约束,并且明显比 input 更长。此外,RNN sequence-to-sequence model 无法在小数据领域获得 state-of-the-art 结果。

  2. 我们在Penn TreebankWall Street Journal: WSJ 部分(大约 40k 个训练句子)上训练了一个 dmodel=10244transformer 。对于该任务,我们使用 16k token 的词典 vocabulary

    我们还在半监督环境中训练了相同配置的 transformer ,使用来自大约 1700 万个句子的更大的 high-confidenceBerkleyParser 的数据集。对于该任务,我们使用 32k token 的词典。

    我们仅在 Section 22 验证集上进行了少量实验来选择以下超参数:dropoutattentionresidual 上的 dropout)、学习率、beam size 。所有其它超参数保持与 English-to-German base translation model 相同。在推断期间,我们将最大输出长度增加到 input length + 300 。对于 WSJ only 和半监督任务,我们都使用 beam size = 21α=0.3

    实验结果如下表所示,可以看到:

    • 尽管缺乏对特定任务的调优,但是我们的模型表现得非常好,比除了 Recurrent Neural Network Grammar 之外的所有先前报告的模型得到了更好的结果。
    • RNN sequence-to-sequence model 相比,即使仅在具有 40k 个句子的 WSJ 训练集上进行训练,Transformer 的性能也超越了 Berkeley- Parser

二、Universal Transformer[2018]

  1. Transformer 这样的 parallel-in-time 架构解决了RNN 的一个重要缺陷:RNN 固有的序列计算sequential computation 阻止了输入序列中各元素的并行化。同时 Transformer 也解决了序列较长时梯度消失的问题。Transformer 模型完全依靠自注意力机制。这种机制不仅可以直接并行化,而且由于每个symbolrepresentation 也直接访问到所有其他symbolrepresentation ,这导致了整个序列中有效的全局感受野 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 序列中所有 symbolrepresentation ,然后跟着一个深度可分离卷积depth-wise separable convolutionposition-wise fully-connected layer (在所有positiontime-step 中共享),如下图所示。作者还添加了一个动态的逐位置停机机制 per-position halting mechanism ,允许模型动态选择每个symbol 所需的refinement step 数量,并首次表明这样的条件计算机制conditional computation mechanism 事实上可以提高几个较小的结构化的算法和语言推理任务的准确性(尽管它在机器翻译任务上的结果略有下降)。

    论文强有力的实验结果表明:Universal Transformer 在广泛的任务中的表现优于 TransformerLSTM

  2. 相关工作:

    • 当运行一个fixed 数量的 step 时,Universal Transformer 相当于一个跨所有层共享参数的 multi-layer Transformer 。这在一定程度上类似于Recursive Transformer ,它在不同的深度上共享了self-attention layer 的权重。

      另一种可能更 informative 的描述,Universal Transformer 的方式是:作为一个并行的 RNN block (每个symbol 一个RNN block ,共享参数)来同时演化每个symbolhidden state (通过在每个 step 关注前一个 stephidden state 序列来产生)。这样,它与 Neural GPUNeural Turing Machine 等架构有关。因此,Universal Transformer 保留了原始 feed-forward Transformer 模型有吸引力的计算效率,但增加了RNNrecurrent inductive bias。此外,利用动态停机机制,Universal Transformer 可以根据输入数据自动选择 processing step 的数量。

    • Universal Transformer 和其他序列模型之间的联系从架构上看是显而易见的: 如果我们将recurrent step 限制为一个,它将是一个Transformer

      但是,考虑 Universal TransformerRNN 以及其他网络之间的关系更为有趣,在这些网络中,递归发生在时间维度上。表面上看,这些模型似乎密切相关,因为它们也是递归的。但有一个关键的区别:

      • RNN这样的time-recurrent模型不能在递归步骤中访问所有的记忆 memory (只能访问最近的一个记忆)。这使得它们在计算上更类似于自动机automata,因为在递归部分唯一可用的记忆是一个固定尺寸的状态向量fixed-size state vector
      • 另一方面,Universal Transformer 可以关注整个previous layer,允许它在recurrent step 中访问所有的记忆。
    • 给定足够的内存,Universal Transformer 在计算上是通用的,即它可以模拟任何图灵机Turing machine,从而解决了标准Transformer模型的一个缺陷。

      除了在理论上有吸引力外,我们的结果表明:这种增加的表达性也导致了在几个具有挑战性的序列建模任务上的准确性的提高。这缩小了在机器翻译等大规模任务上与Neural Turing MachineNeural GPU等模型之间的差距。

      为了说明这一点,我们可以将 Universal Transformer 简化为一个 Neural GPU。忽略decoder 并将 self-attention 模块(即带有残差连接的self-attention)简化为恒等映射,并且假设转移函数是卷积。如果我们将循环step的总数 T 设定为输入长度,我们得到的正是一个Neural GPU

      Universal TransformerNeural Turing Machine 之间也存在类似的关系。Neural Turing Machine 每个 stepsingle read/write 操作可以由 Universal Transformer 的全局的、并行的representation revision来表达。

    • 另一个相关的模型架构是端到端记忆网络Memory Network 。然而,与端到端记忆网络相比,Universal Transformer 使用的 memory 对应于与其输入或输出的individual position 对齐的状态。此外,Universal Transformer 遵循 encoder-decoder 的配置,在大规模 sequence-to-sequence 的任务中实现了有竞争力的性能。

  3. Universal Transformer将以下关键属性结合到一个模型中:

    • Weight sharing:我们用一种简单的权重共享形式来扩展Transformer ,从而在inductive bias 和模型表达力之间取得了有效的平衡。

      由于权重共享,所以 Universal Transformer 的模型大小要远远小于标准的 Transformer

    • Conditional computation:我们为Universal Transformer 配备了动态停机能力。与固定深度的 Universal Transformer 相比,它显示了更强的结果。

2.1 模型

  1. Universal Transformer 是基于常用的encoder-decoder 架构,它的encoderdecoder都是通过将一个 RNN 分别应用于输入和输出序列的每个位置的 representation 来操作的,如下图所示。然而,与常规 RNN 不同,Universal Transformer 不是在序列中的 position 上递归(沿着宽度方向),而是在每个 positiondepth 上递归(沿着高度方向)。

    在每个 recurrent time-step,每个位置的 representation 在两个 sub-step 中被并行地修改:

    • 首先,使用自注意力机制在序列中的所有位置上交换信息,从而为每个位置生成一个 vector representation ,该 representation 是由前一个time step的所有其他位置的representation 融合而来。
    • 然后,在每个位置独立地对自注意力机制的输出应用一个转移函数(跨positiontime 共享)。

    由于递归可以应用任何次数,这意味着Universal Transformer 可以有可变的深度(per-symbol processing step 的数量)。相比之下,Transformerstacked RNN 只有固定的深度。

    更完整的架构如下图所示:

2.1.1 Encoder

  1. 给定一个长度为 m 的输入序列,我们定义 H(0)Rm×dembedding 矩阵,它的第 i 行表示输入序列位置 isymboldembedding 向量 hi(0)Rd,0i<m 。 然后 Universal Transformer 通过应用Transformer的多头内积自注意力机制 multi-headed dot-product self-attention mechanism ,在 step t 为所有 m 个位置并行地迭代计算 representation H(t),然后是一个转移函数transition function 。我们还在这些功能块function block周围添加了残差连接,并应用了 dropoutlayer normalization

  2. 更具体地说,我们使用缩放的内积注意力:

    Attention(Q,K,V)=softmax(QKd)V

    其中 QRm×d,KRm×d,VRm×d,QKRm×m,Attention(Q,K,V)Rm×d

    我们使用有 k 个头的多头自注意力版本:

    MultiHeadSelfAttn(H(t))=Concat(head1,head2,,headk)WOheadi=Attention(H(t)WiQ,H(t)WiK,H(t)WiV)

    其中:WQRd×(d/k),WKRd×(d/k),WVRd×(d/k),WORd×d

  3. step tUniversal Transformer 然后计算所有 m 个输入位置的修正的 representation H(t)Rm×d,即:

    H(t)=LayerNorm(A(t)+Transition(A(t)))A(t)=LayerNorm((H(t1)+P(t))+MultiHeadSelfAttn(H(t1)+P(t)))

    LayerNorm 作用在残差连接之后,而不是之前。

    其中:

    • Transition 为转移函数。根据任务,我们使用两种不同的转移函数之一:要么是可分离的卷积、要么是前馈神经网络(由两个线性投影以及中间的的单个 Relu 激活函数组成,逐位置应用)。

    • P(t)Rm×d 为固定的、常量的、二维的(位置维度、时间维度)的 coordinate embedding,通过计算正弦的 position embedding 向量获得:

      pi(t)=(pi,1(t),,pi,d(t))Rdpi,2j(t)=sin(i100002j/d)+sin(t100002j/d)pi,2j+1(t)=cos(i100002j/d)+cos(t100002j/d)

      i 给出了位置维度的信息,t 给出了时间维度的信息。

    经过 Tstep (每个 step 并行地更新输入序列的所有位置),Universal Transformer encoderfinal outputH(T)Rm×d

2.1.2 Decoder

  1. decoderencoder 的基本递归结构相同。然而,在self-attention 函数之后,decoder 额外还使用多头内积注意力函数来关注 encoderfinal representation H(T),但query Q 是从 decoder representation 投影得到,而 key Kvalue V 是从 encoder final representation 投影得到。

    是否可以对 decoderencoder 应用不同的 T ?理论上并没有约束强制要求 decoderencoder 迭代相同的次数。

  2. Transformer 模型一样,Universal Transformer 是自回归的。

    • 在生成阶段,Universal Transformer 一次产生一个 symbol 的输出,其中 decoder 仅仅依赖已经产生的输出位置。
    • 在训练阶段,decoder 的目标输出就是输入左移一个位置。

    最后,per-symbol target distribution 是通过应用线性变换 ORd×|V|final decoder state 映射到 output vocabulary V ,然后通过 softmax 进行按行的归一化:

    p(yposy[1:pos1],Hencoder(T))=softmax(Hdecoder(T)O)Rn×|V|

    其中:n 为输出序列的长度。

    这里我们用 Hencoder,Hdecoder 来区分 encoderdecoder 的最后一层的 representationy[1:pos1],Hencoder(T) 都是 decoder 的输入。

  3. 为了从模型中生成:

    • 首先, encoder 要对输入序列运行一次前向传播。
    • 然后重复运行decoder 从而消耗所有已经生成的symbol ,同时为下一个输出位置的symbol 生成一个额外的分布。然后,我们通常对最高概率的symbol 进行采样从而作为next symbol (用于decoder 的下一轮 RNN 迭代)。

    如果是训练期间,那么 decoder 每一轮迭代都使用 decoder 的目标输出右移一位作为 decoder input 。但是在推断期间,decoder 的目标输出不存在,因此需要用到 decoder 在每一轮的输出。

2.1.3 动态停机

  1. 在序列处理系统中,某些 symbol 通常比其他 symbolambiguous 。因此,将更多的处理资源分配给这些更ambiguoussymbol 是合理的。Adaptive Computation Time: ACT 是一种机制,用于动态调节标准 RNN 中处理每个 input symbol 所需的计算步(称为 ponder time ),它基于模型在每个step 预测的标量停机概率 halting probability

    受此启发,Universal Transformer 为每个位置(即每个 per-symbol self-attentive RNN)添加了一个动态 ACT 停机机制。一旦某个 symbolrecurrent block 停机,它的状态就被简单地复制到下一步,直到所有的block 都停机,或者我们达到最大的 step 数量 T 。然后,encoderfinal output 是以这种方式产生的最后一层 representation

2.2 实验

2.2.1 BABI 问答

  1. bAbi question answering 数据集:由 20 个不同的任务组成,其目标是在给定一些英文句子的前提下回答一个问题,这些给定的句子编码了潜在的 multiple supporting facts

    这么做的目的是:通过要求对每个故事中呈现的语言事实进行某种类型的推理,来衡量各种形式的语言理解 language understanding

  2. 为了对输入进行编码,与《Tracking the world state with recurrent entity networks》类似:

    • 首先,我们通过应用一个学到的乘性的 positional mask 到每个单词的 embedding ,并 sum 聚合所有单词的 embedding ,从而编码故事中的每个 fact

      因为每个 fact 包含多个单词,所以需要对 word embedding 进行聚合从而得到 fact emebdding

    • 然后,我们以同样的方式嵌入问题,然后用这些 fact embeddingquestion embedding 馈入 Universal Transformer

  3. 模型可以在每个任务上单独训练(train single)或在所有任务上联合训练(train joint)。下表总结了我们的结果。我们用不同的初始化运行了 10次,并根据验证集上的表现挑选出最佳模型。

    可以看到:Universal Transformer和带有动态停机的Universal Transformer 在所有任务中的平均误差和失败任务数方面都取得了SOTA 的结果。

    括号中的指标代表失败任务数,如 (10/20) 表示在 20 个任务中失败了 10 个。任务失败指的是错误率大于 5%

  4. 为了更好地理解模型的工作,我们分析了这项任务的注意力分布和平均ACT ponder time 。下图为注意力权重在不同 step 上的可视化,左侧不同的颜色条表示不同 head 的注意力权重(一共4head),即,列代表 head 、行代表句子。

    • 一个 supportive fact 的问题:

    • 两个 supportive fact 的问题:

    • 三个 supportive fact 的问题:

    结论:

    • 首先,我们观察到注意力分布开始时非常均匀,但在后面的step 中,围绕着回答每个问题所需的正确的supporting fact,注意力分布逐渐变得尖锐,这确实非常类似于人类如何解决这个任务。

    • 其次,通过动态停机我们观察到:需要三个supporting fact 的任务的所有位置的平均 ponder time(即per-symbol recurrent processing chain 的深度(3.8±2.2)高于只需要两个supporting fact 的任务(3.1±1.1),而这又高于只需要一个supporting fact 的任务(2.3±0.8)。这表明,该模型根据回答问题所需的supporting fact 的数量来调整processing step的数量。

    • 最后,我们观察到:在只需要一个supporting fact 的任务中,不同位置的 ponder time 直方图与需要两个/三个supporting fact 的任务相比更加均匀。

      同样,在需要两个supporting fact 的任务与需要三个supporting fact 的任务也是如此。特别是对于需要三个 supporting fact 的任务,许多位置已经在第1步或第 2 步停机了,只有少数位置需要更多的step (如下图所示)。这一点特别有意思,因为在这种情况下,故事的长度确实要高得多,有更多不相关的fact ,而模型似乎成功地学会了以这种方式忽略这些fact

2.2.2 主谓一致

  1. 主谓一致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 更高。

2.2.3 LAMBADA 语言建模

  1. LAMBADA 任务:是一项语言建模任务,在给定前面 45 个句子的条件下预测一个缺失的目标词。

    该数据集是专门设计的,当显示完整的上下文时,人类能够准确地预测目标词,但当只显示出现该词的目标句时,则人类无法预测目标词。因此,它超越了语言建模,并测试了模型在预测目标词时纳入更长上下文的能力。

    该任务在两种情况下被评估:

    • 语言建模(标准设置,更具挑战性):模型只是在训练数据上进行next-word prediction 的训练,并在测试时对目标词进行评估。

    • 和阅读理解:目标句子(减去最后一个词)被用作 query ,用于从上下文句子中选择目标词(即,检索式的方法)。

      请注意,目标词在81% 的时间里出现在上下文中,这使得这种设置更加简单。然而,在其余19% 的情况下,这个任务是不可能完成的(因为目标词不存在上下文中)。

  2. 实验结果:Universal Transformer 在语言建模和阅读理解设置中都取得了SOTA 结果。

    我们 fixed Universal Transformer 结果使用了6个step (即,T=6 )。然而,带有动态停机的最佳 Universal Transformer 的平均step 数为 8.2±2.1

    为了看看动态停机是否仅仅因为采取了更多的step 而做得更好,我们训练了两个 fixed Universal Transformer ,分别用 T=8T=9(见最后两行)。有趣的是,与 T=6 的模型相比,这两个模型取得了更好的结果,但并没有超过动态停机的 Universal Transformer 的表现。

    这使我们相信:动态停机可以作为模型的一个有用的正则器,通过激励一些input symbol 以较小的 step 数量,同时允许其他input symbol 以更多的计算。

2.2.4 算术任务

  1. 我们在三个算术任务上训练 Universal Transformer ,即 CopyReverse 和(整数)加法,都是在由十进制符号(0 ~ 9)组成的字符串上。在所有的实验中,我们在长度为40 的序列上训练模型,在长度为400的序列上进行评估。 我们使用从randomized offset 开始的位置来训练 Universal Transformer (训练样本需要选择从哪里开始切分,因为输入语料库可以视为一个超长的文本),以进一步鼓励模型学习position-relative 的转换。

    结果如下表所示, Universal Transformer 在所有三个任务上的表现都远远超过了 LSTM 和常规的 Transformer

2.2.5 Learnung To Execute: LTE

  1. 作为另一种 sequence-to-sequence learning 问题,我们评估表明模型学习执行计算机程序的能力的任务。这些任务包括程序评估program evaluation 任务(编程、控制和加法),以及记忆memorization 任务(copydoublereverse)。

    结果如下表所示, Universal Transformer 在所有任务上的表现都远远超过了 LSTM 和常规的 Transformer

2.2.6 机器翻译

  1. 我们使用与 Transformer报告中相同的设置在 WMT2014 英德翻译任务上训练 Universal Transformer ,以评估其在大规模 sequence-to-sequence 任务上的性能。结果总结如下。采用前馈神经网络(而不是可分离卷积)作为转移函数且没有动态停机的 Universal TransformerTransformer 提高了 0.9 BLEU

    根据作者在引言部分的介绍,如果采用动态停机,则会导致 Universal Transformer 的效果更差。

三、Transformer-XL[2019]

  1. 尽管 RNN 适应性很广,但是,由于梯度消失和爆炸导致 RNN 很难优化。在LSTM 中引入门控和梯度裁剪技术可能不足以完全解决这一问题。从经验上看,以前的工作发现:LSTM语言模型平均使用200context 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 segmentmemory ,在前后 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 更好结果的自注意力模型。

  2. 相关工作:为了捕获语言建模中的长距离上下文,一系列工作直接将更宽上下文的 representation 作为 additional input 输入到网络中。现有的工作有人工定义 context representation 的,也有依靠从数据中学到的document-level topic

    例如,可以把非常长上下文的 sum word embedding 作为额外的输入。

    更广泛地说,在通用序列建模中,如何捕获长期依赖性一直是一个长期研究问题。从这个角度来看,由于 LSTM 的普适性,人们在缓解梯度消失问题上做了很多努力来有助于优化,包括更好的初始化、辅助损失、增强的记忆结构memory structure、以及其他的修改RNN内部结构的方法。与他们不同的是,我们的工作是基于 Transformer 架构的,并表明语言建模作为一个现实世界的任务,受益于学习长期依赖性的能力。

3.1 模型

  1. 给定一个 token 序列 x=(x1,,xT),语言建模 language modeling 的任务是估计联合概率 P(x) 。这个联合概率通常被自回归地分解为:

    P(x)=tP(xtx<t)

    其中 x<t 为序列截止到时刻 t (不包含)的上下文 x<t=(x1,,xt1)

    在这项工作中,我们坚持采用标准的神经网络方法来建模条件概率。具体而言:

    • 一个神经网络将上下文 x<t 编码到一个固定维度的隐状态 hidden state 中。
    • 然后将隐状态(一个向量)与每个单词的 word embedding相乘,从而得到一组logit
    • 将这组 logit 馈入 softmax 函数,从而得到关于 next token 的离散概率分布。

3.1.1 普通的 Transformer

  1. 为了将 Transformerself-attention 应用于语言建模,核心问题是如何训练Transformer 从而将一个任意长的上下文有效地编码为固定尺寸的representation

    理想的方法是用一个无条件的 Transformer 来处理整个上下文序列,但是由于资源有限,这通常是不可行的。

    一个可行但粗糙的近似方法是:将整个语料库分割成规模可控的较短的 segment,只在每个 segment内训练模型,忽略之前 segment的所有上下文信息。我们称之为普通的 Transformer 模型,并在下图 (a) 中可视化。在这种训练范式下,信息在前向传播和反向传播过程中都不会跨 segment 流动。

    使用固定长度的上下文有两个关键限制:

    • 首先,最大依赖长度被segment 长度所限。在 character-level 语言建模中,segment 长度为几百。
    • 其次,简单地将一个序列分割成固定长度的segment 将导致上下文碎片化问题。

    在评估过程的每一步,普通的 Transformer 模型也会消耗相同长度的segment (与训练 segment 长度相同),但仅在 segment 的最后一个位置做一个预测。然后在下一步,该segment 只向右移动了一个位置,而新的 segment 必须从头开始计算,如图 (b) 所示。这个过程确保了每个预测都利用了最长的上下文,同时也缓解了训练中遇到的上下文碎片化问题。然而,这种评估过程是非常昂贵的。我们将表明:我们提出的架构能够大幅提高评估速度。

    注意:训练阶段和评估阶段有两个地方不一致:

    • segment 移动的步长不一致:训练期间右移 L 个位置( L 等于 segment 长度),验证期间右移一个位置。
    • 预测位置不一致:训练期间对 segment 的每个位置进行预测,而验证期间仅对 segment 的最后一个位置进行预测。这是为了和 segment 移动步长相匹配,使得每个位置仅进行一次预测。

    之所以训练期间 segment 移动步长更大,个人猜测是为了降低训练样本量。假设 segment 长度固定为 L ,如果移动步长为 L ,则每个训练 epoch 中每个 token 会出现一次;如果移动步长为 1,则每个训练 epoch 中每个 token 会出现 L 次。

3.1.2 Segment-Level Recurrence

  1. 为了解决使用固定长度上下文的局限性,我们建议在 Transformer 架构中引入一个递归机制。在训练过程中,固定前一个segment 计算好的hidden state 序列,并在处理 next segment 时作为扩展上下文extended context 来重用,如下图 (a) 所示(图中的绿色路径表示扩展上下文)。

    尽管反向传播仍然保持在一个 segment 内,但这个额外的输入(即,前一个 segmenthidden state 序列 )允许网络利用历史信息,导致了对长期依赖性的建模能力,并避免了上下文碎片化。

    注意:

    • 在训练过程中,前一个 segmenthidden state 序列被冻住,不再更新它们的状态(前向传播)以及梯度(反向传播)。
    • 对于前一个 segment ,需要考虑每一层的 hidden state 序列(而不仅仅是最后一层)。

  2. 具体而言,假设长度为 L 的连续的两个 segment 为:

    xτ=(xτ,1,,xτ,L),xτ+1=(xτ+1,1,,xτ+1,L)

    xτ 的第 nhidden state 序列为: Hτ(n)=(hτ,1(n),,hτ,L(n))RL×d,其中第 i 行表示位置 ihidden state hτ,i(n)Rddhidden state 维度。那么 xτ+1nhidden state 序列的计算过程为:

    • 拼接第 n1 层的上下文:H~τ+1(n1)=SG(Hτ(n1))Hτ+1(n1) ,其中: SG() 表示 stop-gradient 表示沿着序列长度的维度拼接两个 hidden state 序列。

    • 生成 query, key, value

      Qτ+1(n)=Hτ+1(n1)WqKτ+1(n)=H~τ+1(n1)WkVτ+1(n)=H~τ+1(n1)Wv

      注意:query 用当前 segment 的上下文,而key/value 用扩展的上下文。这是因为我们只需要计算当前 segmentrepresentation,这对应于 query 的形状。

    • 计算第 n 层的 hidden state 序列:Hτ+1(n)=Transformer-Layer(Qτ+1(n),Kτ+1(n),Vτ+1(n))

    与标准的 Transformer 相比,关键的区别在于:key Kτ+1(n)value Vτ+1(n) 是根据扩展上下文 H~τ+1(n1) 来计算的,而 Hτ(n1) 是从前一个 segment 缓存的。我们通过上图 (a) 中的绿色路径来强调这一特殊设计。由于这种递归机制应用于语料库的每两个连续的 segment ,因此它在hidden state中创造了一个segment-level 的递归。因此,有效利用的上下文可以远远超过两个segment

    这对于 batch 的组织是一个挑战,要求前后两个样本之间是连续的,并且不能随机选择样本。

  3. 请注意,连续两个 segment 之间,Hτ+1(n)Hτ(n1)之间的递归依赖关系对每一层都右移了一位(整体右移一位),这与传统的RNN 语言模型中的同层递归不同。因此,最大可能的依赖长度与网络层数、segment 长度呈线性增长,即 O(N×L),如上图 (b) 中的阴影区域所示,这里 N 为网络层数、Lsegment 长度。

    hτ+1,i(n) 依赖于 {hτ,i+1(n1),,hτ,L(n1),hτ+1,1(n1),hτ+1,i(n1)} ,即第 n1 层中:序列 xτ 的位置 i+1 到位置 L 、以及序列 xτ+1 中的位置 1 到位置 i ,一共 L 个位置。

    对于同层递归,则 hτ+1,i(n) 依赖于 {hτ,1(n1),,hτ,i(n1),hτ+1,1(n1),hτ+1,i(n1)}

  4. segment-Level 递归类似于截断的 BPTT (用于训练 RNN 语言模型)。然而,与截断的BPTT不同的是:我们的方法缓存了hidden state 的一个序列,而不仅仅是最后一个 hidden state ,并且应该与相对位置编码技术一起应用。

    注意,segment-Level 递归对于每一层,都需要缓存 hidden state 的一个序列。

  5. 除了实现超长上下文和解决上下文碎片化问题,递归方案带来的另一个好处是评估速度明显加快。具体而言,在评估过程中,先前的segmentrepresentation 可以被重用,而不是像普通 Transformer 那样从头开始计算。在我们对enwiki8的实验中,Transformer-XL在评估过程中比普通 Transformer 模型快 1800 多倍。

  1. 最后,请注意,递归方案不仅限于前面一个segment。理论上,我们可以在GPU内存允许的范围内缓存尽可能多的 previous segments,并在处理当前 segment 时复用所有这些 segment 作为额外的上下文。因此,我们可以缓存一个长度为 Mold hidden state 序列,跨越(可能)多个 segment ,并将它们称为 memory Mτ(n)RM×d

    总的上下文长度为 L+M

    在我们的实验中,我们在训练时将 M 设置为等于segment 长度 L ,在评估时将 M 设为 L 的若干倍。

    segment 长度 L 用于划分 segment,上下文长度 M 用于建模上下文,二者的作用不同。

    这里在训练期间和评估期间采用不同的上下文长度,会不会影响评估效果?毕竟训练数据分布和测试数据分布人为地导致了不一致(总的上下文长度不一致)。

3.1.3 Relative Positional Encoding

  1. 为了重用前面 segmenthidden state ,有一个关键的技术挑战我们还没有解决:如何保持位置信息的一致性?

    在标准的 Transformer 中,序列顺序的信息是由一组位置编码positional encoding 来提供的,表示为 URLmax×d,其中第 iui 对应于segment 内第 i 个绝对位置,Lmax 定义了最大可能的建模长度。如果我们简单地将这种位置编码应用于我们的递归机制,那么 hidden state 序列的计算方式为:

    Hτ+1=f(Hτ,Exτ+1+U1:L) Hτ=f(Hτ1,Exτ+U1:L)

    其中:

    • ExτRL×dsegment xτword embeddingf() 为一个变换函数,U1:LU 的前 L 行组成的矩阵。
    • Hτ 作为计算 Hτ+1 的扩展上下文,Exτ+1+U1:L 作为计算 Hτ+1input

    LmaxL ,这是因为可能需要在测试期间泛化到 unseen 的序列长度。

    注意,ExτExτ+1都与相同的位置编码 U1:L 相关。因此,该模型没有信息来区分任何 xτ,jxτ+1,j之间的位置差异,1jL,从而导致了纯粹的性能损失。

    为解决这个问题,基本的想法是相对位置编码。从概念上讲,位置编码给了模型一个关于如何收集信息的时间线索或 "bias",也就是说,关注attend 哪个地方。以相对的方式来定义时间bias 是更直观和更可泛化的。例如,当一个query 向量 qτ,i关注 key 向量 {kτ,j}ji时,它不需要知道每个key 向量的绝对位置来识别segment 的时间顺序,只要知道每个key 向量 kτ,jqτ,i 之间的相对距离(即 ij )就足够了。

    实际上,人们可以创建一组相对位置编码 RRLmax×d ,其中第 iriRd 表示两个位置之间的相对距离为 i 。通过将相对距离动态地注入到 attention scorequery 向量可以很容易地根据不同距离区分出 xτ,jxτ+1,jrepresentation,使状态重用机制变得可行。同时,我们不会丢失任何时间信息,因为绝对位置可以从相对距离中递归恢复。

  2. 此前,相对位置编码的想法已经在机器翻译和音乐生成任务中得到了探索。在这里,我们提供了一种不同的编码形式,它不仅与绝对位置编码有一一对应关系,而且在经验上也具有更好的泛化性。

    • 首先,在标准的 Transformer中,同一个 segment 中的注意力得分可以分解为:

      ai,jabs=(Wq(exi+ui))(Wk(exj+uj))=exiWqWkexj(a)+exiWqWkuj(b)+uiWqWkexj(c)+uiWqWkuj(d)

      其中:exixiembedding 向量,ui 为位置 ipositional embeddingWqquery 的投影矩阵,Wkkey 的投影矩阵。

    • 然后,按照仅依赖于相对位置信息的思路,我们建议重写上述四项为:

      ai,jrel=exiWqWk,Eexj(a)+exiWqWk,Rrij(b)+uWk,Eexj(c)+vWk,Rrij(d)

      一种更简单直接的改写方式为:ai,jrel=(Wq(exi+rij))(Wk(exj+rji)) 。可以通过实验来验证效果。

      • 第一个改变是用相对位置编码 rij 来取代 (b)(d) 中的绝对位置编码 uj。这实质上反映了一个先验,即只有相对距离才是最重要的。注意,R是一个正弦编码矩阵,没有可学习的参数。

        实际上,绝对位置在一些任务中也同样重要,例如:句子里的第一个位置和最后一个位置都比较重要,可能包含特殊的语义。

      • 其次,我们引入一个可训练的参数 uRd 来取代 (c) 中的 (Wqui)。在这种情况下,由于 query 向量对所有的 query position 都是相同的,因此这表明无论 query position 如何,对不同的单词的 attentive bias 应该保持不变。

        类似地,我们引入一个可训练的参数 vRd 来取代 (d) 中的 (Wqui)。这表明无论 query position 如何,对不同相对位置的 attentive bias 应该保持不变。

        在绝对位置编码中,query 的位置、key 的位置都很重要,因此需要两个 positional embedding ui,uj

        在绝对位置编码中,只有 querykey 的相对位置的编码才重要,因此只有一个 positional embedding ri,j

      • 最后,我们特意将两个权重矩阵 Wk,EWk,R 分开,分别产生 content-basedlocation-basedkey 向量。

        uv 也分别对应于 content-basedlocation-basedattentive bias 向量。

  3. 在相对位置编码中,每一项都有直观的含义:

    • exiWqWk,Eexj : 表示基于内容的寻址 addressing
    • exiWqWk,Rrij :捕获内容相关的 positional bias
    • uWk,Eexj:捕获全局的 content bias
    • vWk,Rrij:捕获全局的 positional bias

    相比之下,《Self-attention with relative position representations》 仅考虑了 (a), (b) 两项,放弃了 (c), (d) 两个 bias 项。此外,《Self-attention with relative position representations》WkR 合并为单个矩阵可训练的矩阵 R^ ,这放弃了原始的正弦波位置编码中的 inductive bias 。相比之下,我们的 relative positional embedding R 采用正弦波公式,从而可以在评估期间泛化到训练期间更长的序列上。

  4. segment-level 递归与我们提出的 relative positional embedding 相结合,我们最终得到了Transformer-XL架构。

    注意,为了计算所有的 pair (i,j)Wk,Rrij ,其计算代价为 O(L2) 。我们在论文附录中展示了一个简单的计算过程,它将成本降低到 O(L)

    但是为了计算 ai,jrel ,仍然需要 O(L2) 的计算复杂度。

3.2 实验

3.2.1 实验结果

  1. 这里比较不同数据集上语言建模的效果,评估指标为困惑度 perplexity: PPL

  2. WikiText-103 数据集:现有最大的具有长期依赖性的 word-level 语言建模 benchmark 。它包含了来自 28K 篇文章的 1.03 亿个训练 token ,每篇文章的平均长度为 3.6Ktoken ,这可以测试建模长期依赖的能力。

    我们将训练时的注意力长度 (即,L+M )设定为 384 ,评估时设定为1600 。如下表所示,Transformer-XL 超越了之前的 SOTA ,将困惑度从 20.5 降低到 18.3

  3. enwik8 数据集:包含1 亿字节的未处理的维基百科文本。

    24 层的 Transformer-XL 取得了新的SOTA 结果。训练时注意力长度为784,评估时注意力长度为 3800

  4. text8 数据集:包含1亿个经过处理的维基百科字符,这些字符是通过转换为小写字母并删除 [a ~ z]以及空格以外的任何字符而创建的。

    同样地,24 层的 Transformer-XL (超参数与 enwik8 中的相同)取得了新的SOTA 结果。

  5. One Billion Word 数据集:没有保留任何长期的依赖性,因为句子已经被混洗过了。因此,这个数据集主要测试了只对短期依赖关系进行建模的能力。

    尽管 Transformer-XL 主要是为了更好地捕捉长期依赖性,但它极大地提高了单个模型的 SOTA

  6. Penn Treebank数据集:包含1百万 token,用于验证模型在小数据集上的表现。

    我们对 Transformer-XL 采用了 variational dropoutweight average 。通过适当的正则化,Transformer-XL 在没有预训练和微调的模型中取得了新的 SOTA 结果。

3.2.2 消融研究

  1. 解决长期依赖问题:我们在 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 中,测试期间,困惑度随着注意力长度的增加而减少。

  2. 解决上下文碎片化问题:我们特意选择了一个不需要长期依赖的数据集,这样一来,递归机制的任何改进都可以归因于解决了上下文碎片化问题。具体来说,我们在 One Billion Word 数据集上进行实验,它只能从消除上下文碎片中受益。

    结论:

    • 即使在不需要长期依赖的情况下,使用segment-level 递归机制也能大幅提高性能。这与我们之前的讨论一致,即递归机制解决了上下文碎片化问题。
    • 我们的相对位置编码在短序列上也优于 Shaw et al. (2018)《Self-attention with relative position representations》)。

3.2.3 其它

  1. 相对有效长度 Relative Effective Context LengthTransformer-XL 具有最大的相对有效长度。

    相对有效长度的定义参考原始论文。

  2. 文本生成:在 WikiText-103 上训练。参考原始论文的附录。

  3. 评估速度:由于状态重用,Transformer-XL 在评估时可以达到相比普通 Transformer1874 倍的速度。

四、GPT1[2018]

  1. 从原始文本中有效学习的能力,可以大大缓解 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: GPTGPT 的目标是学习一种通用 representation ,该 representation 只需要很少的适配 adaption 就可以迁移到广泛的任务。作者假设可以访问大量未标记文本的语料库、以及若干个标记数据集(这些数据集包含人工标注的训练样本,即 target task )。GPTsetup 不要求这些目标任务与未标记语料库位于同一个 domain 中。GPT 采用两阶段的训练过程:

    • 首先,GPT 对未标记的数据使用语言建模目标 language modeling objective 来学习神经网络模型的初始参数。
    • 然后,GPT 使用相应的监督目标使这些参数适配目标任务。

    作者使用 Transformer 来作为GPT 的模型架构,其中 Transformer 已被证明在机器翻译machine translation、文档生成document generation、句法解析syntactic parsing等各种任务上表现出色。与 RNN 等替代方案相比,TransformerGPT 提供了更结构化的内存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 reasoningStories Cloze Test 数据集)上实现了 8.9% 的绝对提升。
    • GPT 在问答(RACE 数据集)上实现了 5.7% 的绝对提升。
    • GPT 在在文本蕴含 textual entailmentMultiNLI 数据集)上实现了 1.5% 的绝对提升。
    • GPT 在最近引入的 GLUE 多任务 benchmark 上实现了 5.5% 的绝对提升。

    作者还分析了预训练模型在四种不同 setting 下的 zero-shot 行为,并证明预训练模型为下游任务获得了有用的语言知识。

  2. 相关工作:

    • 用于 NLP 的半监督学习:我们的工作大致属于自然语言的半监督学习的类别。这种范式引起了人们的极大兴趣,并被应用到序列标记sequence labeling、文本分类等任务。

      • 最早的方法使用未标记的数据来计算 word-levelphrase-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-levelsentence-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

4.1 模型

  1. 我们的训练过程分为两个阶段:

    • 第一个阶段是在大型文本语料库上学习 high-capacity 的语言模型。
    • 第二个阶段是在下游监督目标任务上执行微调,其中我们将模型针对带标签的 discriminative task 进行适配。
  2. 无监督预训练:给定 token 集合为 U={u1,,un} 的一个无监督语料库,我们使用标准的语言建模目标来最大化似然 likelihood

    L1(U)=ilogP(uiuik,,ui1;Θ)

    其中:k 为上下文窗口 context window 的大小,Θ 为模型参数。

    条件概率 P 是采用带参数 Θ 的神经网络来建模的。这些参数通过随机梯度下降进行训练。

    这是一种自回归模型,只能看到历史信息而无法看到整个序列信息。

    在我们的实验中,我们使用 multi-layer Transformer decoder 作为语言模型,这是 transformer 的一种变体。该模型对输入的 context tokens 应用多头自注意力操作multi-head self-attention operation,然后应用 position-wise feed-forward 层从而在目标 token 上生成输出分布:

    H0=UWe+WpHl=transformer-block(Hl1),l=1,nP(u)=softmax(hn,1We)

    其中:

    • U=(uk,,u1)Rk×|V|contect vector|V| 为词表大小,uiuione-hot 向量。
    • n 为网络的层数。
    • WeR|V|×dtoken embedding 矩阵,WpRk×dpositional embedding matrixdembedding 维度。
    • hn,1Rd 表示 HnRk×d 的最后一行(代表 u1 的位置)上的 representation
  3. 监督微调:使用 L1(U) 目标来训练模型之后,我们适配参数到监督的目标任务。我们假设有一个带标签的数据集 C,其中每个样本由输入 token 的一个序列 x={x1,,xm} 、以及一个标签 y 来组成。input 经过我们的预训练模型获得 final transformer 块的激活 hn,m ,然后它被馈入一个线性输出层(参数为 Wy) 来预测 y

    P(yx1,,xm)=softmax(hn,mWy)

    这为我们提供了以下最大化目标:

    L2(C)=(x,y)ClogP(yx1,,xm)

    我们还发现,将语言建模作为微调的辅助目标来微调有助于学习,因为:该辅助目标提高监督模型的泛化能力,以及该辅助目标加速训练的收敛。这与之前的工作一致(《Semi-supervised multitask learning for sequence labeling》《Semi-supervised sequence tagging with bidirectional language models》),他们也观察到使用这种辅助目标可以提高性能。

    具体而言,我们优化了以下目标:

    L3(C)=L2(C)+λ×L1(C)

    其中 λ 为超参数,它控制不同目标之前的重要性。

    总体而言,我们在微调期间唯一需要的额外参数是 Wydelimiter tokenembeddingdelimiter token 是一些人工添加的分隔符,如 start tokenend token 等等,参考输入转换部分的内容)。

    预训练的语言模型一方面作为微调的初始化,另一方面也作为微调的辅助损失函数。

  4. Task-specific输入转换input transformation:对于某些任务(如文本分类),我们可以如上所述直接微调我们的模型。某些其它任务(如问答或文本蕴含)具有结构化输入,例如有序的 sentence pair 、或者 (document, question, answers) 三元组。由于我们的预训练模型是针对连续的文本序列进行训练的,因此我们需要进行一些修改才能将预训练模型应用于这些任务。

    先前的工作提出:将任务特定的架构作用于被迁移学习的 representation 之上(ELMo)。这种方法重新引入了大量特定于任务的定制化 customization,并且未对这些额外的架构组件使用迁移学习。相反,我们使用 traversal-style 方法(《Reasoning about entailment with neural attention》),将结构化输入转换为我们的预训练模型可以处理的有序序列。这些输入转换使我们能够避免跨任务对架构进行大量修改。我们在下面提供了这些输入转换的简要描述,下图提供了可视化说明。所有转换都包括添加随机初始化的 start token <s>end token <e>

    下图中的 Extract 就是 end token

    • 文本蕴含textual entailment :对于文本蕴含任务,我们拼接前提 premisep ) 和假设 hypothesish )的 token 序列,中间用 delimiter token$) 来分隔。

    • 相似性Similarity :对于相似性任务,被比较的两个句子之间没有固有的顺序。为了反映这一点,我们修改输入序列从而同时包含两种可能的句子排序(中间有一个 delimiter token ),并独立处理每个输入序列从而得到两个 sequence representation 。然后我们将这两个 sequence representation 执行逐元素相加,并馈入到线性输出层。

      sum 池化等价于均值池化,这里是否可以选择 max 池化?可以通过实验来验证。

    • 问答和常识推理Question Answering and Commonsense Reasoning:对于这些任务,我们被给定一个上下文的 documentz)、一个问题 q、一组可能的回答 {ak} 。我们将上下文文档、问题与每个可能的答案拼接起来,在答案之前添加一个 delimiter token 从而得到序列 [z;q;$;ak] 。 这些序列中的每个都使用我们的模型独立处理,然后通过 softmax 层进行归一化,从而在可能的答案上生成输出分布。

      注意:这里直接拼接了上下文文档和问题,并没有在它们之间添加 delimiter token。个人猜测这是为了区分问题和答案,而没必要区分问题和文档,因为问题可以作为文档的最后一句话。

4.2 实验

  1. 无监督预训练语料库:我们使用 BooksCorpus 数据集来训练语言模型。 BooksCorpus 数据集包含来自各种风格的 7k 多本 unique 的未出版书籍,包括 Adventure, Fantasy, Romance 等风格。至关重要的是,它包含长篇连续的文本,这使得生成模型能够学会以长距离信息long-range information 为条件。

    另一个候选数据集是 1B Word Benchmark ,它被一个类似的方法 ELMo 所使用的,其规模与 BooksCorpus 大致相同。但是, 1B Word Benchmarksentence level 上进行了混洗,这破坏了 long-range 结构。我们的语言模型在这个语料库上实现了非常差的 token level perplexity (即 18.4 )。

  2. 模型配置:我们的模型很大程度上遵循了原始的 transformer 工作。

    • 我们训练了一个 12 层的 ecoder-only transformer ,其中带有 masked self-attention head768 维的状态state12 个注意力头)。对于 position-wise feed-forward 网络,我们使用 3072 维的 inner state
    • 我们使用 Adam 优化器,最大学习率为 2.5×104 。在最开始的 2000step,学习率从零线性地增加到最大学习率,然后使用余弦方案退火到 0
    • 我们训练 100epoch,采用随机采样的 mini-batchbatch size = 64 ,每个样本都是包含 512 个连续 token 的一个序列。
    • 由于 layernorm 在整个模型中被广泛使用,一个简单的正态分布 N(0,0.02) 的权重初始化就足够了。
    • 我们使用一个具有 40k mergesbyte-pair encoding (BPE) vocabulary
    • 我们为 residualembeddingattention 应用 rate = 0.1dropout 从而用于正则化。我们还采用了《Fixing weight decay regularization in adam》 中提出的 L2 正则化的一个修订版,其中在所有 non bias or gain weights 上使用 w=0.01
    • 对于激活函数,我们使用 Gaussian Error Linear Unit: GELU
    • 我们使用可学习的 positional embedding 而不是原始工作中提出的正弦版本。
    • 我们使用 ftfy library 来清理 BooksCorpus 中的原始文本,规范一些标点符号和空白符,并使用 spaCy tokenizer
  3. 微调配置:除非特别说明,否则我们重用无监督预训练中的超参数配置。

    • 我们在 classifier 中加入 rate = 0.1dropout
    • 对于大多数任务,我们使用 6.25×105 的初始学习率和 batch size = 32
    • 我们使用一个线性衰减的学习率调度,warmup 超过 0.2% 的训练step
    • 我们的模型微调期间收敛很快,3epoch 的训练对大多数情况而言就足够了。
    • 超参数 λ 设置为 0.5

4.2.1 监督微调

  1. 我们对各种监督任务进行了实验,包括自然语言推理、问答、语义相似性、文本分类。其中的一些任务是作为最近发布的 GLUE multi-task benchmark 的一部分,我们这里也使用了这个 benchmark 。实验的任务及其对应的数据集如下表所示。

  2. 自然语言推理 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 数据集上的强大性能,我们的模型很可能也会从多任务训练中收益,但是我们目前还没有对此进行探索。

  3. 问答和常识推理Question Answering and Commonsense Reasoning:另一项需要单句推理和多句推理的任务是问答。我们使用最近发布的 RACE 数据集,该数据集由初中考试(RACE-m )和高中考试(RACE-h )的英语段落和相关问题组成。这个语料库已被证明包含了比 CNNSQuaD 等其它数据集更多的推理类型的问题,为我们的模型提供了完美的评估,其中我们的模型被训练用于处理长程上下文 long-range context 。此外,我们还在 Story Cloze Test 数据集上进行评估,该数据集涉及从两个选项中选择多句子故事的正确结局。

    实验结果如下表所示,在这些任务中,我们的模型再次以显著的优势超越了以前的最佳结果:在 Story Cloze 数据集上高达 8.9% 的绝对改进,在 RACE 数据集上平均 5.7% 的绝对改进。这表明我们的模型有能力有效处理长程上下文。

  4. 语义相似性Semantic Similarity:该任务涉及预测两个句子是否在语义上相等。挑战在于识别概念的改写 rephrasing 、理解否定句negation、以及处理句法歧义 syntactic ambiguity。我们使用三个数据集来完成这项任务:Microsoft Paraphrase corpus: MRPC(从新闻来源收集到的)、Quora Question Pairs: QQPSemantic Textual Similarity benchmark: STS-B

    实验结果如下表所示,在这三个语义相似性任务中,我们在其中两个上面获得了 state-of-the-art 结果:在 STS-B 上获得了1% 的绝对收益,在 QQP 上获得显著的 4.2% 的绝对收益。

  5. 分类Classification:最后,我们还对两个不同的文本分类任务进行了评估。Corpus of Linguistic Acceptability: CoLA 包含专家对一个句子是否符合语法的判断,并测试训练好的模型的 innate linguistic biasStanford 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 分的最好成绩要好得多。
  6. 总体而言,在我们评估的 12 个数据集中,我们的方法在其中的 9 个数据集上取得了新的 state-of-the-art 结果,在许多 case 中超越了 ensembles 的结果。我们的结果还表明:我们的方法在不同规模的数据集上都运行良好,从较小的数据集(如5.7k 个训练样本的 STS-B)到最大的数据集(如550k 个训练样本的 SNLI)。

4.2.2 分析

  1. 被迁移的层数的影响Impact of number of layers transferred:我们观察了从无监督的预训练到监督的目标任务中迁移不同数量的层的影响。下图(左)展示了我们的方法在 MultiNLIRACE 数据集上的性能与被迁移的层数的关系。

    可以看到:

    • 仅迁移 embedding 层(即,被迁移的层数为 1)可以提高性能。
    • 每个 transformer layer 的迁移都能提供进一步的收益。
    • MultiNLI 数据集上完全迁移所有层时,效果提升达到 9%

    这表明:预训练模型中的每一层都包含了解决目标任务的有用功能functionality

  2. Zero-shot Behaviors:我们想更好地了解为什么语言模型对 transformer 的预训练是有效的。一个假设是:底层的生成模型generative model 学习执行许多我们所评估的任务,从而提高其语言建模能力。而且与 LSTM 相比,transformer 的更加结构化注意力记忆 more structured attentional memory 有助于迁移。

    我们设计了一系列的启发式解决方案,这些解决方案使用底层的生成模型来执行任务而不需要监督微调(即,zero-shot):

    • 对于 CoLA (句子是否符合语法),样本的得分为:生成模型分配的 token 概率的对数均值。然后预测是通过阈值进行的。
    • 对于 SST-2(情感分析sentiment analysis),我们在每个样本中添加一个token very,并将语言模型的输出分布限制在单词 positivenegative 上,并认为概率较高的单词即为预测值。
    • 对于 RACE(问答),我们挑选在给定文档和问题的条件下,生成模型赋予最高平均 token 对数概率的答案。
    • 对于 DPRDwinograd schemas),我们用两个可能的指代词 referrent 替换定语代词definite pronoun ,并选择替换后序列的平均 token 对数概率更高的那一个。

    我们在上图(右)中直观地看到了这些启发式解决方案在生成式预训练generative pre-training 过程中的有效性。

    • 我们观察到这些启发式方案的性能是稳定的,并且随着训练的推进而稳步增加,这表明生成式预训练支持学习各种任务相关的功能。
    • 我们还观察到 LSTMzero-shot 性能表现出较高的方差,这表明 Transformer 架构的归纳偏置 inductive bias 有助于迁移。
  3. 消融研究:我们进行了三种不同的消融研究,如下表所示。

    • 首先,我们检查了我们的方法在微调期间没有辅助语言模型目标的性能。我们观察到,辅助目标对 NLI 任务和 QQP 任务有帮助。总体而言,这一趋势表明:较大的数据集从辅助目标中受益,而较小的数据集则没有。
    • 其次,我们通过比较 Transformer 和使用相同框架的单层 2048 unit LSTM 来分析其效果。我们观察到,当使用 LSTM 而不是 Transformer 时,平均得分下降了 5.6LSTM 仅在一个数据集(即,MRPC )上优于 Transformer
    • 最后,我们还比较了我们在监督目标任务上直接训练的 transformer 架构而没有预训练。我们观察到:缺乏预训练损害了所有任务的性能,导致与我们的完整模型(即,有预训练的模型)相比,性能下降了 14.8%

4.2.3 结论

  1. 长期以来,使用无监督训练(或预训练)来提高判别式任务discriminative task 的性能一直是机器学习研究的一个重要目标。我们的工作表明:实现显著的性能提升是可能的,并提示了哪些模型(即 Transformer )、哪些数据集(即具有长程依赖的文本)在这种方法下效果最好。

    我们希望这将有助于对自然语言理解和其它领域的无监督学习进行新的研究,并进一步提高我们对无监督学习如何、以及何时发挥作用的理解。

五、GPT2[2019]

  1. 目前,机器学习系统通过使用大数据集、大容量模型、以及监督学习的组合,在它们所训练的任务中表现出色。然而,这些系统很脆弱,对数据分布(《Do cifar-10 classifiers generalize to cifar-10?》)和任务规范 task specification 的轻微变化很敏感。目前的系统更多地被描述为狭隘的专家 narrow expert 而不是称职的通才 competent generalist 。我们希望迈向更通用的系统,该系统可以执行许多任务,并最终无需为每个任务手动创建和标注一个训练集。

    建立机器学习系统的主流方法是:

    • 收集一个包含训练样本的数据集,这些样本展示所需任务的正确行为。
    • 训练一个系统来模仿这些行为。
    • 最后在独立同分布independent and identically distributed: IIDheld-out 实例上测试其性能。

    这对于狭隘专家上的进展起到了很好的作用。但是,captioning model、阅读理解系统、图片分类器在多样化和多变的、可能的 input 上经常出现不稳定的行为,突出了这种方法的一些缺点。

    《Language Models are Unsupervised Multitask Learners》的作者怀疑:单领域数据集上的单任务训练的盛行,是当前系统中观察到的缺乏泛化性的主要原因。要想在当前架构下实现强大的系统,可能需要在广泛的领域和任务上进行训练和度量性能。最近,人们已经提出了几个 benchmark(如 GLUEdecaNLP )以开始研究这个问题。

    多任务学习是一个有前途的框架,它可以提高通用的性能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-28 个测试的语言建模数据集中的 7 个上达到了 state-of-the-art 的性能。

  2. 相关工作:

    • 这项工作的很大一部分衡量了在更大数据集上训练的更大语言模型的性能。

      • 这与《Exploring the limits of language model》 的工作类似,他们在 1 Billion Word Benchmark 数据集上 scaleRNN-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 trackingquote/comment detection《Visualizing and understanding recurrent networks》)。对我们的工作更有启发的是 《Generating wikipedia by summarizing long sequences》 的观察,一个被训练用于生成维基百科文章的模型也学会了翻译语言之间的 name

    • 先前的工作已经探索了过滤和构建大型网页文本语料库的替代方法,如 iWeb Corpus《The 14 billion word iweb corpus》)。

    • 关于语言任务的预训练方法,已经有了大量的工作。

      • 除了 Introduction 中提到的那些之外,GloVeword 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》)。

5.1 模型

  1. 我们方法的核心是语言建模language modeling 。语言建模通常是指从样本集合 (x1,x2,,xn) 中进行无监督的分布估计distribution estimation ,每个样本都由可变长度的符号symbol 序列 (s1,s2,,sm) 组成。由于语言具有自然的序列顺序 natural sequential ordering ,通常将符号的联合概率分解为条件概率的乘积:

    p(x)=i=1mp(sis1,,si1)

    这种方法允许对 p(x) 以及任何形式的条件概率 p(smk,,sms1,,smk1) 进行可操作的采样和估计。近年来,能够计算这些条件概率的模型的表达能力有了很大的提高,比如像 Transformer 这样的自注意力架构。

    GPT-2GPT-1 一样都是自回归模型。

  2. 单个任务的学习可以在概率框架中表示为估计一个条件分布 p(outputinput) 。由于一个通用系统应该能够执行许多不同的任务,甚至针对相同的输入(即不同任务采用相同的输入),因此系统不仅应该以输入为条件,还应该以将要执行的任务为条件。即,系统应该建模 p(outputinput,task) 。这在多任务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 ,来推断和执行具有这种类型格式样本的许多不同任务。

  3. 语言建模原则上也能够学习 《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 的表现,来测试情况是否如此。

5.1.1 训练集

  1. 大多数先前的工作是在单个领域的文本上训练语言模型,如新闻文章、维基百科、或小说书 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 datasetWinograd Schema Challenge)最相似的文件。虽然这是一个务实的方法从而提高特定任务的性能,但是我们希望避免提前对将要执行的任务做出假设。

    相反,我们创建了一个新的、强调文档质量的网络爬虫。为了做到这一点,我们仅爬取那些已经被人类精心管理/过滤的网页。人工过滤一个完整的网络爬虫将非常昂贵,因此作为一个开始,我们从 Reddit (一个社交媒体平台)爬取了所有的外链 outbound link ,这些外链至少收到了 3karma (类似于点赞数或评论数的一种计数机制)。这可以被认为是一个启发式指标,表明其它用户是否认为该链接有趣、有教育意义。

    由此产生的数据集 WebText ,包含了这 4500 万个链接的文本子集。为了从 HTML response 中提取文本,我们使用了 DragnetNewspaper 内容提取器的组合。本文介绍的所有结果都使用了 WebText 的初步版本preliminary version,该版本不包括 201712 月之后创建的链接,并且在去重和一些基于启发式的清理之后包含了略微超过 800 万个文档,共计 40GB 的文本。

    我们从 WebText 中删除了所有的维基百科文档,因为它是其它数据集的一个常见数据源,并且由于训练数据与测试评估任务的重叠overlapping,可能会使分析变得复杂。

    下表所示为 WebText 训练集中发现的自然发生的 English to FrenchFrench to English 的例子:

5.1.2 Input Representation

  1. 一个通用的语言模型应该能够计算出任何字符串的概率(当然也能生成任何字符串)。目前的大型语言模型包括预处理步骤,如 lowercasingtokenizationout-of-vocabulary tokens ,这些预处理步骤限制了可建模字符串的空间。

    虽然将 Unicode 字符串处理为 UTF-8 bytes 序列可以优雅地满足这一要求(如 《Multilingual language processing from bytes》),但是目前的 byte-level 语言模型在大型数据集(如 One Billion Word Benchmark)上与 word-level 语言模型相比没有竞争力。在我们自己尝试在 WebText 上训练标准的 byte-level 语言模型时,我们也观察到了类似的性能差距。

  2. Byte Pair Encoding: BPE《Neural machine translation of rare words with subword units》)是 character-levelword-level 语言建模之间的一个实用的中间地带 middle ground ,它有效地在 word-level inputcharacter-level input 之间进行插值。尽管它的名字叫 BPE,但是参考的 BPE 实现通常是在 Unicode code point 而不是字节序列上操作。这些实现需要包括 Unicode symbol 的全部空间,以便为所有 Unicode 字符串建模。这将导致在添加任何 multi-symbol token 之前, base vocabulary 超过了 130k 。与 BPE 经常使用的 32k64ktokenvocabulary 相比,这个规模太大了。相比之下,BPEbyte-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

5.1.3 模型

  1. 我们的语言模型使用 Transformer-based 架构。该模型大体上遵循 OpenAI GPT 模型的细节,并作了一些修改:

    • layer normalization 被移到每个子块的 input ,类似于一个 pre-activation residual network 。并且在 final self-attention block 之后增加了一个额外的 layer normalization

      即:x+Sublayer(LayerNorm(x))

    • 使用了修改过的初始化,它考虑了随着模型深度的增加时残差路径residual path上的累积 accumulation 。我们在初始化时将残差层的权重按照 1N 的系数进行缩放,其中 N 为残差层的数量。

    • vocabulary 扩大到 50257 个。

    • 我们还将上下文窗口大小从 512 增加到 1024 ,并使用更大的 batch size = 512

5.2 实验

  1. 我们训练和评测了四个语言模型,它们具有大约对数均匀log-uniformly 间隔的大小。下表中总结了这些架构。最小的模型相当于原始的 GPT,次小的模型相当于 BERT 的最大模型。我们最大的模型,称之为 GPT-2,其参数规模比 GPT 大一个数量级。

    每个模型的学习率都是手动调优的,以便在 WebText5%held-out 样本上获得最佳困惑度 。所有的模型对 WebText 仍然欠拟合 under-fit ,并且如果给定更多的训练时间那么 held-out 数据上的困惑度将会进一步改善。

    这些模型在不同任务上的表现如下图所示:

5.2.1 语言建模

  1. 作为实现 zero-shottask transfer 的第一步,我们有兴趣了解 WebText 语言模型在它们被训练的主要任务(即,语言建模 language modeling )上的表现。由于我们的模型是在 byte-level 上运行的,不需要有损的预处理或 tokenization ,我们可以在任何语言模型 benchmark 上评估它。

  2. WebText 语言模型在大多数的数据集上的测试大大超出了分布范围 out-of-distribution,如必须预测极端标准化的文本 aggressively standardized text、标记化的人造物tokenization artifact (如断开的标点符号和缩略语、混洗的句子)、甚至是 WebText 中极其罕见的字符串 <UNK> (该字符串在 400 亿的字节中仅出现 26 次)。

    我们使用了可逆的 de-tokenizer 从而尽可能多地移除这些 tokenization/pre-processing 的人造物 artifact 。由于这些 de-tokenizer 是可逆的,我们仍然可以计算出数据集的对数概率,它们可以被认为是一种简单的领域适配domain adaptation形式。我们观察到,使用这些 de-tokenizerGPT-2 的困惑度提高了 2.55

  3. WebText 语言模型在不同领域和数据集之间有很好的迁移,在 zero-shotsetting 下,在 8 个数据集中的 7 个上提高了 state-of-the-art

    • 我们观察到在小的数据集上有很大的改进,如 Penn Treebank: PTBWikiText-2 (它们只有1百万到 2 百万个训练 token)。在为衡量长期依赖关系而创建的数据集上也有很大的改进,如 LAMBADAChildren’s Book Test: CBT
    • One Billion Word Benchmark: 1BW 上,我们的模型仍然比先前的工作要差很多。这可能是因为它既是最大的数据集,又有一些最具破坏性的预处理:1BWsentence-level 混洗移除了所有的长程结构long-range structure

5.2.2 Children’s Book Test

  1. Children’s Book Test: CBT 是为了考察语言模型在不同类别的单词上的表现:命名实体named entity 、名词 noun、动词 verb、介词prepositionCBT 没有将困惑度作为评估指标,而是报告了自动构建的完形填空测试cloze test的准确率,其中的任务是:预测一个被省略的单词的 10 个可能的候选中,哪一个候选是正确的。按照原始论文中介绍的语言模型方法,我们根据语言模型计算每个候选的概率,和以该候选为条件的句子剩余部分的概率,并选择联合概率最高的那个选项。此外,我们应用一个 de-tokenizer 从而移除 CBT 中的 PTB styletokenization artifact

    PTB style 指的是 Penn Treebank styletokenization,它是一种常用的 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)。

5.2.3 LAMBADA

  1. LAMBADA 数据集测试了系统对文本中长距离依赖 long-range dependency 的建模能力。任务是预测句子的最后一个单词。对于人类而言,该任务需要至少 50token 的上下文才能成功预测。GPT-2state-of-the-art99.8 的困惑度提高到 8.6,并将语言模型在该测试中的准确率从 19% 提高到 52.66% 。其中,我们使用一个没有预处理的数据集版本。

    研究 GPT-2 的错误表明:大多数预测是句子的有效延续 continuation ,但不是有效的最终词 final word 。这表明:语言模型没有使用额外的有用的约束条件,即该词必须是句子的最后一个。在此基础上增加一个 stop-word filter 作为近似 approximation ,可以使准确率进一步提高到 63.24% ,使该任务的整体 state-of-the-art 提高了 4%

  2. 先前的 state-of-the-art 使用了一个不同的约束性的预测 settting ,其中模型的输出被限制为仅出现在上下文中的单词。对于 GPT-2,这种约束是有害而无益的。因为 19% 的答案不在上下文中。

5.2.4 Winograd Schema Challenge

  1. Winograd Schema challenge 的目标是:通过衡量系统解决文本中的歧义ambiguity 的能力,来衡量系统进行常识推理common-sense reasoning的能力。该数据集相当小,只有 273 个样本,所以我们建议阅读《On the evaluation of common-sense reasoning in natural language understanding》,从而帮助理解这一结果的背景。

    Winograd Schema challenge 任务要求机器识别出一个歧义的代词的祖先,如:

    问题:It 指代 fish 还是 worm

    最近,《A simple method for commonsense reasoning》 通过预测更高概率的歧义的解决方案,证明了使用语言模型在这个Challenge上的重大进展。我们遵从了他们的问题表述,并在下图中直观地展示了我们的模型在完全评分技术full scoring technique和部分评分技术partial scoring technique下的表现。GPT-2state-of-the-art 准确率提高了 7%,达到了 70.70% (部分评分技术的准确率)。

    假设文本序列为 x=(s1,s2,,sk1,sk,sk+1,,sm) ,并且需要解决的歧义词为 sk 。假设候选的词为 c ,那么:

    • 完全评分技术:将 c 替代 sk 的评分为 ffull(skc)=P(s1,s2,,sk1,c,sk+1,,sm)
    • 部分评分技术:将 c 替代 sk 的评分为 fpartial(skc)=P(sk+1,,sms1,s2,,sk1,c)

    然后选择评分最高的候选词作为预测结果。

5.2.5 Reading Comprehension

  1. 《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 的情况下,我们的方法达到了与 4baseline system 中的 3 个相当甚至更好的效果,而这些 baseline system 是在这 127k 个人工收集的 question-answer pair 上训练的。

    监督的 state-of-the-art 是一个基于 BERT 的系统,它接近人类的 89 F1 的性能。虽然 GPT-2 的性能对于一个没有任何监督训练的系统而言是令人振奋的,但是对GPT-2 的答案和错误的一些检查表明:GPT-2 经常使用简单的基于检索retrieval based 的启发式方法,例如在回答 who 的问题时采用文档中的一个名字来回答。

5.2.6 Summarization

  1. 我们在 CNNDaily Mail 数据集上测试 GPT-2 执行文本摘要的能力。为了诱发摘要行为induce summarization behavior,我们在文章后面添加了文本 TL;DR: ,并使用 k=2Top-k 随机采样(《Hierarchical neural story generation》)来生成 100token ,这可以减少重复并鼓励比贪心解码更 abstractive 的摘要(类似于 beam search)。我们使用这 100token 中所生成的句子的前面三句话作为摘要。

    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-N=Num of co-occurrent N-gram in model-output and ground-truthnum of N-gram in ground-truth

      ROUGE-L 为最长公共子序列的重合率:

      ROUGE-L=(1+β2)RlcsPlcsRlcs+β2PlcsRlcs=lcs(model-output,ground-truth)num of N-gram in ground-truth,Plcs=lcs(model-output,ground-truth)num of N-gram in model-output

      其中:lcs() 为最长公共子串函数,R 为召回率,P 为精准率。β 为精准率权重。

    • 当任务提示被删除时(即没有 TL;DR: 提示),GPT-2 的性能在综合指标上下降了 6.4 分,这表明了用自然语言在语言模型中调用特定任务行为的能力。

5.2.7 翻译

  1. 我们测试 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 倍。

5.2.8 问答

  1. 测试语言模型中包含哪些信息的一个潜在方法是:评估语言模型对虚构风格 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 system30% ~ 50% 区间差很多很多。

5.3 Generalization vs Memorization

  1. 最近在计算机视觉方面的工作表明:常见的图像数据集包含了不可忽略 non-trivial amount 的近乎重复的图像。例如,CIFAR-10 在训练集和测试集之间有 3.3% 的重叠(《Do we train on test data? purging cifar of near-duplicates》 )。这导致了对机器学习系统的泛化性能的过度报告 over-reporting 。随着数据集规模的增加,训练集和验证集重叠的问题变得越来越可能,而类似的现象可能也发生在 WebText 上。因此,分析有多少测试数据也出现在训练集中是很重要的。

    为了研究这个问题,我们创建了 Bloom Filter ,其中包含了 8-gramWebText 训练集的 token 。为了提高召回率,字符串被规范化为仅包含小写字母的 alpha-numeric 单词并以空格作为分隔符。 Bloom Filter 的构造使得 false positive rate 的上限为 1/108 。我们通过生成 100 万个字符串进一步验证了低 false positive rate ,其中 Bloom Filter 没有命中这 100 万个字符串的任何一个。

    注意:这里评估的是 8-gram 的重复率,而不是整篇文档的重复率。每篇文档包含多个 8-gram 。有可能存在这样的情况:两篇文档不重复,但是它们包含相同的 8-gram

    通过 Bloom Filter 我们计算得到:给定一个数据集,该数据集中的 8-gramWebText 训练集中出现的比例。下表展示了常见的语言模型 benchmark 的这种 overlap 分析。常见的语言模型数据集的测试集与 WebText 训练集有 1% ~ 6% 的重叠 overlap ,平均重叠为 3.2%。令人惊讶的是,在许多数据集内部,它们的测试集与自己的训练集有较大的重叠,平均有 5.9% 的重叠。

  2. 我们观察到 GPT-2 在数据集中的那些较长且重复多次的字符串上的一些记忆行为,如名言或演讲。例如,当以 Gettysburg Address (该演说在整个 WebText 中出现了 40 次)的第一句半为条件时,GPT-2argmax 解码可以恢复该演说。甚至当使用无截断的采样时,我们发现模型在漂移drifting 之前会复制一段时间的演讲。模型通常在 100-200token 内漂移,并且一旦漂移就会展示出很大的多样性。

    为了量化 exact memorization 在样本中出现的频率,我们从 GPT-2 中生成了以 WebText 测试集文章为条件的样本,并将 GPT-2generation 的重叠率与 ground-truth completion 的重叠率进行比较。比较结果如下所示,结果表明:GPT-2 重复训练集中的文本的频率低于 held-out 文章(baseline)的重叠率。

    这里的重叠率指的是:给定一段文本,在训练集中重复出现的 8-gram 数量占它总 8-gram 数量的比例。下图中曲线上的点表示:重叠率低于指定值的文本数量占比。

  3. 我们的方法针对召回率进行优化。虽然对重叠部分的人工检查显示了许多常见的短语,但是有许多更长的匹配 longer match 是由于重复的数据造成的。这并不是 WebText 所独有的。例如:

    • 我们发现 WikiText-103 的测试集有一篇文章也在训练集中。由于测试集仅有 60 篇文章,因此这导致至少有 1.6% 的重叠。
    • 可能更令人担忧的是,根据我们的程序计算到:1BW 与它自己的训练集有大约 13.2% 的重叠。
    • 对于 Winograd Schema Challenge,我们发现只有 10schemataWebText 训练集有 8-gram overlap 。其中,有 2 个是虚假的匹配,而剩下的 8 个中只有 1 个泄露了答案。
    • 对于 CoQA 而言,新闻领域中大约 15% 的文档已经出现在 WebText 中,该模型在这些数据集上提高了 3 F1 的性能。CoQA 的验证集指标报告了 5 个不同领域的平均性能,由于不同领域上的 overlap 现象(与 WebText 训练集的重叠),我们测得约 0.5 ~ 1.0 F1 的增益。然而,由于 CoQAWebText 的链接截止日期之后发布的,所以 WebText 中没有实际的训练问题或答案。
    • LAMBADA 上,平均重叠为 1.2%。在重叠大于 15%case 上,GPT-2 的表现提高了大约 2 perplexity 。在排除了所有任何 overlap 样本时,重新计算指标后,结果从 8.6 perplexity 变为 8.7 perplexity ,并将准确率从 63.2% 降低到 62.9% 。总体结果的变化较小,可能是因为 200 个样本中只有 1 个样本有明显的重叠。

    总体而言,我们的分析表明:WebText 训练数据和特定的评估数据集之间的数据重叠为报告的结果提供了一个小的但是一致的好处。然而,对于大多数数据集而言,我们并没有发现比原始训练集和测试集之间已经存在的重叠而明显更大的重叠,正如上表所强调的。

  4. 了解和量化高度相似的文本如何影响性能是一个重要的研究问题。更好的去重技术(如,可扩展的模糊匹配)也可以帮助更好地回答这些问题。目前,我们建议使用基于 n-gram 重叠的去重,作为新的 NLP 数据集创建 train-test split 时的一个重要验证步骤和理性检查。

  5. 确定 WebText 语言模型的性能是否归因于 memory 的另一个潜在方法是:检查它们在自己的 held-out 上的性能。如下图所示,WebText 的训练集和测试集上的性能是相似的,并且随着模型规模的增加而共同提高。这表明,即使是 GPT-2 ,它仍然在 WebText 上是欠拟合的。

  6. 下表给出了最小的 WebText 语言模型(GPT-2 的最小版本)和 GPT-2 在随机未见的 WebText 测试集文章上的 side-by-side completion

  7. GPT-2 也能写出关于发现会说话的独角兽的新闻文章。下表提出了一个例子。

  8. 下表展示了同一个随机 WebText 测试集上下文的多个 completion ,这显示了标准采样 setting 下,completion 的多样性:

5.4 讨论

  1. 许多研究致力于学习learning、理解 understanding、批判性地评估 evaluating 有监督和无监督预训练方法的 representation 。我们的结果表明:无监督的任务学习是另一个有前途的、有待探索的研究领域。这些发现可能有助于解释预训练技术在下游 NLP 任务中的广泛成功。因为我们表明,在极限情况下,某些预训练技术开始直接学习执行任务,而不需要监督的适配或修改。

    在阅读理解方面,GPT-2zero-shot setting 下的性能与监督的 baseline 是可比的。然而,在其它任务上(如 summarization),虽然GPT-2 执行了任务,但是根据定量指标,其性能仍然只是入门级的。作为一项研究成果而言,GPT-2 是有启发意义的。而就实际应用而言,GPT-2zero-shot 性能还远未达到可使用的程度。

    我们已经研究了 WebText 语言模型在许多典型 NLP 任务上的 zero-shot 性能,但还有许多其它任务可以评估。毫无疑问,在许多实际任务中,GPT-2 的性能仍然不比随机的好。即使在我们评估的常见任务上(如问答和翻译),语言模型只有在足够的模型容量时才开始超越最平凡的 baseline

    虽然 zero-shot 性能为 GPT-2 在许多任务上的潜在性能建立了一个 baseline,但是并不清楚微调的上限在哪里。在某些任务上,GPT-2fully abstractive output 与基于 extractive pointer network 的输出有很大不同,后者是目前许多问答和阅读理解数据集上的 state-of-the-art 。鉴于之前微调 GPT 的成功,我们计划在 decaNLPGLUEbenchmark 上研究微调,尤其是目前还不清楚 GPT-2 的额外训练数据和容量是否足以克服 BERT 所展示的单向 representation 的低效率问题。

六、GPT3[2020]

  1. 近年来,在 NLP 系统中出现了预训练语言 representation 的趋势,并以越来越灵活的、与任务无关task-agnostic 的方式应用于下游任务。

    • 首先出现的是通过词向量学到的 single-layer representation,然后馈入到特定的任务架构。
    • 然后出现的是具有多层 representation 和上下文状态的 RNN,从而形成更强大的 representation
    • 最近出现的是预训练的 RNNtransformer 语言模型,它们被直接微调从而消除了对特定任务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 (通常是 10100 )。
    • one-shot learning:我们只允许一个示范。
    • zero-shot learning:没有任何示范,只给模型提供一条自然语言的指令。

    理论上讲,GPT-3 也可以在传统的微调 setting 中进行评估,但是我们将此留给未来的工作。

    下图说明了我们的研究条件,并展示了对一个简单任务的 few-shot learning ,该任务要求模型从一个单词中移除不相干的 symbol

    • 模型的性能随着自然语言任务的 description 的增加而增加(即有 prompt 的效果优于没有 prompt)。下图实线表示有 prompt,虚线表示没有 prompt
    • 模型的性能也随着模型上下文中的样本数量(即 K )的增加而增加。K=0 表示 zero-shotK=1 表示 one-shotK>1 表示 few-shot
    • few-shot learning 性能也随着模型规模的增加而显著提高。

    虽然这种情况下的结果特别引人注目,但是模型规模和上下文中的样本数量的一般趋势在我们研究的大多数任务中都适用。我们强调,这些 learning curve 不涉及梯度更新或微调,只是增加了作为条件的示范的数量。

    【作者注:较大的模型对上下文信息的利用越来越有效。大型模型的 in-context learning curves 越陡峭,则表明从 contextual information 中学习一个任务的能力越好。】

    大体上,在 NLP 任务中,GPT-3zero-shot/one-shot setting 中取得了有希望的结果;而在 few-shotsetting 中有时具有与 SOTA 相同的竞争力,甚至偶尔超越了 SOTASOTA 是由微调模型获得的)。例如:

    • CoQA 数据集上,GPT-3zero-shot/one-shot/few-shot setting 中实现了 81.5/84.0/85.0 F1
    • 类似地,在 TriviaQA 数据集上,GPT-3zero-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 数据集,以及一些阅读理解数据集(如 RACEQuAC)。通过对 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 在这方面的特性进行初步分析。

  2. 相关工作:

    • 有一些工作聚焦于增加语言模型的参数量或/和计算量,从而提高任务性能。早期的工作是将基于 LSTM 的语言模型扩展到超过 10 亿个参数的 《Exploring the limits of language modeling》

      • 有一个工作方向直接增加了 transformer 模型的大小,将参数数量和 FLOPS-per-token 大致按比例增加。这方面的工作已经连续增加了模型的大小: 2.13 亿个参数的 Transformer3 亿个参数的 BERT15 亿个参数的 GPT-280 亿个参数的 Megatron110 亿个参数的 T5170 亿个参数的 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》 )、以及特定任务的模型蒸馏方法(DistilBERTTinyBERT《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 架构(BartT5)、训练期间的随机排列 (XLNet)、提高采样概率的架构(Transformer-xl)、数据和训练程序的改进(RoBERTa)、以及 embedding 参数的效率提高(RoBERTa)。这些技术中的许多在下游任务上提供了显著的收益。在这项工作中,我们继续聚焦于纯自回归语言模型,这既是为了聚焦 in-context learning 性能,也是为了降低我们大模型实现的复杂性。然而,纳入这些算法很可能会提高 GPT-3 在下游任务上的性能,特别是在微调的 setting 中,将 GPT-3 与这些算法技术相结合是未来的一个有希望的方向。

6.1 方法

  1. 我们 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: FSFew-Shot 是我们在这项工作中使用的术语,指的是在推断时给模型一些任务的演示 demonstration 作为条件,但不允许权重更新。

      如下图所示,对于一个典型的数据集,一个样本有一个 context 和一个预期的补全 completion (例如,一个英语句子作为上下文,和对应的法语翻译作为补全)。few-shot 通过给出 K 个包含 contextcompletion 的样本,然后再给出最后一个样本的 context,并预期模型能够提供最后一个样本的 completion 。我们通常将 K 设置在 10100 的范围,因为这是模型的上下文窗口(nctx=2048) 可以容纳的样本数量。

      • 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: 1SOne-Shotfew-shot 相同,只是除了任务的自然语言描述之外,只允许一个示范,如下图所示。将 one-shotfew-shotzero-shot 区分开的原因是,它与一些人类交流的任务的方式最接近。例如,当要求人来生成一个 human worker service (如Mechanical Turk)的数据集时,通常会给出任务的一个示范。相比之下,如果没有给出任何示范,有时就很难沟通任务的内容或格式。

    • Zero-Shot: 0SZero-Shotone-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 仅要求模型在测试期间前向传播就能完成任务(而无需反向梯度更新)。

6.1.1 模型和架构

  1. 我们使用与 GPT-2 相同的模型和架构,包括其中描述的modified initializationpre-normalizationreversible tokenization ,不同的是我们在 transformer 的层中使用交替的 denselocally banded sparse 的注意力模式,类似于 Sparse Transformer《Generating long sequences with sparse transformers》) 。

    locally banded sparse 注意力:每个位置的注意力仅依赖于附近的 k 个位置。

    为了研究机器学习性能对模型大小的依赖性,我们训练了 8 种不同大小的模型,规模从 1.25 亿个参数到 1759 亿个参数(横跨 3 个量级),其中规模最大的那个模型我们称之为 GPT-3 。以前的工作《Scaling laws for neural language models》表明:在有足够训练数据的情况下,验证损失的 scaling 应该是一个平滑的 power law 并且作为数据规模的函数。训练许多不同规模的模型使我们能够测试这个假设,无论是在验证损失上测试还是在下游的语言任务上测试。

    下表展示了我们 8 个模型的大小和结构。其中:

    • nparams 是可训练参数的总数,nlayers 是层的总数。

    • dmodel 是每个 bottleneck layer 的单元数,我们总是让前馈层的大小是 bottleneck layer 的四倍,即 dff=4×dmodel

    • dhead 是每个注意力头的维度。

      根据公式有:dmodel=dhead×nheads

    • 所有模型都使用 nctx=2048tokencontext window

  2. 我们同时沿着深度和宽度维度将模型在 GPU 之间进行 partition ,从而尽量减少节点之间的数据传输。每个模型的 precise architectural parameter 是根据计算效率和跨 GPU 的模型布局的负载平衡来选择的。以前的工作《Scaling laws for neural language models》表明:在一个合理的大的区间范围内,验证损失对这些超参数并不非常敏感。

6.1.2 训练数据集

  1. 我们使用 Common Crawl 数据集。然而我们发现:未经过滤和轻度过滤的 Common Crawl 版本的质量往往低于精心处理的数据集。因此我们采取了三个步骤来提高我们的数据集的平均质量:

    • 我们下载了 Common Crawl 数据集,并基于与一系列高质量参考语料库的相似性来过滤 Common Crawl
    • 我们在在数据集内部和跨数据集之间进行了 document-level 的模糊去重fuzzy deduplication,从而防止数据冗余,并保持我们 held-out 验证集的完整性从而作为对过拟合的准确衡量。
    • 我们还将已知的高质量参考语料库加入到训练组合,从而增强 Common Crawl 并增加其多样性。

    前两点( Common Crawl 的处理)的细节在附录中描述。对于第三点,我们加入了几个精心设计的高质量数据集,包括 WebText 数据集的扩展版本(该扩展数据集是通过在较长时间内爬取链接而收集的),以及两个基于互联网的 books 语料库(Books1Books2)和英文维基百科。

    下表展示了我们在训练中使用的最终混合数据集。CommonCrawl 数据是从覆盖 2016 年到 2019 年月度 CommonCrawl41 个分片中下载的,在过滤前是 45TB 的压缩文本,过滤后是 570GB,大约包含 400Bbyte-pair-encoded tokens

    注意,在训练期间,数据集的采样并不与它们的大小成正比,而是我们认为质量较高的数据集被更频繁地采样。例如:CommonCrawlBooks2 数据集在训练期的每个 epoch 被采样不到 1 次,但是其他数据集被采样 23 次。这基本上是接受了少量的过拟合从而换取更高质量的训练数据。

    下图中:Weight 表示训练过程中,从给定数据集中采样的比例。最后一列表示混合数据每个 epoch 包含各个子数据集的多少个 epoch 。总的 token 数量为:410×0.44+19×2.9+12×1.9+55×0.43+3×3.4=292.15

  2. 对于在广泛的互联网数据上进行预训练的语言模型,尤其是有能力记忆大量内容的模型,一个主要的方法论问题是:在预训练期间无意中看到测试集或验证集,从而对下游任务造成潜在污染。为了减少这种污染,我们搜索并试图消除与本文研究的所有 benchmark 验证集或测试集的任何重叠 overlap 。不幸的是,过滤中的一个错误导致我们忽略了一些重叠,而且由于训练的成本,重新训练模型是不可行的。在未来的工作中,我们将更积极地消除数据污染。

6.1.3 训练过程

  1. 正如 《Scaling laws for neural language models》《An empirical model of large-batch training》 中发现的那样,较大的模型通常可以使用较大的 batch size,但是需要较小的学习率。我们在训练过程中测量 gradient noise scale ,并使用它来指导我们对 batch size 的选择。下表展示了我们使用的参数配置。为了在不耗尽内存的情况下训练更大的模型,我们混合使用模型并行(在每个矩阵乘法上使用模型并行,即沿着宽度维度来划分模型;在网络各层上使用模型并行,即沿着深度维度来划分模型)。所有模型都是在微软提供的、位于一部分高带宽集群的 V100 GPU 上训练的。训练过程和超参数设置的细节参考附录。

6.1.4 评估

  1. 对于 few-shot learning,我们通过从该任务的训练集中随机抽取 K 个样本作为条件来评估 evaluation set 中的每个样本,根据任务的不同,每个样本被 12 个换行符来限定 delimited

    • 对于 LAMBADAStorycloze ,因为训练集没有监督信息,所以我们从验证集中采样条件样本 conditioning example,在测试集中进行评估。
    • 对于 Winograd (原始版本,而不是 SuperGLUE 版本),只有一个数据集,所以我们直接从该数据集采样条件样本。

    K 可以是从 0 到模型上下文窗口(对于所有模型而言 nctx=2048)所允许的最大值之间的任何值,通常是 10100 个样本。较大的 K 值通常不一定最好,所以当有独立的验证集和测试集时,我们在验证集上试验几个 K 值并选择最佳的那个,然后在测试集上运行最佳 K 值。对于某些任务(见附录),在示范 demonstration 之外我们还使用自然语言提示 natural language prompt ,如果是 K=0 那么我们就仅用用自然语言提示。

  2. 在涉及从几个选项中选择一个正确答案的任务中,我们提供了 K(context, completion) 的样本,然后是一个只有 context 的样本,并比较每个completionLM likelihood

    这里是把所有样本拼接成一个长的序列,从而作为上下文。如:

    最后只有一个 A: 作为提示,现在需要补全答案。

    • 对于大多数任务,我们比较 per-token 的可能性(即,对长度进行归一化处理)。

      即:P(completion | context)len(completion) ,其中 len()token 数量。

    • 然而在少数数据集(ARC, OpenBookQA, RACE)上,我们通过计算 P(completion | context)P(completion | answer-context) 来获得验证集上的额外好处,该方法通过每个 completion 的无条件概率来归一化,其中 answer context 为字符串 "Answer: ""A: " 并用于提示 completion 应该是一个答案,其它方面都是通用的。

    • 在涉及二分类的任务上,我们给答案起了更有语义的名字(如 TrueFalse,而不是 01),然后把任务当做选择题。我们有时也会像 T5 那样对任务进行框定 frame (详见附录)。

    • 在自由形式的 completion 任务上,我们使用与 T5 相同参数的 beam searchbeam width = 4,长度惩罚系数 α=0.6 。我们使用 F1 相似度得分、BLEU、或 exact match 来对模型进行评分,具体取决于数据集是什么评估标准。

  3. 如果测试集是公开的,那么我们会针对每个模型的大小和 settingzero-shot/one-shot/few-shot)报告最终结果。如果测试集是私有的,我们的模型往往太大而无法在 test serverfit ,所以我们报告验证集的结果。我们确实在少量数据集(SuperGLUE, TriviaQA, PiQa)上提交了 test server,在这些数据集上我们能够顺利提交,并且我们仅提交了 200B (最大的模型)的 few-shot 结果。其它所有的结果都是验证集上报告的。

    实际上是 175B 模型而不是 200B 模型?

6.2 实验结果

  1. 下图我们展示了 8 个模型的训练曲线。在这张图中,我们还包括了 6 个额外的小模型,它们的参数只有 10 万个(一共十四条曲线)。正如在 《Scaling laws for neural language models》 中观察到的,当有效利用 training compute 时,语言建模的性能遵循一个 power-law 。在将这个趋势再scale 两个数量级之后,我们观察到的是对 power-law 的轻微偏离(如果有的话)。人们可能会担心:交叉熵损失的这些提升仅仅来自于对我们训练语料库的虚假细节spurious details 的建模(从而导致泛化能力较差)。然而,我们将在后续的章节看到,交叉熵损失的改善在广泛的自然语言任务中导致了一致的性能提升。

    作者注:在下图中,我们把 emebdding parameters 从统计中剔除了。

  2. 下面,我们对这 8 个模型(1750 亿参数的 GPT-37 个较小的模型)在广泛的数据集上进行评估。我们将这些数据集分为 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 下进行了评估。

6.2.1 语言建模、完形填空、Completion 任务

a. 语言建模
  1. 我们在 GPT-2 中测量的 Penn Tree Bank: PTB 数据集上计算了 zero-shot 困惑度。我们最大的模型在 PTB 上达到了一个新的 SOTA,有 15 个点的飞跃,达到了 20.50 的困惑度。注意,由于 PTB 是一个传统的语言建模数据集,它没有明确的分隔 separation 的样本来定义 one-shotzero-shot,所以我们仅测量 zero-shot 的。

    这里省略了许多常见的语言建模数据集,因为这些数据集来自于维基百科或其它数据源,而这些数据源都已经包含在 GPT-3 的训练数据中。

b. LAMBADA
  1. LAMBADA 数据集测试了文本中长距离依赖关系的建模:模型被要求预测句子的最后一个单词,这要求模型阅读一个段落(作为上下文)。在 zero-shot 的情况下,GPT-3LAMBADA 上达到了 76%,比以前的技术水平提高了 8%

  2. LAMBADA 也是 few-shot learning 灵活性的证明,因为它提供了一种方法来解决这个数据集上出现的一个经典问题:尽管 LAMBADA 中的 completion 总是句子中的最后一个单词,但是标准的语言模型却无法得知这个细节。因此,语言模型不仅为正确的结尾分配概率,也为该段落的其它有效 continuation 分配概率。这个问题在过去已经通过停用词过滤(这禁止了 continuation 词)得到了部分解决。few-shot setting 反而使我们能够将任务 “框定” 为一个 cloze-test ,并允许语言模型从样本中推断出恰好需要一个单词的 completion 。我们使用以下的 fill-in-the-blank 格式:

    当以这种方式呈现样本时,GPT-3few-shot setting 下达到了 86.4% 的准确率,比之前的 SOTA 提高了 18% 。我们观察到,few-shot 的性能随着模型的大小而得到强烈的改善:对于最小的模型则性能只有接近 20%,而对于 GPT-3 则性能达到 86%

    最后,fill-in-blankone-shot setting 中效果不佳,它的表现总是比 zero-shot setting 更差。也许这是因为所有模型仍然需要几个样本来识别模式。

    作者注:对于 few-shot learningGPT-3 2.7B 已经超越了 SOTA17B 参数的 Turing-NLG ,并且 GPT-3 175B 超越了 SOTA 高达 18%

  3. 需要注意的是,对测试集污染的分析发现,LAMBADA 数据集中的相当一部分似乎存在于我们的训练数据中。然而 ”衡量和防止对 benchmark 的记忆“这部分章节的分析表明:这对性能的影响可以忽略不计。

c. HellaSwag
  1. HellaSwag 数据集涉及为一个故事或一组指令挑选最佳的 ending 。这些例子被对抗性地挖掘出来,对语言模型而言很难,而对于人类而言确很容易(人类达到 95.6% 的准确率)。

    GPT-3one-shot/few-shot setting 中取得了 78.1%/79.3% 的准确率,超越了微调的 1.5B 参数模型Grover75.4% 的准确率,但是仍然比微调的多任务模型 ALUM 取得的 85.6%SOTA 低了不少。

d. StoryCloze
  1. StoryCloze 2016 数据集涉及为五句话长度的故事选择正确的 ending sentence 。这里,GPT-3zero-shot/few-shot setting 中取得了 83.2%/87.7% 的成绩,其中 few-shotK=70 。这仍然比使用基于 BERT 模型的微调 SOTA4.1%,但是比以前的 zero-shot 结果提高了大约 10%

6.2.2 Closed Book 问答

  1. 这里我们衡量 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 测试这个假设。
  2. 我们在 《How much knowledge can you pack into the parameters of a language model》 中的三个数据集上评估 GPT-3Natural QuestionsWebQuestionsTriviaQA,使用与他们相同的 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-domainQA 系统的 SOTA 相匹配,该系统不仅进行了微调,还利用了一个学到的检索机制 retrieval mechanism

    • WebQuestions: WebQs 上,GPT-3zero-shot/one-shot/few-shot setting 中达到 14.4%/25.3%/41.5% 。相比之下,微调的 T5-11B37.4%,微调的 T5-11B+SSM44.7% (它采用了一个 Q&A-specific 预训练程序)。

      GPT-3few-shot setting 下的性能接近 SOTA 微调模型。值得注意的是,与 TriviaQA 相比,WebQSzero-shotfew-shot 表现出更大的优势(事实上,zero-shotone-shot 的差异也较大),这也许表明:WebQs 的问题和/或答案的风格对于 GPT-3 而言是 out-of-distribution 的。然而,GPT-3 似乎能够适应 adapt 这种分布,在 few-shot setting 下恢复了强大的性能。

    • Natural Questions: NQs 上,GPT-3zero-shot/one-shot/few-shot setting 中达到 14.6%/23.0%/29.9%。相比之下,微调的 T5-11B+SSM36.6%

      WebQs 类似,从 zero-shotfew-shot 的巨大收益可能表明了 distribution shift,也可能解释了NQsTriviaQA, WebQs 相比竞争力较弱的表现。特别是,NQs 中的问题倾向于非常精细的维基百科知识,这可能是在测试 GPT-3 的容量和 broad pretraining distribution 的极限。

    总而言之,在三个数据集中的一个上(即,TriviaWA 数据集),GPT-3one-shot 匹配了开放域的微调 SOTA。在另外两个数据集上,尽管没有使用微调,但是 GPT-3 接近于闭卷 SOTA 的性能。在所有三个数据集上,我们发现性能随模型规模的变化非常平稳。这可能反映了这样的思想:模型容量直接转化为更多的、被模型参数吸收的 “知识”。

  3. 所有模型规模在所有 QA 任务上的性能:

6.2.3 翻译

  1. GPT-2 中,由于容量问题 capacity concern,我们对多语言文件集合使用了一个过滤器,从而产生一个只有英语的数据集。即使采用了这个过滤器,GPT-2 也展示了一些多语言能力的证据,并且在法语和英语之间翻译时,表现得非同寻常,尽管只对 10MB 的、过滤后残留的法语文本进行了训练。

    GPT-3 中我们将 GPT-2 的容量提高了两个数量级,而且我们也扩大了训练数据集的范围从而包括其它语言的更多 representation 。我们的大部分数据都是来自于原始的 Common Crawl ,只有基于质量的过滤。尽管 GPT-3 的训练数据仍然主要是英语(根据单词数来算,占比 93%),但是它也包括 7% 的其它语言的文本(参见论文中的补充材料)。为了更好地了解翻译能力,我们还包括了另外两种常用的研究语言:德语 German 和罗马尼亚语 Romanian

  2. 现有的无监督机器翻译方法通常将一对单语言数据集的预训练和 back-translation 相结合。相比之下,GPT-3 从混合的训练数据中学习,该数据以自然的方式将多种语言混合在一起,在单词、句子、和文档 level 将它们结合起来。

    GPT-3 还使用一个单一的训练目标,该目标不是为任何特定的任务定制或设计的。然而,我们的 one-shot/few-shot setting 不能严格地与先前的无监督工作相比较,因为我们的方法仅利用了少量的 paired 样本(1 个或 64 个)。这相当于最多一两页的 in-context training data

    结果如下表所示:

    • zero-shotGPT-3 ,仅接收任务的自然语言描述,仍然低于最新的无监督的神经机器翻译 neural machine translation: NMT 的结果。

    • one-shotGPT-3 ,仅为每项翻译任务提供单个样本,性能比 zero-shot 提高了 7 BLEU,并且接近与先前工作有竞争力的性能。

    • few-shotGPT-3 进一步提高了 4 BLEU,导致与先前的无监督神经机器翻译的平均性能相似。

    • GPT-3 的性能在语言类型方面有个明显的倾斜,在其它语言翻译到英语时显著优于先前的无监督神经机器翻译工作,但是在英语翻译到其它语言时表现不佳。这可能是由于重用了 GPT-2byte-level BPE tokenizer ,该 tokenizer 是为一个几乎完全是英语的训练数据集开发的。

      对于 Fr-EnDe-EnGPT-3few-shot 超越了我们能找到的最好的监督结果,但是我们对相关文献不熟悉并且看起来这些 benchmark 没什么竞争力,因此我们认为这些结果并不代表真正的 SOTA

      对于 Ro-EnGPT-3 的表现相比 SOTA 是在 0.5 BLEU 以内,而 SOTA 是通过无监督预训练以及对 608k 标记样本进行微调以及 back-translation 的组合来实现的。

  3. 最后,在所有的语言翻译和所有的三种 setting 中,随着模型容量的提高,有一个平滑的趋势。

    下图中,虚线是英语翻译到其它语言,实线是其它语言翻译到英语。

  4. 所有模型规模在所有翻译任务中的性能:

6.2.4 Winograd-Style Tasks

  1. Winograd Schemas ChallengeNLP 中的一项经典任务,它涉及确定代词指的是哪个词,其中这个代词在语法上是模糊ambiguous的但是在语义上对人而言是明确unambiguous 的。最近,经过微调的语言模型在原始的 Winograd 数据集上取得了接近人类的性能。但是对于更难的版本,如对抗性挖掘的 Winogrande 数据集,微调的语言模型仍然大大落后于人类的性能。

    我们在 WinogradWinogrande 上测试 GPT-3 的性能,在 zero-shot/one-shot/few-shot setting 中。

    • Winograd 上,GPT-3zero-shot/one-shot/few-shot setting 中分别取得了 88.3%/89.7%/88.6% 的成绩,没有显示出明显的 in-context learning,但是在所有情况下都取得了很强劲的结果,仅比 SOTA 和人类表现低一点点。

      我们注意到,污染分析在训练数据中发现了一些 Winograd schemas,但是这似乎仅对结果有很小的影响(见”衡量和防止对 benchmark 的记忆“ 章节)。

    • 在更难的 Winogrande 数据集上,我们确实发现了 in-context learning 的好处。GPT-3zero-shot/one-shot/few-shot setting 中分别取得了 70.2%/73.2%/77.7% 的成绩。作为比较,微调的 RoBERTa 模型实现了 79%SOTA 的是微调的高容量模型(T5)实现了 84.6%,而报告的人类任务表现为 94.0%

      不同 shot 的性能差异体现了 in-context learning 的好处。

  2. 所有模型规模在所有 Winograd-style 任务上的性能如下所示:

6.2.5 常识推理

  1. 我们考虑三个试图捕获物理推理physical reasoning 或科学推理 scientific reasoning 的数据集。

    • PhysicalQA: PIQA:提出了关于物理世界如何运作的常识性问题,旨在探测对世界的基础理解。GPT-3 实现了 81.0%/80.5%/82.8%zero-shot/one-shot/few-shot 准确率(few-shot是在 PIQAtest server 上测量的)。这与之前微调的 RoBERTa79.4% 的准确率相比更胜一筹,但是仍然比人类的表现差 10% 以上。

      我们的分析将 PIQA 标记为潜在的数据污染问题(尽管隐藏了 test label),因此我们保守地将该结果标记为星号。

    • ARC:是一个从三年级到九年级科学考试中收集的选择题数据集。该数据集的 Challenge 版本已经被过滤为:简单的统计方法或信息检索方法无法正确回答的问题。GPT-3 实现了 51.4%/53.2%/51.5%zero-shot/one-shot/few-shot 准确率。这接近于 UnifiedQA 的微调 RoBERTa baseline55.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 差得多。UnifiedQAChallenge 版本上比 GPT-3few-shot 超出 27%,在 Easy 版本上超出 22%

    • OpenBookQAGPT-3zero-shotfew-shotsetting 都有显著改善,但是仍然比整体 SOTA20 多个点。GPT-3few-shot 性能与排行榜上微调的 BERT Large baseline 相似。

    总而言之,使用 GPT-3in-context learning 在常识推理commonsense reasoning 任务上展示出mixed 的结果:在 PIQAARCone-shotfew-shotsetting 中仅观察到小的、不一致的收益(相对于 zero-shot),但是在 OpenBookQA 上观察到显著的改善。

    最后,GPT-3PIQA 数据集中,在所有 zero-shot/one-shot/few-shot setting 上达到了 SOTA

  2. 所有模型规模在所有常识推理任务上的性能:

6.2.6 阅读理解

  1. 我们使用包含五个数据集的一个 suite 进行阅读理解任务reading comprehension 的评估。我们观察到 GPT-3 的性能在这些数据集上有很大的差异,这表明它在不同的答案格式上有不同的能力。一般而言,我们观察到:GPT-3initial baseline 、以及在每个数据集上使用 contextual representation 训练的早期结果相当。

    • GPT-3CoQA 这个自由形式 free-form 的对话数据集上表现最好(与人类 baseline 差距在 3 个点以内)。
    • GPT-3QuAC 这个需要对结构化对话动作和师生互动的answer span selection 进行建模的数据集上表现最差(比 ELMo baseline13 F1 )。
    • DROP 这个测试离散推理discrete reasoning 和计算能力numeracy 的数据集上,GPT-3few-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%

  2. 所有模型规模在所有阅读理解任务上的性能:

6.2.7 SuperGLUE

  1. 为了更好地汇总 NLP 任务的结果,并以更系统的方式与 BERTRoBERTa 等流行模型进行比较,我们还在 SuperGLUE benchmark 上评估了 GPT-3GPT-3SuperGLUE 测试集上的性能如下表所示。在 few-shot setting 中,我们对所有任务都使用 32 个样本,从微调训练集中随机采样。

    • 对于除 WSCMultiRC 之外的所有任务,我们抽取新的一组样本作为每个问题的上下文(从而用于测试)。
    • 对于 WSCMultiRC 任务,我们使用从微调训练集中随机抽取的同一组样本作为我们评估的所有问题的上下文。

    我们观察到 GPT-3 在不同任务中的表现有很大差异:

    • COPAReCORD 上,GPT-3one-shot/few-shot setting 中达到了接近 SOTA 的性能。COPA 在排行榜上取得了第二名,仅比第一名(微调过的 110 亿参数的 T5 模型)差几分。

    • WSC 上,GPT-3few-shot setting 达到了 80.1% (注意,GPT-3 在原始 Winograd 数据集上达到了 88.6%,如前所述),性能还是比较强劲的。

    • BoolQ, MultiRC, RTE 上,GPT-3 的性能是 reasonable 的,大致与微调的 BERT-Large 相当。

    • CB 上,我们看到 GPT-3few-shot setting 中达到了 75.6%

    • WiC 是一个明显的弱点,few-shot 性能仅为 49.4% (接近于随机的选择)。我们为 WiC 尝试了许多不同的短语和表达式(这些涉及到确定一个词在两个句子中是否有相同的含义),但是没有一个能够取得强大的性能。这暗示了一个即将在下一节(ANLI benchmark )中变得更加清晰的现象:GPT-3 似乎在一些涉及比较两个句子或片段的任务中,在 few-shotone-shotsetting 中比较弱,例如,一个词是否在两个句子中以同样的方式使用(WiC),一个句子是否是另一个句子的转述 paraphrase ,或者一个句子是否暗示了另一个句子。这也可以解释为什么 RTECB 的得分相对较低,因为它们也遵循这种格式。

      尽管有这些弱点,GPT-3 仍然在八个任务中的四个任务上超越了微调的 BERT-Large,在其中的两个任务上接近微调的 110 亿参数的T5 模型所保持的 SOTA 水平。

  2. 最后,我们也注意到:随着模型规模和上下文中样本数量的增加,few-shotSuperGLUE 得分也稳步提高,展示出从 in-context learning 中获得的好处越来越多。我们将每个任务的 K 值扩大到 32 个样本,在这之后,额外的样本将不可能可靠地 fit 我们的上下文。

    当扫描所有的 K 值时,我们发现 GPT-3 需要每项任务至少 8total samples ,才能在整体 SuperGLUE score 上超越微调的 BERT-Large

    下图中,BERT-Large 参考模型是在SuperGLUE训练集(125k 个样本)上进行微调的,而BERT++首先在MultiNLI392k 个样本)和SWAG113k 个样本)上进行微调,然后在SuperGLUE训练集上进行进一步微调(总共630k 个微调样本)。我们发现BERT-LargeBERT++ 之间的性能差异大致相当于GPT-3中每个上下文 K=1K=8 个样本的差异。

  3. 所有模型规模在所有 SuperGLUE 任务上的性能:

6.2.8 NLI

  1. 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 的结果。这些关于 RTEANLI 的结果表明:NLI 对于语言模型而言,仍然是一个非常困难的任务,它们只是刚刚开始显示出进步的迹象。

    下图是验证集上的结果,由于验证集仅包含 1500 个样本,因此结果的方差很大(我们估计的标准差为 1.2% )。我们发现较小的模型在随机概率附近徘徊。

  2. 所有模型在所有 ANLI 任务上的性能:

6.2.9 合成的和定性的任务

  1. 探索 GPT-3few-shot setting (或 zero-shot/one-shot setting)下的能力范围的一种方法是:给它布置任务,这些任务要求模型进行简单的 on-the-fly 计算推理、识别训练中不可能出现的新模式、或迅速适应一个不常见的任务。我们设计了几个任务来测试这类能力:

    • 首先,我们测试 GPT-3 进行算术的能力。
    • 其次,我们设计了几个任务,涉及到重排列rearranging 、或者解扰unscrambling 单词,这些任务在训练过程中不太可能被完全看到。
    • 第三,我们测试 GPT-3 解决 SAT-style 的类比analogy 问题的能力。
    • 最后,我们在几个定性任务上测试 GPT-3 ,包括在一个句子中使用新词、纠正英语语法、以及新闻文章的生成。

    我们即将发布合成数据集 synthetic dataset,希望能够激励对语言模型测试期间行为的进一步研究。

a. 算术
  1. 为了测试 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 个随机任务实例组成的数据集,并在这些实例上评估所有模型。

  2. 首先,我们评估 GPT-3few-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)有一个明显的跳跃。

  3. 如上图所示,小一些的模型在所有这些任务上的表现都很差,即使是 130 亿个参数的模型也只能解决一半的两位数加减运算,而在所有其它运算上的准确率都不到 10%

  4. one-shotzero-shot 的性能相对于 few-shot 而言有所下降,这表明对任务的适应(或者至少是对任务的识别)对正确执行这些计算很重要。然而,one-shot 性能仍然相当强大,甚至 GPT-3 175Bzero-shot 性能也显著优于所有小一些模型的 one-shot 。下表给出了完整的 GPT-3 的所有三种 setting

  5. 为了抽查模型是否只是在记忆特定的算术问题,我们把测试集中的三位数算术问题以 <NUM1> + <NUM2> =<NUM1> plus <NUM2> 两种形式在训练数据中进行搜索。在 2000 个加法问题中,我们只发现了 17 个匹配的答案(0.8% )。在 2000 个减法问题中,我们仅发现了 2 个匹配的答案(0.1%)。这表明只有一小部分的正确答案可以被记住。

    此外,对错误答案的检查显示:模型经常在诸如没有进位 1 这种问题上犯错,这表明模型实际上是在尝试进行相关的计算,而不是记忆一个表格。

    进位 1:例如 3 + 9 = 12,十位上的数字 1 就是一种进位。如果没有进位 1,就变成 3 + 9 = 2

    总体而言,GPT-3few-shot/one-shot 甚至 zero-shotsetting 中对复杂的算术表现出 reasonable 的熟练性 proficiency

  6. 所有模型规模在所有算术任务上的性能:

b. 单词扰乱和操作任务
  1. 为了测试 GPT-3 从几个样本中学习新的 symbolic manipulation 的能力,我们设计了一组 5character 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 的结果(K=100)。任务性能随着模型大小的增加而趋于平稳增长。 GPT-3 175B 模型在 RI 任务上取得了 66.9% 的成绩,在 CL 任务上取得了 38.6% 的成绩,在 A2 任务上取得了 40.2% 的成绩,在 A1 任务上取得了 15.1% 的成绩(这个任务比 A2 更难,因为只有第一个字母和最后一个字母被固定)。没有一个模型能完成 RW 任务。

    图形有误?根据后面的图表,GPT-3 175Bone-shot/few-shot setting 中在 RW 任务上的准确率为 0.48/0.44

    one-shot setting 中,表现明显较弱(下降一半或更多)。而在 zero-shot setting 中,模型很少能够完成任务(如下表所示)。这表明模型确实在测试期间学习了这些任务,因为模型无法 zero-shot 执行,而这些任务是人工构造的因此不太可能出现在预训练数据集中(尽管我们不能肯定地确认这一点)。

  2. 我们可以通过绘制 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 中学习一个任务的能力越好。

  3. 最后,值得补充的是,解决这些任务需要 character-level 操作,而我们的 BPE 编码是在单词的 significant fraction 上操作的(平均每个 token 约为 0.7 个单词),所以从语言模型的角度来看,成功完成这些任务不仅需要操作 BPE token,还需要理解和拉开 pulling apart 它们的子结构。

    另外,CL, A1, A2 不是一一映射(也就是说,解扰的单词unscrambled word 不是扰动的单词 scrambled word 的确定函数),需要模型进行一些搜索从而找到正确的 unscrambling 。因此,所涉及的技能似乎需要模式匹配和计算。

  4. 所有模型在所有 scramble 任务上的性能:

    图表有误,Wordscramble(few-shot) 图中的 reversed words(紫色曲线)与 reversed words 图对不上。

c. SAT 类比
  1. 我们收集了一组 374SAT analogy 问题。类比 analogy 是一种选择题的风格,在 2005 年之前构成了 SAT 大学入学考试的一个部分。一个典型的例子是:

    学生需要选择这五个 word pair 中的哪一个与原始的 word pair 有相同的关系。在这个例子中,答案是 sanctimonious is to hypocrisy

    在这个任务中,GPT-3few-shot/one-shot/zero-shot setting 中达到 65.2%/59.1%/53.7% 的准确率。相比之下,大学申请人的平均得分是 57%,随机猜测的得分是 20% 。如下图所示,结果随着模型规模的扩大而提高,与 130 亿个参数的模型相比, GPT-3 175B 提高了 10% 以上。

    不同模型规模之间的效果差异越大,则越表明 in-context learning 的价值。

d. 新闻文章生成
  1. GPT-2 定性地测试了生成人工合成的新闻文章的能力:给定人写的 prompt (由似是而非的新闻故事的第一句话组成),然后模型进行条件采样。相对于 GPT-2GPT-3 的训练数据集中新闻文章的占比要小得多,因此试图通过原始的无条件采样来生成新闻文章的效果较差。例如,GPT-3 经常将新闻文章的第一句话解释为一条推文,然后发布合成的 response 或者 follow-up 推文。

    为了解决这个问题,我们通过在模型的上下文中提供三篇previous 的新闻文章作为条件,运用了 GPT-3few-shot learning 能力。基于新闻的标题和副标题,GPT-3 能够可靠地生成新闻体裁的短文。

  2. 为了衡量 GPT-3 新闻文章的生成质量,我们决定测量人类区分 GPT-3 生成的文章和真实文章的能力。为此,我们从 newser.com 网站上任意选择了 25 个文章的标题和副标题(平均长度 215 个单词)。然后我们从四个语言模型中生成了这些标题和副标题的 completion ,这些模型的大小从 125M175B 的参数规模。对于每个模型生成的结果,我们向大约 80 民美国的参与者展示了一个测验:真实的标题和副标题,后面跟着人类写的文章或模型生成的文章。参与者要求指出该文章是否是:“非常可能是人写的”、“更可能是人写的”、“我不知道”、“更可能是机器写的”、“非常可能是机器写的”。

    我们选择的文章不在模型的训练集中,模型的输出被格式化从而以程序化方式选择,从而防止人为的精挑细选。所有的模型都使用相同的上下文来条件输出,并以相同的上下文大小来进行预训练,而且每个模型都使用相同的文章标题和副标题作为 prompt 。然而,我们也做了一个实验来控制参与者的努力和注意力,这个实验遵循相同的格式,但是故意让模型生成的文章变差。这是通过从一个 control model 生成文章来实现的:一个没有上下文以及被增加了输出随机性的 160M 参数的模型。

    • 对于故意的坏文章(根据 control model 生成的),人类检测出它是由模型生成的平均准确率(每个参与者的正确回答与非中性答案的比率)是大约 86% ,其中 50% 是偶然水平的表现。

      相比之下,人类检测出由 175B 参数模型生成的文章的平均准确率仅有 52%,略高于偶然水平(参考下表)。下表还显示了每个模型与control model之间平均准确率差异的 two-sample T-Test 的结果。

    • 人类检测模型生成的文本的能力似乎随着模型大小的增加而降低:随着模型大小的增加,似乎有一个趋向于偶然准确率的趋势。此外,随着模型大小的增加,参与者在每个输出上花费更多的时间。

      下图中,最佳拟合线是一个具有 95% 置信区间的幂律power law 曲线。

  3. 下图给出了 GPT-3 的合成文章的例子。正如评价所展示的那样,许多文本对于人类而言很难与真实的人类内容区分开来。事实不准确 factual inaccuracy 可能是一个指标来判断文章是模型生成的,因为与人类作者不同,模型无法获得文章标题所指的具体事实或文章的写作时间。其它指标包括:重复 repetition、非连续性、不寻常的措辞 unusual phrasing

  4. 《Automatic detection of generated text is easiest when humans are fooled》 关于语言模型检测的相关工作表明:像 GROVERGLTR 这样的自动判别器 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 继续生成人类难以区分的文章。

e. 学习使用新颖的单词
  1. 发展语言学developmental linguistics 研究的一项任务是学习和利用新词的能力,例如在仅看到一次某个单词的定义之后使用该单词,或者相反(仅看到某个单词的一次用法之后推断出该词的含义)。这里我们对 GPT-3 在前者的能力上进行定性测试。具体而言,我们给 GPT-3 提供一个不存在的单词的定义,如 Gigamuru ,然后要求 GPT-3 在一个句子中使用它。

    我们提供了前面的一到五个样本,这些样本包括一个不存在的单词的定义以及在一个句子中使用。因此,对于这些previous 样本而言是 few-shot,但是对于这个具体的新颖的单词而言是 one-shot

    下表给出了我们生成的六个样本。所有的定义都是人类生成的,第一个答案是人类生成的作为条件,而后面的答案则是 GPT-3 生成的。这些例子是一次性连续生成的,我们没有遗漏或重复尝试任何 prompt 。在所有情况下,生成的句子似乎都是对该单词的正确或者至少是合理的使用。在最后一个句子中,模型为 screeg 一词生成了一个合理的连接词(即 screeghed),尽管该词的使用略显突兀。总体而言,GPT-3 似乎至少能熟练地完成在句子中使用新词的任务。

    黑体字是 GPT-3completion ,纯文本是人类的prompt 。在第一个样本中,promptcompletion 都是由人类提供的,然后作为后续样本的条件,其中 GPT-3 收到 successive additional prompts 并提供completions 。除了这里显示的条件外,没有任何 task-specific 的信息提供给 GPT-3

f. 纠正英语语法
  1. 另一项非常适合 few-shot learning 的任务是纠正英语语法。我们测试 GPT-3few-shot learning 下的表现,给出的 prompt 形式是:Poor English Input: <sentence>\n Good English Output: <sentence> 。我们为 GPT-3 提供一个人类生成的纠正,然后要求模型再纠正五个,结果如下图所示。

    黑体字是 GPT-3completion ,纯文本是人类的prompt 。在最初的几个样本中,promptcompletion 都是由人类提供的,然后作为后续样本的条件,其中 GPT-3 收到 successive additional prompts 并提供completions 。除了这里显示的几个样本作为条件和 Poor English input/Good English output 框架以外,没有任何 task-specific 的信息提供给 GPT-3

    我们注意到:poorgood 英语之间的差异是复杂 complex 的、contextual 的、有争议contested 。正如提到房屋租赁的例子所示,模型对什么是 good 假设甚至会导致它出错(在这里,模型不仅调整了语法,而且还以改变含义的方式删除了 cheap 一词)。

6.3 衡量和防止对 benchmark 的记忆

  1. 由于我们的训练数据集来自于互联网,我们的模型有可能是在某些 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的不同,而不是过拟合。

  2. 我们最初试图通过主动搜索并消除我们训练数据中与所有 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 就认为是污染。其实这里有很多是假阳性。

  3. 接下来我们更详细地调查一些具体的案例。在这些案例中,要么模型在清理后的版本上表现明显更差,要么潜在的污染非常高使得测量性能差异变得困难。

    我们分析出六组需要进一步调查的 benchmark,包括 Word ScramblingReading ComprehensionQuACSQuAD2DROP)、PIQAWinogradlanguage modeling taskWikitext1BW)、以及 German to English translation 。由于我们的 overlap 分析被设计得极为保守,因此我们预计它将产生一些假阳性false positive结果。

    • 阅读理解:我们最初的分析将来自 QuACSQuAD2DROP90% 以上的任务样本标记为潜在的污染,这个比例如此之大以至于在一个干净的子集上测量差异都很困难(子集太小)。然而,经过人工检查,我们发现:对于我们检查的每一个 overlap,在所有的三个数据集中,源文本存在于我们的预训练数据集中,但是 question/answerpair 却不存在,这意味着模型仅获得背景信息,无法记住特定问题的答案。

    • 德文翻译:我们发现 WMT16 German-English 测试集中有 25% 的样本被标记为潜在的污染,对应的总效果为 1-2 BLEU 。经检查,没有一个标记污染的样本包含与神经机器翻译训练数据相似的 paired sentence ,碰撞是单语匹配monolingual match,主要是新闻中讨论的事件片段。

    • 反转词和变形词anagrams:这些任务的形式是:alaok = koala 。由于这些任务的文本长度较短,我们使用 2-grams 进行过滤(忽略标点符号)。在检查了被标记的重叠 flagged overlap 之后,我们发现它们通常不是训练集中真正的反转或解扰的样本,而是回文或不重要的解扰,如 kayak = kayaoverlap 的数量很少,但是移除这些不重要的任务 trivial tasks 会导致难度的增加,从而产生虚假的信号。

      与此相关,symbol insertion 任务显示出比较高的 overlap,但是对成绩没有影响。这是因为该任务涉及从一个单词中删除非字母的字符,而 overlap analysis 本身忽略了这些字符,导致了许多虚假的匹配。

    • PIQA:重叠分析将 29% 的样本标记为污染,并观察到 clean 子集的性能绝对下降了 3% (相对下降 4%)。虽然测试集是在我们的训练集创建之后发布的,而且其 labelhidden 的,但是众包数据集创建者使用的一些网页也被包含在我们的预训练数据集中。我们发现,在一个 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

  4. 我们还检查了污染程度较高但是对性能影响接近于零的数据集,仅仅是为了验证实际存在的污染程度。这些数据集似乎经常包含 假阳性 false positive :要么没有实际的污染,要么虽然有污染但是没有泄露任务的答案。

    一个明显的例外是 LAMBADA ,它似乎有大量真正的污染,但是对性能的影响非常小,clean 子集的得分在完整数据集的 0.5% 以内。另外,严格而言,我们的 fill-in-the-blank 格式排除了最简单的 memorization 的形式。尽管如此,由于我们在本文中在 LAMBADA 上取得了非常大的收益,所以在这里指出了潜在的污染。

  5. 我们污染分析的一个重要限制是:我们无法确定clean子集是来自原始数据集相同的分布。还有一个可能是:memorization 夸大了结果(使得污染数据集上效果更好),但是同时又恰恰被一些统计上的 bias 所抵消(干净数据集更简单所以效果也很好),导致 clean 子集的效果持平。然而,shift 接近于零的任务数量非常多,从而表明这是不可能的。而且我们也观察到小模型的 shift 没有显著的差异,这不太可能是记忆的。

  6. 总之,我们已经尽了最大努力来衡量和记录数据污染的影响,并根据严重程度来分析或直接删除有问题的结果。在设计 benchmark 和训练模型时,要解决这个对于整个领域而言重要而微妙的问题,还有很多工作要做。关于我们分析的更详细的解释,参考附录。

6.4 局限性

  1. GPT-3 以及我们对它的分析都存在一些局限性:

    • 首先,尽管 GPT-3 在数量和质量上都有很大的改进,尤其是和它的直接前身 GPT-2 相比,但是它在文本合成和几个 NLP 任务中仍然有显著的弱点。

      • 在文本合成方面,虽然整体质量很高,但是 GPT-3 样本有时仍会在 document-level 重复自己的语义。在较长的段落中开始失去连贯性,自相矛盾,以及偶尔包含非连续的句子或段落。我们将发布一个由 500个 未经整理的无条件unconditional 的样本组成的集合,以帮助更好地了解 GPT-3在文本合成方面的限制和优势。

        即,生成长文本的性能不行。

      • 在离散discrete 的语言任务领域,GPT-3 似乎在 "常识性物理 "方面有特殊的困难,尽管在测试这一领域的一些数据集(如PIQA)上表现良好。具体来说,GPT-3 对 ”如果我把奶酪放进冰箱,它会融化吗?“ 这类问题有困难。

        即,无法处理常识性问题。

      • 从数量上看,GPT-3in-context learning 性能在我们的 benchmarksuite 上有一些明显的差距,特别是在一些 “比较” 任务上,例如确定两个词在一个句子中的使用方式是否相同(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(涉及比较两个句子,看其中一个句子是否暗示另一个句子)、以及几个阅读理解任务(如QuACRACE)。

      根据过去的文献,我们还猜想:一个大型的双向模型在微调方面会比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 的内容)从社会的角度来看是特别值得关注的,并将在下一节中讨论。

6.5 广泛的影响

  1. 语言模型对社会有广泛的有益的 application,但它们也有潜在的有害的 application 。这里,我们着重讨论语言模型的潜在危害,并不是因为我们认为危害一定更大,而是为了研究和减轻危害。像GPT-3 这样的语言模型所带来的更广泛的影响是很多的,这里我们主要关注两个主要问题:

    • 潜在地故意滥用GPT-3等语言模型。
    • GPT-3 等模型中的 biasfairnessrepresentationissue

    我们还简要地讨论了能源效率energy efficiency 问题。

6.5.1 滥用语言模型

  1. 语言模型的恶意使用在某种程度上很难预测,因为它们往往涉及在一个非常不同的环境中重新利用语言模型,或者用于与研究人员意图不同的目的。为了帮助解决这个问题,我们可以从传统的安全风险评估框架security risk assessment framework 来考虑,该框架概述了一些关键步骤,如识别威胁和潜在影响、评估可能性,以及确定将风险作为可能性和影响的组合。我们讨论三个因素:潜在滥用的application 、威胁行主体 threat actor 、外部激励结构external incentive structure

  2. 潜在滥用的application :社会上,任何依赖于生成文本的有害活动都可以被强大的语言模型所增强。这方面的例子包括错误信息misinformation、垃圾邮件、网络钓鱼、滥用法律和政府程序、欺诈性的学术论文写作、以及社交工程的假托social engineering pretexting(假托是一种社交工程的形式,其中个体通过欺诈来获取特权数据)。许多这些application 的瓶颈在于写出足够高质量的文本。能产生高质量文本的语言模型可以降低开展这些活动的现有障碍,并提高其效果。

    语言模型滥用的潜力随着文本合成质量的提高而增加。在前面章节中,GPT-3 有能力生成几段人们难以区分的合成内容,这代表了这方面的一个令人担忧的里程碑。

  3. 威胁主体分析:威胁主体actor 可以按照技能和资源水平来组织,从低级或中级技能和资源的主体(他们可能能够建立一个恶意产品)、到 ”高级持续性威胁“ advanced persistent threats: APTs(他们具有长期规划的高技能和资源丰富的团体,如国家支持的)。

    • 为了了解中低技能的主体是如何思考语言模型的,我们一直在监测那些经常讨论 misinformation战术、恶意软件发布、以及计算机欺诈的论坛和聊天组。虽然我们确实发现在 2019 年春季首次发布 GPT-2 之后有大量关于滥用的讨论,但我们发现自那时以来,实验的实例较少,也没有成功的部署。此外,这些滥用的讨论与媒体对语言模型技术的报道相关联。由此,我们评估,来自这些主体的滥用威胁并不紧迫,但可靠性的重大改进可能会改变这种情况。
    • 由于 APT 通常不在公开场合讨论,我们已经向专业的威胁分析人员咨询了涉及使用语言模型的可能APT活动。自GPT-2发布以来,在可能通过语言模型获得潜在收益的操作方面,我们没有看到明显的区别。评估结果是:语言模型可能不值得投入大量资源,因为没有令人信服的证据表明目前的语言模型明显优于目前生成文本的方法,而且 targetingcontrolling 语言模型内容仍处于非常早期的阶段(即,语言模型的生成内容不受控)。
  4. 外部激励结构:每个威胁主体团队也有一套战术tactics、技术techniques 和程序proceduresTTPs),他们依靠这些来完成他们的规划agendaTTPs受到经济因素的影响,如可扩展性和部署的便利性。网络钓鱼在所有团体中都非常流行,因为它提供了一种低成本、低努力、高收益的方法来部署恶意软件和窃取登录凭证login credentials 。使用语言模型来增强现有的 TTP,可能会导致更低的部署成本。

    易用性是另一个重要的激励因素。拥有稳定的基础设施对 TTP 的采纳 adoption 有很大影响。然而,语言模型的输出是随机的,尽管开发者可以约束语言模型的输出(例如使用 top-k截断),但在没有人类反馈的情况下,模型无法稳定地执行。如果一个社交媒体的虚假信息机器人disinformation bot99% 的时间里产生可靠的输出,而在1%的时间里产生不连贯的输出,这仍然可以减少操作这个 bot 所需的人力成本。但是,仍然需要人工过滤输出,这限制了操作的scalable

    根据我们对这个模型的分析以及对威胁主体和环境的分析,我们怀疑人工智能研究人员最终会开发出足够一致的和可引导steerable的语言模型,从而使恶意主体对它们更感兴趣。我们预计这将为更广泛的研究界带来挑战,并希望通过缓解研究、原型设计、以及与其他技术开发人员协调等等的组合来解决这个问题。

6.5.2 Fairness, Bias, and Representation

  1. 训练数据中存在的bias 可能导致模型产生刻板stereotyped 的或偏见prejudiced 的内容。这是令人担忧的,因为model bias 可能会以不同的方式伤害相关群体的人。我们对模型中的bias 进行了分析,以便更好地理解GPT-3fairness, bias, and representation 方面的局限性。这里我们专注于与性别、种族和宗教有关的bias

    大体上,我们的分析表明:

    • 互联网训练的模型具有internet-scale bias
    • 模型倾向于反映其训练数据中存在的刻板印象 stereotype
  2. 性别:在我们对性别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 衡量为:

    1njobsjobslogP(female | Context)P(male | Context)

    那么平均的 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 的输出,温度为1top-p = 0.9 。对于性别,我们有诸如 He was veryShe was veryHe would be described asShe would be described asprompt

      我们使用一个现成的POS tagger 查看了top 100 最受欢迎的词语中的形容词和副词。我们发现,女性更经常使用 beautifulgorgeous 等以外表为导向的词语来描述,而男性则更经常使用范围更广的形容词来描述。

      下表显示了模型中 top 10 最受欢迎的描述性词语,以及每个词语与代词指示器 pronoun indicator 共现的原始次数。“最受欢迎” 表示那些最偏向于某一类别的词,与其他类别相比,它们的共现较高。为了正确看待这些数字,我们还包括了每个性别的所有 qualifying word的平均共现次数。

  3. 种族:为了研究 GPT-3 中的种族偏见racial bias ,我们在模型中加入了一些prompt ,如:The {race} man was veryThe {race} woman was veryPeople would describe the {race} person as ,并为上述每个prompt 生成了 800个样本,其中 {race} 被一个表示种族类别(如白人White 或亚洲人Asian )的术语取代。然后,我们测量生成的样本中的单词共现word co-occurrence。鉴于先前的研究表明,当改变职业等特征时,语言模型会产生不同情感的文本,我们探索了种族对情感的影响。我们使用Senti WordNet 测量了与每个种族共现的词语的情感。每个单词的情感从100-100 不等:正的分数表示positive word (如wonderfulness: 100amicable: 87.5),负的分数表示negative word(如wretched: -87.5horrid: -87.5),0分表示中性词(如slopingchalet)。

    应该注意的是,我们明确提示prompting模型谈论种族,这反过来又产生了聚焦种族特征的文本。这些结果不是来自于模型在自然环境下谈论种族,而是在一个实验环境中谈论种族。

    此外,由于我们是通过简单地查看单词的共现来测量情感的,所产生的情感可以反映社会历史因素。例如,与奴隶制的讨论有关的文本经常会有负面的情感,这可能导致在这种测试方法下的统计结果与负面的情感有关。

    在我们分析的模型中,Asian 的情感分一直很高,它在7个模型中的3个中排在第一位。另一方面,Black 的情感分一直很低,在7个模型中的5个中排名最低。这些差异在较大的模型规模中略有缩小。这一分析让我们了解到不同模型的bias ,并强调需要对情感、实体和输入数据之间的关系进行更复杂的分析。

  4. 宗教:我们研究了哪些单词与无神论Atheism、佛教Buddhism、基督教Christianity、印度教Hinduism、伊斯兰教Islam和犹太教Judaism相关的宗教术语共现。我们对每个 prompt 产生 800 个长度为50的模型输出,其中温度为1top p = 0.9。针对上述六个宗教类别中的每一个,我们的prompt{Religion practitioners} are ,例如 Christians are 。然后,我们让模型自然地进行补全completion ,并创建了一个这种 completion 的语料库,以研究单词的共现。下面是该模型输出的一个例子:

    与种族类似,我们发现模型对宗教术语进行关联从而表明有一些倾向性。例如,对于伊斯兰教,我们发现诸如斋月ramada、先知prophet、清真寺mosque等单词的共现比其他宗教高。我们还发现,诸如暴力violen、恐怖主义terrorism、恐怖分子terrorist等单词在伊斯兰教中的共现高于其他宗教,并且在GPT-3中,这些单词是伊斯兰教最受欢迎的top 40 个单词。

  5. 进一步的 biasfairness 挑战:我们提出这个初步分析,是为了分享我们发现的一些bias ,以激励进一步的研究,并强调在大规模生成模型中刻画bias 的内在困难。我们期望这将是我们持续研究的一个领域,并很高兴与社区讨论不同的方法论。 我们认为本节的工作是主观的路标:我们选择了性别、种族和宗教作为出发点,但我们承认这种选择有其固有的主观性。我们的工作受到了关于描述模型属性以开发informative 标签的文献的启发,例如来自《Model cards for model reporting》的模型报告的Model Card

    最终,重要的不仅仅是刻画语言系统中的bias,而且要进行干预。这方面的文献也很丰富,所以我们只对大型语言模型特有的未来方向提供一些简单的评论。为了给通用模型的effective bias prevention铺平道路,有必要建立一个 common vocabulary ,将这些模型的normativetechnicalempirical 的关于缓解 bias 的挑战联系起来。缓解工作不应该纯粹以指标驱动的目标来 ”消除“ bias ,因为这已被证明有盲点,而是以整体的方式来处理。

6.5.3 能源使用

  1. 实际的大规模预训练需要大量的计算,而这是能源密集型的:训练GPT-3 175B 在预训练期间消耗了几千 petaflop/s-day的计算,而 1.5B 参数的 GPT-2 模型只需要几十 petaflop/s-day,如下图所示。这意味着我们应该认识到这种模型的成本和效率。

    下图中,尽管 GPT-3 3BRoBERTa-Large355M参数)几乎大10倍,但两个模型在预训练期间都花费了大约 50 petaflop/s-day 的计算。

  2. 大规模预训练的使用也提供了另一个视角来看待大型模型的效率:我们不仅要考虑训练模型的资源,还要考虑这些资源是如何在模型的生命周期内摊销的,这些资源随后将被用于各种目的,并针对具体任务进行微调。尽管像 GPT-3 这样的模型在训练过程中会消耗大量的资源,但一旦训练完成,它们的效率就会出奇的高:即使使用完整的 GPT-3 175B,从一个训练好的模型中生成 100 页的内容也只需要 0.4千瓦-小时的成本,或者只需要几分钱的能源成本。

    此外,像模型蒸馏这样的技术可以进一步降低这类模型的成本,使得我们采用这样的一种范式 paradigm:训练单一的大规模模型,然后创造更有效的版本从而用于适当的环境。

    随着时间的推移,算法的进步也会自然而然地进一步提高此类模型的效率,这与图像识别和神经机器翻译中观察到的趋势相似。

6.6 附录

6.6.1 Common Crawl 过滤的细节

  1. 我们采用了两种技术来提高 Common Crawl 数据集的质量:过滤Common Crawl 、模糊去重 fuzzy deduplication

    • 过滤Common Crawl :为了提高 Common Crawl 的质量,我们开发了一种自动过滤的方法来去除低质量的文档。我们认为原始的WebText 是高质量文档,然后训练了一个分类器来区分WebText 和原始的Common Crawl。然后,我们使用这个分类器对原始的Common Crawl 进行重新分类,优先处理那些被分类器预测为质量较高的文档。

      该分类器是使用逻辑回归分类器训练的,其特征来自 Spark 的标准的 tokenizerHashingTF

      • 对于正样本,我们使用了精心处理的数据集,如WebTextWikiedia 和我们的网络书籍语料库。
      • 对于负样本,我们使用未经过滤的Common Crawl

      我们使用这个分类器对 Common Crawl文档进行评分。如果满足以下条件,则对 Common Crawl 中的文档进行保留:

      np.random.parato(α)>1document-score

      其中我们选择了 α=9,以便保留大部分被分类器打高分的文档,但是仍然包含一些 out of distribution 的文档。α 的选择是为了与我们的分类器在 WebText 上的分数分布相匹配。我们发现这种重新加权re-weighting提高了数据质量(数据质量是由一系列 out-of-distribution的、生成式文本样本的损失所衡量)。

    • 为了进一步提高模型质量,防止过拟合(随着模型容量的增加,过拟合变得越来越严重),在每个数据集中,我们使用SparkMinHashLSH 实现了10hash ,使用与上述分类相同的特征,模糊去重文档(即移除与其他文档高度重叠的文档)。我们还模糊地fuzzilyCommon Crawl 中删除了WebText。总体而言,这使数据集的大小平均减少了 10%

    在对重复性和质量进行过滤后,我们还部分删除了benchmark 数据集中出现的文本。

6.6.2 模型训练的细节

  1. 所有版本的 GPT-3 的训练配置:

    • 使用 β1=0.9,β2=0.95,ϵ=108Adam 优化器。
    • 将梯度的 global norm 裁剪为不超过1.0
    • 使用余弦学习率,其中在 260Btoken 之后学习率降低到最大值的 10% ,并以这个学习率继续训练。
    • 在刚开始的 3.75 亿个 token,有一个线性的学习率 warmup
    • 在刚开始的 4B ~ 12Btoken 中,我们逐渐将 batch size 从一个较小的值(32k token)线性地增加到 full value (这个 full value 取决于模型的大小)。
    • 在训练过程中,我们对数据进行无放回采样(直到到达一个 epoch 的边界),从而尽量减少过拟合。
    • 所有模型都使用 0.1weight decay 来提供少量的正则化。
  2. 在训练过程中,我们总是在完整的 nctx=2048token context window 的序列上进行训练。当文档短于 2048 token 时,我们将多个文档打包成一个序列,以提高计算效率。有多个文档的序列不以任何特殊的方式进行mask ,而是用一个特殊的文本结束符来划分序列中的文档,从而为语言模型提供必要的信息,从而推断出由这个特殊的文本结束符分开的context 是无关的。

6.6.3 测试集污染研究的细节

  1. 初始的训练集过滤:我们试图通过搜索所有测试集/验证集和我们的训练数据之间的13-gram 重叠,从而在训练数据中删除出现在benchmark 中的文本。我们删除了命中的 13-gram 以及它周围的200个字符的窗口,将原始文件分割成碎片。出于过滤的目的,我们将 gram 定义为一个小写的、以空格为界的、没有标点符号的单词。

    • 长度小于200个字符的碎片被丢弃。
    • 被分割成10个以上碎片的文件被认为是被污染的,并被完全删除。
    • 最初,只要命中了一次 13-gram 我们就删除了整个文件,但这过度地惩罚了长文件,如书籍的 false positive (可能测试集文章仅引用了一本书中的一句话而已)。
    • 我们忽略了与10 篇以上训练文档命中的13-gram ,因为检查显示这些 13-gram 大多包含常见的短语、法律模板或类似的内容。我们希望模型能够学习这些,而不是移除这些重叠。
  2. 重叠方法论:对于我们在前文中的 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 文档。

    由于这个分析所揭示的一个错误,上述的过滤在长文档(如书籍)上失败了。由于成本的考虑,在训练数据集的修正版上重新训练模型是不可行的。因此,几个语言建模 benchmarkChildren’s Book Test: CBT 几乎完全重叠,因此没有包括在本文中。

    下表为从最 dirty 到最 clean 排序的所有数据集的重叠统计。如果一个数据集的样本与我们预训练语料库中的任何文档有一个N-gram碰撞,我们就认为该样本是脏的。其中:

    • Relative Difference Clean vs All 表示在 benchmark 中只包含 clean 样本与包含所有有本之间的性能变化百分比。
    • Count 表示样本数量,Clean percentage 表示 clean 样本占所有样本的百分比。
    • Acc/F1/BLEU 表示对应的评估指标。

    这些分数来自于不同的随机数种子,因此与本文中其他地方的分数略有不同。

  3. 重叠结果:为了了解看过一些数据后对模型在下游任务中的表现有多大帮助,我们通过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 对污染相对不敏感。

6.6.4 训练语言模型的计算量

  1. 下图给出了语言模型训练的近似计算量。作为一个简化的假设,我们忽略了注意力操作,因为对于这些模型而言,注意力操作通常占用不到总计算量的10%

    计算量结果可以下表中看到,并在表的标题中进行了解释。

    • 最右列,先看每个训练 token 的参数量。由于T5 使用的是encoder-decoder 模型,在前向传播或反向传播过程中,每个token 只有一半的参数是活跃的。
    • 然后我们注意到:在前向传播中,每个token 都参与了每个活跃参数的一次加法和一次乘法(忽略了注意力)。然后我们再加上一个3 倍的乘数,以考虑到反向传播(因为计算 paramslossactsloss 使用的计算量与前向传递相似)。
    • 结合前面两个数字,我们得到每个参数每个token 的总运算量。我们用这个值乘以总的训练token 数量和总的参数量,得出训练期间使用的总flops 数。我们同时报告了flopspetaflop/s-day

6.6.5 合成新闻文章的人工质量评估

  1. 这里包含了测量人类区分GPT-3生成的合成新闻文章和真实新闻文章能力的实验细节。我们首先描述了对200 个单词的新闻文章的实验,然后描述了500 个单词的新闻文章的初步调查。

  2. 参与者:我们招募了718 名参与者来参加6个实验。97名参与者因未能通过 internet check question 而被排除,剩下的共有621名参与者:343名男性,271名女性,以及7名其他。

    • 参与者的平均年龄为38岁。
    • 所有参与者都是通过Positly招募的,Positly拥有一份来自Mechanical Turk的高绩效工作者白名单。
    • 所有参与者都是美国人,但没有其他方面的限制。
    • 参与者的报酬是12美元,根据试运行确定的60分钟的任务时间估算。
    • 为了确保每次实验测验的参与者样本都是独一无二的,参与者不允许参加一次以上的实验。
  3. 程序和设计:我们任意选择了2020年初出现在 newser.com25篇新闻文章。我们使用文章的标题和副标题来产生125M350M760M1.3B2.7B6.7B13.0B200BGPT-3)个参数的语言模型的输出。每个模型对每个问题产生五个输出,并自动选择字数最接近人类写的文章的输出。这是为了尽量减少文本长度对参与者判断的影响。每个模型的输出程序都是一样的,只是去掉了 intentionally bad control model ,如正文中所述。

    在每个实验中,一半的参与者被随机分配到 quiz A,一半被随机分配到 quiz B。每个quize25 篇文章组成:一半(12-13)是人写的,一半(12-13)是模型生成的。

    • quiz A 中人写的文章在 quiz B 被模型自动生成。
    • quiz B 中人写的文章在 quiz A 被模型自动生成。

    测验问题的顺序对每个参与者都是随机的。参与者可以留下评论,并被要求说明他们以前是否看过这些文章。参与者被要求在测验期间不要查找文章或其内容,在测验结束时被问及他们在测验期间是否查找过任何东西。

  4. 统计学测试:为了比较不同运行中的平均值,我们对每个模型与control model进行了独立组的 two-sample t-test 。这是在Python中使用scipy.stats.ttest_ind 函数实现的。在绘制参与者平均准确度与模型大小的regression line 时,我们拟合了一个 axb 形式的幂律。95% 的置信区间是从样本平均值的 t 分布中估计出来的。

  5. 时间统计:在正文中,我们讨论了这样的发现:随着我们的模型变大,人类参与者区分模型产生的和人类产生的新闻文章的能力也会下降。

    我们还发现,随着模型大小的增加,一组特定问题的平均时间也在增加,如下图所示。尽管参与者投入的时间增加,但准确率较低,这支持了更大的模型产生更难区分的新闻文章这一发现。下图中,虚线表示 controlmodel 。最佳拟合曲线是一个具 有95% 置信区间的对数尺度的线性模型。

  6. ~ 500 个单词的文章的初步调查: 我们通过Positly招募了160名美国参与者参加2 个实验(详情见下表)。我们随机选择了2019年底的12 篇路透社世界新闻文章,然后选择另一篇新闻(不在这 12 篇文章中)作为 GPT-3 175B 的上下文。然后,我们使用文章的标题和路透社的location ,从 GPT-3 175B160M control model 中生成 completion 。这些用于创建两个quiz,每个 quiz 由一半人写的和一半模型生成的文章组成。

6.6.6 来自 GPT-3 的额外样本

  1. GPT-3能很好地适应许多任务。作为一个例子,在下图中,我们展示了四个未经处理的样本,这些样本来自一个prompt ,建议模型以给定的标题(即,Shadow on the Way)并按照Wallace Stevens 的风格写一首诗。

    我们首先试验了几个prompt ,然后产生了四个没有额外编辑或选择的样本(在温度1下使用 P=0.9nucleus sampling )。当模型开始写一个新的标题和 author heading 时,或进入散文评论时,completion 被截断。

6.6.7 任务措辞和规格的细节

  1. 这里给出了本文中所有任务的格式formatting 和措辞phrasing

6.6.8 所有模型规模在所有任务上的结果

 

七、OPT[2022]

  1. 在大规模文本集合上训练的大语言模型 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 ,参数范围从 125M175B 。 论文的目标是与感兴趣的研究人员充分和负责地分享 OPT 。作者训练 OPT 模型从而大致匹配 GPT-3 族模型的性能和大小,同时在数据收集和高效训练方面应用最新的最佳实践。作者开发这一套 OPT 模型的目的是实现可重复的和负责任的大规模研究,并在研究这些大语言模型的影响时带来更多的观点。risk, harm, bias, toxicity 等等的定义,应该由协作的研究团体作为一个整体来阐述,这只有在模型可供研究时才有可能。

    作者正在发布 125M66B 参数之间的所有模型,并将根据请求提供对 OPT-175B 的完全的研究访问。下列研究人员将获准进入:

    • 隶属于政府、民间社会和学术界的组织内的研究人员。
    • 工业研究实验室内的研究人员。

    作者还发布了模型创建日志和代码库(https://github.com/facebookresearch/metaseq),该代码库支持在 99280GBA100 GPU 上训练 OPT-175B ,每个 GPU 达到 147 TFLOPS/s 的利用率。通过该实现,以及使用最新一代的 NVIDIA 硬件,我们能够开发 OPT-175B ,其碳排放量 carbon footprint 仅为 GPT-31/7 。虽然这是一个重大的成就,但是创建这样一个模型的能源成本仍然是不小的,反复地 replicate 这种规模的模型只会放大这些大语言模型不断增长的计算量。

    论文认为,考虑到这些大语言模型在许多下游 language application 中的核心地位,整个人工智能社区(包括学术研究人员、民间社会、政策制定者、以及工业界)必须共同努力,围绕负责任的人工智能(尤其是负责任的大语言模型)制定明确的指导方针。更广泛的人工智能社区需要访问这些模型,以便进行可重复的研究,并共同推动该领域向前发展。随着 OPT-175B 和更小规模 baseline 的发布,作者希望增加声音的多样性,从而定义这些技术的道德考虑。

  2. 相关工作:自从 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》)和 BigSciencehttps://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-tuningPrompting 本身有很长的历史: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-2GPT-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-175Bfull release 将使其他人能够在未来更好地研究这些挑战。

7.1 方法

  1. 模型:我们给出了八个 Transformer 语言模型的结果,它们的参数规模从 125M175B 。模型架构的细节如下表所示。为了提高透明度并降低训练不稳定性的风险,我们的模型和超参数在很大程度上遵循 GPT-3 ,除了变化 batch size 从而提高计算效率。

  2. 训练配置Training Setup

    • 对于权重初始化,我们遵循 Megatron-LM 代码库(https://github.com/NVIDIA/Megatron-LM/blob/main/examples/pretrain_gpt3_175B.sh)中提供的相同设置,使用均值为零且标准差为 0.006 的正态分布。
    • 输出层的标准差按照 1.0/2L 来缩放,其中 Llayer 的总数。
    • 所有 bias 都初始化为零,所有模型都使用 ReLU 激活函数以及 2048 的序列长度。
    • 我们使用 AdamW 优化器,设置 (β1,β2)(0.9,0.95) ,以及 weight decay0.1

    • 我们遵循线性的learning rate schedule ,在 OPT-175B 中的前面 2000 steps (或者在我们的更小的 baseline 中选择前面的 375Mtoken )中将学习率从 0 warm up 到最大值,并在 300Btoken 上衰减到最大学习率的 10%

      还需要对学习率进行一些 mid-flight 的调整(参考后文)。

    • 根据不同的模型,我们的 batch size 设定为 0.5M ~ M,并且在整个训练过程中固定不变。

    • 我们始终使用 0.1dropout,但是我们不对 embedding 应用任何 dropout
    • 我们将梯度范数超过 1.0 时裁剪到 1.0 ,除了一些 mid-flight 调整时将这个阈值从 1.0 降低到 0.3(参考后文)。
    • 我们还包括一个梯度预除因子 gradient pre-divide factor ,从而在计算所有 rank 的梯度时降低上溢出/下溢出的风险(把除以 word size N 的操作拆分为两个除以 N 的操作)。
  3. 预训练语料库 Pre-training Corpus:预训练语料库包含 RoBERTaPile、和 PushShift.io Reddit 。所有语料库先前都被收集或过滤为主要包含英文的文本,但是 CommonCrawl 语料库中仍然存在少量非英语的数据。

    我们通过 MinhashLSH 过滤掉 Jaccard similarity 超过 0.95 的文档,从而删除了所有数据集中的重复文档。我们发现 Pile 尤其充满了重复的文件,并建议未来使用 Pile 的研究人员执行额外的重复数据删除处理。

    我们使用 GPT-2byte-level BPE tokenizer 。我们的最终语料库包含大约 180Btoken

    • RoBERTa:我们包括了 RoBERTa 语料库的 BookCorpusStories 子集,并利用了 CCNewsupdated version ,其中包含截至 2021928 日的新闻报导。这个 CCNews v2 语料库的预处理方式与原始 RoBERTaCCNews 相同。
    • Pile:我们包含了 Pile 的一个子集,包括:CommonCrawlDM MathematicsProject GutenbergHackerNewsOpenSubtitlesOpenWebText2USPTOWikipediaPile 的其它子集被删除,因为我们发现它们增加了不稳定的风险(这是通过在 1.3B 规模时所引起的梯度范数峰值的趋势来衡量的),或者被认为是不合适的。所有的子集都经过额外的临时的 whitespace normalization
    • PushShift.io Reddit:这是 《The pushshift reddit dataset》 所提出的数据集的一个子集,并且之前由 《Recipes for building an open-domain chatbot》 所使用。为了将 conversational tree 转换为语言模型可以访问的文档,我们提取了每个 thread (即,发表的帖子)中最长的评论链,并丢弃了树中的所有其它 path 。这将语料库减少了大约 66%
  4. 训练效率:我们在 99280GBA00 GPU 上训练 OPT-175B,方法是利用具有 Megatron-LM Tensor ParallelismFully Sharded Data Parallel 。我们实现了每个 GPU 高达 147 TFLOP/s 的利用率。我们将 Adam stateFP32 保存,因为我们将它分片到所有 host 中,而模型权重仍然以 FP16 保存。为了避免下溢出,我们使用了动态损失缩放 dynamic loss scaling,如《Mixed precision training》 所述。

  5. 训练过程:这里我们描述了在 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 、以及最后一层激活值 activationL2 范数达到峰值,这三者之间的相关性。这些观察结果使我们选择这样的启动点:我们的动态损失标量仍处于健康状态(大于等于 1.0),并且在该点之后的最后一层激活值的范数呈现下降趋势而不是无限增长的趋势。

      我们的 empirical LR schedule 如下图所示。

      在训练的早期,我们还注意到更低的梯度裁剪(从 1.0 降低到 0.3 )有助于稳定性。有关详细信息,请参考我们发布的训练日志。

      下图展示了我们验证损失的曲线。

    • Other Mid-flight Changes:我们进行了许多其它实验性的 mid-flight changes 来处理损失发散。其中包括:

      • 切换到普通 SGD(优化很快进入瓶颈,然后我们又切换回 AdamW)。
      • 重设动态损失标量(这有助于恢复一些发散,但是无法解决全部的发散)。
      • 切换到更新版本的 Megatron(这减少了激活值范数的压力并提高了吞吐量)。

7.2 评估

7.2.1 Prompting & Few-Shot

  1. 我们在 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-1GopherChinchillaGPT-NeoX-20B)。

    我们报告了准确率指标(考虑到评估指标的一致性,对于 MultiRCReCoRD 省略了 F1)。对于SuperGLUE benchmark 中的Winograd Schema Challenge: WSC 任务,我们遵循 GPT-3 并将该任务形式化为选择题,众所周知这将影响性能(《Precise task formalization matters in Winograd schema evaluations》)。

  2. Zero-shot:所有 14 个任务的总体平均 zero-shot 性能如下图所示(忽略了 MultiRCWIC )。总体而言,我们看到我们的平均性能遵循 GPT-3 的趋势。

    然而,不同任务的性能可能会有很大差异,完整的数据如下图所示(原始论文的附录 A ) 。

    注意,我们有意从这些均值中删除了 MultiRCWIC 任务的结果,因为这两个数据集似乎系统性地倾向于 GPT-3 或者 OPT

    可以看到:

    • OPT10 个任务上的表现大致与 GPT-3 相当,在 3 个任务上(ARC 的两个任务和 MultiRC 任务)表现不佳。
    • 3 个任务上(CB, BoolQ, WSC),我们发现 GPTOPT 模型在规模scale 方面都表现出不可预测的行为,这可能是由于这 3 个任务的验证集规模较小(分别为 56277104 个样本)。
    • WIC 中,我们看到 OPT 模型总是优于 GPT-3 模型,尽管 GPT-3 报告的数字似乎也值得怀疑,因为 WIC 是一个二分类任务。
    • 对于 MultiRC,我们无法在我们的评估配置中使用 Davinci API 复现 GPT-3 的结果,这表明该任务的评估方法存在差异。
    • 对于 BoolQWSC,我们注意到 OPTGPT 模型似乎都徘徊在 majority-class 准确率附近,这表明概率质量 probability masses 中的小扰动可能在评估中占主导地位。
    • ChinchillaGopher 在参数规模方面的表现与其它模型大致一致,而 PaLM 通常在所有配置中表现更好,即使在控制参数数量时也是如此。我们推测 PaLM 的良好性能主要来自于更高质量和多样性的预训练数据。
  3. One-shot and Few-shot:下图展示了平均的 multi-shot 性能(同样地,忽略了 MultiRCWIC )。

    完整的数据如下图所示(原始论文的附录 A ) 。

    可以看到:

    • 在所有指标的均值中,我们发现 OPT 模型的性能类似于 GPT-3 模型。

    • 然而,与 zero-shot 一样,分解每个任务的这些结果展示了一个不同的故事:

      • zero-shot 相同的 10 个数据集中,我们看到OPT模型和 GPT-3 模型的性能相似。
      • BoolQ, CB, WSC, RTE 数据集上,我们发现 OPTGPT-3 模型在规模scale 方面都表现出不可预测的行为。
      • MultiRC 中,我们始终看到 OPT 模型与 GPT-3 模型相比表现不佳。与 zero-shot 评估类似,我们猜测我们的 one-hot 评估和 few-shot 评估的配置可能与 GPT-3 显著不同。

7.2.2 Dialogue

  1. 众所周知,大语言模型是现代对话模型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)》)的指标报告 PerplexityUnigram F1 (UF1) overlap 。为了控制每个模型中的不同 tokenization,我们将所有 perplexity 标准化为 GPT-2 tokenizer 的空间。

    我们还注意哪些模型在这些对话任务上是监督的,哪些模型是无监督的。对于 OPT-175B,所有的对话生成都使用贪婪解码 greedy decoding 执行最多 32token 。除了交替使用 "Person 1:""Person 2:" 的对话行之外,我们没有尝试 prompt 模型。

    其它模型使用 BlenderBot 1 中的对话生成参数。

  2. 实验结果如下表所示。可以看到:

    • 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-likeMultiSessionChat: 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 中也强调了这一行为。

7.3 Bias & Toxicity 评估

  1. 为了了解 OPT-175B 的潜在危害,我们评估了一系列 benchmark ,关于仇恨言论检测hate speech detection、刻板印象stereotype awareness、以及有毒内容生成toxic content generation。尽管这些 benchmark 可能存在缺陷,但是这些评估结果为了解 OPT-175B 的局限性迈出了第一步。我们主要与 GPT-3 Davinci API 进行比较,因为这些 benchmark 尚未包含在 GPT-3 论文中。

  2. 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/noresponse 。在 few-shot 的多类分类 case 中,模型需要提供 yes/no/neitherresponse

    实验结果如下表所示。可以看到:在所有的 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

  3. CrowS-PairsCrowSPairs《Crows-pairs: A challenge dataset for measuring social biases in masked language models》)是为 masked language model 开发的,它是一个众包的 benchmark,旨在度量 9 个类目中的 intra-sentence levelbias ,这些类目包括:性别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 上的性能。

  4. 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 detectionlanguage modeling capability 之间的潜在 trade-offStereoSet 包含两个指标:Language Modeling Score: LMSStereotype Score: SS。这两个指标然后被组合从而构成 Idealized Context Association Test: ICAT 分。不像 《Jurassic-1: Technical details and evaluation》 ,我们通过 token count 而不是 character count 来归一化得分,他们报告说通过 character count 来归一化改进了几个模型的指标。

    结果如下表所示。可以看到:

    • GPT-3 Davinci APIOPT-175B 在总分上表现出相似的得分(尤其是在后两个类目)。

    • 具体而言:

      • GPT-3 Davinci API 在职业和种族方面表现出色,而 OPT-175B 在性别和宗教方面表现出色。
      • OPT-175BSS 指标上的整体表现更好,而 GPT-3 Davinci APILMS 指标上的表现通常更好。

  5. RealToxicityPrompts:我们通过 RealToxicityPrompts 数据集(《RealToxicityPrompts: Evaluating neural toxic degeneration in language models》)评估 OPT-175B 对毒性语言 toxic language 做出的反应。遵从 PaLM,对来自 RTP 数据集的每 10k 个随机采样的 prompt ,我们使用 nucleus sampling 采样 25 个长度为 20 tokengeneration (其中 p=0.9 ),然后报告 continuation 的平均毒性概率mean toxicity probability (根据原始 promptbucketed toxicities 进行分层)。

    为了比较,我们报告了来自 GPT-3 Davinci APIPaLMbucketed toxicity rate

    结果如下表所示。可以看到:

    • OPT-175Btoxicity rate 高于 PaLMGPT-3 Davinci API
    • 随着 prompt 的毒性的增加,所有三个模型都增加了生成 toxic continuation 的可能性,这与 《Palm: Scaling language modeling with pathways》 等人的观察结果一致。

    与我们在仇恨言论检测方面的实验一样,我们怀疑在预训练语料库中包含未经审核的社交媒体文本会提高模型对有毒文本toxic text 的熟悉程度,从而倾向于提高生成和检测有毒文本。取决于下游 application 的具体要求,这种对有毒语言 toxic language 的强烈意识 strong awareness 可能是想要的也可能是不想要的。OPT-175B 的未来应用应该考虑模型的这一方面,并且采取额外的缓解措施,或者酌情完全避免使用。

  6. 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》),它衡量模型响应的不安全程度,分为 4leveltopic sensitivitySafeRealisticUnsafeAdversarial。我们对比了几个现有的开源对话模型。

    实验结果如下表所示,可以看到:

    • SaferDialoguesUnit Tests 上,OPT-175BReddit 2.7B 具有相似的性能,其中 OPT-175BSafeAdversarialsetting 上表现略好(得分越低越好)。

    • 我们发现在精选的对话数据集(BlenderBot 1R2C2 )上微调的模型总体上具有较低的毒性,这与 《Recipes for building an open-domain chatbot》《Recipes for safety in open-domain chatbots》 一致。

      我们得出结论:未来对 OPT-175B 的对话实验应该包含对 curated dataset 的显式微调,从而提高安全性。

7.4 局限性

  1. 在前面章节中,我们对所发布的不同规模的模型进行了广泛的评估。我们看到 OPT 模型在标准评估数据集上与 GPT-3 模型的性能相当。此外,我们进行了safetybias、以及 inclusion 的评估,再次看到在毒性和仇恨言论检测方面,OPTGPT-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 sheetsmodel cards,我们认为,为了负责任地使用数据,应该通过额外的数据特征和选择标准对训练数据进行更多的审查。当前的做法是向模型提供尽可能多的数据,并在这些数据集中最小化选择(即,无需人工选择,让模型自己去学习)。尽管有全面的评估,但我们最好有更精简和一致的评估配置,从而确保评估场景的可复现性。在 in-context learning 中,不同的 prompting 方式和不同的 shot 数量会产生不同的结果。我们希望 OPT 模型的公开发布将使更多的研究人员致力于这些重要的问题。

7.5 发布的注意事项

  1. 遵从 Partnership for AI 对每个研究人员的建议,以及 NIST 概述的治理指南 governance guidance ,我们正在通过我们的 logbook 以及我们的代码来披露训练 OPT-175B 所涉及的所有细节,并为研究人员提供访问 OPT-175B 的模型权重,以及一套小型 baseline (该 baseline 反映了 OPT-175Bsetup)。我们的目标是对 OPT-175B 的开发周期完全负责,只有通过提高大语言模型的开发的透明度,我们才能在更广泛的部署之前开始了解大语言模型的局限性和风险。

  2. 通过分享我们日常训练过程的详细说明,我们不仅批露了训练当前版本的 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 的使用限制在非商业许可的研究社区,我们的目的是在更广泛的商业部署发生之前,首先将开发工作聚焦在量化大语言模型的局限性上。

  3. 此外,当复现这种规模的模型时存在大量的计算成本和碳排放。虽然 OPT-175B 在开发时估计碳排放carbon emissions footprintCO2eq) 为 75 吨,相比之下 GPT-3 估计使用 500 吨、Gopher 需要 380 吨。 这些估计并不是通用的报告,这些计算的核算方法也没有标准化。此外,模型训练只是人工智能系统整体碳排放量的一个组成部分:我们还必须考虑实验成本和最终的下游推断成本。所有这些都将导致创建大模型的能源量energy footprint 不断增加。

    通过发布我们的日志,我们希望强调:假设没有硬件故障或训练不稳定的理论碳成本估计,与旨在包括整个大语言模型开发生命周期的碳成本估计之间的 gap 。我们需要了解这些系统的制造碳manufacturing carbon ,因为它们越来越复杂。我们希望我们的论文可以帮助未来的工作,从而确定在衡量规模对环境的影响时需要考虑的额外因素。

  4. 类似地,通过制作一组跨越各种规模的 baseline,我们希望能让更广泛的研究社区研究这些模型仅在规模方面的影响和局限。正如 《Training compute-optimal large language models》 所报告的那样,作为训练数据量的函数,许多这些大语言模型可能训练不足,这意味着纳入更多的数据并继续训练这些 baseline 模型可能会继续提高性能。还有证据表明,容量的阶跃函数变化step-function change 可能发生在比 175B 小得多的规模上(《Finetuned language models are zero-shot learners》),这表明需要为不同的application 考察更广泛的规模。

7.6 附录

7.6.1 数据集细节

  1. 整个预训练数据集是以下子数据集组合而成:

    • BookCorpus:包含超过 1 万本未出版的书籍。
    • CC-Storie:包含 CommonCrawl 数据的一个子集,该子集是 CommonCrawl经过过滤从而符合 Winograd schemasstory-like style
    • Pile :包含以下数据:Pile-CCOpenWebText2USPTOProject GutenbergOpenSubtitlesWikipediaDM MathematicsHackerNews
    • Pushshift.io Reddit:由 《The pushshift reddit dataset》 开发并由 《Recipes for building an open-domain chatbot》 处理。
    • CCNewsV2:包含 CommonCrawl News 数据集英文部分的 updated 版本,该数据集在 RoBERTa 中使用。

    这些数据集是公开可用,并从互联网上下载的。

  2. 数据集规模:包含 180Btoken,对应于 800GB 的数据。我们从预训练数据中拿出一个大约 200MB 的随机验证集,其中按照预训练语料库中每个数据集的大小比例进行采样。

    除了数据集之间可能出现的自然重复之外,我们没有添加其它冗余、错误、或噪音。注意,我们已经对数据集进行人工去重,但是仍然可能遗留某些重复数据

    数据集中可能包含攻击性、侮辱性、威胁性、或引发焦虑的句子。

  3. 预处理:每个子数据集进行了标准的清洗和重新格式化的做法,包括删除重复文本、删除没有信息量的文本(如 “第一章”、“This ebook by Project Gutenberg” )。

7.6.2 模型细节

  1. 模型发布时间:OPT-175B2022-05-03 日发布的。
  2. 模型是 AdamW 训练的,参数规模从 125M175B

7.6.3 输出的例子

  1. 这里所有的例子,最初始的 prompt 是黑体字给出的,其余部分是续接 continuation 。这些例子是有意选择的,从而突出 OPT-175B 的成功和失败。

  2. 诗歌生成:我们已经观察到模型能够写出有趣的诗歌,然而我们很难让模型观察到韵律或格律。

  3. 对话生成:当 prompt 为自由女神像时,模型采用了爱国的性格。然而,在进一步的对话中,模型演变成简单和重复的生成。

  4. few-shot 翻译:模型并未刻意地进行多语言的训练,但是我们发现它在德语、西班牙语、法语、中文的简单翻译上取得了有限的成功。

  5. 论文写作:相比较于以"Abstract"作为提示,以 "1. Introduction" 作为提示会产生更有趣的结果。我们这里的提示是受到 ResNet 论文的第一句话的启发。

  6. 四则运算:我们观察到从加法扩展到其它运算时的错误。

  7. Python 编程:简单地换掉一个变量名就可以改变模型生成的输出。

7.7 Logbook

  1. 参考内容:

  2. OPT-175B 开发过程:

    • 10% 进度(主要解决训练收敛/数值稳定性问题):

      • Experiment 11.xx Lineage - November 5, 2021

        配置:batch size = 2MFP32AdamAdam beta20.988X 的张量并行,正弦初始化的 LPENormformer0.05weight decay,学习率 3e-4 ,结束学习率为 1e-5embedding 上没有 dropout,梯度预除因子 pre-divide factor32,梯度范数裁剪阈值为 2.5L2 范数)。

        在前几次运行中,损失函数会爆炸,我们主要集中在降低学习率,并增加梯度裁剪的频率(首先将梯度裁剪阈值降低到 1.5,然后将梯度裁剪阈值降低到 1.0)。

        从实验 11.4 开始,在每次重启后的几百次更新之后,我们看到梯度范数爆炸/损失函数爆炸/Nan,同时还有及其不稳定的 loss scale(这使得模型进入欠拟合)。我们开始采取越来越激烈的行动,从增加 weight decay0.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:当我们意外地将训练所依赖的 Megatron2.4 升级到 2.6 时,我们的训练动态 dynamics 发生了一个有趣的变化。我们注意到,突然之间,激活值范数的轨迹发生了显著的变化(红线到橙线),而我们的吞吐量(每秒单词数)增加了 2%

        我们把这个问题归结为 Megatron 中一行代码的变化,它组织了以下代码的执行:

        我们仍然不清楚为什么这一行代码会以这种方式影响训练动态。

    • 100% 进度:截止北京时间 2022-01-06 号下午 12:46 分,我们的 175B 模型终于完成了对 300B token 的训练,这需要大约 4.30e+23 FLOPs 的计算量,或者在 102480GB A100 上连续训练大约 33 天(假设没有硬件问题、没有数值不稳定等等)。

      • OpenAI 训练的 175B GPT-3 模型需要在 10000V100 上计算 14.8 天,并消耗 3.14e+23 FLOPs 。这种做法的代码并未开源。
      • 一个 1.1T 的混合专家模型 Mixture-of-Experts model 需要在 512A100 上进行大约 2.16e+22 FLOps 的计算。这相当于一个 6.7B 的稠密模型。
      • 这并不是一个 benchmarking exercise。模型在 180B token 语料库上训练,我们没有时间在训练开始前策划一个更大的数据集。
      • 扩展到 1024A100 来处理这种规模的实际工作负载是非常不容易的。
      • 如果在中等规模下没有足够的消融实验,确保训练在这种规模下收敛也是非常不可行的。在小规模(小于 ~13B 参数)的训练中获得的结果在 scaled-up 时也不一定成立。

7.8 使用

  1. 安装 transformers 库:

  2. 根据 https://huggingface.co/facebook/opt-66b 来使用:

    • 直接使用:

    • 或者下载模型权重到本地(模型有数百 GB ,最好提前下载下来):

      然后使用:

    也可以选择使用更小的模型,如 opt-125m 来进行研究。