五十、PaLM[2022] (粗读)

原始论文 《PaLM: Scaling Language Modeling with Pathways》 83 页,这里进行了精简。

  1. BERT/T5 等模型,尽管在数以千计的自然语言任务中达到了近乎 SOTA,但缺点是它们需要大量的 task-specific 训练实例来微调模型。此外,至少有一部分的模型参数必须被更新以适应任务,从而增加了模型微调和部署的复杂性。

    GPT-3 证明了极其大型的自回归语言模型可用于 few-shot prediction ,其中,只需要为模型提供一个关于任务的自然语言描述、以及(可选的)关于如何完成任务的少量示例。few-shot evaluation 已被证明可以达到非常强大的效果,而不需要大规模的 task-specific data collection 或模型参数更新。

    GPT-3 以来,其他一些大型自回归语言模型已经被开发出来,它们继续推动着技术的发展。这些 GPT-3 之后的模型中最强大的是GLaMGopherChinchillaMegatron-Turing NLGLaMDA。与 GPT-3 一样,这些模型都是 Transformer 架构的变种。这些模型的改进主要来自于以下一种或多种方法:在深度和宽度上扩大模型的规模、增加模型训练的tokens 的数量、在更多样化来源的更加干净的数据集上进行训练、通过 sparsely activated module 在不增加计算成本的情况下增加模型容量。

    在论文 《PaLM: Scaling Language Modeling with Pathways》 中,作者延续了语言模型的 scaling 路线,在高质量文本的 780B tokens 上训练了一个 540B 参数的、densely activated 的、自回归的 Transformer 模型,称作 Pathways Language Model: PaLM 。 这是通过 Pathways 实现的,这是一个新的机器学习系统,能够在成千上万的 accelerator chips 上高度便捷地训练非常大的神经网络。

    这项工作的主要收获如下:

    • efficient scaling:作者展示了 Pathways 的首次大规模使用,这是一个新的机器学习系统,能够以高度高效的方式在数千或数万个 accelerator chips 上训练单个模型。通过 Pathways ,作者在 6144TPU v4 芯片上训练了一个540B 参数的语言模型,其效率水平是以前这种规模的模型所不能达到的。

      以前的大多数大型语言模型要么是在单个 TPU 系统上训练的,要么是使用 pipeline 并行在 GPU 集群或多个 TPU v3 podscale (最大规模为 4096TPU v3 芯片)。

    • 来自 scaling 的持续的改善:作者在数百个自然语言、代码和数学推理任务中评估了 PaLM ,并在这些基准中的绝大多数上取得了 SOTA 结果,且有很大的提升。这有力地证明了大型语言模型的 scaling improvement 既没有趋于平稳也没有达到饱和点。

    • 突破性的能力:作者展示了在语言理解和生成方面的突破性能力,跨越了许多不同的任务。

    • 不连续的提升:为了更好地理解 scaling 行为,作者提出了三种不同参数规模的结果:8B/62B/540B 。通常情况下,从 62B 扩展到 540B 的结果与从 8B 扩展到 62B 的结果相似,这与神经网络扩展中经常观察到的 "power law" 规则一致。然而,对于某些任务,作者观察到不连续的改进,与从8B62Bscaling 相比,从 62B540Bscaling 导致了准确率的急剧上升。这表明,当模型达到足够大的规模时,大型语言模型的新能力就会涌现。

    • 多语言理解:以前关于大型语言模型的工作在多语言领域进行了有限的评估。在这项工作中,作者对包括机器翻译、摘要、问答在内的各种语言的多语言基准进行了更彻底的评估。

    • 偏见和毒性:作者还评估了模型在 distributional bias and toxicity 方面的表现,从而得出了一些洞察:

      • 首先,对于性别和职业偏见,作者发现 Winogender 共指任务的准确率随着模型规模的扩大而提高,PaLM 540B1-shot/few-shot setting 中创造了新的 SOTA 结果。

      • 其次,对种族/宗教/性别的 prompt continuation 进行的 co-occurence analysis 表明,该模型有可能错误地将穆斯林与恐怖主义、极端主义和暴力联系起来。这种行为在不同的模型规模上是一致的。

      • 最后,对 prompt continuation 任务的毒性分析表明,与 8B 模型相比,62B540B 模型的总体毒性水平略高。然而,model-generated continuation 的毒性与 prompting text 的毒性高度相关,而 human-generation continuation 则没有强烈的毒性相关性。这表明,与human-generated text 相比,模型受 prompt 风格的影响更为严重。

  2. 相关工作:在过去的几年里,通过大规模的语言建模,自然语言能力有了很大的进步。广义上,语言建模指的是预测序列中的 next token 、或预测序列中的 masked span 的方法。当应用于庞大的语料库时(包括从互联网、书籍和论坛上爬取的数据),这些自监督目标已经产生了具有高级语言理解能力和高级语言生成能力的模型。通过对数据量、参数量和计算量的 scaling ,模型质量的可预测的power-law 使得这种方法成为能力越来越强的模型的可靠方法。

    • Transformer 架构在现代 accelerators 上释放出了无与伦比的效率,并成为语言模型的事实方法。在短短的四年时间里,最大的模型在参数规模上和总计算量上都增加了几个数量级。

      • 最早成功的 scale 之一是 345M 参数的encoder-onlyBERT 模型,它极大地促进了包括 SuperGLUE 在内的分类任务的语言理解。

      • Generative Pretrained Transformer: GPT 系列是 decoder-only 模型,创造了 SOTA 的语言建模性能。

      • T5 随后预训练并微调了高达 11B 参数的 encoder-decoder 模型,为迁移学习设立了新的标准。

      • GPT 系列的最新模型,即 175B 参数的 GPT-3 模型从inference-onlyfew-shot 技术中发现了新的能力。

      GPT-3 之后,规模继续扩大,178B 参数的 Jurassic-1280B 参数的 Gopher 模型、530BMegatron-Turing NLG ,以及包括 Switch TransformersGLaM 在内的万亿参数 sparse model 相继出现就是证明。这些核心自然语言能力的进步也伴随着其他领域的改进,包括理解和生成代码。此外,对话应用已经通过 scale 取得了进展,最近的证据是 LaMDA,一个137Bdecoder-only 模型。最后,额外的工作使语言模型能够遵循指令从而提高了这些模型的实用性和可靠性。

    • 这些较大的模型不再能被有效地训练,甚至不能被放入单个 accelerator 的内存中。因此,出现了跨 accelerator 分割模型张量的技术(《Mesh-TensorFlow: Deep learning for supercomputers》),或者是跨 accelerator 分离模型层,然后在各阶段之间对 activation 进行流水线(《GPipe: E cient training of giant neural networks using pipeline parallelism》)。许多其他工作旨在提高模型的规模,同时限制通信开销。PaLM 通过 Pathways 基础设施使用数据并行和模型并行的混合。

    • 人们已经提出了一些架构变体,以帮助更有效地 scale 模型。一个领域是检索模型,其目的是通过 embedding 大量的文本来大幅减少模型的大小,模型随后可以访问。通过允许不同的样本使用不同的参数子集,像 Mixture-of-Experts 这样的稀疏模型允许 scaling 模型的规模。序列长度的稀疏性是一个允许以极长序列进行训练的领域。未来的工作可以将这些研究方向的改进结合到未来版本的 Pathways 语言模型中。

50.1 模型架构

  1. PaLM 使用标准的 decoder-only Transformer 架构,并且做了如下的修改:

    • SwiGLU 激活函数:我们使用 SwiGLU 激活函数(Swish(Wx)(Vx),其中 为逐元素乘法 )作为 MLP 的中间激活函数。因为与标准 ReLUGeLUSwish 激活函数相比,SwiGLU 已被证明可以显著提高质量(《GLU variants improve transformer》)。 请注意,这确实需要在 MLP 中进行三次矩阵乘法,而不是两次,但《GLU variants improve transformer》 证明了在 compute-equivalent 实验中质量的提高(即标准 ReLU 变体具有相应更大的尺寸)。

      Swishβ(x)=xσ(βx)

    • 并行层:我们在每个 Transformer block 内使用一种 ”并行“ 公式(《GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model》),而不是标准的 ”串行“公式 。具体而言,标准的公式为:

      (1)y=x+MLP(LayerNorm(x+Attention(LayerNorm(x))))

      而并行公式为:

      (2)y=x+MLP(LayerNorm(x))+Attention(LayerNorm(x))

      由于 MLPAttention 的输入矩阵的乘法可以被 fused ,因此并行公式在 large scale 下的训练速度大约提高了 15% 。消融实验表明,在 8B 规模时有小的质量下降,但在 62B 规模时没有质量下降,因此我们推断,在 540B 规模时并行层对质量的影响应该是中性的。

    • Multi-Query Attention:标准的 Transformer 公式使用 kattention head,其中在每个 timestep 中,输入向量被线性投用到 query, key, value 张量,query/key/value 张量的形状都是 Rk×hhattention head size

      然而在这里,每个 headkey/value 投影是共享的,即 keyvalue 张量的形状为 R1×h ,而 query 张量的形状还是 Rk×h 。我们发现,这对模型质量和训练速度的影响是中性的(《Fast transformer decoding: One write-head is all you need》),但在自回归解码时却能节省大量成本。这是因为在自回归解码过程中,标准的 multi-headed attentionaccelerator 硬件上的效率很低,因为 key/value 张量在样本之间不共享,而且一次只解码一个 token

    • RoPE Embeddings:我们使用 RoPE embedding《Roformer: Enhanced transformer with rotary position embedding》) 而不是标准的 absolute/relative position embedding ,因为 RoPE embedding 已被证明在长序列中具有更好的性能。

    • Shared Input-Output Embeddings:我们共享 input embedding matrixoutput embedding matrix ,这是在过去的工作中经常做的(但不是普遍的)。

    • No Biases:在任何一个 dense kernellayer norm 中都没有使用偏置。我们发现这增加了大型模型的训练稳定性。

    • 词表:我们使用了具有 256k tokensSentencePiece 词表(vocabulary ),选择该词表是为了支持训练语料库中的大量语言,而不需要过度的 tokenization 。词表是由训练数据生成的,我们发现这提高了训练效率。词表是完全无损的和可逆的,这意味着词表中完全保留了空白符(对 code 数据来说特别重要),out-of-vocabularyUnicode 字符被分割成 UTF-8 字节,每个字节都有一个 vocabulary token 。数字总是被分割成单独的 digit token (例如:"123.5 -> 1 2 3 . 5")。

  2. model scale 的超参数:在这项工作中,我们比较了三种不同的模型规模:540B 参数、62B 参数、8B 参数。FLOPs per token 数量大约等于参数的数量,因为这些模型是标准的 dense Transformer 。这些模型是用下表中的超参数构建的。这三个模型使用相同的数据和词表进行了相同的训练(除了 batch size )。

  3. Model Card:参考论文的附录 E

50.2 训练数据集

  1. PaLM 预训练数据集由一个高质量的语料库组成,该语料库有 780B tokens ,包括了过滤的网页、书籍、维基百科、新闻文章、源代码、社交媒体对话等数据。 这个数据集是基于用于训练 LaMDAGLaM 的数据集。我们在恰好一个 epoch 的数据上训练所有三个模型(对所有模型的shuffle 相同),并选择混合比例以避免在任何子数据集重复数据。

    代码数据是从 GitHub 上的开源 repositories 中获得。我们通过 license 来过滤文件。此外我们根据文件名过滤文件,从而限制在 24 种常见的编程语言之一,包括 Java, HTML, Javascript, Python, PHP, C#, XML, C++, C 。最终得到 196 GB 的源代码数据。此外,我们根据文件之间的 Levenshtein 距离去除重复的文件,因为已知重复的文件在源代码库中很常见。

    下表列出了用于创建最终的 PaLM 数据集 mixture 的各种数据源的比例。我们在后面内容中检查了数据污染,并提出了我们的训练数据集和评估数据之间的overlap 分析。附录 D 包含一个数据表,其中有更多信息,包括语言比例的细分。

    这里的数据集没有开源。

50.3 训练的基础设施

  1. 我们的训练代码库和评估代码库基于 JAXT5X ,所有模型都在 TPU v4 Pods 上训练。PaLM 540B 在两个通过数据中心网络(data center network: DCN )连接的 TPU v4 Pod 上训练,使用模型并行和数据并行的组合。每个 TPU v4 Pod 使用 3072TPU v4 chips,连接到 768 台主机。这个系统是迄今为止描述的最大的 TPU 配置,使我们能够有效地将训练规模扩大到 6144 个芯片,而不需要使用任何流水线并行。相比之下:

    • LaMDA, GLaM 分别在单个 TPU 系统上进行训练,没有利用流水线并行或数据中心网络。

    • Megatron-Turing NLG 530B 是在 2240A100 GPU 上使用模型并行、数据并行、以及流水线并行的组合进行训练的。

    • Gopher 是在四个 DCN 连接的 TPU v3 Pod (每个Pod1024TPU v3 芯片)上使用 pod 之间的 pipelining 进行训练。

  2. pipelining 通常用于 DCN,因为它对带宽的要求较低,并且在模型并行和数据并行所允许的最大有效规模之外提供额外的并行性。pipelining 通常将 training batch 分成若干个 micro-batches ,但它有重要的缺点:

    • 首先,它产生了 pipelining "bubble" 的时间开销,即在前向传播和反向传播的开始和结束时,许多设备在填充和清空流水线时完全闲置。

    • 其次,它需要更高的内存带宽,因为要从内存中为 mini-batch 中的每个 micro-batch 重新加载权重。在某些情况下,它还涉及增加软件的复杂性。

  3. 我们能够使用以下策略将 PaLM 540Bpipeline-free training 有效地扩展到 6144 个芯片:

    • 每个 TPU v4 Pod 包含一个完整的模型参数副本,每个权重张量使用 12 路模型并行、以及 256 路完全分片的数据并行在 3072 个芯片上被 partitioned《Gspmd: general and scalable parallelization for ml computation graphs》 称之为 "2D finalized" 方法)。

    • 在前向传播过程中,权重在数据并行轴上被 all-gathered ,并从每层保存一个完全分片的 activation 张量。

    • 在反向传播过程中,其余的 activationsrematerialized ,因为与重新计算相比,在更大的 batch size 下,这将带来更高的训练吞吐量。

  4. 下图展示了 Pathways 系统如何执行双向的 pod-level 数据并行。

    • 一个 Python 客户端构建了一个 sharded dataflow 程序(如下图左侧所示),该程序在远程服务器上启动 JAX/XLA work ,每个服务器由一个 TPU pod 组成。该程序包含一个用于within-podforward+backward computation (包括 within-pod gradient reduction )的组件 A 、用于 cross-pod gradient transfertransfer subgraph 、以及用于 optimizer update (包括本地梯度和远程梯度的求和)的组件 B

    • Pathways 程序在每个 pod 上执行组件A ,然后将输出梯度转移到另一个 pod ,最后在每个 pod 上执行组件 B

    双路 pod-level 数据并行的一个挑战是:如何在 6144TPU v4 芯片(连接到 1536 个主机)的规模上,实现 cross-pod gradient transfer 的高训练吞吐量。注意:cross-pod gradient transfer 只需要在两个 pod 的相应主机之间进行 1:1 的传输,因为每个 core 只需要远程梯度,用于获得它的 model-sharded parameters 。由于在每个 core 完成梯度计算后才开始传输,这导致了一个非常突发的工作负载,所有主机在同一时间通过 data-center-network links 传输他们的梯度。具体而言,每对主机在每个 training step 中交换大约 1.3GB 的梯度,相当于所有主机的总爆发量为 81Tbps

    我们通过对 Pathwaysnetworking stack 的精心设计,相对于单个 pod 的吞吐量,我们实现了约 1.95 倍的训练吞吐量(理论吞吐量为 2 倍,因为有两个 pod)。与理论上 2 倍的吞吐量相比,性能上的差距是由于反向传播和 cross-pod gradient reduction 之间缺乏 overlap

  5. 训练效率:之前报道的大多数用于语言模型的 accelerator 效率的数字都使用了一个我们称之为 hardware FLOPs utilization: HFU 的指标。这通常是对一个给定设备上观察到的 FLOPs 与其理论峰值 FLOPs 的比值的估计。然而, HFU 有几个问题:

    • 首先,硬件 FLOPs 的执行数量与系统和实现有关,编译器中的设计选择可能导致不同的 operations 数量。 rematerialization 是一种广泛使用的技术,用来trade off 内存用量和计算量。为了有效地计算神经网络架构的反向传播,必须将该 batch 的许多 intermediate activations 存储在内存中。如果这些 intermediate activations 无法被全部存储,一些前向传播可以被重新计算(使一些 activationsrematerialized 而不是被存储)。这就产生了一个权衡,使用额外的硬件 FLOPs 可以节省内存,但是训练系统的最终目标是实现 tokens per second 的高吞吐量(因此训练的时间要快),而不是使用尽可能多的硬件 FLOPs

    • 其次,测量观察到的硬件 FLOPs 取决于用于计数或跟踪它们的方法。观察到的硬件 FLOPs 已经根据分析核算(《Efficient large-scale language model training on gpu clusters using megatron-lm》)以及使用硬件性能计数器(《Gspmd: general and scalable parallelization for ml computation graphs》)进行了报告。

    鉴于这些问题,我们认识到 HFU 不是一个一致的、有意义的衡量LLM 训练效率的指标。我们提出了一个新的指标,即 model FLOPs utilization: MFU ,该指标与实现无关,并允许对系统效率进行更清晰的比较。这是观察到的吞吐量(tokens-per-second )相对于在 FLOPs 峰值下运行的系统的理论最大吞吐量的比率。至关重要的是,理论上的最大吞吐量只考虑了计算前向传播+反向传播所需的 operations ,而不是 rematerialization 。因此,MFU 允许在不同系统上的训练运行之间进行公平的比较,因为分子只是观察到的 tokens-per-second ,而分母只取决于模型结构和给定系统的最大 FLOPs 。我们在附录 B 中阐述了计算 MFU 的数学公式。

    我们在下表中介绍了 PaLM 540BMFU

50.4 训练配置

  1. 模型训练遵从针对大型 Transformer 语言模型的标准配置,细节如下:

    • weight initializationkernel weights (除了 embeddinglayer norm scale 之外的所有参数)通过 fan-in variance scaling 来初始化,即:

      (3)WN(0,1nin)

      其中:ninkernelinput 维度。

      input embedding 通过标准正态分布来初始化:EN(0,1) ,因为 layer normalization 并未应用到 embedding 上。因为 input embedding layeroutput embedding layer 是共享的,因此我们将 pre-softmax output logits 缩放了 1n ,其中 nembedding size

    • optimizer:模型采用 Adafactor optimizer 来训练,没有 factorization。这本质上等同于 parameter scalingAdam , 即,通过参数矩阵的平方根值对学习率进行缩放。因为 weight initialization1/n 成正比,这样做的效果类似于 GPT-3Adam 学习率的手动缩放。然而,parameter scaling 的好处是,在不同 scale 上操作的参数矩阵( embedding scalelayer norm scale )的学习率不会以相同的速度缩放。

    • optimization 超参数:对于 Adafactor

      • 刚开始 10kstep 的学习率为 102,然后以 1k 的速度衰减,其中 kstep 数量。

      • 一阶动量系数为 β1=0.9 。二阶动量系数为 β2=1.0k8 。在训练大型语言模型中,我们发现这种 β2 要比 β2=0.99 更稳定,因为在较短的窗口内,rare embedding tokens 可能有较差的 estimated second moment

      • 阈值为 1.0 的全局梯度范数裁剪。

      • 动态的 weight decay ,系数为 lr2.0,其中 lr 为当前的学习率。

    • 损失函数 :模型用标准的 language modeling loss function 来训练的,它是所有 token 的平均对数概率,没有标签平滑。此外还有一个辅助损失 zloss=104×log2Z 从而鼓励 softmax normalizer log(Z) 趋向于零,我们发现这增加了训练的稳定性。

    • 序列长度:所有模型都使用了 2048 的序列长度。输入样本被拼接在一起,然后分割成正好是 2048 tokens 的序列,因此没有padding tokens ,但样本可以在中间被分割。输入样本用一个特殊的 [eod] token 来区分开。

    • batch size:对于所有的模型,我们在训练过程中增加 batch size

      对于最大的模型,我们使用 batch size = 5121M tokens per batch )直到 step 50k,然后加倍到 batch size = 10242M tokens per batch )直到 step 115k ,最后再加倍到 batch size = 20484M tokens per batch ),直到训练完成(最终 step 255k )。较小的模型也遵循类似的 schedule

      使用这种 batch size schedule 的原因有两个方面:

      • 较小的 batch size 在训练的早期更加 sample efficient (在给定 tokens seen 的条件下具有更好的 loss ),而较大的 batch size 由于更好的梯度估计在训练后期是有益的(《Don't decay the learning rate, increase the batch size》《An empirical model of large-batch training》)。

      • 较大的 batch size 导致更大的矩阵乘法维数,这增加了 TPU 的效率。

    • bitwise determinism :该模型从任何 checkpoint 都是完全可 reproducible 的。换句话说,如果模型在一次运行中已经训练到 17k 步,而我们从 15k checkpoint 重新开始,那么训练框架保证在从 15k checkpoint17k 的两次运行中产生相同的结果。这通过两种方式实现:

      • JAX+XLA+T5X 提供的 bitwise-deterministic 建模框架。

      • deterministic dataset pipeline ,其中随机混洗数据以 random-access format 写出,因此给定的 training batch 的内容仅是step 数量的函数。

    • dropout:模型训练期间没有采用 dropout,然而在微调期间在大多数情况下使用了 dropout rate = 0.1

  2. 训练不稳定:对于最大的模型,尽管启用了梯度剪裁,我们在训练过程中还是观察到了大约 20loss 尖峰。这些尖峰发生在非常不规则的时间间隔内,有时发生在训练的后期,而在训练较小的模型时没有观察到。

    对于最大的模型,由于训练成本的缘故,我们无法确定一个原则性的策略来缓解这些尖峰。相反,我们发现一个简单的策略可以有效地缓解这个问题:我们从尖峰开始前大约 100 步的 checkpoint 重新开始训练,并跳过大约 200 ~ 500data batch ,这些 data batch 涵盖了尖峰之前和尖峰期间的 data batch。通过这种缓解措施,loss 没有在相同的 step 再次飙升。

    我们不认为尖峰是由不良数据本身造成的,因为我们做了几个消融实验,在这些实验中,我们抽取了尖峰周围的 data batch ,然后从一个较早的 checkpoint 开始对这些相同的 data batch 进行训练。在这些情况下,我们没有看到一个尖峰。这意味着尖峰的出现只是由于特定的 data batch 与特定的模型参数状态的结合。在未来,我们计划研究在非常大的语言模型中对 loss 峰值的更有原则的缓解策略。

50.5 评估

50.5.1 英语 NLP 任务

  1. 为了和之前的大型语言模型进行比较,我们在相同的 29 个英文 benchmark 上评估了 PaLM 模型。这些 benchmark 包括:

    • Open-Domain Closed-Book Question Answering tasksTriviaQA, Natural Questions, Web Questions

    • Cloze and Completion tasksLAMBADA, HellaSwag, StoryCloze

    • Winograd-style tasksWinograd, WinoGrande

    • Common Sense ReasoningPIQA, ARC, OpenBookQA

    • In-context Reading ComprehensionDROP, CoQA, QuAC, SQuADv2, RACE

    • SuperGLUE

    • Natural Language Inference (NLI)Adversarial NLI

    Table 4 包括 PaLM 540B 的结果和其他大型语言模型的 SOTA 结果。在这个表中,我们只考虑 pretrained language model 的单个 checkpoint 结果。任何使用微调或多任务适应的模型都不包括在该表中。可以看到:

    • PaLM 540B1-shot setting29 项任务中的 24 项,以及在 few-shot setting29 项任务中的 28 项,都优于之前的 SOTA

    • 虽然模型的大小对取得这些结果起到了重要的作用,但 PaLM 540B 在所有基准上都超过了类似大小的模型(Megatron-Turing NLG 530B)。这表明预训练数据集、训练策略、以及 training tokens 数量也对取得这些结果起到了重要作用。

    Table 5 列出了自然语言理解(Natural Language Understanding: NLU )和自然语言生成(Natural Language Generation: NLG)任务的平均分数。PaLM 540B 在这两类任务中的平均得分都提高了 5 分以上。如表中所示,PaLM 模型在每个类别中的平均得分也随着规模的扩大而提高。

  2. 微调:我们在 SuperGLUE benchmark 中对 PaLM 进行了微调,Adafactor optimizer 的微调学习率为 5×105batch size = 32PaLM 通常在少于 15K 步的微调过程中收敛。

    Table 6 报告了在 SuperGLUE 上的验证集结果,结果表明PaLM 获得了接近 SOTA 的有竞争力的性能。值得注意的是,SuperGLUE 上表现最好的两个模型都是使用 span corruption objective 训练的 encoder-decoder 模型。已有研究表明,当训练成本相同时,这样的架构通常会在分类任务微调方面优于仅有自回归的 decoder-only 模型。这些结果表明,规模可以帮助缩小差距。

    Table 7 还表明,在 few-shot 和微调的结果之间仍有很大的差距。

    最后,Table 8 报告了 SuperGLUE 排行榜的测试集的结果。我们表明,PaLMSOTA 模型相比是有竞争力的,同时比排行榜上最好的decoder-only 自回归语言模型的表现要好得多。

50.5.2 BIG-bench

  1. BIG-bench 是一个 collaborative benchmark ,旨在为大型语言模型制作具有挑战性的任务。它包括 150 多个任务,涵盖了各种语言建模任务,包括逻辑推理、翻译、问答、数学和其他。这里我们介绍并分析了 PaLM 模型系列在 BIG-bench 上的 few-shot 评估结果。BIG-bench 包括文本性的任务(textual task )和程序性的任务(programmatic task )。在这次评估中,只考虑了文本性的任务。BIG-bench 中,最佳人类表现是用每个样本中指标得分最高的人类生成的答案来计算的,而平均人类表现是用所有人类生成的答案的平均指标得分来计算的。

  2. 下图左侧为在 BIG-bench上评估 PaLM 系列模型的结果,并与之前公布的结果进行了比较。由于 Gopher, Chinchilla, GPT-3 都评估了的任务只有 58 个,因此这里仅介绍了这 58 个任务的结果。下图右侧显示了 PaLMBIG-bench 文本性任务( 150 个任务)上的结果。PaLM 明显优于GPT-3GopherChinchilla ,而且 5-shot PaLM 540B 取得了比人类平均分更高的分数。

  3. 下图给出了这 58 个任务的详细结果。PaLM 540B 5-shot58 个常见任务中的 44 个任务上的表现优于之前的 SOTA

  4. 接下来我们详细描述一些任务,在这些任务中,PaLM 具有特别有趣的性能特征,如下图所示。

    • goal step wikihow:目标是推理事件之间的 goal-step 关系。

      例子:为了 "清洗银器",应该先做哪个步骤?(a) 擦干银器;(b) 手洗银器。答案:(b)

    • logical args:目标是根据一段话预测正确的逻辑推理。

      例子: 输入:学生们告诉代课老师他们正在学习三角几何。代课老师告诉他们,与其教他们关于三角几何的无用事实,不如教他们如何处理概率问题。他在暗示什么? (a) 他认为数学不需要有用也可以有趣;(b) 他认为理解概率比三角几何更有用;(c) 他认为概率论是一个无用的学科。答案:(b)

    • english proverbs:目标是猜测哪个谚语最能描述一段文字。

      例子:凡妮莎多年来一直在当地的无家可归者援助中心利用周末时间帮忙。最近,当她失去工作时,该中心准备马上给她一份新工作。以下哪句谚语最适用于这种情况?(a) Curses, like chickens, come home to roost(b) Where there is smoke there is fire(c) As you sow, so you shall reap 。答案:(c)

    • logical sequence:目标是将一组 "东西"(月份、行动、数字、字母等)按其逻辑顺序排列。

      例子:输入: 以下哪个列表的时间顺序是正确的?(a) 喝水,感到口渴,关闭水瓶,打开水瓶; (b) 感到口渴,打开水瓶,喝水,关闭水瓶; (c) 关闭水瓶,打开水瓶,喝水,感到口渴 。答案:(b)

    • navigate:目标是遵循一组简单的导航指令,并找出你最终会到达的地方。

      例子: 输入: 如果你按照这些指令,你是否会回到起点?始终面向前方;向左走6 步;向前走 7 步;向左走8 步;向左走 7步;向前走6步;向前走1步;向前走4 步。答案:否。

    • mathematical induction:目标是进行逻辑推理数学归纳法规则,即使它们与现实世界的数学相矛盾。

      例子: 输入: 众所周知,在任何奇数上加 2 会产生另一个奇数。2 是一个奇数整数。因此,6 是一个奇数。这是不是一个正确的归纳论证(尽管有些假设可能不正确)?答案:是。

  5. 在下图,我们显示了在比较 PaLM 540B 和人类评价的平均性能得分时,得到改进的任务的分布。我们可以看到,尽管 PaLM 540B 在总体上超过了人类的平均表现,但在 35% 的单个任务上,人类的平均表现仍然高于 PaLM 540B

  6. 最后,下图展示了对 BIG-bench Lite 的详细评估结果,这是 24BIG-bench 任务的一个精心策划的子集,作为一个轻量级的评估目标。与人类评估的最佳性能得分相比,虽然有些 BIG-bench Lite 任务已经解决或接近解决,但其他任务仍远未解决。

  7. 我们采取了几个步骤来确定这些结果的有效性,特别是排除了模型通过记忆 BIG-bench 数据来实现这些结果的可能性。

    • 首先,BIG-bench 任务文件包括一个独特的 canary string ;我们确保这个字符串不会出现在 PaLM 训练数据中。

    • 其次,在收集训练数据时,互联网上没有 BIG-bench 数据集,而且绝大多数 BIG-bench 任务是由任务作者专门为纳入 BIG-bench 而构建的全新 benchmark

    • 最后,我们抽查了模型在几个任务中的输入和输出,在这些任务中,模型表现出很强的性能,并手工验证了在解码过程中没有从gold labels 中泄露信息。

50.5.3 Reasoning

  1. 我们在一组推理任务上评估了 PaLM ,这些任务需要多步骤的算术的或常识的逻辑推理来产生正确答案。

    • 算术推理(arithmetic reasoning):这些任务往往涉及小学水平的自然语言数学问题,需要多步骤的逻辑推理。数学本身通常是简单的,困难的部分是将自然语言转化为数学方程式。在这项工作中,我们评估了计算器形式和直接推理形式。

      例如:输入:罗杰有 5 个网球,他又买了两罐网球,其中每罐有 3 个网球。他现在有多少个网球?答案是:11

    • 常识推理(commonsense reasoning ):这些任务是问答任务,需要很强的世界知识(world knowledge )。

      例如:输入:肖恩急着回家,但红灯变黄了,他被迫做什么?答案选项:(a)花时间;(b) 闲逛;(c) 慢慢走;(d) 海洋;(e) 减速。答案: (e)

  2. 我们使用 chain-of-thought: COT 来改善模型的输出。下图给出了 chain-of-thought prompting 的例子。

  3. 在这项工作中,我们展示了一个引人注目的结果:模型规模和 COT prompting 足以在各种算术推理和常识性推理任务中达到 SOTA 的准确性。在 7 个推理数据集中,PaLM 540B + COT8-shot prediction 在四个任务中达到了 SOTA 的准确率,在其它三个任务重接近 SOTA 。我们还可以看到,COT 和模型 scaling 对所有的任务都有很大的帮助,因为如果没有这两种技术,PaLM 只能在一个任务(SVAMP )上取得 SOTA

  4. 我们分析了 PaLM 62B 模型在 GSM8K 数据集上出错的问题,发现它们通常属于以下几类:语义理解、单步缺失、以及其他错误。如下图所示,扩大到 540B 模型的规模后,这些错误的数量就多了起来。

50.5.4 Code 任务

  1. 在这一节中,我们表明 PaLM 模型在各种 coding 任务上取得了出色的成绩:

    • text-to-code:我们考虑了三个任务,其目标是根据自然语言描述来编写代码。

      • HumanEvalMBPP 数据集中,模型被馈入一个英语描述(由一些句子和少量的 input-output 示例组成),目标是生成一个简短的 Python 程序(通常是单个函数)。

      • 我们还介绍了 GSM8K-Python 任务,它来自 GSM8K 数据集。GSM8K 数据集由 mathematics word 问题组成。GSM8K-Python 是这个任务的一个变种,其目标不是产生正确的答案,而是产生一个能返回正确答案的 Python 程序。

    • code-to-code

      • TransCoder 是一项涉及将 C++ 程序翻译成 Python 的任务。我们从 GitHub 上下载了TransCoder 的数据,并收集了同时出现在数据集的PythonC++ 子目录下的函数。

      • 我们还对 DeepFix 的代码修复任务进行评估。从学生编写的无法编译的 C 语言程序开始,目标是修改程序,使其能够成功编译。

    我们使用 pass@k 指标报告结果:对于测试集中的每个问题,从模型中抽取 k 个源代码样本,如果有任何样本解决了问题,则算作解决了。我们将 PaLM 模型与几种用于代码的不同的语言模型进行比较:LaMDA 137BCodex 12B 。为了获得 Codex 在除了 HumanEval 之外的其它数据集上的结果,我们调用了 OpenAI Davinci Codex API 。不幸的是,关于 Davinci Codex 模型,有许多事情是不公开的:我们不知道这个模型的规模、它是单个模型还是一个 ensemble 、它的训练数据有多少、对模型的输出做了什么(如果有的话)后处理,以及 Davinci Codex 训练数据与我们评估数据集的污染程度如何。

  2. 数据集:PaLM 模型的训练集包括 GitHub 代码。由于我们的评估数据集大多是测试 Python 编程技能的,所以我们额外收集了一个专门的 Python 代码数据集。这个额外的数据集,我们称之为 ExtraPythonData ,包含了来自 GitHub repository5.8B tokens ,这些 tokens 在预训练中没有使用。

    Table 10 总结了所使用的 code training data 的数量:PaLM 540B 行显示了用于预训练的 tokens 数量,而 PaLM-Coder 540B 显示了预训练和微调数据的 token 总数。

    Table 27 显示了数据中编程语言的分布。最常见的语言是 Java, HTML, Javascript, Python, C, PHP, C#, C++

  3. PaLM 540B:下表显示了 PaLM 模型在 0-shot prompts4-shot prompts 下的性能。

    • 首先,LaMDA 模型在所有的任务中都有非零的表现,尽管它没有在 GitHub 代码上进行训练。这表明 LaMDA 训练中使用的 code web documents 对这些任务来说是有参考价值的。

    • 其次,PaLM 模型在所有任务中的表现都比LaMDA好,而且在HumanEval上的表现与Codex 12B 相当。

  4. PaLM-Coder:现在我们评估进一步微调对 coding 任务的影响,类似于 Codex 的做法,微调得到的模型称作 PaLM-Coder

    微调是两阶段的:

    • 首先,对 mixture 数据进行微调,其中 60% 来自 ExtraPythonDatapython 代码、30% 来自跨语言的代码(与预训练的代码数据来源相同,但不包括在预训练中)、以及 10% 的自然语言。

    • 然后 ,对 ExtraPythonData 中更多的 Python 代码进行了额外的 1.9B tokens 的微调。

    在这两个阶段中,微调数据包含 7.75B tokens ,其中 5.9BPython 。而预训练加微调的总数据量,参考 Table 10PaLM-Coder 540B 的性能进一步提高,参考 Table 11

    下图显示了从 8B62B 以及最后到 540B 模型的性能扩展。在所有的数据集中,规模的每一次增加都会带来性能的提高,而且规模对性能的影响似乎并没有达到饱和。

  5. DeepFix Code Repair:图 1314 显示了DeepFix 问题的例子和 PaLM-Coder 的成功预测。

    对于 code repair,评估模型所改变的代码的数量是很重要的。通常我们只想修改一小部分的 broken code 。不同模型所改变的代码的数量如下表所示。与 Codex 相比,PaLM-Coder 倾向于改变分布在更多行中的更少的字符。我们在预测中观察到这种行为,其中 PaLM-CoderCodex 更有可能做出微小的风格上的改变,例如将 i = i + 1 改为 i++ ,将 int a;\n int b; 改为 int a, b; ,而 Codex 更有可能大幅度改变行。

  6. 讨论:当在软件开发中部署基于LM 的系统时,一个关键的风险是生成的代码可能是不正确的,或者引入微妙的 bug 。 鉴于对代码补全系统的数据集中毒攻击的发现,以及观察到当 prompts 中存在错误代码时,LM 更有可能产生错误代码,这是一个特别紧迫的问题。

    功能正确性只是源代码质量的一个方面;LM 产生的建议还必须是可读的、鲁棒的、快速的和安全的。DeepFix 说明了 PaLM-Coder 目前预测的一个问题:在 Figure 13Figure 14 中,程序可以编译,但不一定安全,因为它们依赖于对输入的格式和大小的假设。DeepFix 的数据集来自于学生写的 C 语言编程课程的练习,学生被允许做这样的假设。这样的建议在一个更普遍的环境中可能是不可取的。

50.5.5 翻译

  1. 与其他大型翻译工具一样,PaLM 没有明确地在平行语料上进行训练,尽管在我们的训练语料库中可能会自然存在一些这样的数据。我们专注于 WMT 提供的训练集和验证集,特别是以下三种类型的 language pair

    • 以英语为中心的的 language pair,涉及以英语为 source languagetarget language ,并有一些不同程度的平行数据可用。根据 language pair中的 non-English 语言,翻译任务可能是高资源(>10M 的样本)、中等资源(<10M,>1M 的样本)或低资源(<1M 的样本)。这里我们使用 WMT'14 English-French (high), WMT'16 English-German (mid), WMT'16 English-Romanian (low)

    • 直接的 language pair,即直接在任何一对语言之间进行翻译,而不涉及英语。在机器翻译中,即使英语不是 source languagetarget language ,也可以参与翻译,因为机器翻译系统经常通过英语进行"pivot" ,例如,French -> English -> German。我们将使用 WMT'19 French-German language pair 来测试直接翻译能力。

    • 极低资源的 language pair,在这项工作中,我们选择哈萨克语作为我们的低资源语言。作为比较,虽然法语和德语在我们的训练集中分别有大约 24B tokens26B tokens ,但哈萨克语只有大约 134M tokens 。对于评估,我们将使用 WMT'19 English-Kazakh

  2. 以英语为中心的的 language pair 的评估:PaLM 优于所有的基线。

  3. 直接的 language pair 和极低资源的 language pair 的评估:

  4. 我们将我们的结果提炼为以下一组观察:

    • 在从某种语言翻译成英语的时候,翻译质量比从英语翻译成某种语言的时候要好。这是在所有以英语为中心的语言模型中观察到的一个共同模式,在检查 PaLM 的性能时也出现了类似的情况。我们怀疑优先考虑多语言数据会减轻这种情况。

    • prompts 可以提供比单个示例更多的价值。我们发现,在大多数情况下,使用语言名称来诱导翻译(0-shot setting )比只使用 input-output 示例(one-shot/few-shot setting )提供更强的性能,与以前的工作一致(《Association for Computing Machinery》)。

    • 仅仅依靠自监督的通用模型可以在较小的范围内与专用模型相匹配。我们考虑的大多数专用翻译baseline 都在1B 参数以下,这比我们最大的 PaLM 构架要小两个数量级。另一方面,我们也看到,大型翻译模型可以适应各种下游任务,这表明专家也可以作为通才。这就提出了一个问题:在资源丰富的情况下(如多语言翻译),我们应该培训专家还是通才?

50.5.6 Multilingual 自然语言生成

  1. 自然语言生成以给定文本或非语言信息(如文档、表格、或其他结构化数据)的条件下,自动生成可理解的文本。对于类似规模的模型,过去还没有探索过 few-shot 的条件自然语言生成。通常情况下,generation evaluation 仅限于生成式的问答和 multiple-choice 的语言模型任务,这些任务不需要生成完整的句子或段落。因此,我们的工作提出了第一个大型语言模型的基准,从而用于条件自然语言生成任务的 few shot 建模。

  2. 数据:我们在来自 Generation Evaluation and Metrics benchmark 的三个摘要任务、以及三个 data-to-text generation 任务上评估了 PaLM。这些数据集包括 Czech (cz), English (en), German (de), Russian (ru), Spanish (es), Turkish (tr), Vietnamese (vi) 等语言。

    • MLSum:用多个句子总结一篇新闻文章([de/es] )。

    • WikiLingua:用非常简洁的句子总结 WikiHowstep-by-step 指令([en/es/ru/tr/vi -> en]])。

    • XSum:用一句话总结一篇新闻文章([en] )。

    • Clean E2E NLG:给定一组键值属性对,用一两句话描述一家餐厅([en] )。

    • Czech Restaurant response generation:给定一个对话上下文、以及对话行为representation ,生成智能助理将提供的响应([cz])。

    • WebNLG 2020:在一个或多个句子中以语法的和自然的方式口语化 ”主语-谓语-宾语“ 三要素( [en/ru] )。

  3. Few-shot 评估方法:为了将 PaLM 用于 few-shot inference ,我们将一个任务特定的 prompt 拼接到输入中,并将 output prompt 添加到输出中。为了处理经常出现的非常长的输入以进行摘要,它们被截断为 2048 tokens

    few-shot 示例通过双线分隔,这也被用来截断 output predictions 从而用于评估。few-shot 示例都是从训练语料库中随机抽出的。

  4. 微调方法:为了在微调期间使用 decoder-only 结构,inputstargets 被拼接起来,但损失只在序列的 targets 部分计算。拼接后的序列被截断为 2048 tokens ,即预训练期间使用的训练环境,其中 512 tokens 保留给 targets 。只有摘要任务需要 input truncation

    为了对 PaLM 进行微调,我们使用了一个恒定的学习率 5×105,比预训练期间小 20 倍,并重置了优化器(Adafactor )的 accumulator 。每个数据集的最佳 model checkpoint 是由验证集上 ROUGE-1ROUGE-2ROUGE-L 得分的最佳表现的几何平均值来选择的。推断是使用 k=10top-k 采样进行的。T5 XXL 基线使用与 PaLM 相同的参数进行微调,并使用 beam size = 4beam-search 来解码。

  5. Table 15 给出了1-shot 和微调的实验结果。

    • 微调的有效性:总的来说,540B finetuned PaLM 在所有英语生成任务上接近或超过了之前报告的最佳结果。这表明 PaLM 可以通过其大幅增加的规模来弥补其架构上的劣势。我们确实认识到,当存在大量特定任务的训练数据时,decoder-only LM 的微调可能不是所有任务的 computationally optimal 的方法,但是我们相信它可以作为 few-shot prediction 的重要上限。

    • 英语生成与非英语生成的质量:PaLM 为生成英语文本的 6 个摘要任务中的 5 个任务实现了新的 finetuning SOTA 的结果,即使 input 是非英语的。然而,非英语概要(MLSum )的微调不能实现 SOTA ,并且对于非英语生成,few shot 和微调之间的相对差异更大。这表明 PaLM 在处理 non-English input 方面比生成 non-English output 更好,这可能会在未来通过对大部分非英语文本进行预训练而得到改善(在当前模型中为 22% )。

    • 1-shot vs finetuning gap:查看 Data-to-Text 的结果,1-shot 结果遵循与摘要相似的趋势,但是与最佳微调结果的差距急剧缩小。我们注意到,Data-to-Text 任务作为微调基准的价值有限,因为它们的规模很小,并且与预训练语料库显著不匹配。

    • 1-shot 摘要:当比较各种 PaLM 规模上的 1-shot 摘要结果时,我们发现从 8B -> 62B 有一个很大的改进,而从 62B -> 540B 有一个较小但显著的改进。

50.5.7 多语言问答

  1. 我们使用 TyDiQA-GoldP benchmark 在多语言问答任务上评估我们的模型。实验结果如下表所示。不足为奇的是,我们发现平均而言,在 few-shot 和微调的质量之间存在很大的差距。

    我们表明 PaLM 540B 在这项任务上取得了非常有竞争力的结果,尽管没有在那么多的非英语数据上进行训练(占 780B 训练tokens22% )。

50.5.8 分析

  1. 这里,我们深入分析 PaLMfew-shot 性能。

    我们首先研究了三个不同的模型(8B, 62B, 540B )在 5 个不同的任务上的性能: RTE, Natural Questions, Lambada, Story Cloze, Trivia QA 。结果如下图所示。在几乎所有的任务和模型中,当模型被呈现出更多的示例时,性能就会提高。

    然后我们评估了 StoryCloze, Natural Questions, Web Questions benchmarksfew-shot learning 性能的差异。 在预训练期间,我们采取了 15 个不同的均匀间隔的 model checkpoints 。然后我们用 1-shot learning 来评估所有不同的 checkpoints 。鉴于每个检查点只相差 2B pre-training tokens ,我们期望模型质量不受影响。结果如下图所示。

50.6 Memorization

  1. 众所周知,神经网络能够记忆训练数据。事实上,这就是过拟合的定义。通常情况下,这种类型的记忆发生在模型对一个小的训练集进行多次训练时。然而,在我们的案例中,PaLM 是在一个 780B 的语料库上进行 single pass 训练的。另一方面,我们的模型也有非常大的容量,所以即使是 single pass 也可以记住训练数据的很大一部分。此外,由于 web-derived 语料库中存在近乎重复的文本,一些段落(有微小的变化)在训练中会出现多次。在本节中,我们分析了 PaLM 模型对训练数据的记忆程度。

    为了评估这一点,我们从训练样本中随机选择了 100token sequences ,并且采用前 50 tokensprompt 模型。我们运行贪婪解码,并测量模型产生的 token 与训练样本(first 50 tokens 之后的内容)完全匹配的频率。该方法遵循 《Quantifying memorization across neural language models》 的做法,他们试验了 50 ~ 500 tokensprompt 长度。

    • 18(a) 显示了三种模型规模的记忆匹配率。

    • 18(b) 显示了记忆率与训练数据中确切看到的训练样本的次数的关系。请注意,之所以会有重复率如此之高的例子,是因为我们的训练只对完整的文档进行去重,而在这里我们对 100 tokensspan 来评估记忆。

    • 18(c) 显示了按训练数据语料库细分的三种模型的记忆率。由于 code 语料库中有大量的模版的 license 字符串、拷贝的代码、以及自动生成的代码,因此记忆率较高。book 语料库主要包含真正独特的文字串。

  2. 从这些结果中,我们可以得出以下关于记忆的结论:

    • 较大的模型比较小的模型有更高的记忆率。对数线性拟合的斜率与之前 《Quantifying memorization across neural language models》 观察到的非常接近(我们发现 PaLM 的斜率为 0.002R2=0.976,而该论文发现 GPT-Neo 模型系列的斜率为 0.002R2=0.965)。

    • 正如 holdout 的结果所显示的那样,一定量的 "记忆" 是可以预期的,因为该模型会对常见的模板和模板产生 exact match continuation 。然而,训练数据的记忆率明显高于 heldout 数据,这表明该模型确实真正记住了数据的某些部分。

    • 一个样本被记住的机会与它在训练中的 uniqueness 密切相关。只见过一次的样本比见过很多次的样本,被记住的可能性小得多。这与以前的工作一致。

    记忆是否是个问题,取决于数据集的属性和目标应用。因此,在为大型语言模型选择下游应用时,应始终小心谨慎。一个计算效率高,但 memory-intensive 的方法是在训练数据上实现 Bloom filter ,并限制在训练数据集中逐字出现的序列被生成。虽然这种方法会去除确切的记忆内容,但仍然可以产生近似的记忆内容(与训练集文本仅有一两个字差异的 generations )。

50.7 数据集的污染

  1. 以前的工作报告了 benchmark evaluation set 和训练数据之间非常高的数据重合率。这些以前的工作只是看了完整的 evaluation example text 和训练数据之间的高阶 n-grams (如 13-grams )的出现,并认为任何有重叠的样本都是污染的。在这里,我们没有简单地寻找高阶 n-gram 重叠,而是计算了 29 个主要英语 NLP 基准任务的统计数据,并手动检查了每个任务的大量例子,以确定哪些例子的污染比例高。

    我们可以粗略地将 29 个基准任务分为四类:

    • 批量污染:数据集本身有很大一部分出现在公开网络上。我们认为这些是被污染的。例子:SQuADv2, Winograd

    • 从互联网构建:数据集的问题+答案(或 prefix+continuation )是自动从公开的互联网中提取的,因此许多评估实例可能在我们的训练数据中。我们认为这些被污染了。例子:Web Questions, ReCoRD, Lambada

    • 互联网上的 Context:问答数据集的上下文来自互联网,但问题不是。我们不认为这些是被污染的。例子: BoolQ, Multirc, ANLI

    • 没有明显的重叠:数据集与我们的训练数据没有明显的重叠。例子:StoryCloze, OpenbookQA

    我们能够根据问题、prompt、或 target 中至少 70%8-gram 是否在我们的训练数据中出现过一次,将每个数据集分成一个 "污染" 和 "干净"子集。我们在 Table 17 中报告了干净部分与 full set 的结果。我们可以看到,对于干净的子集,正向、负向的子集数量几乎相等,这意味着数据污染不会对我们的报告结果造成有意义的影响。

    我们对机器翻译进行了类似的分析,结果显示在 Table 18 中。

50.8 探索解释性

  1. 前面我们实证了 chain-of-thought prompting 如何大幅提高多步骤推理任务的预测准确性。在这种情况下,模型生成的 reasoning chain 在评估时没有被使用。当然,这种 explanatory generation 的作用除了提高准确率外,还有其他原因。

    • 首先,了解模型是否因为正确的原因而产生了正确的答案,而不仅仅是进行表面上的统计推断,是非常有科学意义的。

    • 第二,该解释有可能被展示给系统的终端用户,以增加或减少他们对某一预测的信心。

    • 第三,在许多情况下(例如,解释一个笑话),解释本身就是期望的输出。

    本节的目标是展示 PaLM 的能力,即通过 chain-of-thought prompting 来生成 explanatory language generation 。下图给出了这些任务的例子。虽然我们承认这些结果并不等同于彻底的定量分析,但我们要说的是,我们相信这展示了一个真正了不起的深度语言理解水平。

50.9 代表性的 bias 分析

  1. 性别和职业偏见:Winogender 的整体结果如下图所示。我们发现,准确率随着模型规模的扩大而提高,PaLM 540B1-shot/few-shot setting 创造了新的 SOTA

    与之前的工作一样,我们还报告了分类的准确性,将 Winogender 分成了刻板印象或被骗子集(gotcha subset )。下图给出了分类的准确率,并按性别进一步细分。我们发现,在刻板印象的例子上,准确率比被骗的例子高;而在被骗的例子上,女性的准确率最低。

  2. 毒性和偏见:按照 GPT-3 描述的类似程序,我们分析了在给出 "{term} was very... " 这样的 prompt 时,model continuation 中常见的共现词,其中被替换的词提到了性别、宗教或种族和民族身份。种族身份共现分析揭示了几个方面的情况:

    • 首先,种族身份术语经常相互共现,这就提出了关于在它们出现的句子中各身份之间的关系(如果有的话)的问题。

    • 其次,prompt language 的微小变化导致了结果的急剧变化。

    除了计算共同出现次数之外,我们还使用 Perspective API 来对 continuations 的毒性进行分类。下图报告了按不同宗教团体划分的模型输出中的毒性概率分布。

  3. 开放式生成中的毒性:毒性退化(toxicity degeneration)对应于 generation 可被语言模型感知为有毒的文本。我们使用Perspective APIcontinuation 分配一个毒性概率。然后,我们研究在 prompt 是有毒的各种可能性下,毒性概率在 model continuations 中的分布。Figure 23 显示了在不同的模型规模下,续篇的平均毒性概率(toxicity probability of the continuation: TPC )与 prompt 的分桶毒性概率(binned toxicity probability of the prompt: TPP )的比例关系图。可以看到:

    • TPC 随着 TPP 的增加而增加,同时一直低于 prompt 毒性和人类基线(除了在 prompt 毒性的最高水平)。

    • 相比较于 8b 模型,两个更大的模型(62B540b )的毒性概率明显增加。这表明毒性水平和模型大小之间存在相关性,但鉴于62B PaLM540B PaLM 模型的毒性非常相似,只能有一定程度上的相关性。

    • 模型的 TPCTPP 比人类的 TPC 更一致。 这表明模型受到 prompt 风格的强烈影响,并有可能产生与 prompt 相似的毒性水平的 continuation

    下表中,我们报告了在第一句、以及 128-decode step 中,在毒性 prompt 和无毒 prompt 下,产生至少一个有毒 prompt 的概率。

  4. 局限性:本节介绍的公平性分析的一个主要限制是,它们只在英语语言数据上进行,而 PaLM 是在多语言数据上进行训练并在多语言语言处理任务上进行评估。

    此外,需要注意的是,尽管调查英语语言技术中的偏见的工作越来越多,但缺乏公平性基准的标准化,缺乏对 NLP 中不同bias 测量的危害的理解,也缺乏对身份的统一、全面覆盖。

    此外,偏见可能充斥着一个系统,这取决于具体的下游应用、其具体的 training pipeline 和应用层面的保护(例如安全的过滤器)。

50.10 伦理方面的考虑

  1. 详细内容参考原始论文。

50.11 Scaling 的开放问题

  1. 在我们的 Introduction 章节中,我们描述了四个主要的方向,这些方向导致了大型 LMfew-shot learning 中的显著质量改进:模型的深度和宽度、training tokens 数量、训练语料的质量、在不增加计算量的情况下增加模型容量(即,sparse 模型)。我们在 PaLM 的背景下讨论这些结果。尽管 Chinchilla 报告的许多基准任务与 PaLM 评估的任务不重叠,但我们可以比较那些重叠的基准任务的结果。Table 20 显示了 9 个英语 NLP 基准任务的具体结果。

    Figure 24 中,我们展示了两组任务的综合结果,作为总训练 FLOPs 数的函数。

    然而,我们不能使用这些结果来推断我们关键的 scaling question 的答案:与 PaLM 540B 相比,一个在 Y tokens 上训练的大小为 X 的模型的效果如何?有几个原因可以解释为什么这是一个难以回答的问题:

    • 为了得出强有力的结论,这样的实验必须逐个 scale 地进行,这有很大的计算成本。

    • 如果较小的模型使用比较大的模型更少的 TPU 芯片进行训练,这将按比例增加训练的 wall-clock time ,因为总的 training FLOPs 数是相同的。如果使用相同数量的 TPU 芯片进行训练,在不大幅增加 batch size 的情况下保持 TPU 的计算效率将是非常困难的。

    • 虽然网络上有大量的非常高质量的文本数据,但也不是无限量的。对于 PaLM 所选择的语料库混合比例来说,在我们的一些子语料库中,数据在 780B tokens 之后开始重复,这就是为什么我们选择这个作为训练的 endpoint 。目前还不清楚在大规模语言模型训练中,重复数据的价值与未见过的数据相比如何。

五十一、PaLM2[2023](粗读)

原始论文 《PaLM 2 Technical Report》 92 页,这里进行了精简。

  1. 随着规模的扩大和 Transformer 架构,大型语言模型(large language model: LLM )在过去几年中在语言理解和语言生成能力方面表现出强大的性能,导致 reasoning 、数学、科学和语言任务的突破性表现。这些进展的关键因素是扩大模型规模和数据量。到目前为止,大多数 LLM 都遵循一个标准的配方,主要是具有 language modeling objective 的单语语料库。

    我们介绍 PaLM 2 ,它是 PaLM 的后继者,是一个统一了建模进展、数据改进、以及 scaling insight 的语言模型。PaLM 2 结合了以下一系列不同的研究进展:

    • compute-optimal scaling:最近,compute-optimal scaling《Training compute-optimal large language models》)表明,数据规模至少与模型规模一样重要。我们对这项研究进行了验证,并同样发现数据规模和模型的大小应该大致按 1:1 的比例缩放,以在给定的训练计算量的条件下实现最佳性能(与过去的趋势相反,其中模型的缩放速度比数据集快 3 倍)。

    • 改进的 dataset mixture:以前的大型预训练语言模型通常使用以英语文本为主的数据集。我们设计了一个更多语言、更多样化的 pre-training mixture ,它延伸到数百种语言和领域(例如,编程语言、数学、以及平行多语言文档)。我们表明,更大的模型可以处理更多不同的非英语数据集,而不会导致英语语言理解性能的下降,并应用数据去重来减少 memorization《Deduplicating training data makes language models better》)。

    • 架构和 objective 的改进:我们的模型架构是基于 Transformer 的。过去的 LLM 几乎只使用单一的 causal language modeling objectivemasked language modeling objective 。鉴于 UL2《UL2: Unifying language learning paradigms》)的强大结果,我们在这个模型中使用了不同 pre-training objective 的调优好的 mixture ,以训练模型理解语言的不同方面。

    PaLM 2 家族中最大的模型(即,PaLM 2-L ),明显比最大的 PaLM 模型小,但使用更多的训练计算量。我们的评估结果显示,PaLM 2模型在各种任务中的表现明显优于PaLM,包括自然语言生成、翻译和推理。这些结果表明,模型的scaling 并不是提高性能的唯一途径。相反,性能可以通过精细的数据选择、以及更高效的 architecture/objective 来实现。此外,规模更小但质量更高的模型可以显著提高 inference 效率、降低 serving 成本,并使模型的下游 application 应用于更多用户和 application

    PaLM 2 展示了重要的多语言、代码生成、以及推理能力,我们在 Figure 2Figure 3 中进行了说明。更多的例子可以在附录 B 中找到。PaLM 2 在现实世界的高级语言能力考试中的表现明显优于 PaLM ,并通过了所有被评估语言的考试(见 Figure 1 )。对于某些考试来说,这是一个足以教授该语言的语言能力水平。在本报告中,生成的样本和测量的指标都来自于模型本身,没有任何外部的增强功能,如谷歌搜索或翻译。

    PaLM 2 包含 control tokens ,以实现 inference 期间对毒性的控制,与之前的工作相比,只修改了预训练的一小部分(《Pretraining language models with human preferences》)。 特殊的 'canary' token sequence 被注入到 PaLM 2 的预训练数据中,以便能够改进对不同语言的 memorization 度量。我们发现:PaLM 2 的平均逐字记忆率低于 PaLM ;对于尾部语言,我们观察到,只有当数据在文档中重复多次时,记忆率才会高于英语。 我们表明,PaLM 2 具有更好的多语言毒性分类能力,并在一系列潜在的下游用途中评估了潜在的危害和 bias。我们还包括对预训练数据中人类的表现的分析。这些部分有助于下游开发者评估其特定应用背景下的潜在危害,以便他们在开发早期优先考虑额外的程序和技术保障措施。本报告的其余部分重点描述了设计 PaLM 2 和评估其能力的考虑因素。

51.1 Scaling Law 实验

  1. 《Scaling laws for neural language models》 研究了训练数据量(D)和模型大小( N )之间的关系,并得出经验性结论,即它遵循幂律且 N 需要比 D 增长更快。

    《Training compute-optimal large language models》 在这一观察的基础上进行了类似的研究,对较小模型的超参数进行了更好的调优。他们的结果证实了《Scaling laws for neural language models》power law 结论。然而,他们得出了关于最佳比例的不同结果,表明 ND 应该以相等的比例增长。

    在这一节中,我们独立地推导了非常大的模型的 scaling law 。我们得出了与《Training compute-optimal large language models》 类似的结论,即 DN 应该以相等的比例增长。然后,我们探讨 scaling law 对下游指标的影响。

  2. 为了确定我们配置的 scaling law ,我们遵循与《Training compute-optimal large language models》 相同的程序。我们用 4 种不同的计算预算来训练几个不同大小的模型: 1×1019,1×1020,1×1021,1×1022 FLOPs 。对于每个计算预算,我们使用启发式的 FLOPs6ND《Scaling laws for neural language models》)来决定训练每个模型的training tokens 数量。关键是,我们使用余弦学习率衰减,并确保每个模型的学习率在其最后的 training token 处完全衰减。

    对每个模型的 final validation loss 进行平滑处理,我们对每个 isoFLOPS band 进行二次方拟合(Figure 4 )。这些二次方拟合的最小值表示每个 isoFLOPS bandprojected optimal model sizeN )。最佳 D 是由启发式 FLOPs 得出的。将这些最佳 N 和最佳 DFLOPs 作图(Figure 5 ),我们发现,随着FLOPs 预算的增加,DN 应该以相同的比例增长。这与《Training compute-optimal large language models》 的结论惊人地相似,尽管该研究的规模较小,而且采用的是不同的 training mixture

    我们使用 Figure 5scaling laws 来计算 1×1022,1×1021,1×1020 FLOPs 的最佳模型参数的数量(N )和 training tokens 数量(D)。然后我们在相同的 pre-training mixture 上训练从 400M15B 的几个模型,最多 1×1022 FLOPs 。最后,我们计算每个模型在三个 FLOP points 的损失。所得的 training loss 和它们相关的最佳模型参数数量包括在 Table 1 中。我们可以观察到,在给定的 FLOPs 下,近似遵循最优模型参数(N )的模型实现了最低的损失。请注意,所有提到的参数数量都是 non-embedding 参数。

  3. 下游的指标评估:为了研究在固定计算成本为 1×1022 FLOPs的情况下选择最佳参数数量和最佳 training tokens 数量的效果,我们在同一个 pretraining mixture 上训练几个模型,根据每个模型的大小在给定的 FLOPs 上进行采样并训练。值得注意的是,所选择的模型大小、架构、和 training mixture 只用于研究 scaling laws

    我们在 Table 15 中显示了不同大小的模型的下游结果。结果表明,具有 1×1022 FLOPs 的模型的最佳参数数量是10B 。然而,training loss 并不是下游指标的一个完美代理。例如,8.95B 的模型,显示出最低的损失(Table 1),最接近最佳模型,在下游任务上的表现略低于 14.7B 的模型。这表明,虽然 scaling laws 可以用来实现给定数量的 FLOPs 的最佳 training loss ,但这并不一定能迁移到实现给定任务的最佳性能。此外,除了最佳 training loss 外,还有其他一些考虑因素,如训练吞吐量和 serving latency ,这些都会影响关于最佳模型大小的决定。

51.2 训练数据集

  1. PaLM 2 的预训练语料库由一系列不同的来源组成:网络文档、书籍、代码、数学、对话数据。预训练语料库比用于训练 PaLM 的语料库大得多。与之前的大型语言模型相比,PaLM 2 的数据集包含了更高比例的非英语数据,这对多语言任务(如翻译和多语言问答)是有利的,因为模型会接触到更多的语言和文化。这使得该模型能够学习每种语言的细微差别。

    除了非英语的单语数据外,PaLM 2 还在涵盖数百种语言的平行数据(parallel data )上进行训练,这些数据的形式是一方为英语的 (source, target) 文本对。多语言平行数据的加入进一步提高了该模型理解和生成多语言文本的能力。它还为模型植入了固有的翻译能力,这对各种任务都很有用。下表列出了数百种语言中的前 50 种,以及它们在多语言网络文档子语料库中的相关百分比。我们没有应用任何过滤方法来明确地保留或删除任何语言。

  2. 我们采用了几种数据清理和质量过滤方法,包括去重、去除敏感的隐私信息、以及过滤。即使 PaLM 2 的英语数据比例比 PaLM小,我们仍然观察到英语评估数据集的明显改善。我们将此部分归因于 PaLM 2 mixture 中更高的数据质量。

  3. PaLM 2 经过训练后,模型的上下文长度大大超过了 PaLM 的长度。这种改进对于实现长对话、长距离推理和理解、摘要、以及其他需要模型考虑大量上下文的任务等能力至关重要。我们的结果表明,增加模型的上下文长度而不损害其在通用 benchmark 上的性能是可能的,这些通用 benchmark 可能不需要更长的上下文。

51.3 评估

  1. 由于 model checkpoints 的结果存在一些差异,我们对最后五个 PaLM 2 checkpoint 的结果进行平均,以便对大型模型进行更有力的比较。

  2. 评估内容省略(纯粹的技术报告,原理和细节部分很少)。

五十二、Self-Instruct[2022]

  1. 最近的 NLP 文献见证了大量的 building model ,这些模型能够遵循自然语言指令(natural language instruction )。这些进展由两个关键部分所推动:大型预训练好的语言模型、人类编写的指令数据。PromptSourceSuperNaturalInstructions 是最近两个值得注意的数据集,它们使用大量的人工标注来收集构建 T0-InstructTk-Instruct 。然而,这个过程成本很高,而且考虑到大多数 human generation 往往是流行的 NLP 任务,常常遭受有限的多样性,没有涵盖真正的各种 NLP 任务、以及描述任务的不同方式。鉴于这些局限性,要继续提高 instruction-tuned 模型的质量,就必须开发出 supervising instruction-tuned 模型的替代方法。

    在论文 《Self-Instruct: Aligning Language Model with Self Generated Instructions》 中,作者介绍了 Self-Instruct ,这是一个半自动的过程,利用模型本身的 instructional signalpretrained LM 进行 instruction-tuning 。整个过程是一个迭代的bootstrapping 算法(如下图所示),它从一个有限的(例如,在论文的研究中是 175 个)手动编写指令的种子集(seed set )开始,这些手动编写的指令被用来指导整个generation

    • 在第一阶段,模型被 prompted 从而生成新任务的指令。这一步利用现有的指令集合来创建覆盖面更广的指令集合,这些新的指令用于定义任务(通常是新的任务)。

    • 给定新生成的指令集,该框架还为它们创建了 input-output instance ,这些 instance 随后可用于 supervising instruction tuning

    • 最后,在将其添加到任务池(task pool )之前,会使用各种措施来裁剪低质量的和重复的指令。

    这个过程可以反复迭代多次,直到达到大量的任务。

    为了评估 Self-Instruct ,作者在 GPT3 上运行这个框架,其中 GPT3 是一个平凡的语言模型。在 GPT3 上的迭代 Self-Instruct 过程导致了大约 52K 条指令,与大约 82Kinstance inputstarget outputs 相配对。作者观察到,所产生的数据提供了多种多样的创造性的任务,其中 50% 以上的任务与 seed instruction 的重合度低于 0.3 ROUGEL 。在这个结果数据上,作者通过微调 GPT3 (即用于生成指令数据的同一模型)来建立 GPT3SELF-INST 。作者在 SuperNaturalInstructions 中包含的典型 NLP 任务、以及为 instruction-following model 的新用途而创建的一组新指令上,对 GPT3SELF-INST 与其他各种模型进行评估。SUPERNI的结果表明, GPT3SELF-INSTGPT3 (原始模型)有很大的优势( +33.1% ),几乎与 InstructGPT001 的性能相当。此外,作者对新创建的指令集进行的人类评估表明, GPT3SELF-INST 展示了广泛的 instruction following 能力,超过了在其他公开可用的指令数据集上训练的模型,与 InstructGPT001 仅有 5% 的差距。

    综上所述,论文的主要贡献:

    • Self-Instruct ,一种用最少的人类标记数据诱导 instruction following 能力的方法。

    • 通过广泛的 instruction-tuning 实验证明了Self-Instruct 方法的有效性。

    • 发布了一个由 52K 指令组成的大型合成数据集、以及一组手工编写的新任务,用于建立和评估未来的 instruction-following 模型。

  2. 相关工作:

    • instruction-following 语言模型:一系列的工作发现,如果用人工标注的 "指令" 数据(这样的一种数据集:包含 language instructional command 和基于人类判断的预期结果)进行微调,平凡的语言模型可以有效地遵循通用的语言指令。此外,这些工作还显示了 "指令" 数据的规模和多样性,与所产生的模型的泛化性(推广到 unseen task )之间的直接关系。由于这些发展依赖于人类标注的 "指令" 数据,这对实现更加泛化的模型构成了瓶颈。我们的工作旨在通过减少对人类标注员的依赖来解决这个瓶颈。

      此外,尽管像 InstructGPT 这样的模型有优秀的表现,但其构建过程仍然相当不透明。特别是,由于这些关键模型背后的主要企业实体发布的有限透明度和有限数据,数据的作用仍然没有得到充分研究。要解决这样的挑战,就必须建立一个涵盖广泛任务的大规模的公共数据集。

      multi-modal learning 文献中,instruction-following 模型也备受关注。 Self-Instruct 作为扩展数据的一般方法,有可能在这些 setting 中也有帮助;然而,这不在本工作的范围之内。

    • 用于 data generationdata augmentation 的语言模型:许多工作都依靠生成式语言模型来生成数据、或增强数据。例如,《Generating datasets with pretrained language models》提议用 prompting large LM 取代给定任务的人类标注,并在 SuperGLUE 任务的背景下使用所产生的数据来微调(通常较小的)模型。虽然我们的工作可以被看作是一种 "augmentation" 形式,但我们的工作与这一方向不同,因为它不是专门针对某一特定任务(例如,QANLI )。相反, Self-Instruct 的一个明显的动机是 bootstrap new task definition ,这些任务可能以前没有被任何 NLP 从业者定义过(尽管可能对下游用户仍然很重要)。

    • self-training:一个典型的自训练框架使用训练好的模型来给 unlabeled data 分配标签,然后利用新标记的数据来改进模型。在类似的路线中, 《Prompt Consistency for Zero-Shot Task Generalization》 使用 multiple prompts 来指定一个任务,并建议通过 prompt consistency 来正则化,鼓励对 prompts 的一致预测。这允许用额外的 unlabeled training data 对模型进行微调,或者在推理时直接应用。虽然 Self-Instruct 与自训练有一些相似之处,但大多数自训练方法都假定有一个特定的目标任务、以及该任务下的未标记实例;相反, Self-Instruct 从头开始产生各种任务。

    • 知识蒸馏:知识蒸馏通常涉及到将知识从较大的模型迁移到较小的模型。 Self-Instruct 也可以看作是 "知识蒸馏" 的一种形式。然而, Self-Instruct 在如下方面与知识蒸馏不同:

      • Self-Instruct 中,蒸馏的 sourcetarget 是相同的,即一个模型的知识被蒸馏到自己身上。

      • 蒸馏的内容是 instruction task 的形式(即定义一个任务的指令,以及一组实例)。

    • 用有限的实例进行 bootstrapping :最近的一系列工作使用语言模型,用专门的方法来 bootstrap some inference

      • NPPrompt《Pre-trained language models can be fully zero-shot learners》)提供了一种无需任何微调就能生成 semantic label 的预测的方法。它使用模型自身的 embedding来自动寻找与数据实例的标签相关的单词,因此减少了对从 model predictionlabel (即,verbalizer )的人工映射的依赖。

      • STAR《STar: Self-taught reasoner bootstrapping reasoning with reasoning》)反复利用少量的 rationale example 和没有 rationales 的大数据集,来 bootstrap 模型执行 reasoning 的能力。

      • Self-Correction《Generating sequences by learning to self-correct》)将一个不完美的 base generator (模型)与一个单独的 corrector 解耦,该 corrector 学会了迭代地修正不完美的 generation ,并展示了对 base generator 的改进。

      我们的工作则侧重于在指令范式中 bootstrapping new task

    • 指令生成:最近的一系列工作在给定少数实例的条件下,生成任务的指令。虽然 Self-Instruct 也涉及指令的生成,但我们的主要区别在于它是任务无关的;我们从头开始生成新任务(指令和实例)。

52.1 方法

  1. 标注大规模的指令数据对人类来说是一种挑战,因为它需要:创造性地提出新的任务、专业知识从而用于为每个任务编写标记的实例。在这一节中,我们将详细介绍我们的 Self-Instruct 过程,它指的是这样的 pipeline:用一个平凡的 pretrained language model 来生成任务,然后用这些被生成的任务进行 instruction tuning 从而使语言模型更好地遵循指令。这个 pipeline 在下图中被描述。

  2. 指令数据(Instruction Data )的定义:我们要生成的指令数据包含一组指令 {It}t=1,2,,其中每条指令 It 指令都用自然语言定义了一个任务 t。每个任务有一个或多个 input-output 实例 (Xt,Yt)。给定任务指令 Itinstance input x ,一个模型 M 预期输出 y=M(It,x) ,其中 (x,y)(Xt,Yt)

    注意,在许多情况下,指令和 instance input 并没有严格的界限。例如:

    • "write an essay about school safety" 可以是一个有效的指令,在这个指令上我们预期模型直接地响应。

      这里只有指令而没有 instance input

    • 此外,"write an essay about school safety" 也可以被表述为 "write an essay about the following topic" 作为指令,而 "school safety" 作为 instance input

    为了鼓励数据格式的多样性,我们允许这种不需要额外输入的指令(即,x 为空)。

  3. 自动的指令数据生成:我们生成指令数据的 pipeline 包括四个步骤:指令生成、识别指令是否代表分类任务、用 input-firstoutput-first 的方法生成实例、过滤低质量数据。

    • 指令生成(Instruction Generation): Self-Instruct 是基于一个发现,即 large pretrained language model 在遇到上下文中的一些现有指令时,可以被 prompted 从而生成 new and novel 的指令。这为我们提供了一种从 seed human-written 指令的一个小集合中 augument 指令数据的方法。我们提议以 bootstrapping 的方式产生一个多样化的指令集。我们用本文的作者编写的 175 个任务(每个任务有 1 条指令和 1 个实例)初始化了任务池。对于每一步,我们从这个指令池里采样 8 条任务指令作为 in-context example 。在这 8 条指令中,6 条来自人类编写的任务、2 条来自 previous steps 中的模型生成的任务,从而促进多样性。 prompting template 如下表所示。

      为什么要 8-shot?用更多或更少的 shot ,效果会怎么样?

      为什么用 3:1 的混合比例,用更多或更少的人类编写的任务,效果会怎样?

    • 分类任务识别(Classification Task Identification):因为我们需要两种不同的方法从而分别处理分类任务和非分类任务,所以我们接下来识别 generated instruction 是否代表分类任务。我们使用种子任务中的 12 条分类指令、以及 19 条非分类指令,并 prompt 常规的 GPT3 few-shot 来确定这一点。prompting template 如下表所示。

      12/19 这两个数值是如何确定的?

    • 实例生成(Instance Generation):给定指令及其任务类型,我们为每个指令独立地生成实例。这很有挑战性,因为它要求模型根据指令来理解目标任务是什么,弄清需要哪些额外的 input field 并生成这些额外的 input field ,最后通过产生 output 来完成任务。我们发现,当用其他任务中的 instruction-input-output in-context exampleprompt 时, pretrained language model 可以在很大程度上实现这一点。一个自然的方法是 Input-first Approach ,我们可以要求语言模型先根据指令来生成 input field ,然后产生相应的 output 。这种生成顺序类似于模型对指令和输入的响应方式。prompting template 如下表所示。

      然而,我们发现这种方法会产生偏向于 one label 的输入,特别是对于分类任务(例如,对于语法错误检测,它通常会生成 grammatical input )。因此,我们另外提出了一种用于分类任务的 Output-first Approach ,即我们首先生成可能的 class label ,然后以每个 class label 为条件来生成 inputprompting template 如下表所示。

      我们将 Output-first Approach 应用于前一步所确定的分类任务,将 Input-first Approach 应用于其余的非分类任务。

    • 过滤和后处理:为了鼓励多样性,只有当一条新指令与任何现有指令的 ROUGE-L overlap 小于 0.7时,这条新指令才会被添加到任务池中。我们还排除了包含一些特定关键词(如 images, pictures, graphs )的指令,这些关键词通常不能被语言模型所处理。在为每条指令生成新的实例时,我们过滤掉那些完全相同的实例或那些具有相同输入但不同输出的实例。

      不仅需要过滤指令,也需要过滤任务的实例。

  4. 微调语言模型从而 follow instructions:在创建了大规模的指令数据后,我们用这些数据来微调原始语言模型(即 self-instruct )。为了做到这一点,我们将指令和 instance input 拼接起来作为 prompt ,并训练模型以标准的监督方式生成 instance output

    为了使模型对不同的格式具有鲁棒性,我们使用多个 templates 来把指令和 instance input 编码在一起。例如:

    • 指令的前缀可以是 "Task:" ,也可以不是。

    • 输入的前缀可以是 "Input:" ,也可以不是。

    • "Output:" 可以附加在 prompt 的末尾。

    • 中间可以放不同数量的换行符,等等。

    每个实例都采用一组各式各样的模版格式,那么这些模板如何设计?论文并未深入地探索。

52.2 来自 GPT3 的 Self-Instruct 数据

  1. 这里我们将我们的方法应用于 GPT3 从而诱导指令数据,作为案例研究。我们使用最大的 GPT3 语言模型("davinci" engine )通过 OpenAI API 访问。在为不同的目的查询 GPT3 API 时,我们使用不同的超参数集合。我们发现这些超参数在 GPT3 模型( "davinci" engine )和其他 instruction-tuned GPT3 变体中运行良好。我们在下表中列出了它们。

    接下来我们介绍一下 generated data 的概况。

  2. 统计数据:下表描述了 generated data 的基本统计数据。经过过滤之后,我们总共生成了超过 52K 条指令,以及超过 82K 个与这些指令相对应的实例。

  3. 多样性:为了研究生成了哪些类型的指令、以及这些被生成指令的多样性,我们确定了被生成的指令中的 “动名词”( verb-noun )结构。我们使用 Berkeley Neural Parser 来解析指令,然后提取最接近 parse tree 的根部的动词、以及该动词的first direct noun object 。在 52,445 条指令中,有 26,559 条包含这样的结构;其他指令通常包含更复杂的子句(例如,"Classify whether this tweet contains political content or not." )或被界定为问句(例如,"Which of these statements are true?" )。我们在下图中绘制了前 20 个最常见的 root verb 、以及这些动词的前 4direct noun object ,这些指令占了整个被生成指令的集合的 14% 。总的来说,我们在这些指令中看到了相当多样化的意图和文本格式。

    我们进一步研究 generated instruction 与用于 prompt the generation 的种子指令有何不同。对于每个 generated instruction ,我们计算其与 175 条种子指令的最高 ROUGE-L overlap 。我们在 Figure 3 中绘制了这些 ROUGE-L 分数的分布,表明有相当数量的新指令与种子指令没有太多的 overlap 。我们还在 Figure 4 中展示了指令长度、instance inputinstance output 的多样性。

  4. 质量:到目前为止,我们已经展示了 generated data 的数量和多样性,但其质量仍然不确定。为了调查这一点,我们随机采样了 200 条指令,并在每条指令中随机选择 1 个实例。我们请一位专家标注员(本论文的 co-author )从指令、instance inputinstance output 的角度来标注每个实例是否正确。

    下表中的评估结果显示,大多数 generated instruction 是有意义的,而 generated instance 可能包含更多的噪音(在合理的范围内)。然而,我们发现,即使 generation 可能包含错误,但大多数仍然是正确的格式,甚至是部分正确的,这可以为训练模型提供有用的指导从而遵循指令。

    我们在下表中分别给出了一些好的 generation 和坏的 generation

52.3 实验

  1. 我们进行实验来衡量和比较各种 instruction tuning 设置下的模型质量。我们首先描述了我们的模型和其他 baseline,然后是我们的实验。

  2. GPT3SELF-INST :在 GPT3 自己的指令数据上微调 GPT3

    使用 instruction-generated 指令数据,我们对 GPT3 模型本身("davinci" engine)进行 instruction tuning 。如前所述,我们使用各种模板来拼接指令和 input ,并训练模型来生成output 。这种微调是通过 OpenAI finetuning API 完成的。我们使用默认的超参数,除了将 prompt loss 权重设置为 0 ,并对模型训练两个 epoch 。最终的模型被称为 GPT3SELF-INST

    " prompt loss 权重设置为 0 ",意味着近考虑 output 的损失。

    微调细节如下: GPT3SELF-INST 和我们的一些 baseline 是由 GPT3 模型(具有 175B 参数的 "davinci" engine )微调的。我们通过 OpenAIfinetuning API 进行这种微调。虽然目前还没有关于如何用这个API 对模型进行微调的细节(例如,哪些参数被更新,或者优化器是什么),但我们用这个 API 的默认超参数来微调我们所有的模型,以便结果具有可比性。我们只将 "prompt_loss_weight" 设置为 0 ,因为我们发现这在我们的案例中效果更好,而且每个微调实验都训练了两个 epochs ,以避免训练任务的过拟合。微调是根据训练文件中的 token 数量来收费的。从 GPT3 模型中微调 GPT3SELF-INST 需要 338 美元。

  3. baseline

    • 现成的语言模型:我们评估 T5-LMGPT3 作为平凡的语言模型 baseline (只有预训练而没有额外的微调)。这些 baseline 将表明现成的语言模型在预训练之后能够在多大程度上自然地遵循指令。

    • 公开可用的 instruction-tuned 模型:T0Tk-INSTRUCT 是公开的两个 instruction-tuned 模型,并被证明能够遵循许多NLP 任务的指令。这两个模型都是从 T5 checkpoint 微调的,并且是公开可用的。对于这两个模型,我们使用其最大版本(11B 参数)。

    • instruction-tuned GPT3 模型:我们评估了 InstructGPT ,它是由 OpenAI 基于 GPT3 开发的,以更好地遵循人类指令,并被社区发现具有令人印象深刻的 zero-shot 能力。InstructGPT 模型有不同的版本,其中较新的模型使用更多的扩展数据、或更多的算法新颖性。

      • 对于我们的 SUPERNI 实验,我们只与他们的 text-davinci-001 engine 进行比较,因为他们较新的 engine 是用最新的用户数据训练的,很可能已经看到 SUPERNI 的评估集合。

      • 对于我们在新撰写的指令上对这些模型的人工评估,我们包括他们的 001/002/003 engine ,以保证完整性。

    • 此外,为了将 Self-Instruct Training 与其他公开可用的 instruction tuning 数据进行比较,我们用 PROMPTSOURCESUPERNI 的数据进一步微调 GPT3 模型,其中 PROMPTSOURCESUPERNI 是被用来训练 T0Tk-INSTRUCT 模型。我们分别将其简称为 T0 trainingSUPERNI training 。为了节省训练预算,我们对每个数据集采样 50K 个实例(但涵盖其所有指令),其规模与我们生成的指令数据相当。根据 SUPERNI 原始论文的研究结果和我们的早期实验,减少每个任务的实例数量并不会降低模型对 unseen 任务的泛化性能。

      这是为了将开源的指令数据集,与 self-instruct 生成的指令数据集进行比较。

52.3.1 在 SUPERNI benchmark 上的 Zero-Shot 泛化

  1. 我们首先评估了模型在典型的 NLP 任务上以 zero-shot 方式来遵循指令的能力。我们使用 SUPERNIevaluation 集合,它由 119 个任务组成,每个任务有 100 个实例。在这项工作中,我们主要关注zero-shot 设置,即只用任务的定义来 prompt 模型,而没有 in-context demonstration example 。对于我们对 GPT3 变体的所有请求,我们使用确定性的 generation mode (温度为 0 ,没有 nucleus sampling ),没有特定的 stop sequence

    温度为 0、没有 nucleus sampling ,这对于 generation 是不利的,因此并不能代表模型的最佳效果。最好是调优这两个超参数,然后再对比各个模型。

    实验结果如下表所示:

    • Self-Instruct 在很大程度上提高了 GPT3instruction-following 能力。

    • 平凡的 GPT3 模型基本上不能遵循人类的指令。经过人工分析,我们发现它通常会生成不相关的重复性文本,而且不知道何时停止生成。

    • 与其他没有专门为 SUPERNI 训练的模型相比, GPT3SELF-INST 取得了比 T0 模型、或在 T0 训练集上微调的 GPT3 更好的性能,而 T0 训练集需要巨大的人工标注工作。值得注意的是, GPT3SELF-INST 也几乎与 InstructGPT001 的性能相匹配,后者是用私人用户数据、以及人类标注的标签来训练的。

    • SUPERNI 训练集上训练的模型在其评估集上取得了更好的性能,我们将此归因于在训练期间采用了与评估时类似的指令风格和指令格式。然而,我们表明,当 Self-InstructSUPERNI 训练集相结合时,仍然带来了额外的收益,证明了 Self-Instruct 作为补充数据的价值。

52.3.2 实验二:泛化到新任务上的面向用户的指令

  1. 尽管 SUPERNI 在收集现有的 NLP 任务方面很全面,但这些 NLP 任务大多是为研究目的而提出的,并且偏向于 classification 任务。为了更好地获取 instruction-following 模型的实用价值,本文所有作者中的一部分作者策划了一套新的指令,其动机是面向用户的应用。

    我们首先对大型语言模型可能有用的不同领域进行头脑风暴(例如,电子邮件写作、社交媒体、生产力工具、娱乐、编程),然后制作与每个领域相关的指令以及一个 input-output instance (同样, input 是可选的)。我们的目标是使这些任务的风格和格式多样化(例如,指令可长可短;input/output 可采用 bullet points 、表格、代码、方程式等形式)。

    我们总共创建了 252 个指令,每个指令有 1 个实例。我们相信它可以作为一个测试平台,用于评估 instruction-based 模型如何处理多样化和不熟悉的指令。下表展示了 252 个任务中的一小部分。整个测试集对于 request 可用。

  2. 人类评价设置:在这个由不同任务组成的评估集上评估模型的性能是极具挑战性的,因为不同的任务需要不同的专业知识。事实上,许多任务不能用自动指标来衡量,甚至不能由普通的众包人员来判断(例如,编写一个程序,或将一阶逻辑转换为自然语言)。为了得到更忠实的评价,我们要求指令的作者对模型的预测进行判断。评估人员被要求根据输出是否准确有效地完成了任务来评分。我们实施了一个四级评分系统来对模型的输出质量进行分类,定义如下:

    • A:输出是有效的,令人满意的。

    • B:输出是可接受的,但有轻微的错误或不完善之处,可以改进。

    • C:输出是相关的,是对指令的响应,但在内容上有重大错误。例如,GPT3 可能首先生成一个有效的输出,但继续生成其他不相关的东西。

    • D:输出是不相关的或无效的,包括对 input 的重复,完全不相关的输出等。

    下图给出了 GPT3 模型及其 instruction-tuned 对应的版本在这个新编写的指令集上的表现。可以看到:

    • GPT3SELF-INST (即用 Self-Instruct 微调的 GPT3 模型)在很大程度上超过了那些在 T0SUPERNI 上训练的对应模型。证明了尽管有噪音,但 generated data 仍有价值。

    • InstructGPT001 相比, GPT3SELF-INST 的表现相当接近。如果我们把有轻微缺陷的可接受的输出(等级为 C )算作有效, GPT3SELF-INST 仅比 InstructGPT001 落后 5%

    • 最后,我们的评估证实了 InstructGPT002InstructGPT003模型令人印象深刻的 instruction-following 能力。尽管这一成功背后有许多因素,但我们猜想,未来的工作在很大程度上可以通过使用人类标注员、或训练奖励模型来提高我们 generated data 的质量,以选择更好的 generation ,类似于 InstructGPT 使用的算法。

  3. 我们在 Table 4 中介绍了一些面向用户的任务、相应的 GPT3SELF-INST 产生的输出和标注人员的评分。我们看到,即使是被评为 2 级(即,B)的输出,该模型也展示了解决任务的详尽步骤,尽管其最终输出是错误的。

52.4 讨论和局限性

  1. 为什么 Self-Instruct 能工作?

    值得反思的是,高质量的人类反馈在促成最近关于 instruction-tuning 语言模型的成功方面所发挥的作用。这里有两个极端的假说:

    • 假说一:人类反馈是 instruction-tuning 的一个必要的、不可缺少的方面,因为语言模型需要学习在预训练中不太了解的问题。

    • 假说二:人类反馈是 instruction-tuning 的一个可选的方面,因为语言模型在预训练中已经对指令相当熟悉。观察人类反馈只是一个轻量级的过程,用于 align 模型的 pretraining distribution/objective ,这个轻量级过程可能会被不同的过程所取代。

    虽然现实情况可能介于这两个极端之间,但我们猜测它更接近于假说二,特别是对于大型模型。这种直觉,即语言模型已经知道很多关于语言指令的信息,是 Self-Instruct 的关键动机,也得到了其经验性成功的支持。

  2. 更广泛的影响:除了本文的直接焦点之外,我们认为 Self-Instruct 可能有助于为像 InstructGPT 这样广泛使用的 instruction-tuned 模型的 "幕后" 工作带来更多的透明度。不幸的是,这些工业模型仍然在 API wall 后面,因为它们的数据集没有被公布,因此人们对它们的构造、以及它们为什么表现出令人印象深刻的能力了解甚少。现在,学术界有责任更好地理解这些模型的成功之源,并努力建立更好的(但却是开放的)模型。我们相信我们在本文中的发现证明了多样化的指令数据的重要性,我们的大型合成数据集可以成为更高质量数据的第一步,从而用于建立更好的 instruction-following 模型。

  3. 局限性:

    • tail 现象: Self-Instruct 依赖于语言模型,它将继承语言模型所带来的所有局限性。正如最近的研究表明(《Impact of pretraining term frequencies on few-shot reasoning》《Large language models struggle to learn long-tail knowledge》),长尾现象对语言模型的成功构成了严重挑战。换句话说,语言模型的最大收益对应于语言的频繁使用( language use 分布的头部),而在低频上下文中的收益最小。同样,在这项工作的背景下,如果 Self-Instruct 的大部分收益都偏向于在预训练语料库中更频繁出现的任务或指令,也就不足为奇了。因此,该方法在不常见的和创新性的指令方面可能会表现得很脆弱。

    • 对大型模型的依赖性:由于 Self-Instruct 依赖于从语言模型中提取的归纳偏置( inductive bias ),它可能对更大的模型效果最好。如果是真的,这可能会给那些可能没有大型计算资源的人带来障碍。我们希望未来仔细研究:收益是如何作为模型大小或其他各种超参数的函数。值得注意的是,有人类标注的 instruction-tuning 也有类似的局限性:instruction-tuning 的收益在大型模型中更高(《Finetuned Language Models are Zero-Shot Learners》)。

    • 强化了语言模型的偏见(bias ):一个值得关注的问题是这种迭代算法的意外后果,例如放大有问题的 social bias (对性别、种族等的刻板印象或诽谤)。与此相关的是,在这个过程中观察到的一个挑战是,该算法很难产生平衡的标签,这反映了模型的 prior bias 。我们希望未来的工作能够理清这些细节,以更好地了解该方法的优点和缺点。