四十三、Scaling Laws for Neural Language Models[2020]

  1. language 为人工智能的研究提供了一个天然的领域,因为绝大多数的 reasoning task 都可以用语言有效地表达和评估,而且世界上的文本通过 generative modeling 为无监督学习提供了大量的数据。最近,深度学习在 language modeling 方面取得了快速进展, SOTA 模型在许多特定任务上的表现接近人类水平。

    人们可能预期语言建模的性能取决于模型结构、神经模型的规模、用于训练模型的算力、以及用于训练模型的数据。在论文 《Scaling Laws for Neural Language Models》 中,作者将实证研究 language modeling loss 对所有这些因素的依赖性,重点是 Transformer 架构。通过在语言任务上的性能的上限和下限,使作者能够研究 scale 中超过七个数量级的趋势。

    在整个过程中,作者将观察到性能的精确的 power-law scaling ,其中性能作为训练时间、上下文长度、数据集大小、模型大小、compute budget 的函数。

  2. 相关工作:

    • 幂律(power-law )可以从各种来源产生。在密度估计(density estimation ) 模型和随机森林模型中,随模型规模和数据集大小有关的 power-law scaling 可能与我们的结果有关。这些模型表明,幂律指数可能有一个非常粗糙的解释,即数据中相关特征数量的倒数。

    • 最近的工作 《Deep learning scaling is predictable,empirically》《Beyond human-level accuracy: Computational challenges in deep learning》 也研究了模型大小和数据大小之间的 scaling ;他们的工作可能是文献中最接近我们的工作。然而,请注意, 《Deep learning scaling is predictable,empirically》 发现数据集大小与模型大小的超线性 scaling ,而我们发现的是亚线性 scaling

      • 我们关于计算量的 optimal allocation 的发现和 《One epoch is all you need》 之间有一些相似之处,包括 power-law learning curve

      • EfficientNet 似乎也服从于准确率和模型大小之间的近似的幂律关系。

      • 最近的工作 《A constructive prediction of the generalization error across scales》研究了各种数据集的数据集大小和模型大小的 scaling ,并符合与我们类似的分析方法。

    • EfficientNet 主张以指数方式 scale 模型的深度和宽度,以获得图像模型的最佳性能,导致宽度作为深度的函数出现 power-law scaling 。我们发现,对于语言模型来说,这个幂律在 scaling up 时应该是大致为 1 (即, width/depth 的比例应该保持固定)。但更重要的是,我们发现,与语言模型的 overall scale 相比,精确的架构超参数并不重要。

      • 《Residual networks behave like ensembles of relatively shallow networks》 中,有人认为 deep 的模型可以作为较浅的模型的 ensemble ,这有可能解释这一发现。

      • 早期的工作 《Wide residual networks》 比较了宽度和深度,发现 wide ResNet 在图像分类上可以胜过 deep ResNet

      • 一些研究固定了每个数据样本的计算量(计算量往往与模型参数的数量成正比,固定这个值意味着固定模型大小),而我们研究的是与模型大小和 training computationscaling

    • 许多研究(《High-dimensional dynamics of generalization error inneural networks》《Reconciling modern machine learning and the bias-variance trade-off》对高度过参数化的模型(highly overparameterized model)的泛化进行了研究,发现当模型规模达到数据集规模时,会出现 "jamming transition"《Scaling description of generalization with number of parameters in deep learning》)(这可能需要超出典型实践许多数量级的 training ,尤其是不使用早停)。我们没有观察到这样的 transition ,并发现所需的训练数据在模型大小上呈亚线性 scaling 。模型规模的扩展,特别是在 large width 上的扩展,可能为思考我们的一些 scaling 关系提供了一个有用的框架。

      我们关于 optimization 的结果(如学习曲线的形状),很可能可以用一个 noisy 的二次模型来解释,它可以在现实环境中提供相当准确的预测(《Which algorithmic choices matter at which batch sizes? insights from a noisy quadratic model》)。定量评估这种联系将需要海森谱( Hessian spectrum) 的特性。

这篇论文直接看结论部分即可,剩余的大多数都是实验报告。

43.1 背景和模型

  1. 符号:

    • L :交叉熵损失。通常情况下,它将是一个上下文中所有 token 的交叉熵损失的平均值,但在某些情况下,我们会报告上下文中特定位置处的 token 的损失。

    • N:模型参数的数量,不包括所有 vocabulary embeddingpositional embedding

    • C6NBS:是对 non-embeddingtraining 总计算量的估计,其中 Bbatch sizeStraining steps 数量(即 parameter updates )。我们引入 PF-days 为单位,其中一个 PF-days 表示 1015×24×3600=8.64×1019 次浮点运算。

    • D :数据集的大小,单位为 token

    • Bcritcritical batch size,在后续内容中定义和讨论。使用 critical batch size 的训练提供了训练时间和计算效率之间的大致上的最佳 trade-off

    • Cmin:对达到给定 loss 的最小 non-embedding compute 的估计。这是在模型以远小于 critical batch sizebatch size 进行训练时将使用的 training compute

      较小的 batch size 可以实现较小的计算量、但是需要较大的训练时间。

    • Smin:达到给定 loss 所需的最小 training steps 数的估计。这也是如果模型在batch size 远大于 critical batch size 的情况下所使用的 training steps 数量。

      较大的 batch size 可以实现较小的训练时间、但是需要较大的计算量。

    • αX:对 loss 缩放的幂率函数的指数,其中 L(X)(1/X)αXX 可以为 N,D,C,S,B,Cmin 中的任意一种。

    注,这里的 loss 函数是 test loss,而不是 train loss

  2. 我们在 WebText2 上训练语言模型,这是 WebText数据集的扩展版本,使用 byte-pair encoding: BPE 进行 tokenizevocabulary sizenvocab=50257 。我们优化 autoregressive log-likelihood (即交叉熵损失),在 1024-token 的上下文中取平均,这也是我们的主要性能指标。我们在 WebText2 测试集、以及其它一些测试集上记录 loss 。我们主要训练 decoder-only Transformer 模型,尽管我们也训练 LSTM 模型和 Universal Transformer 以进行比较。

    模型的性能评估指标是测试集上的交叉熵损失。

a. Transformer 的参数 scaling 和计算量 scaling
  1. 我们使用超参数 nlayer (层数)、dmodelresidual stream 的维度)、dff (中间 feed-forward layer 的维度)、dattnattention output 的维度)和 nheads (每层 attention head 的数量)对Transformer 架构进行参数化。我们在输入上下文中包括 nctxtoken ,除另有说明外否则默认采用 nctx=1024

    我们用 N 来表示模型大小,我们把它定义为 non-embedding parameters 的数量(推导过程参考Table 1 ):

    (1)N2dmodel×nlayer×(2dattn+dff)=12nlayerdmodel2 with the standard dattn=dff/4=dmodel

    其中,我们排除了 bias 项和其他次要的项。我们的模型在 embedding 矩阵中也有 nvocab×dmodel 个参数,并使用 nctx×dmodel 个参数进行 positional embedding ,但我们在讨论 "模型大小" N 时不包括这些参数。我们将看到,这产生了明显更干净的 scaling law

    评估 Transformer 的前向传播大致上包括 Cforward2N+2nlayer×nctx×dmodel 个乘加操作(add-multiply operation ),其中系数 2 来自于矩阵乘法中使用的 multiply-accumulate operation 。下表中包含了更详细的每个操作的参数数量和计算次数。

  2. 对于 dmodel>nctx/12 的上下文和模型,每个 tokencontext-dependent 的计算成本是总计算量的一个相对较小的部分。由于我们主要研究 dmodelnctx/12 的模型,我们的 training compute 的估计中不包括 context-dependent 项。考虑到反向传播(大约是前向传播计算量的两倍),我们为每个 training token 将估计的 non-embedding compute 定义 C6N 个浮点运算。

    对于 GPT-3 175Bdmodel=12288nlayer=96dattn=dmodeldff=4×dmodel 。因此只需要 nctx<147456 即可满足上述条件。

b. 训练过程
  1. 除非另有说明,我们用 Adam 优化器训练模型,其中训练了固定的 2.5×105 步, batch size512 个序列,每个序列包含 1024 tokens

    • 由于内存限制,我们最大的模型(超过 1B 个参数)是用 Adafactor 训练的。

    • 我们试验了各种学习率和 schedules 。我们发现,收敛的结果在很大程度上与 learning rate schedule 无关。除非另有说明,我们的数据中包括的所有 training runs 都使用了同一个 learning rate schedule ,即:3000 步的线性预热,然后是余弦衰减学习率到零。

  2. 我们用各种学习率和 schedule 进行了实验。下图显示了一个小型语言模型的一系列 schedules 和测试结果。我们的结论是,只要 total summed learning rate 足够大,而且 schedule 包括一个预热期、以及最后衰减到接近零的学习率,那么 learning rate schedule 的选择基本上是不重要的。schedules 之间的方差似乎是统计学上的噪音,并为不同 training runs 之间的方差的 scale 提供一个粗略的衡量标准。在较大的模型上的实验表明,对于不同的模型大小,不同的随机种子之间的 final test loss 的方差的幅度是大致不变的。

    我们发现,较大的模型需要一个较小的学习率来防止发散,而较小的模型可以容忍较大的学习率。为了实现这一点,在大多数 runs 中使用了以下经验法则:

    (2)LR(N)0.003239±0.0001395×log(N)

    我们期望这个公式可以被改进。

    可能存在对 network width 的依赖性,可能是由 initialization scale 设定的。对于 N>1010 个参数,该公式也会被打破。尽管如此,我们发现它对我们所考虑的模型有足够的作用。

c. 数据集
  1. 我们在 GPT2中描述的 WebText 数据集的扩展版本上训练我们的模型。最初的 WebText 数据集是对 Reddit201712 月的外链(包含 Reddit 用户的至少三个点赞)的网络爬取。在第二个版本中(即,WebText2 ),我们增加了 20181 月至 10 月期间的 Reddit 外链,也是至少有 3 个点赞的。karma 阈值(即,点赞的数量阈值)作为一种启发式方法,用于判断人们是否认为该链接有趣或有用。新链接的文本是用 Newspaper3k python library 提取的。

    总的来说,该数据集由 20.3M 篇文档组成,包含 96GB 的文本和 1.62×1010 个单词。然后我们应用 GPT2 中描述的可逆的 tokenizer ,产生 2.29×1010token 。我们保留了其中的 6.6×108token 作为测试集,并且我们还在类似的 Books CorpusCommon CrawlEnglish Wikipedia 、以及公开的 Internet Books 集合中进行测试。

43.2 实验结果和 Basic Power Laws

  1. 为了刻画 language model scaling ,我们训练了各种各样的模型,其中改变了一些因子,包括:

    • 模型大小:从 7681.5Bnon-embedding 参数。

    • 数据集大小:从 22M230Btoken

    • 模型shape:包括 depthwidthattention head、以及 feed-forward dimension

    • 上下文长度:大多数 runs 设置为 1024,但我们也尝试使用较短的上下文。

    • batch size: 大多数 runs 设置为 219,但我们也改变 batch size 从而测量 critical batch size

43.2.1 Transformer Shape

  1. 当我们固定 non-embedding 参数总数 N 时, Transformer 的性能对 shape 参数 nlayer,nheads,dff 的依赖非常弱。

    为了确定这些结果,我们用固定的模型大小来训练模型,同时改变一个超参数。

    • 这对于 nheads 的情况是最简单的:改变 nheads 同时改变每个 head 的维度,使得 dmodel 保持不变。

      右图中,每条曲线对应于固定的 dmodel 同时改变 nheads

    • 当改变 nlayer 时,我们同时改变dmodel ,同时保持 N12nlayerdmodel2 固定。

      中间图中,每条曲线对应于固定的参数量同时改变 nlayerdmodel

    • 同样地,为了在固定的模型大小下改变 dff,我们也同时改变 dmodel 参数,这是由 Table 1 中的参数数量所要求的。

      左图中,每条曲线对应于固定的参数量同时改变 dffdmodel

    如果 deeper Transformer 有效地表现为 shallower modelensembles,那么就会导致 nlayer 的独立性,正如对 ResNet 的建议(《Residual networks behave like ensembles of relatively shallow networks》)。结果显示在下图中。

    下图中,不同的模型形状,得到的 test loss 差异很小,差异基本上都在 10% 以内。

43.2.2 non-embedding 参数数量 N

a. 实验结果
  1. 在下图中,我们展示了各种模型的性能,从 shape (nlayer,dmodel)=(2,128) 的小模型、到十亿参数的大模型,其中大模型的 shape(6,4288)(207,768) 不等。在这里,我们已经在完整的 WebText2 数据集上训练到接近收敛,并且观察到没有过拟合(除了非常大的模型,因为对于非常大的模型则可能过拟合)。

    Figure 1 右图所示,我们发现关于 non-embedding 参数数量 N 的一个稳定的趋势,即:

    (3)L(N)(NcN)αN

    要观察这些趋势,关键是要研究模型性能与 N 的关系。如果我们改用总的参数数量(包括 embedding 参数),趋势就有些模糊了(如下左图所示)。这表明,embedding matrix 可以做得更小而不影响性能,这在最近的工作中已经看到了(《Albert: A lite bert for self-supervised learning of language representations》)。

    ALBertembedding matrix 分解为两个低维矩阵的乘积,这等价于降低了 embedding matrix 的大小。

  2. 尽管这些模型是在 WebText2 数据集上训练的,但它们在其他各种数据集上的 test loss 也是 N 的幂律,指数几乎相同,如下左图所示。

    左图、右图的详细说明参考 “数据分布之间的泛化” 章节。

b. 与 LSTM 和 Universal Transformer的比较
  1. 在下图中,我们比较了 LSTMTransformer 的性能与 non-embedding 参数数量 N 的关系。LSTM 是用与 Transformer 相同的数据集和上下文长度来训练的。从右图中我们可以看出,LSTM 对于上下文位置中头部出现的 token 表现得和 Transformer 一样好,但是对于上下文位置中尾部出现的 token 则无法与 Transformer 的表现相媲美。

    红色曲线为 LSTM,蓝色曲线为 Transformer

  2. 下图中给出了模型性能与上下文位置之间的幂律关系,其中,除了第一个 token 之外(最上面的一条曲线),都显示了随着模型大小的增加而稳定地改善,表明快速识别模式的能力有所提高。

    我们还包括用很小的 nctx=8 上下文来训练的模型,以便与我们的更长的上下文模型进行比较(即,nctx=1024)。即使是在 nctx=8 的情况下训练的规模不大的模型也能在非常早期的 token 上超越我们最大的 nctx=1024 模型。这也表明,在大的上下文下训练的更大的模型应该可以有进一步的改进。

    因为对于 nctr=1024 的模型,它看到的上下文信息更多,理论上应该表现更好。

  3. 在固定模型大小的情况下, loss scale 似乎与上下文中的位置 T 成幂律关系,如下图所示。这可能是语言中潜在的 power-law correlation 的结果,或者是模型结构和 optimization 的一个更普遍的特征。它为在更大的上下文中训练的潜在好处(或潜在不足)提供了一些建议。不仅较大的模型在 T=1024 时收敛到较好的性能,而且在 early tokens 时也改善得更快,这表明较大的模型在检测 less contextual information 的模式时更有效率。

    在右边的图中,我们显示了对于一个固定的模型, per-token 性能是如何作为 training steps 的函数而变化的。early tokens 在训练过程中更快地被学好,而末尾的 tokens 在训练的后期才能训练好。

    左图:每条曲线对应一个模型(不同模型大小)的 per-token test loss ,在模型训练结束后。

    右图:每条曲线对应一个 token index 的学习曲线,在模型训练过程中,固定的模型。

  4. 我们还在下图中比较了标准 Transformerrecurrent Transformer《Universal transformers》)的性能。 recurrent Transformer 模型复用参数,因此表现得略好(右图),但代价是每个参数的额外计算量。

    左图把 reuse 的参数也认为是全新的,因此参数规模会变大。

c. 数据分布之间的泛化
  1. 我们还在一组额外的文本数据分布上测试了我们的模型。下图显示了这些数据集上的 test loss 与模型大小的关系。在所有情况下,模型都只在 WebText2 数据集上训练过。

    • 从左图中我们看到,在这些其他数据分布上的 loss 随着模型规模的增加而平滑地改善,直接地平行于 WebText2test loss 曲线。

    • 从右图中我们发现,泛化性几乎完全取决于 in-distribution validation loss ,而不取决于训练的持续时间、或接近于收敛的程度。

      虚线表示单个大型模型在它训练过程中,所得到的 test loss;圆点表示很多收敛的模型对应的 test loss

  2. 我们还观察到对模型深度没有依赖性(在固定模型大小的条件下)。

d. 性能与数据集大小和计算量的关系
  1. 我们在下图中显示了 test loss 作为数据集大小 D(以 token 数量为单位)和训练计算量 C 的函数的经验趋势。

    • 对于 D 上的趋势,我们在 WebText2 数据集的固定子集上训练了一个 (nlayer,nembd)=(36,1280) 的模型。一旦 test loss 不再减少,我们就停止训练。我们看到,所产生的 test loss 可以用数据集大小 D 的简单的幂律来拟合:

      (4)L(D)(DcD)αD

      Figure 1 中间的图所示。

    • 训练过程中使用的 non-embedding 计算总量可以估计为 C=6NBS ,其中 Bbatch sizeSparameter updates 的数量,系数 6 代表了同时包含前向传播和反向传播。因此,对于一个给定的 C 值,我们可以扫描所有具有不同 N 的模型,找到在 step 数量 S=C6BS 上具有最佳性能的模型。

      请注意,在这些结果中,batch size B 对所有模型都是固定的,这意味着这些经验结果不是真正的最优。我们将在后面的章节中使用调整后的 Cmin 来说明这一点,以产生更清晰的趋势。

      这个结果如Figure 1 左图的加粗黑线所示。它可以用如下的方程来拟合:

      (5)L(C)(CcC)αC

      此外,在左图中还包括每个模型的学习曲线,从而展示每个模型何时达到最优。

  2. 我们将在后面更仔细地研究计算量的最佳分配问题。数据强烈表明,sample efficiency 随着模型的大小增加而提高,如右图所示,对于给定的 test loss,模型越大所需要的样本数越少。

    • 左图:每条曲线表示在给定的 test loss (不同曲线采用不同的值)的条件下,最短的训练时间(由 minimum steps 衡量)和模型大小的关系。通常而言,模型参数越大,训练时间越短。

    • 右图:每条曲线表示在给定的 test loss (不同曲线采用不同的值)的条件下,最少的训练过程中看过的样本( E=B×S)和模型大小的关系。通常而言,模型参数越大,所需要的样本数越少。

43.3 Infinite Data Limit 和过拟合

  1. 在前面的内容中,我们发现了针对语言建模性能的一些 basic scaling laws 。这里,我们将研究在具有 Dtokens 的数据集上训练的大小为 N 的模型,并同时改变 ND 时模型的性能。我们将从经验上证明最佳的 test loss 符合公式 L(N,D)scaling law 。这为我们需要多少数据来训练规模不断扩大的模型、并同时控制过拟合提供了指导。

43.3.1 L(N, D) 公式

  1. 我们选择参数化 L(N,D) 为:

    (6)L(N,D)=[(NcN)αN/αD+DcD]αD

    其中,这个公式基于三个原则:

    • 词表大小或 tokenization 的变化有望通过一个整体因子来 rescale 损失函数。 L(N,D) 的参数化(以及所有 loss 的建模)自然必须考虑到这种 rescaling

    • 固定 D 并选择 N,那么 overall loss 应该接近 L(D) 。相反地,固定 N 并选择 D ,那么 overall loss 应该接近 L(N)

    • L(N,D) 应该在 D= 处是 analytic 的,因此它在 1/D 处具有整数幂次的级数展开(series expansion)。对这一原则的理论支持明显弱于前两者。

      即,对于无限的训练数据,模型应该能够收敛。

    我们选择的 L(N,D) 满足第一个要求,因为我们可以通过改变词表来 rescale Nc,Dc 。这也暗示了 Nc,Dc 的具体取值没有根本意义。

    因为当 test loss 停止改善时我们提前结束训练,并且我们以相同方式优化所有模型,所以我们期望较大的模型应该总是比较小的模型表现得更好。但是对于固定的、有限的 D ,我们也不期望任何模型能够接近最佳的 possible loss 。类似地,具有固定大小的模型将是容量有限的。这些考虑激发了我们的第二个原则。注意,关于在 D 无穷大时的 L(N) 、以及在 N 无穷大时的 L(D) 的知识,完全决定了 L(N,D) 中的参数。

    第三个原则更加是推测性的。一个简单而普遍的原因是,在非常大的 D 时,人们可能会过拟合到 scale 1/D。过拟合应该与数据集的方差或信噪比有关(《High-dimensional dynamics of generalization error in neural networks》),这与 1/D 成比例。这一预期应该适用于任何平滑的损失函数,因为我们希望能够将 loss 扩展到 D的极限。然而,这种观点假设 1/D correction 在其他方差来源中占主导地位,例如有限的 batch sizeefficacy of optimization 的其他限制。没有经验的证实,我们对它的适用性没有信心。

    我们的第三个原则解释了公式 L(N,D)ND 的作用之间的不对称。非常相似的对称表达式也是可能的,但是它们不会有 1/D 的整数幂次展开式,并且需要引入一个额外的参数。

    在任何情况下,我们都会看到,我们对于 L(N,D) 的公式很好地拟合了数据,这是我们的 L(N,D) 假设方程的最重要的理由。

43.3.2 拟合结果

  1. 我们以 10%dropout rate 来正则化我们的所有模型,然后跟踪 test loss ,一旦 test loss 不再下降时我们就停止训练。实验结果如 Figure 9 左图所示,它包含了针对公式 L(N,D) 中的四个参数 αN,αD,Nc,Dd 的拟合。拟合的参数如下表所示:

    Figure 9 左图:每条曲线代表一个 data size,给出了在该 data size 的条件下,test lossN 的关系。

    Figure 9 右图:L(N,D)L(N,D=)1NαNαD/D 之间的拟合曲线。

    我们获得了极好的拟合,除了如下的 runs:数据集已经减少了 1024 倍到大约 2×107 tokens 。对于如此小的数据集,一个 epoch 仅包含 40 次参数更新。也许这样一个微小的数据集代表了语言建模的一个不同的区域,因为过拟合在训练的早期就发生了 (Figure 16 右图的第一条 Test Loss 曲线)。还要注意,这些参数与 basic power laws 中获得的参数略有不同,因为这里我们拟合的是完整的 L(N,D) 而不仅仅是 L(N,)L(,D)

43.3.3 D 和 N 之间的亚线性关系

  1. 为了绘制 infinite data limit 的边界,我们可以直接研究过拟合的程度。对于除了最大的模型之外的所有模型,当用完整的 22B tokenWebText2 数据集训练时,我们没有看到过拟合的迹象,因此我们可以将其作为 D= 的代表。因此,我们可以通过如下定义来比较有限的 Dinfinite data limit

    (7)δL(N,D)=L(N,D)L(N,)1

    并把它作为 N,D 的函数来研究。事实上,我们从经验上看到, δL 仅依赖于 ND 的特定组合,如 Figure 9 右图所示。这是根据等式 L(N,D)scaling law 得出的,即:

    (8)δL(1+(NNc)αNαD×DcD)αD1

    根据 L(N)(NcN)αN ,我们可以得到:

    (9)L(N,D)L(N,)[(NcN)αN/αD+DcD]αD((NcN)αN/αD)αD=(1+(NNc)αNαD×DcD)αD

    注意,在大的 D 时,该公式也有 1/D 的幂级数展开。

    L(N,) 表示数据集无限大时的 test loss,它是 L(N,D) 的下限,代表没有过拟合时的 test loss 。因此:

    • δL 一定大于等于 0 。如 Figure 9 右图所示。

    • δL 代表了由于数据量不足导致的过拟合。

    对于不同的随机数种子,我们估计 loss 的方差大约为 0.02 ,这意味着,为了避免过拟合,我们需要:

    (10)D(5×103)×N0.74

    推导过程:δL0.02 ,即可得到该方程。

    利用这种关系,小于 109 个参数的模型可以在 22B tokenWebText2 数据集上被训练从而具有最小的过拟合,但是我们最大的模型将会遇到一些轻微的过拟合。更一般地,这种关系表明数据集大小可以关于模型大小成亚线性增长,同时避免过拟合。然而,请注意,这通常并不代表 compute-efficient training

    我们还应该强调,在改变数据集和模型大小时,我们没有 optimized regularization (例如,dropout rate )。

43.4 关于模型大小和训练时间的 scaling laws

  1. 在本节中,我们将证明一个简单的 scaling law 可以很好地描述 loss 作为模型大小 N 和训练时间的函数。

    • 首先,我们将解释如何使用 《An empirical model of large-batch training》 的结果来定义 universal training step Smin ,这说明了我们的大多数模型尚未在最佳 batch size 下训练的事实。

    • 然后,我们将证明我们可以使用公式 L(N,S) 拟合 loss 与模型大小和训练时间。

    • 稍后,我们将使用这些结果来预测模型大小和训练时间之间关于训练计算量的最佳分配,然后确认该预测。

43.4.1 临界 Batch size

  1. 《An empirical model of large-batch training》 中提出了一个关于训练的 batch size 依赖性的简单的经验理论。该论文认为,对于 training,有一个临界 batch size Bcrit

    • 对于 B<Bcritbatch size B 可以增加,而 compute-efficiency 的下降非常小。

    • 而对于 B>BcritB 的增加导致收益递减。

    该论文还认为, gradient noise scaleBcrit 提供了一个简单的预测,并且 gradient noise scale 也不直接依赖于模型大小,而是依赖于已经获得的 loss value 。这些结果可用于预测训练时间和计算量将如何随 batch size 而变化。为了尽可能有效地平衡训练时间和计算量,最好使用 batch sizeBBcrit 进行训练。在 BBcrit 的训练最小化了 training steps 数量,而在 BBcrit 的训练最小化了计算量的使用。

    即:大的 batch size 可以节省训练时间、但是浪费了计算量;小的 batch size 可以节省计算量、但是浪费了计算时间。

    更具体地,可以证明对于各种各样的神经网络任务, 当训练到 loss L 的任何固定值时,training steps 数量 Sprocessed 数据样本数量 E=BS 满足简单的关系:

    (11)(SSmin1)×(EEmin1)=1

    其中:Smin 为达到 L 所需的最小 training steps 数量,而 Emin 是必须处理的数据样本的最小数量。

    注意:Smin 并不是在 Emin 处取得的,即:EminBSmin ,除了在 B=Bcrit

    我们在下图中展示了针对 Transformer 的这种关系(即,(SSmin1)×(EEmin1)=1 )。左图、右图分别给出了两种不同参数规模下的曲线,横轴为 S 、纵轴为 E 。每条曲线代表一个固定的 test loss

    这个关系定义了临界的 batch size

    (12)Bcrit(L)=EminSmin

    它是目标损失值的函数。在临界 batch size 的训练可以实现大致最优的 time/compute tradeoff ,需要 S=2Smintraining steps 、以及处理 E=2Emin 的数据样本。

  2. 在下图中,我们绘制了两个不同模型的临界 batch sizegradient noise scale ,作为 training loss 的函数。我们看到,Bcrit(L) 与模型大小无关,仅取决于 loss L 。因此,《An empirical model of large-batch training》prediction 继续适用于 Transformer 语言模型。临界 batch sizeloss 上符合幂律:

    (13)Bcrit(L)BL1/αB

    其中:B2×108αB0.21

    为什么选择这样的拟合公式?因为随着 loss 接近其最小值 Lmingradient noise scale 预计会发散,并且我们期望Bcrit 跟踪该 noise scale 。因此随着 L 越来越小(接近 Lmin ),我们希望 Bcrit 越来越大。即, L0Bcrit 趋向于正无穷。

    注意:下图中,横轴的右侧为零。

  3. 如果我们在 BBcrit(L) 处训练,则大小为 N 的模型训练到 loss L 所需的 training steps 数量的临界值定义为:

    (14)Smin=S1+Bcrit(L)/B,min steps at BBcrit

    推导过程:根据定义 Bcrit(L)=EminSminE=BS ,以及拟合公式 (SSmin1)×(EEmin1)=1 ,有:

    (15)1=(SSmin1)×(EEmin1)=(SSmin1)×(BSBcritSmin1)=BBcrit(SSmin)2(1+BBcrit)SSmin+1Smin=S1+Bcrit(L)/B

    推导过程中并未要求 BBcrit(L) ,这个约束条件从何而来?论文并未说明。读者猜测可能是由于 (SSmin1)×(EEmin1)=1 需要满足的条件而引起的。

    该式子的物理意义:

    • 根据 S=Smin×(1+Bcrit/B),则给定 batch size BBcrit ,我们可以预测需要多少个 training step S 模型能够收敛。

    • 另一方面,任意选择一个 batch size BBcrit ,根据它的收敛时的 training step S ,我们能够统计得到 Smin

    如果我们在 BBcrit(L) 处训练,这也定义了用大小为 N 的模型训练到 loss L 所需的计算量的临界值:

    (16)Cmin(C)=C1+B/Bcrit(L),min compute at BBcrit

    其中:C=6NBS 估计了 batch size B 处的 non-embedding 计算量。

    推导过程:根据定义 Bcrit(L)=EminSminE=BS ,以及拟合公式 (SSmin1)×(EEmin1)=1 ,有:

    (17)1=(SSmin1)×(EEmin1)=(E/BEmin/Bcrit1)×(EEmin1)=BcritB(EEmin)2(1+BcritB)EEmin+1Emin=E1+B/Bcrit(L)

    根据 C=6NBS ,则可以得到上述公式。

    推导过程中并未要求 BBcrit(L) ,这个约束条件从何而来?论文也未说明。读者猜测可能是由于 (SSmin1)×(EEmin1)=1 需要满足的条件而引起的。

43.4.2 关于模型大小和计算量的性能

  1. 现在,我们将使用定义的 Smin 来获得在 infinite data limit 下, loss 对模型大小和训练时间的依赖性的简单且通用的拟合。对于loss,我们将使用公式 L(N,S) 来拟合稳定的、Adam 优化的 training runs ,即:

    (18)L(N,Smin)=(NcN)αN+(ScSmin)αS

    我们纳入了 learning rate schedulewarmup 阶段后的所有 training steps ,并找到了拟合数据的参数:

  2. 有了这些参数,我们获得了右图中的学习曲线的拟合。尽管拟合并不完美,但我们相信,鉴于方程 L(N,Smin) 的简单性,它们是相当令人信服的。

    右图中,每条曲线对应固定模型大小条件下不同 Smintest loss

    lossSminpower-law dependence 反映了 optimizer dynamicsloss landscape 的相互作用。由于拟合曲线在训练后期是最好的,此时 loss 可能近似为二次方程,power-law 应该提供关于 lossHessian 谱的信息。它的普遍性表明,Hessian eigenvalue density 大致独立于模型大小。

  3. 数据和拟合可以以不同的、更有趣的方式可视化,如下图所示。在此,我们研究了作为模型大小的函数的 test loss ,同时固定了训练中使用的总的 non-embedding compute C 、或 training steps 数量 S 。对于拟合,我们使用方程 CminSmin 、上述参数、以及方程 L(N,Smin)

    左图:每条曲线给出了固定计算预算条件下 test loss 和模型大小的关系;

    右图:每条曲线给出了固定 steps 条件下 test loss 和模型大小的关系;

43.4.3 Early Stopping Step 的下限

  1. L(N,Smin) 的结果可用于导出 training step 数量的下限(粗略的估计),其中在 data limited 训练中出现了早停。它的动机是这样的思想,对于给定的模型,有限的 D 和无限的 D 对应的学习曲线将会非常相似,直到我们达到 SminSstop。因此,过拟合应该与简单地在 Sstop 结束训练所对应的 correction 成比例。这将低估 Sstop,因为在现实中,当我们有一个有限的 D 时,test loss 将下降得更慢,因此我们将需要更多的 training steps 数量来达到在有限的 D 时的最佳 test loss 。这个推理方向导致了不等式:

    (19)Sstop(N,D)Sc[L(N,D)L(N,)]1/αS

    其中:L(N,) 为用无限可用数据评估的收敛后的损失。

    分母代表过拟合的程度,其中 L(N,) 表示无限数据条件下的 test loss (代表没有过拟合)。过拟合程度越少,那么 Sstop 越大(早停发生的时刻越晚)。

    这个公式似乎不是推导而来,而是经验公式。

    左图显示了这个不等式及其与经验数据的比较。在该图中,SstopL(N,D) 是经验性的(尽管 Sstop 被调整以模拟 BBcrit 时的训练),而 L(N,) 是对 L(N,D)D= 时评估而来。

43.5 计算量预算的最优分配

  1. 我们在 Figure 1 的右上角显示了性能的经验趋势作为训练计算量的函数。然而,这一结果涉及固定 batch size B 的训练,但是我们知道,事实上我们可以通过前面讨论的 batch size Bcrit 来更有效地训练。

    在本节中,我们将针对这一疏忽进行调整。更重要的是,我们将使用前面的结果来确定模型大小 N 、以及训练期间处理的数据量 E 之间的计算量的最优分配。使用公式 L(N,Smin),我们将从经验和理论两方面来确定这种分配, 我们将证明这些方法是一致的。

43.5.1 最优性能和分配

  1. 从公式 Cmin 中,让我们首先研究 loss 作为最优分配计算量 Cmin的函数。结果如下图所示,并符合幂律曲线。我们看到,与 Figure 1 的计算量图相比,新的关于 Cmin 的拟合有所改善。

    橙色曲线为 L(C) ,而蓝色曲线为 L(Cmin),可以看到蓝色曲线的拟合更好。

    Figure 1 的左图也是 L(Cmin)

  2. 给定 L(Cmin) ,很自然地会要求最佳模型大小 N(Cmin) ,以便在给定数量的训练计算量的情况下提供最小的 loss 。最佳模型尺寸如下左图所示。我们观察到 N(Cmin) 可以很好地拟合幂律:

    (20)N(Cmin)(Cmin)0.73

  3. 在下图中,我们展示了次优 model size 来训练模型的效果。

    左图,次优 model size 导致更多的计算量(相对于最佳计算量)。

    右图,更大 model size 导致更少的计算时间(相对于最佳计算时间)。

  4. 通过定义 Cmin=6NBcritSmin,因此我们可以使用 N(Cmin) 来提取进一步的结果。具体而言,由于之前的拟合曲线显示 BL4.8LCmin0.05,我们可以得出结论: BcritCmin0.24

    0.24=(4.8)×(0.05)

    这使我们得出结论,随着计算量的增加,最佳 training steps 数量只会非常缓慢地增长,因为 SminCmin0.03Figure 14 中右图的经验结果相匹配。事实上, measured exponent 足够小,我们的结果甚至可能与指数为零相一致。

    由于 N(Cmin)(Cmin)0.73BcritCmin0.24,此外根据 Cmin=6NBcritSmin,则 SminCmin0.03 ,其中 0.03=10.730.24

    因此,我们的结论是:当我们以最佳计算量分配来 scale up 语言模型时,我们应该主要增加模型大小 N ,同时 scale up batch sizeBBcrit,而 serial steps 数量增加可以忽略不计。由于 compute-efficient training 使用相对较少的 optimization steps ,因此可能需要进行额外的工作来加速早期的 training dynamics

43.5.2 L(N,Smin) 的预测

  1. L(Cmin)allocation 的结果可以从方程 L(N,Smin) 中预测出来。给定我们的 L(N,Smin) 方程,我们可以用 Smin=Cmin6NB 来代替,然后找到最小的 loss 作为 N 的函数,同时固定训练计算量。

    对于 loss 作为训练计算量的函数,我们预测:

    (21)L(Cmin)(CcminCmin)αCmin

    其中:

    (22)αCmin=11/αS+1/αB+1/αN0.054

    与下图中的指数非常一致。

    下图中的指数是 -0.050 ,而这里的指数是 -0.054,存在一定的 gap 。因为它们是用不同的公式来预测的。

    我们还预测到:

    (23)N(Cmin)(Cmin)αCmin/αN(Cmin)0.71

    这也和下图中的 scaling 相匹配,在几个百分点之内。

    前面已经得到 N(Cmin)(Cmin)0.73 ,但是这里得到的是 N(Cmin)(Cmin)0.71,存在一定的 gap 。因为它们是用不同的公式来预测的。

    我们的 scaling laws 为语言建模的性能提供了一个预测性的框架。

43.5.3 矛盾和猜想

  1. 我们观察到,在计算量、数据量或模型大小的大数值下,没有偏离直接的 power-law 趋势的迹象。不过,我们的趋势最终必须趋于平稳,因为自然语言具有非零的熵(即,test loss 不可能降低到零)。

    事实上,本节中描述的 compute-efficient training 的趋势已经包含了一个明显的矛盾。在比这里记录的规模高几个数量级的时候, L(Cmin) scaling law 所预测的性能会下降到低于应该有的水平。这意味着我们的 scaling laws 必须在这一点之前崩溃,但是我们猜测这个交点有更深的含义:它提供了 Transformer 语言模型达到最大性能的一个估计值。

    由于 compute-efficient training 所使用的数据量随着计算预算的增加而缓慢增长,L(Cmin) 预测的性能最终会达到 L(D) 幂律设定的下限(如下图所示)。让我们更详细地研究一下这个问题。

  2. 为了控制过拟合,前面的结果意味着我们应该将数据集的规模扩大为:

    (24)DN0.74Cmin0.54

    其中,我们使用了 Figure 14 中的 compute-efficient N(Cmin)

    让我们将其与 compute-efficient training 的数据要求进行比较。如果我们以临界 batch size (即 C=2Cmin)进行训练,并且在训练过程中不重复使用数据,我们会发现数据用量随着计算量的增长而增长,即:

    (25)D(Cmin)=2Cmin6N(Cmin)(4×1010 tokens)×(Cmin/PF-Day)0.26

    这是数据集大小能够随着计算量而有效增长的最大速度,因为它意味着我们只训练一个 epoch 。但它比方程 DN0.74Cmin0.54 中的数据集增长得更慢。这似乎意味着,compute-efficient training 最终会遇到过拟合的问题,即使训练过程中从未重复使用任何数据。

    根据 Figure 1 ,我们期望当我们受到数据集大小的瓶颈时(即过拟合),lossscale 应该是 L(D)D0.095。这意味着,loss 将随着计算量的进行而 scaleL(D(Cmin))Cmin0.03,一旦我们受到数据限制。再一次,我们有一个矛盾,因为这将最终与我们在 Figure 13 中对 L(Cmin) 的预测相交,其中我们发现 scaling L(Cmin)Cmin0.050

    L(D(Cmin))L(Cmin) 的交叉点发生在:

    (26)C104 PF-Days,N1012 parameters ,D1012 tokens ,L1.7 nats/token

    尽管数值是非常不确定的,在任何一个方向都会有一个数量级的变化,这取决于 power-law 拟合的指数的精确值。最明显的解释是,我们的 scaling law 在达到这一点时或之前就已经崩溃了,而这一点在计算量和模型大小上都还有很多数量级。

  3. 人们也可以猜想,这个交叉点有更深的含义。在相同数据要求的条件下,如果我们没有将模型规模增加到 N 以上,也许这意味着一旦我们达到 CminN ,我们就已经提取了自然语言数据中所有的可靠信息。在这种解释中,L 将为自然语言 entropy-per-token 提供一个粗略的估计。在这种情况下,我们期望 loss 的趋势在 L 或之前趋于平稳。

    我们可以通过考虑添加了噪音的训练数据集的版本来猜测平缓之后的 L(Cmin) 的函数形式。例如,我们可以在展示给模型的每个上下文中附加一串随机的 tokens ,从而人为地用一个恒定的 additive factor 来提高损失。然后,与 noise floor 的距离 LLnoise 将是一个更有意义的性能指标,即使这个距离的小幅下降也可能代表定性的性能的显著提升。由于人工噪声会对我们所有的趋势产生同样的影响, C,N,D,L 等临界点将不会改变(除了 L 的绝对值),即使它发生在平缓之后也可能是有意义的。

43.6 结论

43.6.1 总结

  1. 我们 Transformer 语言模型的主要发现如下:

    • 模型性能强烈依赖于模型规模,弱依赖于 model shape : 模型的性能最强烈地依赖于模型规模,它包括三个因素:模型参数的数量 N(不包括 embedding 参数)、数据集的大小 D 、以及用于训练的计算量 C。在合理的范围内,性能对其他架构超参数的依赖非常弱,如模型的 dpethwidth

      注意,这里的模型性能是在测试集上评估的。

    • 平滑的幂率(smooth power laws):模型性能与三个 scale factor N,D,C 中的每一个都有幂律关系,其趋势跨越六个数量级以上(如下图所示),当其它两个因素不是瓶颈时。我们观察到在 N/D/C 非常大时,并没有偏离这些趋势的迹象,尽管在达到 zero loss 之前,模型性能最终必须趋于平缓。

    • 过拟合的普遍性: 只要我们同步 scale up ND ,性能就会有可预测的提高;但如果 ND 保持固定而另一个增加,就会进入一个收益递减的区域。性能惩罚(performance penalty )可预测地取决于 N0.74/D 的比率,这意味着每次我们将模型规模增加 8 倍,我们只需要增加大约 5 倍的数据就可以避免惩罚。

    • training 的普遍性: 训练曲线(training curve)遵循可预测的幂律,其中训练曲线大致上与模型大小无关。通过推断训练曲线的早期部分,我们可以大致预测如果我们训练的时间更长,将会取得什么样的 loss

    • transfer 提高测试性能:当我们在与训练时分布不同的文本上评估模型时,评估结果与验证集上的结果密切相关, loss 的偏移量大致不变。换句话说,迁移到一个不同的分布上会产生一个恒定的惩罚,但其他方面的改善与训练集上的表现大致一致。

    • 样本效率(sample efficiency):大模型比小模型更具有样本效率,以更少的 optimization stepFigure 2 左图)和更少的数据点(Figure 4 左图)达到相同的性能水平。

      此外,Figure 19 提供了另一种观察这一现象的方法,它显示了不同模型达到各种固定 loss 的时间。

    • 收敛是低效的: 当在固定的计算预算 C 内工作,但对模型大小 N 或可用数据量 D 没有任何其他限制时,我们通过训练非常大的模型并在收敛之前明显地停止,从而达到最佳性能(Figure 3 )。因此,与人们的预期相反,相比于训练小模型并收敛,这种方式得到的最佳 compute-efficient training 要更加 sample efficient 。随着训练计算量的增加,数据需求增长非常缓慢:DC0.27

    • 最优的 batch size:训练这些模型的最优的 batch size 大约仅仅是 loss 的幂次,并通过测量 gradient noise scale 来确定。对于我们可以训练的最大的模型,在收敛时大约是 1M ~ 2Mtokens

    综合来看,这些结果表明,当我们适当地 scale up 模型规模、数据规模、以及计算量时,language modeling 的性能会平稳地、可预测地提高。我们预计,更大的语言模型将比目前的模型表现得更好、更加 sample efficient

43.6.2 Scaling Laws 摘要

  1. 当性能仅仅受 non-embedding parameters 数量 N、数据集大小 D 、以及 optimally allocated 计算预算 Cmin 的限制时,可以用幂律来预测一个自回归语言模型训练的 Transformerloss (如 Figure 1):

    • 对于参数数量 N 受到限制的模型,在足够大的数据集上训练到收敛(即,N 的变化对于 L 的影响):

      (27)L(N)=(Nc/N)αN;αN0.076,Nc8.8×1013(non-embedding parameters)
    • 对于大型模型(即,N 足够大),在数据规模 D 受到限制的数据集上训练且早停(即,D 的变化对于 L 的影响):

      (28)L(D)=(Dc/D)αD;αD0.095,Dc5.4×1013(tokens)
    • 对于最佳规模的模型(即,N 足够大)、足够大的数据集(即,D 足够大)、足够小的 batch size(对计算量的最佳使用),在计算量 Cmin 受到限制的条件下进行训练:

      (29)L(Cmin)=(Ccmin/Cmin)αCmin;αCmin0.050,Ccmin3.1×108(PF-days)

    这些关系在 Cmin8 个数量级、N6 个数量级、以及 D2 个数量级上都成立。它们非常弱地依赖于 model shape 和其他的 Transformer 超参数( depthwidth 、自注意头的数量),具体数值与 Webtext2 训练集相关。

  2. 幂率 αN,αD,αCmin 规定了当我们扩大 NDCmin 的规模时预期的性能改善程度。例如,参数数量 N 增加一倍(即 N2N),产生的 loss 要更小,其中大约是原始 loss2αN=0.95 倍。 Nc,Ccmin,Dc 的精确数值取决于 vocabulary sizetokenization,因此没有基本的含义(fundamental meaning )。

  3. critical batch size 决定了数据并行的 speed/efficiency tradeoff,也大致服从 L 的幂率:

    (30)Bcrit(L)=BL1/αB,B2×108 tokens,αB0.21
  4. 公式 L(N)L(D) 共同表明,当我们增加模型大小时,我们应该根据 DNαN/αD=N0.74 线性地增加数据集大小。事实上,我们发现有一个结合了 L(N)L(D) 的单个方程,支配着对 ND 的同时依赖,并支配着过拟合的程度:

    (31)L(N,D)=[(NcN)αN/αD+DcD]αD

    这个方程与 Figure 4 的左图相配合。我们猜想,这种函数形式也可以为其他 generative modeling task 来参数化 trained log-likelihood

  5. 当在 infinite data limit 中对一个给定的模型进行有限的 parameter update steps S 的训练时,在一个初始的短时间之后,学习曲线可以被准确地拟合(见 Figure 4 的右边):

    (32)L(N,S)=(NcN)αN+(ScSmin)αS

    其中:Sc2.1×103αS0.76Smin 是使用方程 Smin=S1+Bcrit(L)/B 估计的最小可能的 optimization steps (即参数更新次数)的数量,Bbatch size

  6. 当在固定的计算预算 C 内进行训练,但没有其他限制时,方程 L(N,S) 导致预测最佳模型大小 N、最佳 batch size B、最佳 stepS 、以及数据集大小 D 应增长为:

    (33)NCαCmin/αN,BCαCmin/αB,SCαCmin/αS,D=B×SαCmin=11/αS+1/αB+1/αN

    这与经验结果(NCmin0.73,BCmin0.24,SCmin0.03)比较接近。

  7. 随着计算预算 C 的增加,计算预算应该主要用在更大的模型上,而不应在训练时间或数据集大小上有急剧增加(如 Figure 3 )。这也意味着,随着模型的增大,它们的 sample efficient 也越来越高。在实践中,研究人员通常训练较小的模型(由于硬件的限制),较小模型的训练时间要更长(相比较于最大化计算效率的模型,即更大的模型)。最佳性能取决于总计算量的幂律(参考方程 L(Cmin))。

  8. 我们为方程 L(N,D) 提供了一些基本的理论动机,对 learning curve fit 及其对训练时间的影响进行了分析,并对我们每个 token 的结果进行了细分。我们还对LSTMrecurrent Transformer 做了一些简单的比较。

  9. 公式总结:

    这些趋势的经验拟合参数为:

    compute efficient training 的最优参数为:

43.6.2 注意事项

  1. 在这一节中,我们列出了一些对我们的分析可能存在的注意事项:

    • 目前,我们对我们提出的任何一个 scaling laws 都没有一个坚实的理论理解。与模型大小和计算量的 scaling 关系尤其神秘。通过用一个 noisy 的二次方来建模 loss ,在模型大小固定的情况下,也许有可能理解在非常大的 D 下的 scaling 关系,以及在训练后期的学习曲线的形状。但是在非常大的模型大小下,与 Dscaling 关系仍然是神秘的。如果没有一个理论、或者对我们的 scaling laws 的修正有一个系统的理解,就很难确定在什么情况下它们可以被信任。

    • 我们对远在我们所探索的范围之外的 lossBcrit(L) 的预测不是特别有信心。Bcrit 的变化可能会对数据并行性、以及所需的 serial training steps数量之间的权衡产生重大影响,这将对训练时间产生重大影响。 

    • 我们没有彻底研究小数据的区域,对于最小的 D 值(一个 epoch 只有 40step ),我们对 L(N,D) 的拟合很差。此外,我们没有对正则化和数据增强进行试验。这些方面的改进可能会在数量上或质量上改变我们的结果。

    • 我们使用了估计的训练计算量 C6NBS,它不包括与 nctx 成比例的贡献。因此,在非常大的 nctx 的系统中,特别是在 nctx12dmodel 的情况下,我们的计算量的 scaling 可能不太准确。 

    • 我们调优了学习率,并且采用了 learning rate schedule 进行实验。但是我们可能忽略了调优一些对 scaling 有重要影响的超参数(如 intialization scale 或动量)。

    • 学习率的最佳选择对 target loss 是敏感的。当训练接近收敛时,可能需要使用较小的学习率来避免发散。但是当进行 short training run 时(例如由于计算限制),可能会使用较大的学习率。对于没有进行收敛的 training runs, 我们没有进行更高学习率的实验。

四十四、Chinchilla[2022]

《Training Compute-Optimal Large Language Models》

  1. 最近,一系列大型语言模型(Large Language Model: LLM )被引入,目前最大的稠密语言模型拥有超过 500B 参数。这些大型自回归 transformer 模型在许多任务上使用各种评估协议(如 zero-shotfew-shotfine-tuning ),都表现出令人印象深刻的性能。

    训练大型语言模型的计算成本和能源成本很高,并随着模型规模的增加而上升。在实践中,分配的 training compute budget 通常是事先知道的:有多少个 accelerators 可用,以及用多久。由于这些大型模型通常只训练一次,因此准确估计给定 computational budget 条件下的最佳模型超参数至关重要(《Scale efficiently: Insights from pre-training and fine-tuning transformers》)。

    《Scaling laws for neural language models》 表明:自回归语言模型的参数数量与它的性能之间存在幂律(power law)关系。因此,该领域一直在训练越来越大的模型,并预期带来性能的提高。《Scaling laws for neural language models》 的一个值得注意的结论是:大型模型不应该被训练到其最低的损失(test loss ),以达到 compute optimal 。虽然我们得出了同样的结论,但我们估计大型模型的训练应该比作者建议的多得多的 training tokens 。具体来说,在 computational budget 增加十倍的情况下,他们建议模型的大小应该增加 5.5 倍,而 training tokens 的数量只应该增加 1.8 倍。相反,我们发现模型的大小和 training tokens 的数量应该以相等的比例进行 scale

    《Scaling laws for neural language models》 的结论:

    (34)NCmin0.73,BCmin0.24,SCmin0.03

    当计算预算增加十倍时,模型大小需要增加 100.73=5.37 倍;training tokens 数量为 E=B×S ,需要增加 100.27=1.86 倍。

    遵循 《Scaling laws for neural language models》GPT-3 的训练设置,最近训练的许多大型模型已经训练了大约 300B token (如下表所示),这与增加计算量时主要增加模型规模的做法是一致的。

    在这项工作中,我们重新审视了这个问题: 在固定的 FLOPs 预算下,应该如何权衡模型大小和 training tokens 数量?为了回答这个问题,我们将最终的预训练损失 L(N,D) 作为模型参数数量 Ntraining tokens 数量 D 的函数。由于 computational budget C 是模型参数数量 Nseen training tokens 数量 D 的确定性函数 FLOPs(N,D),我们感兴趣的是在 FLOPs(N,D)=C 的约束条件下最小化 L

    (35)Nopt(C),Dopt(C)=argminN,Ds.t.FLOPs(N,D)=CL(N,D)

    其中:Nopt(C),Dopt(C) 描述了 computational budget C 的最佳分配。

    注意:这里的 D 指的是 training tokens 数量,这跟 《Scaling Laws for Neural Language Models》 中的符号不同。在 《Scaling Laws for Neural Language Models》 中,D 表示训练集的 tokens 数量,E=B×S 才是 training tokens 数量。

    这里的 L 指的是 test loss

    我们根据 400多个模型的 loss 来经验性地估计这些函数,这些模型的参数规模从低于 70M 到超过 16B ,并在从 5B 到超过 400Btoken 上进行训练,每个模型配置都在几个不同的 training horizons 进行训练。我们的方法导致了与 《Scaling laws for neural language models》 的结果大不相同。我们在下图中强调了我们的结果,并在后面章节中强调了我们的方法有什么不同。

    基于我们估计的 compute-optimal 边界,我们预测,对于用于训练 Gophercompute budget ,最优模型应该小 4 倍,同时在 4 倍的 tokens 上进行训练。我们通过在 1.4T tokens 上训练一个更加 compute-optimal70B 模型,称为 Chinchilla ,来验证这一点。Chinchilla 不仅比其更大的同类模型 Gopher 表现出色,而且其减少的模型尺寸大大降低了推理成本,并大大促进了下游在更小硬件上的使用。大型语言模型的能源成本通过 inference和微调的使用而摊销。因此,一个经过优化训练的小型模型,其好处要超过改善模型性能的直接好处。

  2. 相关工作:

    • 大型语言模型:在过去的几年里,各种大型语言模型已经被引入。这些模型包括 dense transformer models 、以及 mixture-of-expert (MoE) models 。最大的 dense transformers 已经超过 500B 参数(《Using Deepspeed and Megatron to Train Megatron-turing NLG 530b, A Large-Scale Generative Language Model》)。

      训练越来越大的模型的动力是很明显的:到目前为止,增加语言模型的规模已经在许多语言建模任务中提高了 SOTA 。然而,大型语言模型面临着一些挑战,包括它们巨大的计算需求(traininginference 的成本随着模型的大小而增加),以及需要获得更多的高质量训练数据。事实上,在这项工作中,我们发现更大的、高质量的数据集将在语言模型的任何 further scaling 中发挥关键作用。

    • scaling 行为进行建模:了解语言模型的 scaling 行为及其迁移特性(transfer property)在最近的大型模型的发展中一直很重要。

      《Scaling laws for neural language models》 首次展示了模型大小与 loss 之间在许多数量级上的 predictable relationship 。作者研究了在给定的计算预算(compute budget )下选择最佳的模型大小来训练的问题。与我们类似,他们通过训练各种模型来解决这个问题。我们的工作在几个重要方面与《Scaling laws for neural language models》 不同:

      • 首先,作者对所有的模型都使用了固定的 training tokens 数量和学习率调度;这使得他们无法建模这些超参数对 loss 的影响。相比之下,我们发现,无论模型大小如何,将学习率调度设置为与 training tokens 数量大致匹配的结果是最好的 final loss ,如下图所示。

        《Scaling Laws for Neural Language Models》 论文中并未固定 training tokens 数量,所以这里的结论是从何而来?

        上面三个子图:training steps = 8M ;下面三个子图:training steps = 12.5M 。每条曲线分别代表余弦学习率的周期长度为 training steps 数量 k 倍,k=1/1.1/1.25/1.5/2.0/5.0

        对于一个固定的 learning rate cosine schedule,从训练刚开始到 130B tokens ,中间的 loss estimates (对于 D130B)高估了用与 D 相匹配的 schedule length 所训练的模型的 loss 。使用这些中间的 loss 的结果是,低估了在少于130B tokens 的数据上训练模型的有效性,并最终促成了这样的结论:随着计算预算的增加,模型规模的增加应该快于训练数据规模。相反,我们的分析的预测表明,这两个数量应该以大致相同的速度 scale

        给定一个 training tokens 数量,由于学习率调度的 non-optimal 选择,导致了训练得到的 training loss 要比最优的 training loss 更高。

        注意,这里是 training loss,而 《Scaling Laws for Neural Language Models》 中的指标是 test loss

      • 其次,我们包括参数高达 16B 的模型,因为我们观察到 FLOP-loss 边界有轻微的曲率。这意味着来自非常小的模型的预测与来自较大模型的预测不同。事实上,我们分析中使用的大多数模型都有超过 500M 个参数。相比之下,《Scaling laws for neural language models》 的大多数 runs 都要小得多,许多模型的参数不到 100M

        不同颜色的 training loss 曲线代表了不同大小的模型。

        在下图中,我们显示了使用第一批三个frontier-points 、中间三个frontier-points 、以及最后三个frontier-points 的线性拟合(橙色虚线、绿色虚线、蓝色虚线)。在这项工作中,我们没有考虑到这一点,我们把它作为有趣的未来工作,因为它表明,对于大的 FLOPs 预算,甚至更小的模型也可能是最佳的。

      最近,《Unified scaling laws for routed language models》 专门研究了 Mixture of Expert 语言模型的 scaling 特性,表明随着模型规模的增加,expert 数量的 scaling 会减弱。他们的方法将 loss 作为两个变量的函数:模型规模、专家数量。然而,与《Scaling laws for neural language models》 一样,该分析是在固定数量的 training tokens 下进行的,有可能低估了 branching 的改进。

    • 为大型模型而估计超参数:在选择语言模型,并且选择训练模型的程序时,模型大小和 training tokens 数量并不是唯一需要选择的两个超参数。其他重要的超参数包括学习率、学习率调度、batch size 、优化器、宽深比(width-to-depth ratio )。在这项工作中,我们专注于模型大小和 training steps 数量,我们依靠现有的工作、以及所提供的实验启发式方法来确定其他必要的超参数。

      • 《Tuning large neural networks via zero-shot hyperparameter transfer》研究了如何选择这些超参数来训练自回归变 transformer ,包括学习率和 batch size

      • 《An empirical model of large-batch training》 发现最佳 batch size 和模型大小之间只有微弱的依赖性。

      • 《Measuring the effects of data parallelism on neural network training》 提出,使用比我们使用的更大的 batch size 是可能的。

      • 《The depth-to-width interplay in self-attention》研究了各种 standard model size 的最佳 depth-to-width ratio 。我们使用比所提议的深度稍小的模型,因为这可以在我们的硬件上转化为更好的 wall-clock performance

    • 改进的模型架构:最近,人们提出了各种有前途的替代传统 dense transformer 的方法。例如,通过使用条件计算, 大型 MoE 模型 (如 1.7T 参数的 Switch transformer1.2T 参数的 GLaM 模型,以及其他模型)能够提供较大的有效 model size ,但是使用相对较少的 training FLOPsinference FLOPs 。然而,对于非常大的模型,routed model 的计算优势似乎在减少(《Unified scaling laws for routed language models》)。

      改进语言模型的一个正交方法是用明确的检索机制来 augment transformer 。这种方法有效地增加了训练期间看到的 tokens 数量(在 《Improving language models by retrieving from trillions of tokens》 中增加了 10 倍)。这表明,语言模型的性能可能比以前认为的更加依赖于训练数据的大小。

44.1 方法

  1. 我们提出三种不同的方法来回答问题: 在固定的 FLOPs 预算下,应该如何权衡模型大小和 training tokens 数量?在所有三种情况下,我们首先训练一系列模型,改变模型大小和 training tokens 数量,并使用所得的训练曲线来拟合一个empirical estimator ,该 empirical estimator 关于应该如何 scale 。我们假设计算量和模型大小之间存在幂律关系,正如《Unified scaling laws for routed language models》《Scaling laws for neural language models》 所做的那样,尽管未来的工作可能希望针对大的模型规模在这种关系中包括潜在曲率(potential curvature)。

    所有三种方法的预测结果都是相似的,并且表明参数数量和 training tokens 数量应该随着计算量的增加而同样增加,这个比例如下表所示(括号里的值分别是 10% 分位、90% 分位的统计结果)。这与以前关于这个主题的工作形成了显著的对比,值得进一步研究。

    注意,《Scaling laws for neural language models》 研究的是 test loss,而这里研究的是 training loss

44.1.1 方法一:固定模型规模并改变 training tokens 数量

  1. 在我们的第一种方法中,我们针对一系列的固定规模的模型(模型参数从 70M10B )改变训练步数,为每个模型训练 4 个不同数量的 training sequences (即,training seen examples 数量)。从这些 runs 中,我们能够直接提取在定数量的 training FLOPs 下实现的最小 loss 的估计。

    四个不同数量的 training sequences 是如何实现的?如果是非常大的数据集,那么很可能最长的 training steps 都没能过遍历一个 epoch,此时,每个样本仅被训练一次;如果是较小的数据,那么很可能最短的 training steps 都遍历了多个 epoch,此时每个样本被训练多次。

    论文并未说明预训练的 datasets 是如何构建的。

  2. 我们对最小的模型使用最大的学习率为 2×104,对最大的模型使用最大的学习率为 1.25×104。在所有情况下,使用余弦学习率调度,学习率在训练结束时相比初始学习率下降了 10 倍。我们假设余弦周期的长度应该与训练步数大致匹配。我们发现,当余弦周期长度超出训练步数 25% 以上时,性能会明显下降,如下图所示。 我们使用窗长为 10 步的高斯平滑来平滑训练曲线。

  3. 对于每个参数数量 𝑁 ,我们训练 4 个不同的模型(因此一共训练了 4N 个模型),在一个范围为 16xhorizon (以 training tokens 数量来衡量)上将学习率衰减 10 倍。然后,对于每次 run ,我们平滑并插值训练损失曲线。由此,我们得到一个从 FLOP 数量到 training loss 的连续映射(如下左图所示)。然后:

    • 对于每个 FLOP 数量,我们确定哪个 runsloss 最低(左图的灰色边界线)。

      是否存在这样的可能性:对于给定的 FLOP数量,有多个配置都能达到最低的 training loss ?即,是否存在 N1,D1N2,D2 ,使得 C=FLOPs(N1,D1)=FLOPs(N2,D2) 且它们都位于灰色边界线上?

    • 使用这些插值,我们得到了从任何 FLOP 数量 𝐶most efficient choice 的模型大小 𝑁training tokens 数量 𝐷 的映射(参考中间的图、右侧的图),从而使得 FLOPs(N,D)=C

    1500 个对数间隔的FLOP 值中,我们找到哪个模型大小能实现所有模型的最低 loss ,以及所需的 training tokens 数量。最后,我们拟合幂律来估计任何给定计算量的最佳模型大小和 training tokens 数量,得到一个关系 NoptCaDoptCb。我们发现 a=0.50,b=0.50,如 Table 2 所总结的。

    在后续章节中,我们展示了在 1021 FLOPs 下的一对一比较,分别使用我们的分析所得到的模型规模、以及来自《Scaling laws for neural language models》 的分析所得到的模型规模,使用我们预测的模型大小具有明显的优势。

    注意中间的图、右图中绿色直线给出了 Chinchilla 的参数规模(67B)、FLOPs5.76×1023)、以及 Training Tokens1.5T )。

44.1.2 方法二:IsoFLOP profiles

  1. 在我们的第二个方法中,我们选择九种固定的 FLOP 数量(从 6×10183×1021 FLOPs ),然后改变模型规模,然后考虑每种配置的 final training loss 。方法一需要沿着整个 training runs 考虑数据点 (N, D, L) 。与方法一相反,方法二允许我们直接回答问题:对于给定的 FLOPs 预算,最佳的参数规模是多少?

    方法二中,对应于给定 FLOPs 数量的曲线中,Training Loss 最小的点,横坐标就是最佳参数规模。

  2. 对于每个 FLOP 预算,我们在下图(左图)中绘制了 final loss (平滑之后)与参数规模的对比。在所有情况下,我们确保我们已经训练了足够多样化的 model size ,以便在 loss 中看到一个明显的最小值。我们对每条 IsoFLOPs 曲线拟合一条抛物线,以直接估计在何种模型规模下达到最小 loss

    与方法一相同,我们随后在 FLOPsloss-optimal 的模型规模和 training tokens 数量之间拟合一个幂律,如下图的中间、右侧所示。再次,我们拟合指数函数的形式为 NoptCaDoptCb,并且发现 a=0.50,b=0.50,正如 Table 2 所总结的。

44.1.3 方法三:拟合损失函数

  1. 最后,我们将方法一和方法二中的实验的所有 final loss 建模为模型参数数量 Ntraining tokens 数量 D 的函数。按照经典的风险分解(详细推导过程参考原始论文的附录 D ),我们提出以下函数形式:

    (36)L^(N,D)=E+ANα+BDβ

    其中:

    • 第一项捕获数据分布上的理想 generative process 的损失,并应与自然文本的熵相对应。

    • 第二项反映了这样一个事实,即一个具有 𝑁 个参数的 perfectly trained transformer 低于理想 generative process 的表现。

      模型规模越大,则模型拟合能力越强,因此 training loss 越小。

    • 最后一项反映了一个事实,即 transformer 没有被训练到收敛,因为我们只在数据集分布的一个样本(即,单个数据集)上进行了有限数量的 optimisation steps

      training tokens 数量越大,则模型见过的样本越多,则 training loss 越小。

  2. 模型拟合:为了估计 (A,B,E,α,β) ,我们使用 L-BFGS 算法,使 predicted loglossobserved log loss 之间的 Huber loss 最小:

    (37)minA,B,E,α,βRuns iHuberδ(logL^(Ni,Di)logLi)

    我们通过 a grid of initializations 中选择最佳拟合从而来考虑可能的局部最小值。Huber loss (其中 δ=103)对 outliers 是鲁棒的,我们发现这对 held-out data points 的良好预测性能很重要。原始论文的附录 D 详细介绍了拟合过程和 loss decomposition

    我们使用 δ=103 ,因为我们发现:

    • 较大的 δ 使得模型过拟合于小预算,而对大预算的预测很差。

    • 更小的 δ 不会影响 resulting prediction

  3. 有效的边界(frontier):我们可以通过在约束条件 FLOPs(N,D)6ND 下最小化 parametric loss L^ 来近似 NoptDopt

    根据 《Scaling Laws for Neural Language Models》 的推导过程, FLOPs6NBS ,而 D=BS

    根据公式的结构,它们具有幂律形式:

    (38)Nopt(C)=G(C6)a,Dopt(C)=G1(C6)bwhere G=(αAβB)1/(α+β),a=βα+β,b=αα+β

    这是怎么推导来的?论文并未详细说明。

    我们在下图(左图)中显示了被拟合的函数 L^ 的等高线,蓝色显示了根据公式来理论求解的 efficient computational frontier。通过这种方法,我们发现 a=0.46,b=0.54 ,如 Table 2 所总结的。

44.1.4 最优的 model scaling

  1. 我们发现,尽管使用了不同的拟合方法和不同的 trained model ,在 parameterstokens 方面,针对最佳 scaling 产生了 comparable predictions (如 Table 2 所示)。所有三种方法都表明,随着计算预算的增加,模型的规模和训练数据的数量应该以大致相等的比例增加。

    • Figure 1Figure A3 所示,第一方法和第二种方法对最佳模型大小的预测非常相似。

    • 第三种方法预测,在较大的计算预算下,更小的模型是最佳的。

      我们注意到,低的 training FLOPsC1021)的 observed points (L,N,D) ,相比于更高计算预算的 points,具有更大的残差 LL^(N,D)22。 被拟合的曲线将更多的权重放在具有更多 FLOPs 的点上:由于 Huber loss ,自动地将低计算预算的点视为 outliers 。作为经验上观察到的边界 CNopt 上负曲率的结果(见Figure A5 ),这导致预测的 Nopt 比其他两种方法低。

  2. 在下表中,我们显示了在 compute-optimal frontier 上,给定大小的模型所对应的预估 FLOPs 数量和 token 数量。们的发现表明,考虑到它们各自的计算预算,目前这一代的大型语言模型的规模明显过大,如 Figure 1 所示。例如:我们发现一个 175B 参数的模型应该用 4.41×1024 FLOPs 的计算预算、以及超过 4.2T tokens 进行训练。

    4.41, 4.2, 6.8 等等,这几个数值在下面的表格中找不到,原因有两个:首先,表格中给出的是方法一的估计值,而作者并没有说这几个数值是通过方法一还是方法二/三估计而来;其次,表格中给出的参数与这里正文部分描述的参数有一定的差距,这导致了结果上的差异。

    在计算预算约为 1025 FLOPs 的情况下,一个280BGopher-like 模型是最佳的训练模型,应该在 6.8T tokens 上训练。除非有 1026 FLOPs 的计算预算(超过了 250 倍的用于训练Gopher 的计算量),否则 1T 参数的模型不太可能是 optimal model 从而用于训练 。此外,预计需要的训练数据量远远超过了目前用于训练大型模型的数据量,并强调了除了允许 model scaleengineering improvement 之外,数据集收集的重要性。

    虽然推断出许多数量级有很大的不确定性,但我们的分析清楚地表明,鉴于目前许多 LLMtraining compute budget ,应该使用更小的模型在更多的 token 上进行训练,以实现最有效的模型。

  3. 跨数据集的 scaling result 的一致性:我们展示了在两个不同的数据集(C4GitHub code)上训练之后的 IsoFLOP (方法二)分析的 scaling result 。对于这两组使用 MassiveText 子集的实验,我们使用与MassiveText 实验相同的 tokenizer

    MassiveText 数据集是 Gopher 预训练所用的数据集,也是 Chinchilla 所用的预训练数据集。

    如下图和下表所示,在这两种情况下,我们都得出了类似的结论,即模型大小和 training tokens 数量应该以相等的比例进行缩放。这表明我们的结果是独立于数据集的,只要不进行超过一个 epoch 的训练。

  4. 对于方法二和方法三,我们在下表中展示了各种计算预算下的估计模型大小和 training tokens 数量。我们在下图中绘制了三种方法在各种 FLOPs 预算下预测的 tokens 数量和参数数量。

44.2 Chinchilla

  1. 根据我们前面的分析,Gopher 计算预算的最佳模型大小是在 40B70B 参数之间。出于数据集和计算效率的考虑,我们在这个范围的较大一侧(即,70B 参数)训练了一个模型,traing tokens 数量为 1.4T ,从而用来验证这个假设。在本节中,我们将这个模型(我们称之为 Chinchilla )与 Gopher 和其他大型语言模型进行比较。ChinchillaGopher 都经过了相同数量的FLOPs 来训练,但在模型的大小和 training tokens 数量上有所不同。

    虽然预训练一个大型语言模型有相当大的计算成本,但下游的微调和推理也构成了大量的计算用量。由于比 Gopher4 倍,Chinchilla 的内存占用和推理成本也更小。

44.2.1 模型和训练细节

  1. 用于训练 Chinchilla 的全部超参数在下表(Table 4 )中给出。Chinchilla 使用与 Gopher 相同的模型结构和训练设置,但下面列出的差异除外。

    • 我们在 MassiveText (与 Gopher 相同的数据集)上训练 Chinchilla ,但使用了稍微不同的子集分布(如下表所示),从而考虑到 training tokens 数量的增加。请注意,MassiveWebWikipedia 的子集都被用于一个以上的 epoch (分别为 1.24epoch3.4epoch)。

    • 我们对 Chinchilla 使用 AdamW 而不是 Adam,因为这改善了 language modelling loss 和微调后的下游任务性能。

    • 我们用稍加修改的 SentencePiece tokenizer 来训练 Chinchilla,这个 tokenizer 不应用 NFKC normalization 。词表非常相似:94.15%tokens 与用于训练 Gophertokens 相同。例如,我们发现,这对数学和化学的 representation 特别有帮助。

    • 虽然前向传播和反向传播是以 bfloat16 计算的,但我们在 distributed optimizer state 中存储了一份 float32 的权重。更多细节见 《Scaling language models: Methods, analysis& insights from training Gopher》

    本分析中的所有模型都是在 TPUv3/TPUv4上用JAXHaiku 进行训练。原始论文附录 A8 中包括一张 Chinchilla model card

  2. ChinchillaGopher 的其它差异:除了模型大小和 training tokens 数量的差异,ChinchillaGopher 之间还有一些额外的微小差异。具体来说,Gopher 是用 Adam 训练的,而 Chinchilla 是用 AdamW 训练。此外,如前所述,Chinchillasharded optimiser state 中存储了一份精度更高的权重。

    我们在下图 A6A7 中分别展示了用 AdamAdamW 训练的模型的比较。我们发现,AdamW 训练的模型比用 Adam 训练的模型要好,与学习率调度无关。

    • A6 :我们展示了一个 680M 参数的模型的比较,该模型是在使用和不使用更高精度的权重副本的情况下训练出来的,并且使用 Adam/AdamW 进行比较。橙色为 Chinchilla 、绿色为 Gopher

    • A7417M 模型(蓝色)和 1.4B 模型(绿色),分别在 AdamW 优化器(虚线) 和 Adam 优化器(实线)下的比较。可以看到 AdamW 效果更好。

44.2.2 结果

  1. 我们对 Chinchilla 进行了广泛的评估,与各种大型语言模型进行了比较。我们对 Gopher 提出的任务的一个大子集进行了评估,如下表所示。由于这项工作的重点是优化 model scaling ,我们包括了一个大型的代表性子集,并引入了一些新的评估,以便与其他现有的大型模型进行更好的比较。所有任务的评估细节与 Gopher 中描述的相同。

  2. Language modelling:如下图所示:

    • ChinchillaThe Pile 的所有 evaluation 子集上都明显优于 Gopher 。与 Jurassic-1178B)相比,除了两个子集(dm_mathematicsubuntu_irc ),Chinchilla 在所有子集上的性能更强。原始比较结果参考原始论文的 Table A5

    • Wikitext103上,Chinchilla 实现了 7.16 的困惑度,而 Gopher7.75

    在这些语言建模 benchmark 上对 ChinchillaGopher 进行比较时需要谨慎,因为 ChinchillaGopher 多训练了 4 倍数据,因此训练集/测试集泄漏可能会人为地提高结果。因此,我们更强调其他的任务(如 MMLUBIG-bench 、以及各种闭卷问答和常识分析),对于这些任务来说,泄漏是不那么令人担忧的。

  3. MMLU:大规模多任务语言理解( Massive Multitask Language Understanding: MMLUbenchmark 包括一系列类似考试的学术科目上的问题。在下表中,我们报告了 ChinchillaMMLU 上的平均 5-shot 成绩。详细结果参考原始论文 A6

    在这个 benchmark 上,尽管 Chinchilla 小得多,但它的表现明显优于 Gopher ,其平均准确率为 67.6% (比 Gopher 提高了 7.6% )。值得注意的是,Chinchilla 甚至超过了专家对 June 2023 Forecast63.4% 准确率。此外,Chinchilla4 个不同的单独任务(高中政治、国际法、社会学和美国外交政策)上达到了 90% 以上的准确率。据我们所知,没有其他模型在一个子集上达到大于90% 的准确率。

    在下图中,我们展示了与 Gopher 的比较,按任务划分。总的来说,我们发现 Chinchilla 在绝大多数的任务中都提高了性能。在四个任务(大学数学、计量经济学、道德情景、形式逻辑)中,Chinchilla 的表现不如 Gopher ,而在另外两个任务中的表现没有变化。

  4. 阅读理解:在 final word prediction 数据集 LAMBADA上,Chinchilla 达到了 77.4% 的准确率,而 Gopher 的准确率为74.5%MT-NLG 530B76.6% (如下表所示)。在 RACE-hRACE-m 上,Chinchilla 的表现大大超过了 Gopher,在这两种情况下,准确率提高了 10% 以上。

  5. BIG-bench:我们在 《Scaling language models: Methods, analysis& insights from training Gopher》 报告的同一组BIG-bench 任务上分析了 Chinchilla 。与我们在 MMLU 中观察到的情况类似,Chinchilla 在绝大多数任务中都优于 Gopher (如下图所示)。我们发现,Chinchilla 将平均性能提高了10.7% ,达到了65.1% 的准确率,而 Gopher 则为54.4% 。在我们考虑的 62 个任务中,Chinchilla 只在四个任务上比 Gopher 表现得差:crash_blossom, dark_humor_detection,mathematical_induction, logical_argsChinchilla 的全部 accuracy 结果可以在原始论文的 Table A7 中找到。

  6. Common sense:我们在各种 common sense benchmark 上评估ChinchillaPIQASIQAWinograndeHellaSwagBoolQ。我们发现 Chinchilla 在所有任务上都优于 GopherGPT-3 ,在除了一项任务之外的所有任务上都优于 MT-NLG 530B ,如下表所示。

    TruthfulQA上,Chinchilla0-shot/5-shot/10-shot 的情况下分别达到 43.6%/58.5%/66.7% 的准确率。相比之下,Gopher 只达到了 29.5%0-shot43.7%10-shot 准确率。与 TruthfulQA 的研究结果形成鲜明对比的是,Chinchilla 取得的巨大改进( 0-shot 准确率的提升为 14.1% )表明,仅对 pre-training data 进行更好的建模,就能在这个 benchmark 上取得实质性的改进。

  7. 闭卷问答:下表中报告了闭卷问答 benchmark 的结果。

    • Natural Questions 数据集上,Chinchilla 实现了新的闭卷 SOTA 准确性: 5-shot/64-shot分别达到 31.5%/35.5% 的准确率,而 Gopher 则分别为 24%/28% 的准确率。

    • TriviaQA上,我们展示了被过滤的数据集(以前被用于检索和开卷问答)和未被过滤的数据集(以前用于大型语言模型评估)的结果。在这两种情况下,Chinchilla 的表现都大大优于 Gopher

      • 在被过滤的版本上,Chinchilla 落后于开卷 SOTA 仅仅 7.9%

      • 在未被过滤的版本上,Chinchilla 的表现优于 GPT-3

  8. 性别偏见和毒性:大型语言模型具有潜在的风险,如输出冒犯性的语言、传播社会偏见、以及泄露私人信息。我们预计 Chinchilla 会有与 Gopher 类似的风险,因为 Chinchilla 是在相同的数据上训练的(尽管数据子集的相对权重略有不同),而且 Chinchilla 有一个与类似 Gopher 的架构。在这里,我们研究了性别偏见(gender bias)(特别是性别偏见和职业偏见)和有毒语言的 generation 。我们选择了几个 common evaluations 来强调潜在的问题,但强调我们的评估并不全面,在理解、评估和缓解 LLM 的风险方面还有很多工作要做。

    • 性别偏见:正如 《Scaling language models: Methods, analysis& insights from training Gopher》 所讨论的那样,大型语言模型从其训练数据集中反映了关于不同群体(如性别群体)的当代话语(contemporary discourse)和历史话语(historical discourse ),我们预计 Chinchilla 也会如此。

      在这里,我们使用 Winogender 数据集在 zero-shot setting 的情况下,测试潜在的性别偏见和职业偏见是否在共指消解(coreference resolution )任务上表现出不公平结果。Winogender 测试了一个模型是否能正确判断一个代词是否指代不同的 occupation word 。一个无偏见的模型会正确预测代词指的是哪个词,而不考虑代词的性别。我们遵循 Gopher 的相同设置(在论文附录 H.3 节中进一步描述)。

      如下表所示,Chinchilla 在所有组别中比 Gopher 更频繁地正确解析代词。有趣的是,男性代词的性能提高(提高 3.2% )比女性代词或中性代词(分别提高 8.3%9.2% )小得多。

      我们还考虑了欺骗样本(gotcha example),在这些样本中,正确的代词解析与性别刻板映像相矛盾(由劳动统计决定)。我们再次看到,ChinchillaGopher 更准确地解析了代词。当按 male/female 性别和 gotcha/not gotcha 来划分样本时,最大的改进是 female gotcha 的样本(改进了 10% )。因此,尽管 ChinchillaGopher 在更多的共指消解样本中 uniformly 地克服了性别思维定式( gender stereotype ),但对某些代词的改进率(the rate of improvement )高于其他代词,这表明使用更加 compute-optimal 的模型所带来的改进可能是不均衡(uneven )的。

    • 样本毒性:语言模型能够生成有毒语言,包括侮辱、仇恨言论、亵渎、威胁。虽然毒性是一个概括性术语(umbrella term ),它在语言模型中的评估也伴随着挑战,但 automatic classifier score 可以为语言模型产生的有害文本的水平提供一个指示。Gopher 发现,通过增加模型参数的数量来改善 language modelling loss ,对有毒文本的生成(unprompted 的条件下)只有微不足道的影响。在这里,我们分析通过更加 compute-optimal training 来实现更低的 LM loss 是否也是如此。

      Gopher 的协议类似,我们从 Chinchilla 生成 25kunprompted 样本,并将其 Perspective API 毒性评分分布与 Gopher 生成的样本进行比较。一些 summary 的统计数字表明没有大的差异:

      • Gopher 的平均(中位)毒性得分是 0.081(0.064) ,而Chinchilla0.087(0.066)

      • Gopher 的第95 百分位得分是 0.230 ,而 Chinchilla0.238

      也就是说,绝大部分生成的样本都被归类为无毒的,模型之间的差异可以忽略不计。与之前的研究结果一致(Gopher ),这表明 unconditional text generation 中的毒性水平在很大程度上与模型质量无关(以 language modelling loss 来衡量),也就是说,training datasetbetter model 不一定更有毒。

48.3 讨论

  1. 到目前为止,大型语言模型训练的趋势是增加模型的规模,往往没有增加 training tokens 数量。最大的dense transformer ,即 MT-NLG 530B,比两年前 GPT-3170B 参数还要大 3 倍以上。然而,这个模型以及现有的大多数大型模型,都是针对数量上相差无几的 token 进行训练的,这个数量大约 300B 。虽然训练这些巨型模型的愿望导致了大量的工程创新,但我们假设,训练越来越大的模型的竞赛导致模型的性能,大大低于在相同的计算预算下可以实现的性能。

    我们根据 400 多次训练的结果,提出了三种预测方法来优化设置模型大小和训练时间。所有这三种方法都预测 Gopher 的规模严重过大,并估计在相同的计算预算下,在更多的数据上训练的更小的模型将表现更好。我们通过训练 Chinchilla(一个 70B 参数的模型)来直接测试这一假设,并表明它在几乎所有被衡量的评估任务上都优于 Gopher 甚至更大的模型。

  2. 虽然我们的方法允许我们预测在给定计算量的条件下如何 scale 大型模型,但也有一些局限性:

    • 由于训练大型模型的成本,我们只有两个可比较的大规模的 training runsChinchillaGopher ),而且我们没有在中间规模(intermediate scale )的额外测试。

    • 此外,我们假设 efficient computational frontier 可以用计算预算、模型规模、以及 training tokens数量之间的幂律关系来描述。然而,我们观察到在高计算预算下, log(Nopt) 有一些凹性(见 Figure A5 )。这表明,我们可能仍然高估了大型模型的最佳规模。

    • 最后,我们分析的 training runs 都是在不到一个 epoch 的数据上训练的;未来的工作可能会考虑多个 epoch 的情况。

    尽管有这些局限性,ChinchillaGopher 的比较验证了我们的性能预测,从而使我们在相同的计算预算下训练出更好(和更轻量)的模型。

  3. 尽管最近有大量的工作使得越来越大的模型可以被训练,但我们的分析表明需要更加关注数据集的scaling 。我们推测,只有当数据是高质量的,扩展到越来越大的数据集才是有益的。这就要求我们负责任地收集更大的数据集,并高度关注数据集的质量。更大的数据集需要格外小心,以确保 train-test setoverlap 得到适当的考虑,无论是在 language modelling loss 还是在下游任务中。

    最后,对数万亿 token 进行训练会带来许多道德问题和隐私问题。从网上爬取的大型数据集将包含有毒的语言、偏见、以及隐私信息。随着更大的数据集被使用,这种信息的数量会增加,这使得数据集的内省(introspection )变得更加重要。Chinchilla 确实受到偏见和毒性的影响,但有趣的是它似乎比 Gopher 受到的影响要小。更好地理解大型语言模型的性能和毒性是如何相互作用的,这是一个重要的未来研究问题。

  4. 虽然我们将我们的方法应用于自回归语言模型的训练,但我们预计在其他模式中,模型大小和数据规模之间也存在类似的权衡。由于训练大型模型非常昂贵,事先选择最佳的模型大小和训练步数是至关重要的。我们提出的方法很容易在新的环境中复现。

48.4 附录

这里摘选了附录中的一些重要信息。完整的附录内容参考原始论文。

  1. 最佳 cosine cycle length:一个关键的假设是关于余弦周期长度、以及相应的 learning rate drop (我们使用 10 倍的 learning rate decay ,与 Gopher 保持一致)。我们发现,余弦周期长度设置得比 training step 的目标数量长得多,导致次优的训练模型,如下图所示。因此,我们假设,在给定 FLOPs 预算的情况下,一个 optimally trained model 将把余弦周期长度正确地校准为最大的训练步数;我们在 main analysis 中遵循这一规则。

    给定计算预算,可以根据 scaling laws 计算得到最佳模型规模和 training tokens 数量,从而能够计算得到最大的训练步数。

  2. 《Scaling laws for neural language models》small-scale 上的比较:对于 1021 FLOPs ,我们对方法一预测的模型和 《Scaling laws for neural language models》 预测的模型进行了正面比较。对于这两个模型,我们使用了 0.5Mbatch size1.5×104 的最大学习率,并以 10 倍的速度衰减。从《Scaling laws for neural language models》 的研究中,我们发现,最佳的模型规模应该是 4.68B 参数。根据我们的方法一,我们估计 2.86B个参数的模型应该是最佳的。

    我们训练了一个 4.74B 参数的 transformer 和一个 2.80B 参数的 transformer 来测试这个假设,使用相同的 depth-to-width ratio 来避免尽可能多的混杂因素。我们发现,我们的预测模型优于《Scaling laws for neural language models》 预测的模型,如下图所示。

  3. FLOPs 计算:我们在分析中包括所有的 training FLOPs ,包括那些由 embedding 矩阵贡献的 FLOPs 。请注意,我们也将 embedding 矩阵计入总参数数量中。对于大型模型, embedding 矩阵的 FLOPs和参数数量贡献很小。我们用系数为 2 来描述乘加运算的代价。

    注意,《Scaling laws for neural language models》 不包括 embedding 参数和对应的 FLOPs

    对于前向传播,我们考虑来自以下方面的贡献:

    • embedding2 * seq_len * vocab_size * d_model

    • 注意力层(单层):

      • key, query, value 的投影:2 * 3 * seq_len * d_model * (key_size * num_heads)

      • Key @ Query logits2 * seq_len * seq_len * (key_size * num_heads)

      • softmax3 * num_heads * seq_len * seq_len

      • softmax @ query reductions2 * seq_len * seq_len * (key_size * num_heads)

      • final linear2 * seq_len * (key_size * num_heads) * d_model

    • Dense Block (单层):

      • 2 * seq_len * (d_model * ffw_wize + d_model * ffw_size)

    • Final logits

      • 2 * seq_len * d_model * vocab_size

    • 总的前向传播的 FLOPsembeddings + num_layers * (total_attention + dense_block) + logits

    《Scaling laws for neural language models》 一样,我们假设反向传播的 FLOPs 是前向传播的两倍。我们展示了我们的计算、以及使用常见近似值 C=6DN (与 《Scaling laws for neural language models》 )的比较,其中 CFLOPsDtraining tokens 数量,N 是参数数量,如下表所示。我们发现 FLOP 计算中的差异非常小,它们并不影响我们的分析。与 Gopher 提出的结果相比,我们使用了一个稍微精确的计算,给出了一个稍微不同的值( 6.3×1023,而不是 5.76×1023)。

  4. 所有的 train models:注意,其中一些模型被训练很多次,每次采用不同的训练步数。

四十五、LLaMA[2023]

  1. 在大规模的文本语料库中训练的大型语言模型(Large Languages Model: LLM)已经显示出它们有能力从 textual instructionsa few examples 中执行新的任务。在将模型 scaling 到足够大的规模时出现了这些 few-shot 特性,由此产生了一系列的工作,主要是进一步 scaling 这些模型。这些努力都是基于这样的假设:更多的参数会带来更好的性能。然而,《Training compute-optimal large language models》最近的工作表明:在给定 compute budget 的条件下,最好的性能不是由最大的模型实现的,而是由在更多的数据上训练的更小的模型实现的。

    《Training compute-optimal large language models》scaling laws 的目标是确定如何为特定的 training compute budget 最佳地 scale 数据集规模和模型大小。然而,这个目标忽略了 inference budget ,而 inference budget 在规模地 serving 语言模型时变得至关重要。在这种情况下,给定一个 target level 的性能,首选的模型不是训练速度最快的,而是推理速度最快的,尽管训练一个达到一定性能水平的大模型可能更便宜(指的训练成本),但训练时间较长的小模型最终会在推理中更便宜。例如,尽管《Training compute-optimal large language models》 建议在 200Btoken 上训练一个 10B 的模型,但 《LLaMA: Open and Efficient Foundation Language Models》 的作者发现,即使在 1Ttoken 之后,7B 的模型的性能也会继续提高。

    论文 《LLaMA: Open and Efficient Foundation Language Models》 的重点是训练一系列语言模型,通过在比通常使用的更多的token 上进行训练,在各种 inference budgets 下实现最佳性能。由此产生的模型被称为 LLaMA ,其参数范围从 7B65B ,与现有的最佳 LLM 相比,性能具有竞争力。例如,LLaMA-13B 在大多数 benchmark 上都优于 GPT-3 ,尽管它比 GPT-310 倍。作者相信这个模型将有助于民主化(democratize )对 LLM 的访问和研究,因为它可以在单个 GPU 上运行。在更大的规模上,论文的 65B 参数模型也能与最好的大型语言模型(如 ChinchillaPaLM-540B )竞争。

    ChinchillaPaLMGPT-3不同的是,LLaMA 只使用公开的数据,使论文的工作与开源兼容,而大多数现有的模型依靠的数据要么不公开,要么没有记录(例如,"Books – 2TB""Social media conversations")。存在一些例外,如 OPTGPT-NeoXBLOOMGLM,但没有一个能与 PaLM-62BChinchilla 竞争。

  2. 相关工作:

    • 语言模型:语言模型是单词序列、token 序列、或字符序列的概率分布。这项任务通常被定义为 next token prediction ,长期以来一直被认为是自然语言处理的核心问题。由于图灵提出通过 "imitation game" 使用语言来衡量机器智能,language modeling 已被提议作为benchmark 来衡量人工智能的进展。

    • 架构:传统上,语言模型是基于 n-gram count statistics 的,并且人们提出了各种平滑技术来改善对 rare event 的估计。在过去的二十年里,神经网络已经成功地应用于语言建模任务,从 feed forward modelrecurrent neural networkLSTM 开始。最近,基于self-attentiontransformer 网络带来了重要的改进,特别是在捕获长距离依赖方面。

    • scaling

      语言模型的scaling 有很长的历史,对于模型规模和数据集的大小都是如此:

      • 《Large language models in machine translation》 展示了使用在 2T tokens 上训练的语言模型,产生了 300Bn-grams ,对机器翻译的质量有好处。这项工作依赖于一种简单的平滑技术,称为 Stupid Backoff

      • 《Scalable modified kneserney language model estimation》后来展示了如何将 Kneser-Ney 平滑技术扩展到 Web-scale 的数据。这使得我们可以在 CommonCrawl975B tokens 上训练一个 5-gram 模型,从而得到一个具有 500Bn-grams 的模型(《N-gram counts and language models from the common crawl》)。

      • 《One billion word benchmark for measuring progress in statistical language modeling》引入了 "One Billion Word benchmark" ,这是一个large scale 的训练数据集,用来衡量语言模型的进展。

      在神经语言模型方面:

      • 《Exploring the limits of language modeling》 通过将 LSTM 扩展到 1B 个参数,在 One Billion Word benchmark 上获得了 SOTA 的结果。

      • 后来,scaling transformer 导致了在许多 NLP 任务上的改进。著名的模型包括 BERTGPT-2Megatron- LMT5

      • GPT-3 获得了重大突破,这个模型有 175B 个参数。这导致了一系列大型语言模型,如 Jurassic-1Megatron-Turing NLGGopherChinchillaPaLMOPT 以及 GLM

      • 《Deep learning scaling is predictable》《A constructive prediction of the generalization error across scale》 研究了 scaling 对深度学习模型性能的影响,表明模型规模和数据集大小与系统性能之间存在 power laws

      • 《Scaling laws for neural language models》 专门为基于 transformer 的语言模型导出了 power laws 。后来 《Training compute-optimallarge language models》通过在 scaling 数据集时调整学习率调度,对 power laws 进行了 refine

      • 最后,《Emergent abilities of large language models》 研究了 scaling 对大型语言模型能力的影响。

45.1 方法

  1. 我们的训练方法与之前工作中描述的方法相似(GPT-3Palm),并受到 Chinchillascaling laws 的启发。我们使用一个标准的优化器在大量的文本数据上训练 large transformer

  2. Pre-training Data:我们的训练数据集是几个数据源的 mixture,如下表所示,覆盖了不同的领域。在大多数情况下,我们 reuse 已经被用来训练其他LLM 的数据源,但限制是只使用公开可用的数据,并兼容于 open sourcing 。这导致了如下的 data mixture 以及各数据源在训练集中所占的百分比:

    • English CommonCrawl [67%]:我们用CCNet pipeline《CCNet: Extracting high quality monolingual datasets from webcrawl data》)预处理五个 CommonCrawl dumps ,范围从 2017 年到 2020 年。这个过程在 line level 上对数据进行删除:用 fastText 线性分类器进行语言识别从而去除非英语网页,并用 ngram 语言模型过滤低质量内容。

      此外,我们还训练了一个线性模型来进行二分类,判断是随机采样的网页,还是该网页作为维基百科中的参考页( reference )。我们丢弃了未被分类为参考页的网页。

      猜测这么做的动机是:作者认为维基百科的参考页的质量更高。因此作者希望能够去掉低质量的网页、保留高质量的网页。

    • C4 [15%]:在探索性的实验中,我们观察到使用多样化的 pre-processedCommonCrawl 数据集可以提高性能。因此,我们将公开的 C4 数据集纳入我们的数据。C4 的预处理也包含重复数据删除、以及语言识别等步骤,这个预处理与 CCNet 的主要区别是网页质量过滤:C4 主要依靠启发式方法,如标点符号的存在与否、或者网页中的单词/句子的数量。

    • Github [4.5%]:我们使用谷歌 BigQuery 上的公共的 GitHub 数据集。我们只保留在 ApacheBSDMITlicense 下发布的项目。此外,我们用基于 line length 、或 alphanumeric 字符比例的启发式方法过滤了低质量的文件,并用正则表达式删除了模板(如程序文件的 header 部分)。最后,我们在 file level 上对所产生的数据集通过精确匹配来去重。

    • Wikipedia [4.5%]:我们添加了 20226 月至 8 月期间的 Wikipedia dumps ,涵盖了 20 种语言,这些语言使用拉丁字母或西里尔字母:bg, ca, cs, da, de, en, es, fr, hr, hu, it, nl, pl, pt, ro, ru, sl, sr, sv, uk 。我们对数据进行处理,以去除超链接、评论和其他格式化的模板。

    • Gutenberg and Books3 [4.5%]:我们的训练数据集包括两个 book corporaGutenberg Project 包含公共领域的书籍;ThePileBooks3 部分,其中 ThePile 是一个用于训练大型语言模型的公开数据集。我们在 book level 上进行去重,删除内容重叠度超过 90% 的书籍。

    • ArXiv [2.5%]:我们处理 arXivLatex 文件,从而将科学数据添加到我们的数据集中。遵从 《Solving quantitative reasoning problems with language models》 的做法,我们删除了 first section 之前的所有内容,以及书目(bibliography )。我们还删除了.tex 文件中的注释,以及用户写的inline-expanded 的定义和宏,以提高论文之间的一致性。

    • Stack Exchange[2%]:我们包括 Stack Exchange 的一个 dump ,其中 Stack Exchange 是一个高质量的问答网站,涵盖了从计算机科学到化学等不同领域。我们保留了 28 个最大网站的数据,删除了文本中的 HTML 标签,并按分数(从高到低)对答案进行了排序。

      这里应该是保留 28 个最大领域的数据。

      答案的分数是网站用户打分的,可以视为一种监督信息。这里为什么要对答案排序?猜测是把质量最高的答案紧跟在问题之后,使得模型也能够优先输出质量最高的结果。

    根据论文的介绍,似乎只有 Wikipedia (占比 4.5% )包含多语言,其它 95.5% 的数据都是英文的。因此,预训练数据集以英文为主体。

  3. Tokenizer:我们用 bytepair encoding: BPE 算法对数据进行 tokenize ,使用 Sentence-Piece 的实现。值得注意的是,我们将所有的 numbers 拆分为单个digits ,并通过退回到字节来分解未知的 UTF-8 字符。

    总的来说,我们的整个训练数据集在 tokenization 后大约包含 1.4Ttoken 。对于我们的大多数训练数据,每个 token 在训练期间只使用一次;但 WikipediaBooks 除外,我们对其进行了大约两个 epochs

    Table 1Epochs 列所示。

  4. 架构:遵从最近的大型语言模型的工作,我们的网络是基于 transformer 架构的。我们利用了后来提出并使用的各种改进。以下是与原始 transformer 架构的主要区别,以及我们发现这种变体的灵感所在(方括号内):

    • Pre-normalization [GPT3]:为了提高训练的稳定性,我们对每个 transformer sub-layer 的输入进行归一化,而不是对输出进行归一化。我们使用 RMSNorm 归一化函数,其中 RMSNorm《Root meansquare layer normalization》 引入。

      • transformer sub-layer 的输入进行归一化: x+Sublayer(LayerNorm(x))

      • LayerNorm 归一化公式:

        (39)x¯=xμσγ+β

        其中 μ=i=1dxidxRd 的均值,σ=1d×i=1d(xiμ)2 为标准差, 为逐元素乘法,γ 为待学习的 scale 向量(每个维度一个),β 为待学习的均值向量(每个维度一个)。

        x 为输入张量 X 的某个维度的向量(默认为最后一维)。

      • RMSNorm 归一化公式:

        (40)x¯=xRMS(x)γ+β,RMS(x)=1di=1dxi2

        它比 LayerNorm 更简单,无需计算均值 μ

    • SwiGLU activation function [PaLM]:我们用 SwiGLU 激活函数(由 《Glu variants improve transformer》 引入)取代 ReLU 非线性激活函数以提高性能。我们使用的维度是 23×4d,而不是PaLM 中的 4d

      Gated Linear Unit 及其变体:

      (41)GLU(x,W,V,b,c)=σ(Wx+b)(Vx+c)Bilinear(x,W,V,b,c)=(Wx+b)(Vx+c)ReGLU(x,W,V,b,c)=max(0,Wx+b)(Vx+c)GEGLU(x,W,V,b,c)=GELU(Wx+b)(Vx+c)SwiGLU(x,W,V,b,c,β)=Swishβ(Wx+b)(Vx+c)

      其中:GELU(x)=xΦ(x)Φ(x) 为高斯正态分布的累计概率函数;Swishβ(x)=xσ(βx)

    • Rotary Embeddings [GPTNeo]:我们删除了absolute positional embedding ,而是使用 rotary positional embedding: RoPE ,其中 RoPE《Roformer: Enhanced transformer with rotary position embedding》 引入。

    不同模型的超参数细节如下表所示。

    RoPE 的技术细节参考 GLM-130B 的内容、以及 《Roformer: Enhanced transformer with rotary position embedding》 的内容。

  5. 优化器:我们的模型是用 AdamW 优化器训练的,超参数如下:β1=0.9,β2=0.95 。我们使用一个余弦学习率调度,使最终的学习率等于最大学习率的 10% 。我们使用 0.1 的权重衰减、以及 1.0 的梯度剪裁。 我们使用 2000warmup steps ,并针对不同的模型大小使用不同的学习率和 batch size (参考 table 2 )。

  6. 高效实现:我们进行了一些优化,以提高我们模型的训练速度:

    • 首先,我们使用了 causal multi-head attention 的有效实现,以减少内存用量和运行时间。这个实现可以在 xformers library 中找到,它受到 《Self-attention does not need o(n2) memory》的启发,并使用了 《Flash-attention: Fast and memory-efficient exact attention with io-awareness》backward 。这是通过不存储 attention weights 、以及不计算 key/query scores 分数来实现的(因为语言建模任务的因果特性)。

      《Self-attention does not need o(n2) memory》:给定 query qRd 、以及 nkey k1,,kn 、以及 nvaleu v1,,vn ,所有的向量都是 d 维的,原始的 attention 定义为:

      (42)si=qki,si=exp(si)jexp(sj),attention(q,K,V)=isivi

      self-attention 中,有 nquery,因此上式的计算复杂度、空间复杂度均为 O(n2)

      在该论文中,作者提出的算法如下:

      (43)si=qki,si=exp(si),attention(q,K,V)=isivijsj

      首先计算 si=qki ;然后更新 vv+exp(si)×vss+exp(si) ;最后计算 v/s

      计算单个 attention 的空间复杂度为O(1) ,因此 nqueryself-attention 的内存消耗为 O(n) 。注意,空间复杂度仍然为 O(n2)

    • 为了进一步提高训练效率,我们减少了在backward pass 中使用 checkpointing 重新计算的 activations 的数量。更具体而言,我们保存了计算成本较高的activations ,如线性层的输出。这是通过手动实现 transformer layerbackward function 来实现的,而不是依靠 PyTorchautograd 。为了充分受益于这种优化,我们需要通过使用 model parallelismsequence parallelism 来减少模型的内存使用,如 《Reducing activation recomputation in large transformer models》 所述。

    • 此外,我们还尽可能地将 activations 的计算和 GPU 之间的通信(由于 all_reduce 操作)重叠起来。

    当训练一个 65B 参数的模型时,我们的代码在 2048A100 GPU (每个 A100 GPU 的内存为 80GB )上处理大约 380 tokens/sec/GPU 。这意味着在我们包含 1.4T tokens 的数据集上进行训练大约需要 21 天。

45.2 主要结果

  1. 遵从 GPT-3 的工作,我们考虑了 zero-shot 任务和 few-shot 任务,并报告了在 20benchmark 上的结果:

    • zero-shot 任务:我们提供任务的文字描述和一个测试样本。该模型要么使用 open-ended generation 来提供一个答案,要么对 proposed answers 进行排名。

    • few-shot 任务:我们提供任务的几个样例(数量在 1 ~ 64 之间)和一个测试样本。该模型将这些文本作为输入,并生成答案、或者对不同的选项进行排名。

    我们将 LLaMA 与其他 foundation model 进行比较,包括:

    • 非公开的语言模型 GPT-3GopherChinchillaPaLM

    • 开源的 OPT 模型、GPT-JGPT-neo

    此外,我们还简要比较了 LLaMAOPT-IMLFlan-PaLMinstruction-tuned 的模型。

    事实上,Flan-PaLM 并没有开源,开源的是 Flan-T5

    我们在自由格式的 generation task 、以及 multiple choice task 上评估了 LLaMA 。在多选任务中,目标是根据提供的上下文从而在一组给定的选项中选择最合适的 completion 。在给定的上下文的情况下,我们选择可能性最大的 completion

    我们遵从 《A framework for few-shot language model evaluation》,使用根据 completion 中的字符数归一化的 likelihood (即,P(completioncontext)/CharNum(completion)),但某些数据集(OpenBookQA、BoolQ )除外。对于后者,我们遵从 GPT-3,归一化的 likelihood 为:

    (44)P(completioncontext)P(completion"Answer:")

    对于 P(completioncontext)/CharNum(completion) 指标,该指标鼓励模型生成更短的 completion、惩罚较长的 completion

45.2.1 常识推理

  1. 我们考虑了八个标准的 common sense reasoning benchmarkBoolQPIQASIQAHellaSwagWinoGrandeARC easyARC challengeOpenBookQA 。这些数据集包括 Cloze 风格和 Winograd 风格的任务,以及多项选择题的回答。我们按照语言建模社区的做法,在 zero-shot setting 下进行评估。

    cloze 风格:完形填空;Winograd 风格:指代消歧。

    在下表中,我们与现有的各种规模的模型进行比较,并报告了相应论文中的数字。

    • 首先,LLaMA-65B 在除了 BoolQ 之外的所有benchmark上都超过了 Chinchilla-70B

    • 同样,LLaMA-65B 在除了 BoolQWinoGrande 之外的所有benchmark上都超过了 PaLM-540B

    • LLaMA-13B 模型在大多数benchmark上也超过了 GPT-3 ,尽管它比 GPT-3 要小 10 倍。

45.2.2 闭卷问答

  1. 我们在两个闭卷问答的benchmark 上将LLaMA与现有的大型语言模型进行比较:Natural QuestionsTriviaQA

    • 对于 Natural Questions ,我们使用了用于 open-domain question answeringtest-split ,其中包含 3610 个问题。

    • 对于 TriviaQA ,我们对过滤后的验证集进行评估。这与 GPT-3PaLM 不同,后者是在未经过滤的测试集上进行评估的,而在线评估服务器已经不可用了。

    我们使用贪心解码来生成答案,并通过在第一个断行、最后一个点号或逗号处停止从而从 generation 中抽取答案。生成的答案用标准的精确匹配(exact match )指标进行评估:如果一个生成的答案在规范化后与答案列表中的任何一个答案相匹配,则认为它是正确的。在这个规范化的步骤中,我们对生成的答案进行小写,并删除文章(从而仅保留答案部分)、标点符号、以及重复的空格。下图分别展示了 Natural QuestionsTriviaQA1-shot setting 中的格式化例子。在所有的 setting 中,我们在输入中添加了前缀 Answer these questions:\n

    Table 4Table 5 中,我们分别报告了NaturalQuestionsTriviaQA 的性能。在这两项benchmark测试中,LLaMA-65Bzero-shot/few-shot setting 中都达到了 SOTA 的性能。更重要的是,尽管 LLaMA-13BGPT-3Chinchilla5 ~ 10 倍,但在这些benchmark测试中也有竞争力。在推理过程中, LLaMA-13B 模型在单个 V100 GPU 上运行。

45.2.3 阅读理解

  1. 我们在 RACE 阅读理解 benchmark 上评估我们的模型。这个数据集收集自为中国初高中学生设计的英语阅读理解考试。我们遵循GPT-3的评估设置,并在下表中报告结果。在这些 benchmark 上,LLaMA-65BPaLM-540B 具有竞争力,而且,LLaMA-13BGPT-3 高出几个百分点。

45.2.4 数学推理

  1. 我们在两个数学推理(mathematical reasoningbenchmark 上评估我们的模型:MATHGSM8kMATH是一个用LaTeX编写的12K 个初中和高中数学问题的数据集。GSM8k是一套初中数学问题。在下表中,我们与 PaLMMinerva进行比较。Minerva 是在从 ArXivMath 网页中提取的 38.5Btokens 上微调的一系列 PaLM 模型,而 PaLMLLaMA 都没有在数学数据上微调。

    PaLMMinerva 的实验结果来自 《Solving quantitative reasoning problems with language models》,我们比较了带 maj1@k 和不带 maj1@k 的情况。maj1@k 表示我们为每个问题生成 k 个样本并进行多数投票的评估。在 GSM8k 上,我们观察到LLaMA-65B 优于Minerva-62B ,尽管 LLaMA-65B 还没有在数学数据上进行微调。

45.2.5 代码生成

  1. 我们在两个 benchmark 上评估了我们的模型根据自然语言描述来编写代码的能力:HumanEvalMBPP。对于这两项任务,模型都会收到关于 program 的几句话的描述,以及一些input-output 的示例。在 HumanEval 中,模型还会收到一个函数签名,prompt 被格式化为natural code ,其中文本描述和测试案例都在一个 docstring 中。该模型需要生成一个符合描述并满足测试案例的Python 程序。

    在下表中,我们将我们的模型的 pass@k 分数与现有的尚未对代码进行微调的语言模型(即 PaLMLaMDA )进行了比较。这里报告的 pass@1 结果是通过温度为 0.1 的采样得到的。pass@100pass@80 的指标是在温度为 0.8 的情况下得到的。我们使用与 《Evaluating large language models trained on code》 相同的方法来获得 pass@k 的无偏估计。PaLMLaMA 是在包含类似数量的 code token 的数据集上训练的。

    如下表所示,在参数数量相似的情况下,LLaMA 优于其他通用模型(如 LaMDAPaLM ),它们都没有专门针对 code 进行训练或微调。在 HumanEvalMBPP 上,LLaMA-13B/65B 超过了 LaMDA 137BLLaMA 65B 也优于 PaLM 62B

    通过在 code-specific tokens 上进行微调,有可能提高 code 上的性能。例如,PaLM-Coder《Palm: Scaling language modeling with pathways》)将 PaLMHumanEval 上的pass@1 得分从 PaLM26.2% 提高到 36%。其他专门为 code 训练的模型在这些任务上的表现也比通用模型好(《Evaluating large language models trained on code》《Codegen: An open large language model for code with multi-turn program synthesis》《Incoder: A generative model for code infilling and synthesis》)。对 code tokens 的微调超出了本文的范围。

45.2.6 大规模多任务语言理解

  1. 《Measuring massive multitask language understanding》 引入的大规模多任务语言理解基准(massive multitask language understanding benchmark: MMLU),由涵盖各种知识领域的多项选择题所组成,包括人文、STEM 、以及社会科学。我们使用该 benchmark 所提供的样本,在 5-shot setting 中评估我们的模型,并在下表中报告结果。

    在这个 benchmark 上,我们观察到 LLaMA-65BChinchilla-70BPaLM-540B 平均落后几个百分点,而且是在大多数领域。一个潜在的解释是,LLaMA 在预训练数据中使用了有限的书籍和学术论文(即 ArXiv, Gutenberg, Books3),总数据量只有 177GB ,而其它这些模型是在高达 2TB的书籍上训练的。GopherChinchillaPaLM 所使用的大量书籍也可以解释为什么 Gopher 在这个 benchmark 上的表现优于GPT-3 ,而在其他 benchmark 上却不相上下。

45.2.7 训练期间的性能演变

  1. 在训练期间,我们跟踪了我们的模型在一些问答 benchmark 和常识推理 benchmark 上的表现,并在 Figure 2 中报告。在大多数 benchmark 上,性能稳步提高,并与模型的 training perplexity 相关(如 Figure 1 所示)。例外的是 SIQAWinoGrande

    • 最值得注意的是,在 SIQA 上,我们观察到了性能上的大的方差,这可能表明这个 benchmark 是不可靠的。

    • WinoGrande 上,性能与 training perplexity 的相关性并不高:LLaMA-33BLLaMA-65B 在训练期间的性能相似。

45.3 Instruction Finetuning

  1. 在这一节中,我们表明,对指令数据(instructions data)进行微调会迅速导致 MMLU 上的改进。尽管 LLaMA-65B 的非指令微调版本已经能够遵循基本的指令,但我们观察到,极少量的指令微调就能提高 MMLU 上的性能,并进一步提高模型遵循指令的能力。由于这不是本文的重点,我们只遵循 《Scaling instruction-finetuned language models》 的协议进行了一次实验,以训练一个指令模型( instruct model ),即 LLaMA-I

    在下表中,我们报告了我们在 MMLU 上的指令模型 LaMA-I 的结果,并与现有的中等规模的指令微调模型,即 OPT-IMLFlan-PaLM 系列进行比较。所有报告的数字都来自相应的论文。尽管这里使用的指令微调方法很简单,但我们在 MMLU 上达到 68.9%LLaMA-I(65B)MMLU 上的表现超过了现有的中等规模的指令微调模型,但仍与 SOTA 相差甚远(GPT code-davinci-002MMLU 上的表现为 77.4 ,数字来自 《Opt-iml: Scaling language model instruction meta learning through the lens of generalization》)。

  2. MMLU 上的 57 个任务的详细表现如下表所示。

    抽象代数、大学化学这两个任务上, LLaMA-I 性能不如 LLaMA

45.4 Bias, Toxicity and Misinformation

  1. 大型语言模型已被证明可以重现和放大训练数据中存在的偏见( bias ),并产生有毒的或冒犯性的内容。由于我们的训练数据集包含了很大一部分来自网络的数据,我们认为确定我们的模型产生这种内容的可能性是至关重要的。为了了解 LLaMA-65B 的潜在危害,我们在不同的 benchmark 上进行评估,这些 benchmark 衡量有毒内容的产生、以及刻板印象的检测。虽然我们选择了一些语言模型社区所使用的标准 benchmark 来表明这些模型的一些问题,但这些评估并不足以完全了解与这些模型相关的风险。

45.3.1 RealToxicityPrompts

  1. 语言模型可以产生有毒的语言,例如,侮辱、仇恨言论、或者威胁。一个模型可以生成的有毒内容范围非常大,这使得彻底的评估具有挑战性。最近的几项工作将 RealToxicityPrompts 基准作为衡量模型毒性的指标。RealToxicityPrompts 由模型必须 complete 的大约 100kprompt 组成;然后通过向 PerspectiveAPI 提出请求来自动评估毒性分数。 我们无法控制第三方 PerspectiveAPI 使用的 pipeline ,因此很难与以前的模型进行比较。

    对于 100kprompt 中的每一个,我们都用我们的模型贪婪地生成 completion ,并测量其毒性得分。每个 prompt 的得分范围从0(无毒)到 1 (有毒)。在下表中,我们报告了我们对 RealToxicityPromptsbasic prompt categoriesrespectful prompt categories 的平均得分。这些分数与我们在文献中观察到的情况 "相当"(例如,Chinchilla0.087 ),但这些工作与我们的方法不同(在采样策略、prompt 数量、以及 API 的时间方面)。

    respectful prompt:以 Complete the following sentence in a polite, respectful, and unbiased manner 作为 prompt 的开始文本。

    我们观察到,毒性随着模型的大小而增加,特别是对于Respectful prompts 。这在以前的工作中也观察到了(《Opt: Open pre-trained transformer language models》),但 《Training compute-optimal large language models》明显例外,他们没有看到 ChinchillaGopher 之间的差异,尽管尺寸不同。这可以解释为较大的模型 Gopher 的性能比 Chinchilla 差,这表明毒性和模型大小之间的关系可能只适用于一个模型族( model family )。

    整体而言,Respectful 版本的 prompt 的毒性要小于 basic 版本。但是当模型规模为 65B 时,Respectful 版本反而更有毒性?

43.5.2 CrowS-Pairs

  1. 我们在 CrowSPairs 上评估了我们模型中的 bias 。这个数据集允许测量 9categorybias :性别、宗教、种族/肤色、性取向、年龄、国籍、残疾、体貌、以及社会经济地位。每个样本都是由一个刻板印象(stereotype)和一个反刻板印象(anti-stereotype)组成的,我们在 zero-shot setting 下用两个句子(刻板印象的句子和反刻板印象的句子)的困惑度来衡量模型对刻板印象句子的偏爱。因此,较高的分数表示较高的 bias 。我们在下表中与 GPT-3OPT-175B 进行比较。

    LLaMA 与这两个模型的平均得分相比略胜一筹。我们的模型在宗教类别中特别地有偏(与 OPT-175B 相比 +10% ),其次是年龄和性别。尽管有多个过滤步骤,我们预计这些 bias 来自 CommonCrawl

45.4.3 WinoGender

  1. 为了进一步研究我们的模型在性别上的 bias ,我们查看了 WinoGender benchmark ,这是一个共指消解(co-reference resolution )数据集。WinoGender 是由 Winograd schema 构成的,通过确定模型的共指消解性能是否受到代词性别的影响来评估bias

    更确切而言,每个句子有三个提及(mention ):一个 "职业"、一个 "参与者"、以及一个 "代词",其中代词要么指向职业、要么指向参与者。我们来 prompt 模型从而确定共指关系(co-reference relation ),并根据句子的上下文衡量它是否正确地做到了这一点。该任务的目的是揭示与职业相关的社会偏见是否被模型所捕获。例如,WinoGender 数据集中的一个句子是 "The nurse notified the patient that his shift would be ending in an hour." ,那么 "His" 接下来的文本是什么?然后,我们比较了 His nurseHis patient 的困惑度,从而使用模型来执行共指消解。

    我们评估了使用 3 种代词时的表现:"her/her/she""his/him/he" 、以及 "their/them/someone" ,不同的选择对应于代词的语法功能。在下表中,我们报告了数据集中包含的三种不同代词的 co-reference score 。我们观察到,我们的模型对 "their/them/someone" 代词的共指消解能力明显好于 "her/her/she""his/him/he" 代词。在以前的工作中也有类似的观察,这可能表明了性别偏见。事实上,在 "her/her/she""his/him/he" 代词的情况下,模型很可能是使用职业的多数性别来进行共指消解,而不是使用句子的证据。

    为了进一步研究这个假设,我们看了 WinoGender 数据集中"her/her/she""his/him/he" 代词的"gotcha" case(指的是欺骗性的案例)。这些情况对应于代词与职业的多数性别不匹配的句子,而职业是正确答案。在下表中,我们观察到我们的模型,LLaMA-65B ,在被骗的例子中犯了更多的错误,清楚地表明它捕捉到了与性别和职业有关的社会偏见(social bias )。在"her/her/she""his/him/he" 这两种代词上的表现都有所下降,这表明无论性别如何,都存在偏见。

45.4.4 TruthfulQA

  1. TruthfulQA 旨在衡量一个模型的真实性,即它识别一个 claim 是真的能力。TruthfulQA 认为 "真实" 的定义是指 "关于现实世界的字面意义上的真实",而不是指仅在信仰体系或传统等等背景下的真实的 claim 。这个 benchmark 可以评估一个模型产生错误信息或错误 claim 的风险。这些问题以不同的风格写成,涵盖 38 个类别,并被设计成对抗性的。

    在下表中,我们报告了我们的模型在两类问题上的表现:一类问题衡量模型的真实性、另一类问题衡量真实性和信息性的交集。与 GPT-3 相比,我们的模型在这两类问题中的得分更高,但正确答案的比率仍然很低,这表明我们的模型很可能产生幻觉从而产生错误答案。

45.5 碳足迹

  1. 我们的模型训练消耗了大量的能源,造成了二氧化碳的排放。我们遵循最近关于这个问题的文献,在下表中对总的能源消耗和由此产生的碳足迹(carbon footprint )进行了细分。我们遵从 《Sustainable ai: Environmental implications,challenges and opportunities》 的公式来估计训练一个模型所需的瓦特小时(Wh)以及碳排放量(tCO2eq)。

    • 对于 Wh ,我们使用公式:

      (45)Wh=GPU-h×(GPU power consumption)×PUE

      其中:我们设置电力使用效率( Power Usage Effectiveness: PUE )为 1.1

    • 碳排放的结果取决于用于训练网络的数据中心的位置。例如:

      • BLOOM 使用的电网排放 0.057 kg CO2eq/KWh ,导致 27 吨二氧化碳当量(tCO2eq )。

      • OPT 使用的电网排放 0.231 kg CO2eq/KWh ,导致 82 吨二氧化碳当量。

      在这项研究中,我们感兴趣的是比较这些模型在同一数据中心训练时的碳排放成本。因此,我们不考虑数据中心的位置,而是使用美国全国平均碳强度系数 0.385 kg CO2eq/KWh 。这导致了以下的吨碳排放公式:

      (46)tCO2eq=MWh×0.385

      为了公平比较,我们对 OPTBLOOM 采用同样的公式。对于 OPT ,我们假设训练需要在 992A100-80GB 上进行 34 天(见其训练日志)。最后,我们估计我们使用了 2048A100-80GB 在大约 5 个月的时间来开发我们的模型。这意味着,根据我们的假设,开发这些模型将花费大约 2638 MWh ,总排放量为 1015 吨二氧化碳当量。我们希望发布这些模型将有助于减少未来的碳排放,因为训练工作已经完成,而且一些模型相对较小,可以在单个 GPU 上运行。

45.6 附录

  1. 我们展示了一些用 LLaMA-65B 获得的 generations 的例子(没有指令微调)。 prompt 用粗体字表示。

  2. 这里我们展示了几个 LLaMA-Igeneration 的例子,即用 《Scaling instruction-finetuned language models》 的协议和指令数据集微调的 LLaMA-65B

四十六、GLM[2021]

  1. 在未标记文本上预训练的语言模型大大推进了各种 NLP 任务的 SOTA ,从自然语言理解(natural language understanding: NLU )到文本生成。在过去的几年里,下游的任务表现以及参数的规模也不断增加。

    一般来说,现有的预训练框架可以分为三个系列:自回归模型、自编码模型、encoder-decoder 模型。

    • 自回归模型(如 GPT )学习从左到右的语言模型。虽然它们在长文本 generation 中获得了成功,并且在扩展到数十亿个参数时表现出 few-shot learning 能力,但其固有的缺点是单向注意力机制,不能完全捕捉 NLU 任务中上下文单词之间的依赖关系。

    • 自编码模型(如 BERT),通过 denoising objective (如 Masked Language Model: MLM)学习双向上下文编码器。编码器产生适合自然语言理解任务的 contextualized representation ,但不能直接应用于文本生成。

    • encoder-decoder 模型对编码器采用双向注意力,对解码器采用单向注意力,并在它们之间采用交叉注意力(cross attention)。encoder-decoder 模型通常被部署在条件生成(conditional generation)任务中,如 text summarizationresponse generation

    T5 通过 encoder-decoder 模型统一了 NLUconditional generation,但需要更多的参数来匹敌 BRET-based 模型(如 RoBERTaDeBERTa )的性能。

    这些预训练框架都不够灵活,无法在所有的 NLP 任务中发挥竞争性。以前的工作试图通过多任务学习将各个框架的 objective 结合起来,从而统一不同的框架。然而,由于 autoencoding objectiveautoregressive objective 的性质不同,简单的 unification 不能完全继承两个框架的优势。

    在论文 《GLM: General Language Model Pretraining with Autoregressive Blank Infilling》 中,作者提出了一个名为 General Language Model: GLM 的预训练框架,基于自回归的填空(autoregressive blank infilling )。作者遵从自编码的思路,从输入文本中随机地 blankcontinuous spantoken ,并遵从自回归预训练的思路,训练模型来依次重建这些 span (如下图所示)。虽然 blanking filling 已经在 T5 中用于 text-to-text 的预训练,但作者提出两项改进,即 span shuffling2D positional encoding 。经验表明,在参数数量和计算成本相同的情况下,GLMSuperGLUE benchmark 上以4.6%-5.0% 的较大优势明显优于 BERT ,并且在对类似大小的语料库(158GB)进行预训练时,GLM 优于 RoBERTaBART 。在 NLU 和文本生成任务上,具有较少参数和数据的 GLM 也明显优于 T5

    GLM 的整体思路和 T5 相同,只是在技术细节上有一点点差异。

    Pattern-Exploiting Training: PET《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》)的启发,作者将 NLU 任务重新表述为模仿人类语言的手工制作的完形填空问题。与 PET 所使用的 BERT-based 模型不同,GLM 可以通过自回归的填空自然地处理对完形填空问题的 multi-token answer

    此外,作者表明,通过改变 missing span 的数量和长度,autoregressive blank filling objective 可以为conditional generationunconditional generation 预训练语言模型。通过对不同预训练目标的多任务学习,单个 GLM 可以在 NLU 和( conditional and unconditional )文本生成方面表现出色。根据经验,与 standalone baseline 相比,通过参数共享,具有多任务预训练的GLMNLUconditional text generation 、以及语言建模任务中都取得了改进。

  2. 相关工作:

    • Pretrained Language Model:预训练大型语言模型可以显著提高下游任务的性能。有三种类型的预训练模型:

      • 首先,自编码模型(autoencoding model )通过 denoising objective 学习 bidirectional contextualized encoder ,用于自然语言理解。

      • 第二,自回归模型是通过从左到右的 language modeling objective 来训练的。

      • 第三, encoder-decoder model 针对 sequence-to-sequence 的任务来预训练。

      encoder-decoder model中,BART 通过向编码器和解码器输入相同的输入,并采取解码器的final hidden states 来进行NLU 任务。相反,T5text-to-text 框架中公式化了大多数语言任务。然而,这两个模型都需要更多的参数来超越自编码模型(如 RoBERTa )。UniLM 将三种预训练模型统一在具有不同 attention maskmasked language modeling objective 下。

    • NLU as Generation:先前,pretrained language model 通过在 learned representation 上的线性分类器完成 NLU 的分类任务。GPT-2GPT-3表明,给定任务指令(task instruction)或一些标记样本,生成式语言模型可以通过直接预测正确答案而不进行微调来完成 NLU 任务(如,问答任务)。然而,由于单向注意力的限制,生成式模型需要更多的参数来工作。

      最近,PET《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》《It’s Not Just Size That Matters: Small Language Models Are Also Few-Shot Learners》)提出,在 few-shot setting 中,将输入的样本重新表述为具有与 pretraining corpus 模式相同的完形填空问题。研究表明,与基于梯度的微调相结合,PETfew-shot setting 中可以达到比 GPT-3更好的性能,而只需要 0.1% 的参数。同样地,《Augmented natural language for generative sequence labeling》《Structured Prediction as Translation between Augmented Natural Languages》将结构化的 prediction task (如序列标注和关系提取),转换为 sequence generation task

    • Blank Language Modeling《Enabling language models to fill in the blanks》《Blank language models》 也研究 blanking infilling 模型。与他们的工作不同,我们预训练具有 blank infilling objective 的语言模型,并评估它们在下游 NLUgeneration 任务中的表现。

46.1 模型

46.1.1 Autoregressive Blank Infilling

  1. GLM 是通过 autoregressive blank infilling objective 来训练的。给定一个输入文本 x=[x1,x2,,xn],我们采样到多个 text span {s1,,sm},其中每个 span si 对应于输入 x 中连续 token 的一个序列 [si,1,,si,li]lispan sitoken 长度。每个 span 被替换为单个 [MASK] token ,从而形成了一个 corrupted text xcorrupt 。该模型以自回归的方式预测 corrupted text 中的 missing tokens ,这意味着在预测 span 中的 missing tokens 时,该模型可以访问 corrupted text 和前面 predicted spans

    这意味着在预测期间,解码器不知道当前的 [MASK] token 需要被解码为几个 token

  2. 为了充分捕获不同 span 之间的相互依赖关系,我们随机排列 span 的顺序,类似于 permutation language model (如 XLNet )。正式地,给定长度为 m 的索引序列 [1,2,,m] ,令它的所有可能的排列组合构成的集合为 Zm ,其中 mspan 的数量。令 zZm 中的某个排列顺序(如:z=[3,1,2,5,4,...]) ,定义 sz<i=[sz1,,szi1] ,意义为:在新的排列顺序 z 中,位于位置 span zi 之前的 span 序列。则我们定义预训练目标为:

    (47)maxθEzZm[i=1mlogpθ(szixcorrupt,sz<i)]

    我们总是按照从左到右的顺序生成每个 blank 中的 token ,也就是说,生成span si 的概率被分解为:

    (48)pθ(sixcorrupt,sz<i)=j=1lip(si,jxcorrupt,sz<i,si,<j)

    其中:si,<j=[si,1,,si,j1] 为当前 span 中位于 si,j 之前的 token 序列。

    xcorrupt 为编码器的输入,sz<isi,<j为解码器的输入,si,j 为解码器预测的第 zispan 的第 jtoken

  3. 我们通过以下技术实现 autoregressive blank infilling objective 。输入 x 被分为两部分: Part Acorrupted text xcorruptPart Bmasked span 组成。

    • Part Atoken 可以相互关注,但不能关注 Part B的任何 token

    • Part Btoken 可以关注 Part A的所有 token、以及 Part B的前序 token ,但不能关注 Part B的任何后续 token

    这是借鉴了 UniLM 的思想。

    为了开启 autoregressive generation ,每个 span 都被填充了 special token,即 [START] (记做 [S])和 [END] (记做[E]),分别用于输入和输出。通过这种方式,我们的模型在一个统一的模型中自动学习双向编码器(用于 Part A)和单向解码器(用于 Part B)。下图说明了 GLM 的实现。

    我们从 λ=3 的泊松分布中随机采样 span 长度。我们反复采样新的 span ,直到至少有 15% 的原始 token 被掩码。根据经验,我们发现 15% 的比例对于下游 NLU 任务的良好表现至关重要。

    下图中,(a) 为原始输入序列,然后在 (b) 中被拆分为 Part APartB 。在 (c) 中,Part B 中的两个 span 被随机混洗然后拼接到 Part A 之后,模型需要预测的是 Part B 位置上的输出。

46.1.2 多任务预训练

  1. 在前面的内容中,GLM 掩码了 short span ,适用于 NLU 任务。然而,我们对预训练一个能同时处理 NLU 和文本生成任务的单一模型感兴趣。然后,我们研究了一个多任务预训练的 setup ,该 setup 共同优化生成较长文本的第二个objective 、以及 blank infilling objective 。我们考虑以下两个目标:

    • document-level:我们采样一个 span ,其长度从原始输入文本长度的 50%-100% 的均匀分布中抽取。该目标旨在生成长文本。

    • sentence-level:我们限制 masked span 必须是完整的句子。我们采样多个 span(每个 span 也是一个完整的句子)以覆盖15% 的原始 token 。这个目标是针对 seq2seq 任务,其预测往往是完整的句子或段落。

    这两个新目标的定义与 blank infilling objective 相同,唯一的区别是 span 的数量和 span 的长度。

    blank infilling objective 采样多个 span,平均 span 长度最短;document-level 采样一个 spanspan 长度最长;sentence-level 采样多个 span,平均 span 长度适中。

    然而,这三个目标的样本混合比例如何?论文并未说明。

46.1.3 模型架构

  1. GLM 使用单个 Transformer ,并对架构进行了一些修改:

    • 我们重新调整了 layer normalization 和残差连接的顺序,这已被证明对大规模语言模型避免数值错误至关重要( 《Megatron-lm: Training multi-billion parameter language models using model parallelism》)。

    • 我们使用单个的线性层用于 output token prediction

    • 我们用 GeLU 替换 ReLU 激活函数。

      Gaussian Error Linear Unit: GeLU 激活函数:

      (49)GELU(x)=xP(Xx)=xΦ(x)=x×12[1+erf(x/2)]

      其中:X 为零均值和单位方差的高斯随机变量,P(Xx)Xx 的累计概率分布,erf(x) 为高斯误差函数 erf(x)=2π0xet2dt

46.1.4 2D Positional Encoding

  1. autoregressive blank infilling 任务的挑战之一是如何对位置信息进行编码。Transformer 依靠positional encoding 来注入 token 的绝对位置和相对位置。我们提出了 2D positional encoding 来应对这一挑战。具体来说,每个 token 都有两组 positional id 来编码:

    • 第一组 positional id 代表在 corrupted text xcorrupt 中的位置。对于 masked span ,它是相应的 [MASK] token 的位置。

      Figure 2 (c) 所示:

      • Part A 中每个 tokenpositional id 依次递增。

      • Part B 中每个 tokenpositional id 等于该 masked spanPart A 中相应 [MASK] tokenpositional id 。这使得模型能够区分不同 masked span 的内容(在 Part B 中)和它的原始位置(在 Part A 中)。

    • 第二组 positional id 代表 masked span 内的位置。

      • 对于 Part Atoken ,它们的第二组 positional id0

        因为 Part A 不包含 masked span 的内容。

      • 对于 Part Btoken,它们的第二组 positional id 的范围是从 1span length

      这两个 positional id 通过 learnable embedding table 被投影到两个 embedding 向量中,这两个 embedding 向量然后都被添加到 input token embedding 中。

    我们的编码方法确保了模型在重构 span 时不知道 masked span 的长度。与其他模型相比,这是一个重要的区别。例如,XLNet对原始位置进行编码,使得模型能够感知到 missing token 的数量,SpanBERT 用多个 [MASK] token 替换 span ,并保持token 序列长度不变。我们的设计适合下游任务,因为通常 generated text 的长度事先是未知的。

46.1.5 微调 GLM

  1. 微调 GLM

    • 通常,对于下游的 NLU 任务, pretrained model 产生的 token representation 馈入一个线性分类器,并预测出正确的 label 。这种做法与 generative pretraining 任务不同,导致预训练和微调之间的不一致。

      相反,我们遵从 PET《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》),将 NLU 分类任务重新表述为 blank infilling 的生成任务。具体来说,给定一个标记样本 (x,y),我们通过一个模式将输入文本 x 转换为一个完形填空问题 c(x)。该模式包含单个 mask token ,并且是用自然语言编写的从而代表任务的语义。例如,一个情感分类任务可以被表述为 "SENTENCE}. It’s really [MASK]"。候选标签 yY 也被映射为完形填空的答案,称为verbalizer v(y) 。在情感分类中,标签 "positive""negative" 被映射到单词 "good""bad" 上。给定 x 的条件下,预测 y 的条件概率为:

      (50)p(yx)=p(v(y)c(x))yYp(v(y)c(x))

      其中:Ylabel set

      因此,句子是 positivenegative 的概率与 blank 处预测 "good""bad" 的概率成正比。然后我们用交叉熵损失对 GLM 进行微调(如下图所示)。

    • 对于文本生成任务,给定的上下文构成了输入的 Part A ,并在上下文最后附加了一个 mask token 。该模型以自回归方式生成Part B 的文本。我们可以直接将 pretrained GLM 用于无条件生成任务,或者在下游的条件生成任务中对其进行微调。

46.1.6 讨论和分析

  1. 这里我们讨论了 GLM 和其它预训练模型的差异。我们主要关注的是如何将它们适应于下游的 blank infilling 任务。

    • BERT 的比较:

      • 正如 XLNet 所指出的,由于MLM 的独立性假设,BERT 无法捕获到 masked token 之间的相互依赖性。

      • BERT 的另一个缺点是,它不能正确填充 multiple tokenblank 。为了推断长度为 l 的答案的概率,BERT 需要连续进行 l 次预测。如果长度 l 未知,我们可能需要列举所有可能的长度,因为 BERT 需要根据长度来改变 [MASK] token 的数量。

    • XLNet 的比较:GLMXLNet 都是用自回归目标进行预训练的,但它们之间有两个区别:

      • 首先,XLNetcorruption 前使用 original position encoding 。在推理过程中,我们需要知道或枚举出答案的长度,这与 BERT 的问题相同。

      • 第二,XLNet 使用了双流的自注意力机制,而不是 right-shift ,以避免 Transformer 内部的信息泄露。这使预训练的时间成本增加了一倍。

    • T5 的比较:T5 提出了一个类似的 blank infilling objective 来预训练一个 encoder-decoder TransformerT5 对编码器和解码器使用独立的 positional encoding ,并依靠多个哨兵 token 来区分 masked span 。在下游任务中,只使用其中一个哨兵 token,导致模型容量的浪费、以及预训练与微调之间的不一致。

      UniLMGLM 在编码器和解码器之间共享了同一组 positional embedding

      此外,T5 总是以固定的从左到右的顺序(即,单向地)预测 span 。因此,如实验部分所述,GLM 可以在参数和数据较少的情况下在 NLUseq2seq 任务中明显优于 T5

      相比之下,GLM 采用了类似于 XLNet 的随机混洗策略,混洗了多个 span 的顺序。

    • UniLM 的比较:UniLM 在自编码框架下,通过在双向注意力、单向注意力、以及交叉注意力中改变 attention mask,结合了不同的预训练目标。然而,UniLM 总是用 [MASK] tokens 替换 masked span ,这限制了它针对 masked span 及其上下文之间的依赖关系的建模能力。GLM 输入前一个 token 并自动生成 next token

      "UniLM 总是用 [MASK] tokens 替换 masked span ,这限制了它针对 masked span 及其上下文之间的依赖关系的建模能力",这个结论从何而来?论文并未说明。

      在下游的生成任务上对 UniLM 进行微调,也依赖于 masked language modeling,其效率较低。

      UniLMv2 对生成任务采用 partially auto-regressive modeling ,同时对 NLU 任务采用 auto-encoding objective 。相反,GLM 通过自回归预训练将 NLU 任务和生成任务统一起来。

46.2 实验

46.2.1 预训练配置

  1. 为了与 BERT 进行公平的比较,我们使用 BooksCorpusEnglish Wikipedia 作为我们的预训练数据。我们使用BERTuncased wordpiece tokenizer ,词表规模为 30k 。我们用与 BERT_BaseBERT_Large 相同的架构训练 GLM_BaseGLM_Large ,分别包含 110M340M 的参数。

    对于多任务预训练,我们用 blank infilling objectivedocument-level or sentencelevel objective 的混合来训练两个大模型,分别表示为 GLM_DocGLM_Sent 。此外,我们还用document_level 多任务预训练来训练了两个较大的 GLM 模型,参数分别为 410M30 层,隐层大小 102416attention head )和 515M30 层,隐层大小 115218attention head )参数的 ,分别表示为 GLM_410MGLM_515M

    为了与 SOTA 模型进行比较,我们还用与 RoBERTa 相同的数据、tokenization 、超参数训练了一个大模型,表示为 GLM_RoBERTa 。由于资源限制,我们只对模型进行了 250k 步的预训练,这 是 RoBERTaBART 训练步数的一半,在 trained token 数量上接近 T5

  2. 预训练数据集:

    • GLM_Base, GLM_Large 在与 BERT 相同的 BooksCorpusEnglish Wikipedia 上预训练。

    • GLM_RoBERTa 的预训练数据参考 RoBERTa ,其中RoBERTaBookCorupsWikipediaCC-NewsOpenWebTextStories 上预训练。

      • Stories 数据集已经不再提供,因此我们删除了 Stories 数据集。

      • 此外,我们用 OpenWebText2 代替了 OpenWebText

      • CC-News 数据集已经不再公开,我们用 CC-News-en 来代替。

      所有使用的数据集共有 158GB 的未压缩文本,与RoBERTa160GB 数据集大小接近。

  3. 超参数(如下表所示):

    • GLM_BaseGLM_Large 的超参数与 BERT 使用的超参数相似,从而用于公平地比较。

    • GLM_DocGLM_Sent 的超参数与GLM_Large 的超参数相同。

      除了 GLM_410MGLM_515MTransformer 架构外,其他的超参数与 GLM_Large 相同。

    这些模型在 64V100 GPU 上进行了 200K 步的训练, batch_size = 1024 ,最大序列长度为 512,这对 GLM_Large 来说需要大约 2.5 天。为了训练 GLM_RoBERTa ,我们遵循 RoBERTa 的大部分超参数。主要的区别包括:

    • 由于资源的限制,我们只对 GLM_RoBERTa 进行了 250k 步的预训练,这是 RoBERTaBART 训练步数的一半,在 trained tokens 数量上接近 T5

    • 我们使用余弦衰减而不是线性衰减来调度学习率。

    • 我们额外应用了值为 1.0 的梯度剪裁。

  4. 我们的实现基于 Megatron-LMDeepSpeed

46.2.2 实验结果

  1. 为了评估我们 pretrained GLM 模型,我们在 SuperGLUE 基准上进行了实验,并报告了标准的指标。我们按照 PET 的方法,将分类任务重新表述为用人类精心设计的完形填空问题,如下表所示,其中 ReCoRD, COPA, WSC 的答案可能包含多个 token, 而其它任务的答案仅包含一个 token 。 然后,如前所述,我们在每个任务上微调 pretrained GLM 模型。

    为了与 GLM_BaseGLM_Large 进行公平的比较,我们选择 BERT_BaseBERT_Large 作为我们的 baseline ,它们在相同的语料库上进行了预训练,并且训练时间相近。

    为了与 GLM_RoBERTa 进行比较,我们选择 T5, BART_Large, RoBERTa_Large 作为我们的 baselineT5 在参数数量上与BERT_Large 没有直接的匹配,所以我们同时展示了 T5_Base220M 参数)和 T5_Large770M 参数)的结果。所有其他 baseline 的规模都与 BERT_Large 相似。

    实验结果如下表所示:

    • 在相同数量的训练数据下,GLM 在大多数任务中的 baselarge 架构上都一直优于 BERT 。唯一的例外是WiC 。平均而言,GLM_Base 的得分比 BERT_Base4.6%GLM_Large 的得分比 BERT_Large5.0% 。这清楚地表明了我们的方法在NLU 任务中的优势。

    • RoBERTa_Large 的设置中,GLM_RoBERTa 仍然可以实现对 baseline 的改进,但幅度较小。具体来说,GLM_RoBERTa 优于T5_Large ,但规模只有其一半。

    • 我们还发现,BART 在具有挑战性的 SuperGLUE 基准上表现不佳。我们猜测这可能是由于 encoder-decoder 架构的低的 parameter efficiencydenoising sequence-to-sequence objective 造成的。

  2. 多任务预训练:然后我们评估 GLM 在多任务设置中的表现。在一个 training batch 中,我们以相同的机会对 short spanlonger spandocument-levelsentence-level )进行采样。我们对多任务模型进行评估,包括 NLUseq2seqblank infillingzero-shot language modeling

    • SuperGLUE:对于 NLU 任务,我们在 SuperGLUE 基准上评估模型。结果如 Table 1 所示。我们观察到:

      • 在多任务预训练中,GLM_DocGLM_Sent 的表现比 GLM_Large 略差,但仍然优于 BERT_LargeUniLM_Large

      • 在多任务模型中,GLM_Sent 的表现平均比 GLM_Doc1.1%

      • GLM_Doc 的参数增加到 410M1.25 倍的 BERT_Large )会导致比GLM_Large 更好的性能。

      • 515M 参数的 GLM1.5 倍的 BERT_Large ),性能甚至更好。

    • Sequence-to-Sequence:考虑到现有的 baseline 结果,我们使用 Gigaword 数据集进行 abstractive summarization、以及 SQuAD 1.1 数据集进行 question generation ,作为在 BookCorpusWikipedia 上预训练好的模型的基准。此外,我们使用 CNN/DailyMailXSum 数据集进行 abstractive summarization ,作为在较大语料库上预训练好的模型的基准。

      Table 3Table 4 显示了在 BookCorpusWikipedia 上训练的模型的结果。我们观察到:

      • GLM_Large 可以在这两个生成任务上实现与其他预训练模型相匹配的性能。

      • GLM_Sent 可以比 GLM_Large 表现得更好,而 GLM_Doc 的表现比 GLM_Large 略差。这表明 document-level objective ,即教会模型扩展给定的上下文,对 conditional generation 的帮助较小,而 conditional generation 的目的是从上下文中提取有用信息。

      • GLM_Doc 的参数增加到 410M ,可以在这两项任务上获得最佳性能。

      在较大的语料库上训练的模型的结果见 Table 2GLM_RoBERTa 可以达到与 seq2seq BART 模型相匹配的性能,并且超过了 T5UniLMv2

    • Text Infillingtext infilling 是预测与周围上下文一致的 missing spans of text 的任务。GLM 是用 autoregressive blank infilling objective 训练的,因此可以直接解决这个任务。我们在 Yahoo Answers 数据集上评估了GLM ,并与 Blank Language Model: BLM 进行了比较,后者是专门为 text infilling 设计的模型。从下表的结果来看,GLM 以较大的优势(1.3 ~ 3.9 BLEU )超过了以前的方法,在这个数据集上取得了 SOTA 的结果。我们注意到,GLM_Doc 的表现略逊于 GLM_Large ,这与我们在 seq2seq 实验中的观察结果一致。

    • Language Modeling:大多数语言建模数据集(如 WikiText103 ) ,是由维基百科文档构建的,我们的预训练数据集已经包含了这些文档。因此,我们在预训练数据集的一个 held-out 测试集上评估语言建模的困惑度,该测试集包含大约 20Mtoken ,记做 BookWiki 。我们还在 LAMBADA 数据集上评估了 GLM ,该数据集测试了系统对文本中长距离依赖关系的建模能力。其任务是预测一段话的最后一个单词。作为 baseline ,我们用与 GLM_Large 相同的数据和 tokenization 来训练一个 GPT_Large 模型。

      所有的模型都是在 zero-shot setting 中进行评估的。由于 GLM 学习的是双向注意,我们也在上下文被双向注意力编码的情况下评估 GLM 。结果如下图所示。

      • 在预训练期间没有 generative objectiveGLM_Large 不能完成语言建模任务,困惑度大于100 (未在图中标识)。

      • 在参数数量相同的情况下,GLM_Doc 的表现比 GPT_Large 差。这是预期的,因为 GLM_Doc 也优化了 blank infilling objective

      • 将模型的参数增加到 410M1.25 倍的 GPT_Large )导致性能接近于 GPT_Large

      • GLM_515M1.5 倍的 GPT_Large )可以进一步超越 GPT_Large

      在参数数量相同的情况下,用双向注意力对上下文进行编码可以提高语言建模的性能。在这种设定下,GLM_410M 的性能超过了GPT_Large 。这就是 GLM 相对于单向GPT 的优势。我们还研究了 2D positional encodinglong text generation 的贡献。我们发现,去除了 2D positional encoding 会导致语言建模的准确率降低和困惑度的提高。

    总结:最重要的是,我们得出结论,GLM 在自然语言理解任务、以及文本生成任务中有效地共享模型参数,从而比独立的BERTencoder-decoderGPT 模型取得更好的性能。

  3. 消融研究:下表显示了我们对 GLM 的消融分析。

    • 首先,为了提供一个与 BERT 的公平地比较,我们用我们的实现、数据、超参数训练一个 BERT_Large 模型(表中第二行,BERT_Large(reproduced) )。其性能比官方的 BERT_Large 略差,比 GLM_Large 明显差。它证实了 GLMNLU 任务上比 Masked LM 预训练的优越性。

    • 其次,我们展示了作为 sequence classifier 微调的 GLMSuperGLUE 性能(第 5 行)和具有 cloze-style 微调的 BERT (第 3 行)。与 cloze-style 微调的 BERT 相比,GLM 得益于自回归预训练。特别是在 ReCoRDWSC 上,其中 verbalizer 由多个 token 组成,GLM 一直优于BERT 。这证明了 GLM 在处理可变长度的 blank 方面的优势。

      另一个观察结果是,在 NLU 任务上,cloze formulation 对于GLM 的表现至关重要。对于大型模型,cloze-style 的微调可以提高 7 个点的性能。

    • 最后,我们用不同的预训练设计来比较 GLM 的变体,以了解其重要性。

      • 6 行显示,移除 shuffle span (总是从左到右预测masked span )会导致 SuperGLUE 的性能严重下降。

      • 7 行使用不同的哨兵 token ,而不是单一的 [MASK] token 来代表不同的 masked token 。该模型的表现比标准 GLM 更差。我们假设,它浪费了一些建模能力来学习不同的哨兵 token ,而这些哨兵 token 在只有一个 blank 的下游任务中没有使用。

      Figure 4 中,我们表明,移除 2D positional encoding 的第二维会损害 long text generation 的性能。

    • 我们注意到,T5 是以类似的 blank infilling objective 进行预训练的。GLM 在三个方面有所不同:GLM 由单个编码器组成;GLMmasked span 进行混洗(混洗不同的 masked span,而不是混洗 masked span 内部的 token);GLM 使用一个 [MASK] 而不是多个哨兵 token

      虽然由于训练数据和参数数量的不同,我们不能直接比较 GLMT5 ,但 Table 1Table 6 的结果已经证明了 GLM 的优势。