原始论文
《PaLM: Scaling Language Modeling with Pathways》
83 页,这里进行了精简。
BERT/T5
等模型,尽管在数以千计的自然语言任务中达到了近乎 SOTA
,但缺点是它们需要大量的 task-specific
训练实例来微调模型。此外,至少有一部分的模型参数必须被更新以适应任务,从而增加了模型微调和部署的复杂性。
GPT-3
证明了极其大型的自回归语言模型可用于 few-shot prediction
,其中,只需要为模型提供一个关于任务的自然语言描述、以及(可选的)关于如何完成任务的少量示例。few-shot evaluation
已被证明可以达到非常强大的效果,而不需要大规模的 task-specific data collection
或模型参数更新。
自 GPT-3
以来,其他一些大型自回归语言模型已经被开发出来,它们继续推动着技术的发展。这些 GPT-3
之后的模型中最强大的是GLaM
、Gopher
、Chinchilla
、Megatron-Turing NLG
和 LaMDA
。与 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
,作者在 6144
个 TPU v4
芯片上训练了一个540B
参数的语言模型,其效率水平是以前这种规模的模型所不能达到的。
以前的大多数大型语言模型要么是在单个 TPU
系统上训练的,要么是使用 pipeline
并行在 GPU
集群或多个 TPU v3 pod
中 scale
(最大规模为 4096
个 TPU v3
芯片)。
来自 scaling
的持续的改善:作者在数百个自然语言、代码和数学推理任务中评估了 PaLM
,并在这些基准中的绝大多数上取得了 SOTA
结果,且有很大的提升。这有力地证明了大型语言模型的 scaling improvement
既没有趋于平稳也没有达到饱和点。
突破性的能力:作者展示了在语言理解和生成方面的突破性能力,跨越了许多不同的任务。
不连续的提升:为了更好地理解 scaling
行为,作者提出了三种不同参数规模的结果:8B/62B/540B
。通常情况下,从 62B
扩展到 540B
的结果与从 8B
扩展到 62B
的结果相似,这与神经网络扩展中经常观察到的 "power law"
规则一致。然而,对于某些任务,作者观察到不连续的改进,与从8B
到 62B
的 scaling
相比,从 62B
到 540B
的 scaling
导致了准确率的急剧上升。这表明,当模型达到足够大的规模时,大型语言模型的新能力就会涌现。
多语言理解:以前关于大型语言模型的工作在多语言领域进行了有限的评估。在这项工作中,作者对包括机器翻译、摘要、问答在内的各种语言的多语言基准进行了更彻底的评估。
偏见和毒性:作者还评估了模型在 distributional bias and toxicity
方面的表现,从而得出了一些洞察:
首先,对于性别和职业偏见,作者发现 Winogender
共指任务的准确率随着模型规模的扩大而提高,PaLM 540B
在 1-shot/few-shot setting
中创造了新的 SOTA
结果。
其次,对种族/宗教/性别的 prompt continuation
进行的 co-occurence analysis
表明,该模型有可能错误地将穆斯林与恐怖主义、极端主义和暴力联系起来。这种行为在不同的模型规模上是一致的。
最后,对 prompt continuation
任务的毒性分析表明,与 8B
模型相比,62B
和 540B
模型的总体毒性水平略高。然而,model-generated continuation
的毒性与 prompting text
的毒性高度相关,而 human-generation continuation
则没有强烈的毒性相关性。这表明,与human-generated text
相比,模型受 prompt
风格的影响更为严重。
相关工作:在过去的几年里,通过大规模的语言建模,自然语言能力有了很大的进步。广义上,语言建模指的是预测序列中的 next token
、或预测序列中的 masked span
的方法。当应用于庞大的语料库时(包括从互联网、书籍和论坛上爬取的数据),这些自监督目标已经产生了具有高级语言理解能力和高级语言生成能力的模型。通过对数据量、参数量和计算量的 scaling
,模型质量的可预测的power-law
使得这种方法成为能力越来越强的模型的可靠方法。
Transformer
架构在现代 accelerators
上释放出了无与伦比的效率,并成为语言模型的事实方法。在短短的四年时间里,最大的模型在参数规模上和总计算量上都增加了几个数量级。
最早成功的 scale
之一是 345M
参数的encoder-only
的 BERT
模型,它极大地促进了包括 SuperGLUE
在内的分类任务的语言理解。
Generative Pretrained Transformer: GPT
系列是 decoder-only
模型,创造了 SOTA
的语言建模性能。
T5
随后预训练并微调了高达 11B
参数的 encoder-decoder
模型,为迁移学习设立了新的标准。
GPT
系列的最新模型,即 175B
参数的 GPT-3
模型从inference-only
、few-shot
技术中发现了新的能力。
在 GPT-3
之后,规模继续扩大,178B
参数的 Jurassic-1
、280B
参数的 Gopher
模型、530B
的 Megatron-Turing NLG
,以及包括 Switch Transformers
和 GLaM
在内的万亿参数 sparse model
相继出现就是证明。这些核心自然语言能力的进步也伴随着其他领域的改进,包括理解和生成代码。此外,对话应用已经通过 scale
取得了进展,最近的证据是 LaMDA
,一个137B
的 decoder-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
语言模型中。
PaLM
使用标准的 decoder-only Transformer
架构,并且做了如下的修改:
SwiGLU
激活函数:我们使用 SwiGLU
激活函数(MLP
的中间激活函数。因为与标准 ReLU
、GeLU
或Swish
激活函数相比,SwiGLU
已被证明可以显著提高质量(《GLU variants improve transformer》
)。 请注意,这确实需要在 MLP
中进行三次矩阵乘法,而不是两次,但《GLU variants improve transformer》
证明了在 compute-equivalent
实验中质量的提高(即标准 ReLU
变体具有相应更大的尺寸)。
。
并行层:我们在每个 Transformer block
内使用一种 ”并行“ 公式(《GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model》
),而不是标准的 ”串行“公式 。具体而言,标准的公式为:
而并行公式为:
由于 MLP
和 Attention
的输入矩阵的乘法可以被 fused
,因此并行公式在 large scale
下的训练速度大约提高了 15%
。消融实验表明,在 8B
规模时有小的质量下降,但在 62B
规模时没有质量下降,因此我们推断,在 540B
规模时并行层对质量的影响应该是中性的。
Multi-Query Attention
:标准的 Transformer
公式使用 attention head
,其中在每个 timestep
中,输入向量被线性投用到 query, key, value
张量,query/key/value
张量的形状都是 attention head size
。
然而在这里,每个 head
的 key/value
投影是共享的,即 key
和 value
张量的形状为 query
张量的形状还是 《Fast transformer decoding: One write-head is all you need》
),但在自回归解码时却能节省大量成本。这是因为在自回归解码过程中,标准的 multi-headed attention
在 accelerator
硬件上的效率很低,因为 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 matrix
和 output embedding matrix
,这是在过去的工作中经常做的(但不是普遍的)。
No Biases
:在任何一个 dense kernel
或 layer norm
中都没有使用偏置。我们发现这增加了大型模型的训练稳定性。
词表:我们使用了具有 256k tokens
的 SentencePiece
词表(vocabulary
),选择该词表是为了支持训练语料库中的大量语言,而不需要过度的 tokenization
。词表是由训练数据生成的,我们发现这提高了训练效率。词表是完全无损的和可逆的,这意味着词表中完全保留了空白符(对 code
数据来说特别重要),out-of-vocabulary
的 Unicode
字符被分割成 UTF-8
字节,每个字节都有一个 vocabulary token
。数字总是被分割成单独的 digit token
(例如:"123.5 -> 1 2 3 . 5"
)。
model scale
的超参数:在这项工作中,我们比较了三种不同的模型规模:540B
参数、62B
参数、8B
参数。FLOPs per token
数量大约等于参数的数量,因为这些模型是标准的 dense Transformer
。这些模型是用下表中的超参数构建的。这三个模型使用相同的数据和词表进行了相同的训练(除了 batch size
)。
Model Card
:参考论文的附录 E
。
PaLM
预训练数据集由一个高质量的语料库组成,该语料库有 780B tokens
,包括了过滤的网页、书籍、维基百科、新闻文章、源代码、社交媒体对话等数据。 这个数据集是基于用于训练 LaMDA
和 GLaM
的数据集。我们在恰好一个 epoch
的数据上训练所有三个模型(对所有模型的shuffle
相同),并选择混合比例以避免在任何子数据集重复数据。
代码数据是从 GitHub
上的开源 repositories
中获得。我们通过 license
来过滤文件。此外我们根据文件名过滤文件,从而限制在 24
种常见的编程语言之一,包括 Java, HTML, Javascript, Python, PHP, C#, XML, C++, C
。最终得到 196 GB
的源代码数据。此外,我们根据文件之间的 Levenshtein
距离去除重复的文件,因为已知重复的文件在源代码库中很常见。
下表列出了用于创建最终的 PaLM
数据集 mixture
的各种数据源的比例。我们在后面内容中检查了数据污染,并提出了我们的训练数据集和评估数据之间的overlap
分析。附录 D
包含一个数据表,其中有更多信息,包括语言比例的细分。
这里的数据集没有开源。
我们的训练代码库和评估代码库基于 JAX
和 T5X
,所有模型都在 TPU v4 Pods
上训练。PaLM 540B
在两个通过数据中心网络(data center network: DCN
)连接的 TPU v4 Pod
上训练,使用模型并行和数据并行的组合。每个 TPU v4 Pod
使用 3072
个 TPU v4 chips
,连接到 768
台主机。这个系统是迄今为止描述的最大的 TPU
配置,使我们能够有效地将训练规模扩大到 6144
个芯片,而不需要使用任何流水线并行。相比之下:
LaMDA, GLaM
分别在单个 TPU
系统上进行训练,没有利用流水线并行或数据中心网络。
Megatron-Turing NLG 530B
是在 2240
个 A100 GPU
上使用模型并行、数据并行、以及流水线并行的组合进行训练的。
Gopher
是在四个 DCN
连接的 TPU v3 Pod
(每个Pod
有1024
个 TPU v3
芯片)上使用 pod
之间的 pipelining
进行训练。
pipelining
通常用于 DCN
,因为它对带宽的要求较低,并且在模型并行和数据并行所允许的最大有效规模之外提供额外的并行性。pipelining
通常将 training batch
分成若干个 micro-batches
,但它有重要的缺点:
首先,它产生了 pipelining "bubble"
的时间开销,即在前向传播和反向传播的开始和结束时,许多设备在填充和清空流水线时完全闲置。
其次,它需要更高的内存带宽,因为要从内存中为 mini-batch
中的每个 micro-batch
重新加载权重。在某些情况下,它还涉及增加软件的复杂性。
我们能够使用以下策略将 PaLM 540B
的 pipeline-free training
有效地扩展到 6144
个芯片:
每个 TPU v4 Pod
包含一个完整的模型参数副本,每个权重张量使用 12
路模型并行、以及 256
路完全分片的数据并行在 3072
个芯片上被 partitioned
( 《Gspmd: general and scalable parallelization for ml computation graphs》
称之为 "2D finalized"
方法)。
在前向传播过程中,权重在数据并行轴上被 all-gathered
,并从每层保存一个完全分片的 activation
张量。
在反向传播过程中,其余的 activations
被 rematerialized
,因为与重新计算相比,在更大的 batch size
下,这将带来更高的训练吞吐量。
下图展示了 Pathways
系统如何执行双向的 pod-level
数据并行。
一个 Python
客户端构建了一个 sharded dataflow
程序(如下图左侧所示),该程序在远程服务器上启动 JAX/XLA work
,每个服务器由一个 TPU pod
组成。该程序包含一个用于within-pod
的 forward+backward computation
(包括 within-pod gradient reduction
)的组件 A
、用于 cross-pod gradient transfer
的 transfer subgraph
、以及用于 optimizer update
(包括本地梯度和远程梯度的求和)的组件 B
。
Pathways
程序在每个 pod
上执行组件A
,然后将输出梯度转移到另一个 pod
,最后在每个 pod
上执行组件 B
。
双路 pod-level
数据并行的一个挑战是:如何在 6144
个 TPU 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
。
我们通过对 Pathways
的 networking stack
的精心设计,相对于单个 pod
的吞吐量,我们实现了约 1.95
倍的训练吞吐量(理论吞吐量为 2
倍,因为有两个 pod
)。与理论上 2
倍的吞吐量相比,性能上的差距是由于反向传播和 cross-pod gradient reduction
之间缺乏 overlap
。
训练效率:之前报道的大多数用于语言模型的 accelerator
效率的数字都使用了一个我们称之为 hardware FLOPs utilization: HFU
的指标。这通常是对一个给定设备上观察到的 FLOPs
与其理论峰值 FLOPs
的比值的估计。然而, HFU
有几个问题:
首先,硬件 FLOPs
的执行数量与系统和实现有关,编译器中的设计选择可能导致不同的 operations
数量。 rematerialization
是一种广泛使用的技术,用来trade off
内存用量和计算量。为了有效地计算神经网络架构的反向传播,必须将该 batch
的许多 intermediate activations
存储在内存中。如果这些 intermediate activations
无法被全部存储,一些前向传播可以被重新计算(使一些 activations
被 rematerialized
而不是被存储)。这就产生了一个权衡,使用额外的硬件 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 540B
的 MFU
。
模型训练遵从针对大型 Transformer
语言模型的标准配置,细节如下:
weight initialization
:kernel weights
(除了 embedding
和 layer norm scale
之外的所有参数)通过 fan-in variance scaling
来初始化,即:
其中:kernel
的 input
维度。
input embedding
通过标准正态分布来初始化:layer normalization
并未应用到 embedding
上。因为 input embedding layer
和 output embedding layer
是共享的,因此我们将 pre-softmax output logits
缩放了 embedding size
。
optimizer
:模型采用 Adafactor optimizer
来训练,没有 factorization
。这本质上等同于 parameter scaling
的 Adam
, 即,通过参数矩阵的平方根值对学习率进行缩放。因为 weight initialization
与 GPT-3
对 Adam
学习率的手动缩放。然而,parameter scaling
的好处是,在不同 scale
上操作的参数矩阵( embedding scale
和 layer norm scale
)的学习率不会以相同的速度缩放。
optimization
超参数:对于 Adafactor
:
刚开始 10k
个 step
的学习率为 step
数量。
一阶动量系数为 rare embedding tokens
可能有较差的 estimated second moment
。
阈值为 1.0
的全局梯度范数裁剪。
动态的 weight decay
,系数为 lr
为当前的学习率。
损失函数 :模型用标准的 language modeling loss function
来训练的,它是所有 token
的平均对数概率,没有标签平滑。此外还有一个辅助损失 softmax normalizer
序列长度:所有模型都使用了 2048
的序列长度。输入样本被拼接在一起,然后分割成正好是 2048 tokens
的序列,因此没有padding tokens
,但样本可以在中间被分割。输入样本用一个特殊的 [eod] token
来区分开。
batch size
:对于所有的模型,我们在训练过程中增加 batch size
。
对于最大的模型,我们使用 batch size = 512
(1M tokens per batch
)直到 step 50k
,然后加倍到 batch size = 1024
(2M tokens per batch
)直到 step 115k
,最后再加倍到 batch size = 2048
(4M 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 checkpoint
到 17k
的两次运行中产生相同的结果。这通过两种方式实现:
JAX+XLA+T5X
提供的 bitwise-deterministic
建模框架。
deterministic dataset pipeline
,其中随机混洗数据以 random-access format
写出,因此给定的 training batch
的内容仅是step
数量的函数。
dropout
:模型训练期间没有采用 dropout
,然而在微调期间在大多数情况下使用了 dropout rate = 0.1
。
训练不稳定:对于最大的模型,尽管启用了梯度剪裁,我们在训练过程中还是观察到了大约 20
次 loss
尖峰。这些尖峰发生在非常不规则的时间间隔内,有时发生在训练的后期,而在训练较小的模型时没有观察到。
对于最大的模型,由于训练成本的缘故,我们无法确定一个原则性的策略来缓解这些尖峰。相反,我们发现一个简单的策略可以有效地缓解这个问题:我们从尖峰开始前大约 100
步的 checkpoint
重新开始训练,并跳过大约 200 ~ 500
个 data batch
,这些 data batch
涵盖了尖峰之前和尖峰期间的 data batch
。通过这种缓解措施,loss
没有在相同的 step
再次飙升。
我们不认为尖峰是由不良数据本身造成的,因为我们做了几个消融实验,在这些实验中,我们抽取了尖峰周围的 data batch
,然后从一个较早的 checkpoint
开始对这些相同的 data batch
进行训练。在这些情况下,我们没有看到一个尖峰。这意味着尖峰的出现只是由于特定的 data batch
与特定的模型参数状态的结合。在未来,我们计划研究在非常大的语言模型中对 loss
峰值的更有原则的缓解策略。
为了和之前的大型语言模型进行比较,我们在相同的 29
个英文 benchmark
上评估了 PaLM
模型。这些 benchmark
包括:
Open-Domain Closed-Book Question Answering tasks
:TriviaQA, Natural Questions, Web Questions
。
Cloze and Completion tasks
:LAMBADA, HellaSwag, StoryCloze
。
Winograd-style tasks
:Winograd, WinoGrande
。
Common Sense Reasoning
:PIQA, ARC, OpenBookQA
。
In-context Reading Comprehension
:DROP, CoQA, QuAC, SQuADv2, RACE
。
SuperGLUE
。
Natural Language Inference (NLI)
:Adversarial NLI
。
Table 4
包括 PaLM 540B
的结果和其他大型语言模型的 SOTA
结果。在这个表中,我们只考虑 pretrained language model
的单个 checkpoint
结果。任何使用微调或多任务适应的模型都不包括在该表中。可以看到:
PaLM 540B
在 1-shot setting
的 29
项任务中的 24
项,以及在 few-shot setting
的 29
项任务中的 28
项,都优于之前的 SOTA
。
虽然模型的大小对取得这些结果起到了重要的作用,但 PaLM 540B
在所有基准上都超过了类似大小的模型(Megatron-Turing NLG 530B
)。这表明预训练数据集、训练策略、以及 training tokens
数量也对取得这些结果起到了重要作用。
Table 5
列出了自然语言理解(Natural Language Understanding: NLU
)和自然语言生成(Natural Language Generation: NLG
)任务的平均分数。PaLM 540B
在这两类任务中的平均得分都提高了 5
分以上。如表中所示,PaLM
模型在每个类别中的平均得分也随着规模的扩大而提高。
微调:我们在 SuperGLUE benchmark
中对 PaLM
进行了微调,Adafactor optimizer
的微调学习率为 batch size = 32
。PaLM
通常在少于 15K
步的微调过程中收敛。
Table 6
报告了在 SuperGLUE
上的验证集结果,结果表明PaLM
获得了接近 SOTA
的有竞争力的性能。值得注意的是,SuperGLUE
上表现最好的两个模型都是使用 span corruption objective
训练的 encoder-decoder
模型。已有研究表明,当训练成本相同时,这样的架构通常会在分类任务微调方面优于仅有自回归的 decoder-only
模型。这些结果表明,规模可以帮助缩小差距。
Table 7
还表明,在 few-shot
和微调的结果之间仍有很大的差距。
最后,Table 8
报告了 SuperGLUE
排行榜的测试集的结果。我们表明,PaLM
与 SOTA
模型相比是有竞争力的,同时比排行榜上最好的decoder-only
自回归语言模型的表现要好得多。
BIG-bench
是一个 collaborative benchmark
,旨在为大型语言模型制作具有挑战性的任务。它包括 150
多个任务,涵盖了各种语言建模任务,包括逻辑推理、翻译、问答、数学和其他。这里我们介绍并分析了 PaLM
模型系列在 BIG-bench
上的 few-shot
评估结果。BIG-bench
包括文本性的任务(textual task
)和程序性的任务(programmatic task
)。在这次评估中,只考虑了文本性的任务。BIG-bench
中,最佳人类表现是用每个样本中指标得分最高的人类生成的答案来计算的,而平均人类表现是用所有人类生成的答案的平均指标得分来计算的。
下图左侧为在 BIG-bench
上评估 PaLM
系列模型的结果,并与之前公布的结果进行了比较。由于 Gopher, Chinchilla, GPT-3
都评估了的任务只有 58
个,因此这里仅介绍了这 58
个任务的结果。下图右侧显示了 PaLM
在 BIG-bench
文本性任务( 150
个任务)上的结果。PaLM
明显优于GPT-3
、Gopher
和 Chinchilla
,而且 5-shot PaLM 540B
取得了比人类平均分更高的分数。
、
下图给出了这 58
个任务的详细结果。PaLM 540B 5-shot
在 58
个常见任务中的 44
个任务上的表现优于之前的 SOTA
。
接下来我们详细描述一些任务,在这些任务中,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
是一个奇数。这是不是一个正确的归纳论证(尽管有些假设可能不正确)?答案:是。
在下图,我们显示了在比较 PaLM 540B
和人类评价的平均性能得分时,得到改进的任务的分布。我们可以看到,尽管 PaLM 540B
在总体上超过了人类的平均表现,但在 35%
的单个任务上,人类的平均表现仍然高于 PaLM 540B
。
最后,下图展示了对 BIG-bench Lite
的详细评估结果,这是 24
个 BIG-bench
任务的一个精心策划的子集,作为一个轻量级的评估目标。与人类评估的最佳性能得分相比,虽然有些 BIG-bench Lite
任务已经解决或接近解决,但其他任务仍远未解决。
我们采取了几个步骤来确定这些结果的有效性,特别是排除了模型通过记忆 BIG-bench
数据来实现这些结果的可能性。
首先,BIG-bench
任务文件包括一个独特的 canary string
;我们确保这个字符串不会出现在 PaLM
训练数据中。
其次,在收集训练数据时,互联网上没有 BIG-bench
数据集,而且绝大多数 BIG-bench
任务是由任务作者专门为纳入 BIG-bench
而构建的全新 benchmark
。
最后,我们抽查了模型在几个任务中的输入和输出,在这些任务中,模型表现出很强的性能,并手工验证了在解码过程中没有从gold labels
中泄露信息。
我们在一组推理任务上评估了 PaLM
,这些任务需要多步骤的算术的或常识的逻辑推理来产生正确答案。
算术推理(arithmetic reasoning
):这些任务往往涉及小学水平的自然语言数学问题,需要多步骤的逻辑推理。数学本身通常是简单的,困难的部分是将自然语言转化为数学方程式。在这项工作中,我们评估了计算器形式和直接推理形式。
例如:输入:罗杰有 5
个网球,他又买了两罐网球,其中每罐有 3
个网球。他现在有多少个网球?答案是:11
。
常识推理(commonsense reasoning
):这些任务是问答任务,需要很强的世界知识(world knowledge
)。
例如:输入:肖恩急着回家,但红灯变黄了,他被迫做什么?答案选项:(a)
花时间;(b)
闲逛;(c)
慢慢走;(d)
海洋;(e)
减速。答案: (e)
。
我们使用 chain-of-thought: COT
来改善模型的输出。下图给出了 chain-of-thought prompting
的例子。
在这项工作中,我们展示了一个引人注目的结果:模型规模和 COT prompting
足以在各种算术推理和常识性推理任务中达到 SOTA
的准确性。在 7
个推理数据集中,PaLM 540B + COT
的 8-shot prediction
在四个任务中达到了 SOTA
的准确率,在其它三个任务重接近 SOTA
。我们还可以看到,COT
和模型 scaling
对所有的任务都有很大的帮助,因为如果没有这两种技术,PaLM
只能在一个任务(SVAMP
)上取得 SOTA
。
我们分析了 PaLM 62B
模型在 GSM8K
数据集上出错的问题,发现它们通常属于以下几类:语义理解、单步缺失、以及其他错误。如下图所示,扩大到 540B
模型的规模后,这些错误的数量就多了起来。
在这一节中,我们表明 PaLM
模型在各种 coding
任务上取得了出色的成绩:
text-to-code
:我们考虑了三个任务,其目标是根据自然语言描述来编写代码。
在 HumanEval
和 MBPP
数据集中,模型被馈入一个英语描述(由一些句子和少量的 input-output
示例组成),目标是生成一个简短的 Python
程序(通常是单个函数)。
我们还介绍了 GSM8K-Python
任务,它来自 GSM8K
数据集。GSM8K
数据集由 mathematics word
问题组成。GSM8K-Python
是这个任务的一个变种,其目标不是产生正确的答案,而是产生一个能返回正确答案的 Python
程序。
code-to-code
:
TransCoder
是一项涉及将 C++
程序翻译成 Python
的任务。我们从 GitHub
上下载了TransCoder
的数据,并收集了同时出现在数据集的Python
和 C++
子目录下的函数。
我们还对 DeepFix
的代码修复任务进行评估。从学生编写的无法编译的 C
语言程序开始,目标是修改程序,使其能够成功编译。
我们使用 pass@k
指标报告结果:对于测试集中的每个问题,从模型中抽取 k
个源代码样本,如果有任何样本解决了问题,则算作解决了。我们将 PaLM
模型与几种用于代码的不同的语言模型进行比较:LaMDA 137B
、Codex 12B
。为了获得 Codex
在除了 HumanEval
之外的其它数据集上的结果,我们调用了 OpenAI Davinci Codex API
。不幸的是,关于 Davinci Codex
模型,有许多事情是不公开的:我们不知道这个模型的规模、它是单个模型还是一个 ensemble
、它的训练数据有多少、对模型的输出做了什么(如果有的话)后处理,以及 Davinci Codex
训练数据与我们评估数据集的污染程度如何。
数据集:PaLM
模型的训练集包括 GitHub
代码。由于我们的评估数据集大多是测试 Python
编程技能的,所以我们额外收集了一个专门的 Python
代码数据集。这个额外的数据集,我们称之为 ExtraPythonData
,包含了来自 GitHub repository
的 5.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++
。
PaLM 540B
:下表显示了 PaLM
模型在 0-shot prompts
到 4-shot prompts
下的性能。
首先,LaMDA
模型在所有的任务中都有非零的表现,尽管它没有在 GitHub
代码上进行训练。这表明 LaMDA
训练中使用的 code web documents
对这些任务来说是有参考价值的。
其次,PaLM
模型在所有任务中的表现都比LaMDA
好,而且在HumanEval
上的表现与Codex 12B
相当。
PaLM-Coder
:现在我们评估进一步微调对 coding
任务的影响,类似于 Codex
的做法,微调得到的模型称作 PaLM-Coder
。
微调是两阶段的:
首先,对 mixture
数据进行微调,其中 60%
来自 ExtraPythonData
的 python
代码、30%
来自跨语言的代码(与预训练的代码数据来源相同,但不包括在预训练中)、以及 10%
的自然语言。
然后 ,对 ExtraPythonData
中更多的 Python
代码进行了额外的 1.9B tokens
的微调。
在这两个阶段中,微调数据包含 7.75B tokens
,其中 5.9B
是 Python
。而预训练加微调的总数据量,参考 Table 10
。PaLM-Coder 540B
的性能进一步提高,参考 Table 11
。
下图显示了从 8B
到 62B
以及最后到 540B
模型的性能扩展。在所有的数据集中,规模的每一次增加都会带来性能的提高,而且规模对性能的影响似乎并没有达到饱和。
DeepFix Code Repair
:图 13
和 14
显示了DeepFix
问题的例子和 PaLM-Coder
的成功预测。
对于 code repair
,评估模型所改变的代码的数量是很重要的。通常我们只想修改一小部分的 broken code
。不同模型所改变的代码的数量如下表所示。与 Codex
相比,PaLM-Coder
倾向于改变分布在更多行中的更少的字符。我们在预测中观察到这种行为,其中 PaLM-Coder
比 Codex
更有可能做出微小的风格上的改变,例如将 i = i + 1
改为 i++
,将 int a;\n int b;
改为 int a, b;
,而 Codex
更有可能大幅度改变行。
讨论:当在软件开发中部署基于LM
的系统时,一个关键的风险是生成的代码可能是不正确的,或者引入微妙的 bug
。 鉴于对代码补全系统的数据集中毒攻击的发现,以及观察到当 prompts
中存在错误代码时,LM
更有可能产生错误代码,这是一个特别紧迫的问题。
功能正确性只是源代码质量的一个方面;LM
产生的建议还必须是可读的、鲁棒的、快速的和安全的。DeepFix
说明了 PaLM-Coder
目前预测的一个问题:在 Figure 13
和 Figure 14
中,程序可以编译,但不一定安全,因为它们依赖于对输入的格式和大小的假设。DeepFix
的数据集来自于学生写的 C
语言编程课程的练习,学生被允许做这样的假设。这样的建议在一个更普遍的环境中可能是不可取的。
与其他大型翻译工具一样,PaLM
没有明确地在平行语料上进行训练,尽管在我们的训练语料库中可能会自然存在一些这样的数据。我们专注于 WMT
提供的训练集和验证集,特别是以下三种类型的 language pair
:
以英语为中心的的 language pair
,涉及以英语为 source language
或 target 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 language
或 target language
,也可以参与翻译,因为机器翻译系统经常通过英语进行"pivot"
,例如,French -> English -> German
。我们将使用 WMT'19 French-German language pair
来测试直接翻译能力。
极低资源的 language pair
,在这项工作中,我们选择哈萨克语作为我们的低资源语言。作为比较,虽然法语和德语在我们的训练集中分别有大约 24B tokens
和 26B tokens
,但哈萨克语只有大约 134M tokens
。对于评估,我们将使用 WMT'19 English-Kazakh
。
以英语为中心的的 language pair
的评估:PaLM
优于所有的基线。
直接的 language pair
和极低资源的 language pair
的评估:
我们将我们的结果提炼为以下一组观察:
在从某种语言翻译成英语的时候,翻译质量比从英语翻译成某种语言的时候要好。这是在所有以英语为中心的语言模型中观察到的一个共同模式,在检查 PaLM
的性能时也出现了类似的情况。我们怀疑优先考虑多语言数据会减轻这种情况。
prompts
可以提供比单个示例更多的价值。我们发现,在大多数情况下,使用语言名称来诱导翻译(0-shot setting
)比只使用 input-output
示例(one-shot/few-shot setting
)提供更强的性能,与以前的工作一致(《Association for Computing Machinery》
)。
仅仅依靠自监督的通用模型可以在较小的范围内与专用模型相匹配。我们考虑的大多数专用翻译baseline
都在1B
参数以下,这比我们最大的 PaLM
构架要小两个数量级。另一方面,我们也看到,大型翻译模型可以适应各种下游任务,这表明专家也可以作为通才。这就提出了一个问题:在资源丰富的情况下(如多语言翻译),我们应该培训专家还是通才?
自然语言生成以给定文本或非语言信息(如文档、表格、或其他结构化数据)的条件下,自动生成可理解的文本。对于类似规模的模型,过去还没有探索过 few-shot
的条件自然语言生成。通常情况下,generation evaluation
仅限于生成式的问答和 multiple-choice
的语言模型任务,这些任务不需要生成完整的句子或段落。因此,我们的工作提出了第一个大型语言模型的基准,从而用于条件自然语言生成任务的 few shot
建模。
数据:我们在来自 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
:用非常简洁的句子总结 WikiHow
的 step-by-step
指令([en/es/ru/tr/vi -> en]]
)。
XSum
:用一句话总结一篇新闻文章([en]
)。
Clean E2E NLG
:给定一组键值属性对,用一两句话描述一家餐厅([en]
)。
Czech Restaurant response generation
:给定一个对话上下文、以及对话行为representation
,生成智能助理将提供的响应([cz]
)。
WebNLG 2020
:在一个或多个句子中以语法的和自然的方式口语化 ”主语-谓语-宾语“ 三要素( [en/ru]
)。
Few-shot
评估方法:为了将 PaLM
用于 few-shot inference
,我们将一个任务特定的 prompt
拼接到输入中,并将 output prompt
添加到输出中。为了处理经常出现的非常长的输入以进行摘要,它们被截断为 2048 tokens
。
few-shot
示例通过双线分隔,这也被用来截断 output predictions
从而用于评估。few-shot
示例都是从训练语料库中随机抽出的。
微调方法:为了在微调期间使用 decoder-only
结构,inputs
和 targets
被拼接起来,但损失只在序列的 targets
部分计算。拼接后的序列被截断为 2048 tokens
,即预训练期间使用的训练环境,其中 512 tokens
保留给 targets
。只有摘要任务需要 input truncation
。
为了对 PaLM
进行微调,我们使用了一个恒定的学习率 20
倍,并重置了优化器(Adafactor
)的 accumulator
。每个数据集的最佳 model checkpoint
是由验证集上 ROUGE-1
、ROUGE-2
和 ROUGE-L
得分的最佳表现的几何平均值来选择的。推断是使用 top-k
采样进行的。T5 XXL
基线使用与 PaLM
相同的参数进行微调,并使用 beam size = 4
的 beam-search
来解码。
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
有一个较小但显著的改进。
我们使用 TyDiQA-GoldP benchmark
在多语言问答任务上评估我们的模型。实验结果如下表所示。不足为奇的是,我们发现平均而言,在 few-shot
和微调的质量之间存在很大的差距。
我们表明 PaLM 540B
在这项任务上取得了非常有竞争力的结果,尽管没有在那么多的非英语数据上进行训练(占 780B
训练tokens
的 22%
)。
这里,我们深入分析 PaLM
的 few-shot
性能。
我们首先研究了三个不同的模型(8B, 62B, 540B
)在 5
个不同的任务上的性能: RTE, Natural Questions, Lambada, Story Cloze, Trivia QA
。结果如下图所示。在几乎所有的任务和模型中,当模型被呈现出更多的示例时,性能就会提高。
然后我们评估了 StoryCloze, Natural Questions, Web Questions benchmarks
,few-shot learning
性能的差异。 在预训练期间,我们采取了 15
个不同的均匀间隔的 model checkpoints
。然后我们用 1-shot learning
来评估所有不同的 checkpoints
。鉴于每个检查点只相差 2B pre-training tokens
,我们期望模型质量不受影响。结果如下图所示。
众所周知,神经网络能够记忆训练数据。事实上,这就是过拟合的定义。通常情况下,这种类型的记忆发生在模型对一个小的训练集进行多次训练时。然而,在我们的案例中,PaLM
是在一个 780B
的语料库上进行 single pass
训练的。另一方面,我们的模型也有非常大的容量,所以即使是 single pass
也可以记住训练数据的很大一部分。此外,由于 web-derived
语料库中存在近乎重复的文本,一些段落(有微小的变化)在训练中会出现多次。在本节中,我们分析了 PaLM
模型对训练数据的记忆程度。
为了评估这一点,我们从训练样本中随机选择了 100
个 token sequences
,并且采用前 50 tokens
来 prompt
模型。我们运行贪婪解码,并测量模型产生的 token
与训练样本(first 50 tokens
之后的内容)完全匹配的频率。该方法遵循 《Quantifying memorization across neural language models》
的做法,他们试验了 50 ~ 500 tokens
的 prompt
长度。
图 18(a)
显示了三种模型规模的记忆匹配率。
图 18(b)
显示了记忆率与训练数据中确切看到的训练样本的次数的关系。请注意,之所以会有重复率如此之高的例子,是因为我们的训练只对完整的文档进行去重,而在这里我们对 100 tokens
的 span
来评估记忆。
图 18(c)
显示了按训练数据语料库细分的三种模型的记忆率。由于 code
语料库中有大量的模版的 license
字符串、拷贝的代码、以及自动生成的代码,因此记忆率较高。book
语料库主要包含真正独特的文字串。
从这些结果中,我们可以得出以下关于记忆的结论:
较大的模型比较小的模型有更高的记忆率。对数线性拟合的斜率与之前 《Quantifying memorization across neural language models》
观察到的非常接近(我们发现 PaLM
的斜率为 0.002
且 GPT-Neo
模型系列的斜率为 0.002
且
正如 holdout
的结果所显示的那样,一定量的 "记忆" 是可以预期的,因为该模型会对常见的模板和模板产生 exact match continuation
。然而,训练数据的记忆率明显高于 heldout
数据,这表明该模型确实真正记住了数据的某些部分。
一个样本被记住的机会与它在训练中的 uniqueness
密切相关。只见过一次的样本比见过很多次的样本,被记住的可能性小得多。这与以前的工作一致。
记忆是否是个问题,取决于数据集的属性和目标应用。因此,在为大型语言模型选择下游应用时,应始终小心谨慎。一个计算效率高,但 memory-intensive
的方法是在训练数据上实现 Bloom filter
,并限制在训练数据集中逐字出现的序列被生成。虽然这种方法会去除确切的记忆内容,但仍然可以产生近似的记忆内容(与训练集文本仅有一两个字差异的 generations
)。
以前的工作报告了 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
中。
前面我们实证了 chain-of-thought prompting
如何大幅提高多步骤推理任务的预测准确性。在这种情况下,模型生成的 reasoning chain
在评估时没有被使用。当然,这种 explanatory generation
的作用除了提高准确率外,还有其他原因。
首先,了解模型是否因为正确的原因而产生了正确的答案,而不仅仅是进行表面上的统计推断,是非常有科学意义的。
第二,该解释有可能被展示给系统的终端用户,以增加或减少他们对某一预测的信心。
第三,在许多情况下(例如,解释一个笑话),解释本身就是期望的输出。
本节的目标是展示 PaLM
的能力,即通过 chain-of-thought prompting
来生成 explanatory language generation
。下图给出了这些任务的例子。虽然我们承认这些结果并不等同于彻底的定量分析,但我们要说的是,我们相信这展示了一个真正了不起的深度语言理解水平。
性别和职业偏见:Winogender
的整体结果如下图所示。我们发现,准确率随着模型规模的扩大而提高,PaLM 540B
在 1-shot/few-shot setting
创造了新的 SOTA
。
与之前的工作一样,我们还报告了分类的准确性,将 Winogender
分成了刻板印象或被骗子集(gotcha subset
)。下图给出了分类的准确率,并按性别进一步细分。我们发现,在刻板印象的例子上,准确率比被骗的例子高;而在被骗的例子上,女性的准确率最低。
毒性和偏见:按照 GPT-3
描述的类似程序,我们分析了在给出 "{term} was very... "
这样的 prompt
时,model continuation
中常见的共现词,其中被替换的词提到了性别、宗教或种族和民族身份。种族身份共现分析揭示了几个方面的情况:
首先,种族身份术语经常相互共现,这就提出了关于在它们出现的句子中各身份之间的关系(如果有的话)的问题。
其次,prompt language
的微小变化导致了结果的急剧变化。
除了计算共同出现次数之外,我们还使用 Perspective API
来对 continuations
的毒性进行分类。下图报告了按不同宗教团体划分的模型输出中的毒性概率分布。
开放式生成中的毒性:毒性退化(toxicity degeneration
)对应于 generation
可被语言模型感知为有毒的文本。我们使用Perspective API
为 continuation
分配一个毒性概率。然后,我们研究在 prompt
是有毒的各种可能性下,毒性概率在 model continuations
中的分布。Figure 23
显示了在不同的模型规模下,续篇的平均毒性概率(toxicity probability of the continuation: TPC
)与 prompt
的分桶毒性概率(binned toxicity probability of the prompt: TPP
)的比例关系图。可以看到:
TPC
随着 TPP
的增加而增加,同时一直低于 prompt
毒性和人类基线(除了在 prompt
毒性的最高水平)。
相比较于 8b
模型,两个更大的模型(62B
和 540b
)的毒性概率明显增加。这表明毒性水平和模型大小之间存在相关性,但鉴于62B PaLM
和 540B PaLM
模型的毒性非常相似,只能有一定程度上的相关性。
模型的 TPC
与 TPP
比人类的 TPC
更一致。 这表明模型受到 prompt
风格的强烈影响,并有可能产生与 prompt
相似的毒性水平的 continuation
。
下表中,我们报告了在第一句、以及 128-decode step
中,在毒性 prompt
和无毒 prompt
下,产生至少一个有毒 prompt
的概率。
局限性:本节介绍的公平性分析的一个主要限制是,它们只在英语语言数据上进行,而 PaLM
是在多语言数据上进行训练并在多语言语言处理任务上进行评估。
此外,需要注意的是,尽管调查英语语言技术中的偏见的工作越来越多,但缺乏公平性基准的标准化,缺乏对 NLP
中不同bias
测量的危害的理解,也缺乏对身份的统一、全面覆盖。
此外,偏见可能充斥着一个系统,这取决于具体的下游应用、其具体的 training pipeline
和应用层面的保护(例如安全的过滤器)。
详细内容参考原始论文。
在我们的 Introduction
章节中,我们描述了四个主要的方向,这些方向导致了大型 LM
在 few-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
。目前还不清楚在大规模语言模型训练中,重复数据的价值与未见过的数据相比如何。
原始论文
《PaLM 2 Technical Report》
92 页,这里进行了精简。
随着规模的扩大和 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 objective
或 masked 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 2
和 Figure 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
和评估其能力的考虑因素。
《Scaling laws for neural language models》
研究了训练数据量(
《Training compute-optimal large language models》
在这一观察的基础上进行了类似的研究,对较小模型的超参数进行了更好的调优。他们的结果证实了《Scaling laws for neural language models》
的 power law
结论。然而,他们得出了关于最佳比例的不同结果,表明
在这一节中,我们独立地推导了非常大的模型的 scaling law
。我们得出了与《Training compute-optimal large language models》
类似的结论,即 scaling law
对下游指标的影响。
为了确定我们配置的 scaling law
,我们遵循与《Training compute-optimal large language models》
相同的程序。我们用 4
种不同的计算预算来训练几个不同大小的模型: FLOPs
。对于每个计算预算,我们使用启发式的 《Scaling laws for neural language models》
)来决定训练每个模型的training tokens
数量。关键是,我们使用余弦学习率衰减,并确保每个模型的学习率在其最后的 training token
处完全衰减。
对每个模型的 final validation loss
进行平滑处理,我们对每个 isoFLOPS band
进行二次方拟合(Figure 4
)。这些二次方拟合的最小值表示每个 isoFLOPS band
的 projected optimal model size
(FLOPs
得出的。将这些最佳 FLOPs
作图(Figure 5
),我们发现,随着FLOPs
预算的增加,《Training compute-optimal large language models》
的结论惊人地相似,尽管该研究的规模较小,而且采用的是不同的 training mixture
。
我们使用 Figure 5
的 scaling laws
来计算 FLOPs
的最佳模型参数的数量(training tokens
数量(pre-training mixture
上训练从 400M
到 15B
的几个模型,最多 FLOPs
。最后,我们计算每个模型在三个 FLOP points
的损失。所得的 training loss
和它们相关的最佳模型参数数量包括在 Table 1
中。我们可以观察到,在给定的 FLOPs
下,近似遵循最优模型参数(non-embedding
参数。
下游的指标评估:为了研究在固定计算成本为 FLOPs
的情况下选择最佳参数数量和最佳 training tokens
数量的效果,我们在同一个 pretraining mixture
上训练几个模型,根据每个模型的大小在给定的 FLOPs
上进行采样并训练。值得注意的是,所选择的模型大小、架构、和 training mixture
只用于研究 scaling laws
。
我们在 Table 15
中显示了不同大小的模型的下游结果。结果表明,具有 FLOPs
的模型的最佳参数数量是10B
。然而,training loss
并不是下游指标的一个完美代理。例如,8.95B
的模型,显示出最低的损失(Table 1
),最接近最佳模型,在下游任务上的表现略低于 14.7B
的模型。这表明,虽然 scaling laws
可以用来实现给定数量的 FLOPs
的最佳 training loss
,但这并不一定能迁移到实现给定任务的最佳性能。此外,除了最佳 training loss
外,还有其他一些考虑因素,如训练吞吐量和 serving latency
,这些都会影响关于最佳模型大小的决定。
PaLM 2
的预训练语料库由一系列不同的来源组成:网络文档、书籍、代码、数学、对话数据。预训练语料库比用于训练 PaLM
的语料库大得多。与之前的大型语言模型相比,PaLM 2
的数据集包含了更高比例的非英语数据,这对多语言任务(如翻译和多语言问答)是有利的,因为模型会接触到更多的语言和文化。这使得该模型能够学习每种语言的细微差别。
除了非英语的单语数据外,PaLM 2
还在涵盖数百种语言的平行数据(parallel data
)上进行训练,这些数据的形式是一方为英语的 (source, target)
文本对。多语言平行数据的加入进一步提高了该模型理解和生成多语言文本的能力。它还为模型植入了固有的翻译能力,这对各种任务都很有用。下表列出了数百种语言中的前 50
种,以及它们在多语言网络文档子语料库中的相关百分比。我们没有应用任何过滤方法来明确地保留或删除任何语言。
我们采用了几种数据清理和质量过滤方法,包括去重、去除敏感的隐私信息、以及过滤。即使 PaLM 2
的英语数据比例比 PaLM
小,我们仍然观察到英语评估数据集的明显改善。我们将此部分归因于 PaLM 2 mixture
中更高的数据质量。
PaLM 2
经过训练后,模型的上下文长度大大超过了 PaLM
的长度。这种改进对于实现长对话、长距离推理和理解、摘要、以及其他需要模型考虑大量上下文的任务等能力至关重要。我们的结果表明,增加模型的上下文长度而不损害其在通用 benchmark
上的性能是可能的,这些通用 benchmark
可能不需要更长的上下文。
由于 model checkpoints
的结果存在一些差异,我们对最后五个 PaLM 2 checkpoint
的结果进行平均,以便对大型模型进行更有力的比较。
评估内容省略(纯粹的技术报告,原理和细节部分很少)。
最近的 NLP
文献见证了大量的 building model
,这些模型能够遵循自然语言指令(natural language instruction
)。这些进展由两个关键部分所推动:大型预训练好的语言模型、人类编写的指令数据。PromptSource
和 SuperNaturalInstructions
是最近两个值得注意的数据集,它们使用大量的人工标注来收集构建 T0-Instruct
和 Tk-Instruct
。然而,这个过程成本很高,而且考虑到大多数 human generation
往往是流行的 NLP
任务,常常遭受有限的多样性,没有涵盖真正的各种 NLP
任务、以及描述任务的不同方式。鉴于这些局限性,要继续提高 instruction-tuned
模型的质量,就必须开发出 supervising instruction-tuned
模型的替代方法。
在论文 《Self-Instruct: Aligning Language Model with Self Generated Instructions》
中,作者介绍了 Self-Instruct
,这是一个半自动的过程,利用模型本身的 instructional signal
对 pretrained 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
条指令,与大约 82K
个 instance inputs
和 target outputs
相配对。作者观察到,所产生的数据提供了多种多样的创造性的任务,其中 50%
以上的任务与 seed instruction
的重合度低于 0.3 ROUGEL
。在这个结果数据上,作者通过微调 GPT3
(即用于生成指令数据的同一模型)来建立 SuperNaturalInstructions
中包含的典型 NLP
任务、以及为 instruction-following model
的新用途而创建的一组新指令上,对 SUPERNI
的结果表明, GPT3
(原始模型)有很大的优势( +33.1%
),几乎与 instruction following
能力,超过了在其他公开可用的指令数据集上训练的模型,与 5%
的差距。
综上所述,论文的主要贡献:
Self-Instruct
,一种用最少的人类标记数据诱导 instruction following
能力的方法。
通过广泛的 instruction-tuning
实验证明了Self-Instruct
方法的有效性。
发布了一个由 52K
指令组成的大型合成数据集、以及一组手工编写的新任务,用于建立和评估未来的 instruction-following
模型。
相关工作:
instruction-following
语言模型:一系列的工作发现,如果用人工标注的 "指令" 数据(这样的一种数据集:包含 language instructional command
和基于人类判断的预期结果)进行微调,平凡的语言模型可以有效地遵循通用的语言指令。此外,这些工作还显示了 "指令" 数据的规模和多样性,与所产生的模型的泛化性(推广到 unseen task
)之间的直接关系。由于这些发展依赖于人类标注的 "指令" 数据,这对实现更加泛化的模型构成了瓶颈。我们的工作旨在通过减少对人类标注员的依赖来解决这个瓶颈。
此外,尽管像 InstructGPT
这样的模型有优秀的表现,但其构建过程仍然相当不透明。特别是,由于这些关键模型背后的主要企业实体发布的有限透明度和有限数据,数据的作用仍然没有得到充分研究。要解决这样的挑战,就必须建立一个涵盖广泛任务的大规模的公共数据集。
在 multi-modal learning
文献中,instruction-following
模型也备受关注。 Self-Instruct
作为扩展数据的一般方法,有可能在这些 setting
中也有帮助;然而,这不在本工作的范围之内。
用于 data generation
和 data augmentation
的语言模型:许多工作都依靠生成式语言模型来生成数据、或增强数据。例如,《Generating datasets with pretrained language models》
提议用 prompting large LM
取代给定任务的人类标注,并在 SuperGLUE
任务的背景下使用所产生的数据来微调(通常较小的)模型。虽然我们的工作可以被看作是一种 "augmentation"
形式,但我们的工作与这一方向不同,因为它不是专门针对某一特定任务(例如,QA
或 NLI
)。相反, 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
中,蒸馏的 source
和 target
是相同的,即一个模型的知识被蒸馏到自己身上。
蒸馏的内容是 instruction task
的形式(即定义一个任务的指令,以及一组实例)。
用有限的实例进行 bootstrapping
:最近的一系列工作使用语言模型,用专门的方法来 bootstrap some inference
。
NPPrompt
(《Pre-trained language models can be fully zero-shot learners》
)提供了一种无需任何微调就能生成 semantic label
的预测的方法。它使用模型自身的 embedding
来自动寻找与数据实例的标签相关的单词,因此减少了对从 model prediction
到 label
(即,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
也涉及指令的生成,但我们的主要区别在于它是任务无关的;我们从头开始生成新任务(指令和实例)。
标注大规模的指令数据对人类来说是一种挑战,因为它需要:创造性地提出新的任务、专业知识从而用于为每个任务编写标记的实例。在这一节中,我们将详细介绍我们的 Self-Instruct
过程,它指的是这样的 pipeline
:用一个平凡的 pretrained language model
来生成任务,然后用这些被生成的任务进行 instruction tuning
从而使语言模型更好地遵循指令。这个 pipeline
在下图中被描述。
指令数据(Instruction Data
)的定义:我们要生成的指令数据包含一组指令 input-output
实例 instance input
注意,在许多情况下,指令和 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
。
为了鼓励数据格式的多样性,我们允许这种不需要额外输入的指令(即,
自动的指令数据生成:我们生成指令数据的 pipeline
包括四个步骤:指令生成、识别指令是否代表分类任务、用 input-first
或output-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 example
来 prompt
时, pretrained language model
可以在很大程度上实现这一点。一个自然的方法是 Input-first Approach
,我们可以要求语言模型先根据指令来生成 input field
,然后产生相应的 output
。这种生成顺序类似于模型对指令和输入的响应方式。prompting template
如下表所示。
然而,我们发现这种方法会产生偏向于 one label
的输入,特别是对于分类任务(例如,对于语法错误检测,它通常会生成 grammatical input
)。因此,我们另外提出了一种用于分类任务的 Output-first Approach
,即我们首先生成可能的 class label
,然后以每个 class label
为条件来生成 input
。prompting template
如下表所示。
我们将 Output-first Approach
应用于前一步所确定的分类任务,将 Input-first Approach
应用于其余的非分类任务。
过滤和后处理:为了鼓励多样性,只有当一条新指令与任何现有指令的 ROUGE-L overlap
小于 0.7
时,这条新指令才会被添加到任务池中。我们还排除了包含一些特定关键词(如 images, pictures, graphs
)的指令,这些关键词通常不能被语言模型所处理。在为每条指令生成新的实例时,我们过滤掉那些完全相同的实例或那些具有相同输入但不同输出的实例。
不仅需要过滤指令,也需要过滤任务的实例。
微调语言模型从而 follow instructions
:在创建了大规模的指令数据后,我们用这些数据来微调原始语言模型(即 self-instruct
)。为了做到这一点,我们将指令和 instance input
拼接起来作为 prompt
,并训练模型以标准的监督方式生成 instance output
。
为了使模型对不同的格式具有鲁棒性,我们使用多个 templates
来把指令和 instance input
编码在一起。例如:
指令的前缀可以是 "Task:"
,也可以不是。
输入的前缀可以是 "Input:"
,也可以不是。
"Output:"
可以附加在 prompt
的末尾。
中间可以放不同数量的换行符,等等。
每个实例都采用一组各式各样的模版格式,那么这些模板如何设计?论文并未深入地探索。
这里我们将我们的方法应用于 GPT3
从而诱导指令数据,作为案例研究。我们使用最大的 GPT3
语言模型("davinci" engine
)通过 OpenAI API
访问。在为不同的目的查询 GPT3 API
时,我们使用不同的超参数集合。我们发现这些超参数在 GPT3
模型( "davinci" engine
)和其他 instruction-tuned GPT3
变体中运行良好。我们在下表中列出了它们。
接下来我们介绍一下 generated data
的概况。
统计数据:下表描述了 generated data
的基本统计数据。经过过滤之后,我们总共生成了超过 52K
条指令,以及超过 82K
个与这些指令相对应的实例。
多样性:为了研究生成了哪些类型的指令、以及这些被生成指令的多样性,我们确定了被生成的指令中的 “动名词”( 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
、以及这些动词的前 4
个 direct noun object
,这些指令占了整个被生成指令的集合的 14%
。总的来说,我们在这些指令中看到了相当多样化的意图和文本格式。
我们进一步研究 generated instruction
与用于 prompt the generation
的种子指令有何不同。对于每个 generated instruction
,我们计算其与 175
条种子指令的最高 ROUGE-L overlap
。我们在 Figure 3
中绘制了这些 ROUGE-L
分数的分布,表明有相当数量的新指令与种子指令没有太多的 overlap
。我们还在 Figure 4
中展示了指令长度、instance input
和 instance output
的多样性。
质量:到目前为止,我们已经展示了 generated data
的数量和多样性,但其质量仍然不确定。为了调查这一点,我们随机采样了 200
条指令,并在每条指令中随机选择 1
个实例。我们请一位专家标注员(本论文的 co-author
)从指令、instance input
和 instance output
的角度来标注每个实例是否正确。
下表中的评估结果显示,大多数 generated instruction
是有意义的,而 generated instance
可能包含更多的噪音(在合理的范围内)。然而,我们发现,即使 generation
可能包含错误,但大多数仍然是正确的格式,甚至是部分正确的,这可以为训练模型提供有用的指导从而遵循指令。
我们在下表中分别给出了一些好的 generation
和坏的 generation
。
我们进行实验来衡量和比较各种 instruction tuning
设置下的模型质量。我们首先描述了我们的模型和其他 baseline
,然后是我们的实验。
GPT3
自己的指令数据上微调 GPT3
。
使用 instruction-generated
指令数据,我们对 GPT3
模型本身("davinci" engine
)进行 instruction tuning
。如前所述,我们使用各种模板来拼接指令和 input
,并训练模型来生成output
。这种微调是通过 OpenAI finetuning API
完成的。我们使用默认的超参数,除了将 prompt loss
权重设置为 0
,并对模型训练两个 epoch
。最终的模型被称为
"
prompt loss
权重设置为0
",意味着近考虑output
的损失。
微调细节如下: baseline
是由 GPT3
模型(具有 175B
参数的 "davinci" engine
)微调的。我们通过 OpenAI
的 finetuning API
进行这种微调。虽然目前还没有关于如何用这个API
对模型进行微调的细节(例如,哪些参数被更新,或者优化器是什么),但我们用这个 API
的默认超参数来微调我们所有的模型,以便结果具有可比性。我们只将 "prompt_loss_weight"
设置为 0
,因为我们发现这在我们的案例中效果更好,而且每个微调实验都训练了两个 epochs
,以避免训练任务的过拟合。微调是根据训练文件中的 token
数量来收费的。从 GPT3
模型中微调 338
美元。
baseline
:
现成的语言模型:我们评估 T5-LM
和 GPT3
作为平凡的语言模型 baseline
(只有预训练而没有额外的微调)。这些 baseline
将表明现成的语言模型在预训练之后能够在多大程度上自然地遵循指令。
公开可用的 instruction-tuned
模型:T0
和 Tk-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
数据进行比较,我们用 PROMPTSOURCE
和SUPERNI
的数据进一步微调 GPT3
模型,其中 PROMPTSOURCE
和SUPERNI
是被用来训练 T0
和 Tk-INSTRUCT
模型。我们分别将其简称为 T0 training
和 SUPERNI training
。为了节省训练预算,我们对每个数据集采样 50K
个实例(但涵盖其所有指令),其规模与我们生成的指令数据相当。根据 SUPERNI
原始论文的研究结果和我们的早期实验,减少每个任务的实例数量并不会降低模型对 unseen
任务的泛化性能。
这是为了将开源的指令数据集,与
self-instruct
生成的指令数据集进行比较。
我们首先评估了模型在典型的 NLP
任务上以 zero-shot
方式来遵循指令的能力。我们使用 SUPERNI
的 evaluation
集合,它由 119
个任务组成,每个任务有 100
个实例。在这项工作中,我们主要关注zero-shot
设置,即只用任务的定义来 prompt
模型,而没有 in-context demonstration example
。对于我们对 GPT3
变体的所有请求,我们使用确定性的 generation mode
(温度为 0
,没有 nucleus sampling
),没有特定的 stop sequence
。
温度为
0
、没有nucleus sampling
,这对于generation
是不利的,因此并不能代表模型的最佳效果。最好是调优这两个超参数,然后再对比各个模型。
实验结果如下表所示:
Self-Instruct
在很大程度上提高了 GPT3
的 instruction-following
能力。
平凡的 GPT3
模型基本上不能遵循人类的指令。经过人工分析,我们发现它通常会生成不相关的重复性文本,而且不知道何时停止生成。
与其他没有专门为 SUPERNI
训练的模型相比, T0
模型、或在 T0
训练集上微调的 GPT3
更好的性能,而 T0
训练集需要巨大的人工标注工作。值得注意的是,
在 SUPERNI
训练集上训练的模型在其评估集上取得了更好的性能,我们将此归因于在训练期间采用了与评估时类似的指令风格和指令格式。然而,我们表明,当 Self-Instruct
与 SUPERNI
训练集相结合时,仍然带来了额外的收益,证明了 Self-Instruct
作为补充数据的价值。
尽管 SUPERNI
在收集现有的 NLP
任务方面很全面,但这些 NLP
任务大多是为研究目的而提出的,并且偏向于 classification
任务。为了更好地获取 instruction-following
模型的实用价值,本文所有作者中的一部分作者策划了一套新的指令,其动机是面向用户的应用。
我们首先对大型语言模型可能有用的不同领域进行头脑风暴(例如,电子邮件写作、社交媒体、生产力工具、娱乐、编程),然后制作与每个领域相关的指令以及一个 input-output instance
(同样, input
是可选的)。我们的目标是使这些任务的风格和格式多样化(例如,指令可长可短;input/output
可采用 bullet points
、表格、代码、方程式等形式)。
我们总共创建了 252
个指令,每个指令有 1
个实例。我们相信它可以作为一个测试平台,用于评估 instruction-based
模型如何处理多样化和不熟悉的指令。下表展示了 252
个任务中的一小部分。整个测试集对于 request
可用。
人类评价设置:在这个由不同任务组成的评估集上评估模型的性能是极具挑战性的,因为不同的任务需要不同的专业知识。事实上,许多任务不能用自动指标来衡量,甚至不能由普通的众包人员来判断(例如,编写一个程序,或将一阶逻辑转换为自然语言)。为了得到更忠实的评价,我们要求指令的作者对模型的预测进行判断。评估人员被要求根据输出是否准确有效地完成了任务来评分。我们实施了一个四级评分系统来对模型的输出质量进行分类,定义如下:
A
:输出是有效的,令人满意的。
B
:输出是可接受的,但有轻微的错误或不完善之处,可以改进。
C
:输出是相关的,是对指令的响应,但在内容上有重大错误。例如,GPT3
可能首先生成一个有效的输出,但继续生成其他不相关的东西。
D
:输出是不相关的或无效的,包括对 input
的重复,完全不相关的输出等。
下图给出了 GPT3
模型及其 instruction-tuned
对应的版本在这个新编写的指令集上的表现。可以看到:
Self-Instruct
微调的 GPT3
模型)在很大程度上超过了那些在 T0
或 SUPERNI
上训练的对应模型。证明了尽管有噪音,但 generated data
仍有价值。
与 C
)算作有效, 5%
。
最后,我们的评估证实了 instruction-following
能力。尽管这一成功背后有许多因素,但我们猜想,未来的工作在很大程度上可以通过使用人类标注员、或训练奖励模型来提高我们 generated data
的质量,以选择更好的 generation
,类似于 InstructGPT
使用的算法。
我们在 Table 4
中介绍了一些面向用户的任务、相应的 2
级(即,B
)的输出,该模型也展示了解决任务的详尽步骤,尽管其最终输出是错误的。
为什么 Self-Instruct
能工作?
值得反思的是,高质量的人类反馈在促成最近关于 instruction-tuning
语言模型的成功方面所发挥的作用。这里有两个极端的假说:
假说一:人类反馈是 instruction-tuning
的一个必要的、不可缺少的方面,因为语言模型需要学习在预训练中不太了解的问题。
假说二:人类反馈是 instruction-tuning
的一个可选的方面,因为语言模型在预训练中已经对指令相当熟悉。观察人类反馈只是一个轻量级的过程,用于 align
模型的 pretraining distribution/objective
,这个轻量级过程可能会被不同的过程所取代。
虽然现实情况可能介于这两个极端之间,但我们猜测它更接近于假说二,特别是对于大型模型。这种直觉,即语言模型已经知道很多关于语言指令的信息,是 Self-Instruct
的关键动机,也得到了其经验性成功的支持。
更广泛的影响:除了本文的直接焦点之外,我们认为 Self-Instruct
可能有助于为像 InstructGPT
这样广泛使用的 instruction-tuned
模型的 "幕后" 工作带来更多的透明度。不幸的是,这些工业模型仍然在 API wall
后面,因为它们的数据集没有被公布,因此人们对它们的构造、以及它们为什么表现出令人印象深刻的能力了解甚少。现在,学术界有责任更好地理解这些模型的成功之源,并努力建立更好的(但却是开放的)模型。我们相信我们在本文中的发现证明了多样化的指令数据的重要性,我们的大型合成数据集可以成为更高质量数据的第一步,从而用于建立更好的 instruction-following
模型。
局限性:
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
。我们希望未来的工作能够理清这些细节,以更好地了解该方法的优点和缺点。
论文:
《LIMA: Less Is More for Alignment》
语言模型以一个难以置信的规模被预训练从而预测 next token
,这使其能够学习通用 representations
,并将其迁移到几乎任何语言理解或语言生成任务中。为了实现这种迁移,各种用于对齐语言模型的方法因此已被提出,主要集中在大型百万样本数据集上的指令微调(instruction tuning
),以及最近的 reinforcement learning from human feedback: RLHF
(数据来自人类标注员的百万级交互)。现有的 alignment
方法需要大量的计算和专门的数据才能达到 ChatGPT
的水平。 然而,我们展示了,给定一个强大的 pretrained
语言模型,通过简单地在 1000
个精心策划的训练样本上进行微调,就可以达到惊人的强大性能。
我们假设 alignment
可以是一个简单的过程,模型在其中学习与用户交互的风格或格式,从而展示预训练期间已经获取的知识和能力。为了测试这一假设,我们策划了 1000
个近似 real user prompts
和高质量响应的样本。我们从社区论坛(如 Stack Exchange
和 wikiHow
)中选取了 750
个高质量的问题和答案,并且针对质量和多样性进行了采样。此外,我们手动编写了 250
个 prompts and responses
的样本,同时优化任务的多样性,并强调了 AI assistant
的统一响应风格。最后,我们在这组 1000
个样本上微调一个 pretrained 65B LLaMa
模型,微调好的模型被称作 LIMA
。
我们在 300
个具有挑战性的测试 prompts
中将 LIMA
与 SOTA
语言模型和产品进行比较。在 human preference
研究中,我们发现LIMA
优于OpenAI
的 DaVinci003
(后者使用 RLHF
进行了训练)、以及 65B
参数 Alpaca
的复现(在 52000
样本上训练)。尽管人类通常更喜欢 GPT-4
、Claude
和Bard
,而不是 LIMA
的响应,但情况并非总是如此;:LIMA
生成的响应在 43%
、46%
和58%
的情况下与 GPT-4
、Claude
和 Bard
相当或更佳。使用 GPT-4
重复(Repeating
) human preference annotations
证实了我们的发现。分析 LIMA responses
的 absolute scale
显示:88%
的响应符合 prompt requirements
,50%
的响应被认为是优秀的。
消融实验揭示了在扩大数据量而没有相应地扩大 prompts
多样性的情况时,收益迅速下降;与此同时,优化数据质量时获得了重大提升。此外,尽管没有对话样本(dialogue examples
),我们发现 LIMA
可以进行连贯的多轮对话,仅通过向训练集添加 30
个手工制作的 dialogue chains
,就可以显著改进这种能力。总体来说,这些惊人的发现展示了预训练的力量,以及预训练相对于大规模指令微调和强化学习方法的重要性。
我们定义表面对齐假说(Superficial Alignment Hypothesis
):模型的知识和能力几乎全部是在预训练过程中学到的,而 alignment
只是教会模型在与用户交互时使用哪些格式的子集。如果这个假说是正确的,并且对齐在很大程度上是关于 learning style
,那么表面对齐假说的推论是:通过相当小的样本集就能充分 tune
一个 pretrained
语言模型(《A few more examples may be worth billions of parameters》
)。
为此,我们收集了 1,000
个 prompts and responses
的数据集,其中输出(即,响应)在风格上与彼此对齐,但输入(即 prompts)
)各异。 具体而言,我们寻求与 helpful AI assistant
的风格一致的输出。我们从各种来源精心策划这些样本,主要分为社区问答论坛和手动创作的样本。我们还收集了一个包含 300
个 prompts
的测试集、以及一个包含 50
个 prompts
的开发集(development set
)。 Table 1
概述了不同的数据源以及一些统计数据(附录 A
关于训练示例的 selection
)。
Community Questions & Answers
:我们从三个社区问答网站收集数据,包括 Stack Exchange
、wikiHow
和 Pushshift Reddit Dataset
。 总的来说,来自 Stack Exchange
和 wikiHow
的答案与 helpful AI agent
的行为非常吻合,因此可以自动挖掘;而受欢迎的 Reddit
答案倾向于幽默或捣蛋,需要更手动的方法来策划适当风格的响应。
Stack Exchange
:包含 179
个在线社区,每个社区(也叫做 exchanges
)都致力于一个特定的主题,其中最受欢迎的是编程(Stack Overflow
)。 用户可以发布问题、答案、评论,并为以上所有内容点赞(或点不喜欢)。
在从Stack Exchange
采样时,我们运用了质量和多样性的双重控制:
首先,我们将 exchanges
划分为 75 STEM exchanges
(包括编程、数学、物理等)和 99 other exchanges
(英语、烹饪、旅游等)。我们丢弃了5
个细分领域的 exchanges
。
然后,我们使用温度 200
个问题和答案,从而获得不同 domains
的更均匀采样。
在每个 exchanges
内,我们选择得分最高的问题,这些问题的标题是 self-contained
的(即,没有正文)。然后,我们为每个问题选择 top answer
,假设该答案获得了很高的 positive score
(至少 10
分)。
为了与 helpful AI assistant
的风格相符,我们自动过滤答案过于简短(少于 1200
个字符)、过长(大于 4096
个字符)、第一人称书写("I", "my"
)、或引用其他答案("as mentioned", "stack exchange"
等等)。我们还从响应中删除了链接、图像、以及其他 HTML tags
,只保留 code blocks
和 lists
。
由于 Stack Exchange
的问题同时包含一个标题和一个描述,我们随机选择标题作为某些样本的 prompt
,并使用描述作为其他样本的 prompt
。
wikiHow
:一个在线维基风格的出版物,拥有 240k
份 how-to
文章,涵盖各种主题。任何人都可以为 wikiHow
做出贡献,尽管文章经过严格的审核,几乎都是高质量的内容。我们从wikiHow
中采样了200
篇文章:先采样一个类别(共19
个类别),然后采样该类别中的一篇文章,从而确保多样性。我们使用标题作为 prompt
(例如,"How to cook an omelette?"
),使用文章正文作为响应。我们用 "The following answer..."
替换典型的 "This article..."
开头,并应用许多 preprocessing
的启发式方法来修剪链接、图像、文本的某些部分。
The Pushshift Reddit Dataset
:Reddit
是世界上最受欢迎的网站之一,允许用户在由用户创建的子版块中共享、讨论、以及点赞。由于其巨大的受欢迎程度,Reddit
更侧重于娱乐其他用户,而不是提供帮助。恶搞的、讽刺性的评论往往会比严肃的、内容丰富的评论获得更多点赞。因此,我们将样本限制在两个子集 r/AskReddit
和 r/WritingPrompts
,并从每个社区的最受欢迎帖子中手动选择样本。
从 r/AskReddit
中,我们找到 70
个 self-contained prompts
(仅标题,无正文),我们将其用作测试集,因为 top answers
不一定可靠。
WritingPrompts
子版块包含虚构故事的前提,然后鼓励其他用户进行创造性的完成。我们找到了 150
个 prompts
和高质量的响应,涵盖了诸如情诗和短篇科幻故事等主题,我们将其添加到训练集中。
所有数据实例均从 Pushshift Reddit Dataset
中挖掘。
Manually Authored Examples
:为了进一步提升数据的多样性,我们从我们自己(本文作者)那里收集 prompts
。我们指定两组作者,Group A
和 Group B
,每个组根据自己或朋友的兴趣创建 250
个 prompts
。 我们从 Group A
选择 200
个 prompts
用于训练,并选择 50
个 prompts
作为 held-out development set
。在过滤了一些有问题的 prompts
之后,Group B
剩余的 230
个prompts
用于测试。
我们通过自己编写高质量的答案来补全 200
个 training prompts
。在创作答案时,我们试图设置一个统一的风格,这个风格适合于 helpful AI assistant
。 具体来说,许多 prompts
的回答为:首先是对问题的确认,然后跟随答案。 初步实验表明,这种一致的格式通常可以改进模型性能;我们假设它有助于模型 chain of thought
,类似于 "let’s think step-by-step" prompt
(《Large language models are zero-shot reasoners》
、《Chain-of-thought prompting elicits reasoning in large language models》
)。
我们还在训练集中包含 13
个带有某种程度毒性的或恶意的training prompts
。 我们仔细编写了部分拒绝命令或全部拒绝命令的响应,并解释为什么 AI assistant
不会遵守。 测试集中还有 30
个具有类似 issues
的 prompts
,我们在实验章节中进行了分析。
除了我们手动创作的 examples
外,我们还从 Super-Natural Instructions
中采样了 50
个训练样本。 具体来说,我们选择了 50
个自然语言生成任务,如总结、paraphrasing
、以及风格转换,并从每个任务中随机选择一个样本。我们略微编辑了一些样本,以符合我们 200
个手动样本的风格。尽管 potential user prompts
的分布与 Super-Natural Instructions
中的任务分布可能不同,但我们的直觉是,这些样本增加了整体训练样本的多样性,并可能提高模型的鲁棒性。
手动创建多样化的prompts
,并以统一的风格创作丰富的响应是劳动密集型的。尽管一些最近的工作通过蒸馏和其他自动化手段避免了手动劳动,优化数量而不是质量,但是这项工作探索了投资多样性和质量的效果。
我们使用以下协议来训练 Less Is More for Alignment: LIMA
。 从 LLaMa 65B
开始,我们在我们的 1,000-example alignment
训练集上进行微调。为了区分每个 speaker
(user and assistant
),我们在每个语句结束时引入一个特殊的 end-of-turn token: EOT
);这个 token
与停止生成的 EOS token
发挥相同的作用,但避免了与 pretrained model
可能赋予现有 EOS token
的任何其他含义的混淆。
我们遵循标准的微调超参数:我们使用 AdamW
优化器,其中 weight decay = 0.1
。在没有 warmup steps
的情况下,我们将初始学习率设为 1e-5
,并线性衰减为训练结束时的 1e-6
。 batch size
设置为 32
个样本(小型模型为 64
),文本长度超过 2048 tokens
则进行裁剪。一个值得注意的偏离是使用 residual dropout
作为正则化;我们遵循 《Training language models to follow instructions with human feedback》
,在 residual connections
上应用dropout
,从 bottom layer
以 generation
质量无关,因此使用 held-out 50-example development set
手动选择第5
到第10
个 epochs
之间的 checkpoints
。
residual dropout
:在residual connections
上应用dropout
。
我们通过将 LIMA
与 SOTA
模型进行比较,从而对 LIMA
进行评估,发现它优于 OpenAI
的 RLHF-based DaVinci003
、以及 65B
参数 Alpaca
的复现(在 52000
样本上训练),并且通常产生等同于或优于 GPT-4
的响应。 对 LIMA generations
的分析发现:50%
的输出被认为是优秀的。
通过极少样本的简单微调就能与 SOTA
竞争这一事实,强有力地支持了表面对齐假说,因为它展示了预训练的力量,以及预训练相对于大规模指令调优和强化学习方法的重要性。
为了将 LIMA
与其他模型进行比较,我们为每个 test prompt
生成一个单一的响应。然后,我们要求众包工人比较 LIMA outputs
与每个 baseline outputs
,并标注他们更喜欢哪一个。我们重复这个实验,用 GPT-4
替换人类众包工人,发现类似的 agreement levels
。
baselines
:
Alpaca 65B
: 我们在 Alpaca
训练集中的 52,000
个样本上微调 LLaMa 65B
。
OpenAI’s DaVinci003
:通过 reinforcement learning from human feedback: RLHF
微调的大型语言模型。
Bard
:基于 PaLM
的LLM
。
Claude
:一个基于强化学习从 AI feedback
(Constitutional AI
)训练的 52B
模型。
OpenAI’s GPT-4
:一个使用 RLHF
训练的大型语言模型,目前被认为是最先进的。
所有 baseline
模型的响应均在 2023
年 4
月期间采样。
Generation
:对于每个 prompts
,我们使用 nucleus sampling
从每个 baseline
模型生成单个响应,previously generated tokens
应用 repetition penalty
,超参数为 1.2
。 我们将 maximum token length
限制为 2048
。
方法:在每个 step
,我们向标注员呈现一个 prompt
以及两种可能的响应,这两种响应由不同的模型生成。要求标注员标注哪个响应更好、或者两个响应都不明显优于另一个;附录 C
提供了确切的措辞。我们通过向 GPT-4
提供完全相同的指令和数据来收集 parallel annotations
。
Inter-Annotator Agreement
:我们使用 tie-discounted accuracy
计算 inter-annotator agreement
:如果两位标注员都 agree
,则得到 1
分;如果任一标注员(但不是两者都)标记了一个 tie
(即,平局),则得到 0.5
分;否则得 0
分。 我们在共享的 50 annotation examples
集合上测量 agreement
(单个 prompt
、两个模型响应,全部随机选择),比较作者(author
)、众包(crowd
)、以及 GPT-4
的注释。在人类标注员中,我们发现以下agreement scores
:crowd-crowd 82%
、crowd-author 81%
、author-author 78%
。尽管这项任务有一定的主观性,但人类标注员之间存在相当程度的 agreement
。
我们还测量 GPT-4
与人类之间的 agreement
:crowd-GPT 78%
、author-GPT 79%
(尽管我们使用随机解码,GPT-4
几乎总是 agrees
它自己)。这些数字使 GPT-4
在这项任务上的 agreement
与人类标注员相当,在本质上通过了这项任务的 Turking Test
。
Figure 1
显示了我们的 human preference
研究结果,而 Figure 2
显示了 GPT-4 preferences
的结果。我们主要调查人类研究中的结果,因为 GPT-4
的结果在很大程度上展示了相同的趋势。
我们的第一个观察结果是:尽管训练数据量多达 52
倍,但 Alpaca 65B
倾向于产生不如 LIMA
的输出。对 DaVinci003
也是如此,但程度较轻。这一结果令人震惊的是,DaVinci003
是通过 RLHF
训练的,这本应该是一种更先进的对齐方法。
Bard
展示了与 DaVinci003
相反的趋势,它在 42%
的时间产生比 LIMA
更好的响应;然而,这也意味着 58%
的时间 LIMA
的响应至少与 Bard
一样好。
最后,我们看到尽管 Claude
和 GPT-4
通常比 LIMA
表现更好,但也存在相当多的情况下 LIMA
实际上产生更好的响应。具有讽刺意味的是,在 19%
的时间,即使 GPT-4
也更喜欢 LIMA
的输出而不是它自己的输出。
这种比较感觉有点奇怪:除非
A
模型能够在任何输入都能击败B
模型,否则总是存在一定比例,使得A
模型不如B
模型。
虽然我们的评估主要是通过将 LIMA
和 SOTA
模型相比,但必须记住,这些 baselines
实际上是高度调优的产品,在训练期间可能已经接触了数百万 real user prompts
,创造了非常高的 bar
。 因此,我们通过手动分析 50
个随机样本来对其进行 absolute assessment
。 我们将每个样本分为三类:
失败(Fail
):响应没有满足 prompt
的要求。
通过(Pass
):响应满足了 prompt
的要求。
优秀(Excellent
):模型对 prompt
给出了优秀的响应。
结果:Figure 3
显示 50%
的 LIMA
答案被认为是优秀的,它能够遵循除 6
个 prompts
以外的所有 50
个 analyzed prompts
。 我们没有观察到失败案例中的任何明显趋势。 Figure 4
显示了 LIMA
对育儿建议、以及生成食谱的输出示例。
Out of Distribution
:LIMA
在 out of distribution
样本上的表现如何?在分析的 50
个样本中,有 43
个样本在格式上与训练集中的某个样本相关(例如,问答、建议、写信等)。 我们额外分析了 13
个 out-of-distribution
样本(共 20
个),发现 20%
的响应失败、35%
通过、45%
优秀。虽然这是一个小样本,但似乎 LIMA
在其训练分布之外取得了类似的 absolute performance statistics
数据,这表明它能够很好地泛化。Figure 4
显示了 LIMA
对要求编写单口喜剧小品、或订购比萨的响应。
Safety
:最后,我们分析了在训练集中包含安全性相关的样本(仅有 13
个样本)的效果。我们检查了 LIMA
对测试集中 30
个潜在 sensitive prompts
的响应,发现 LIMA
安全地响应了其中 80%
(包括 10
个具有恶意意图的 prompts
中的 6
个)。 在某些情况下,LIMA
直接拒绝执行任务(例如,当要求提供名人地址时);但当恶意意图隐晦时,LIMA
更有可能提供不安全的响应,如 Figure 4
所示。
我们通过消融实验研究了训练数据的多样性、质量和数量的影响。我们观察到:为了 alignment
的目的,扩大输入多样性、以及输出质量具有 measurable
的积极影响,而仅扩大数据数量可能没有。
实验设置:我们在各种数据集上微调一个 7B
参数的 LLaMa
模型,控制相同的超参数。然后,我们为每个测试集 prompt
生成 5
个响应,并通过要求 ChatGPT(GPT-3.5 Turbo)
根据 1-6 likert scale
评估响应的有用性程度来评估响应质量。我们报告平均分数以及
多样性:为了测试在控制质量和数量的情况下, prompt
多样性的影响,我们比较了在 quality-filtered Stack Exchange
数据(具有优秀响应的 heterogeneous prompts
)和 wikiHow
数据(具有优秀响应的 homogeneous prompts
)上训练的效果。尽管我们用两个不同来源的数据集作为多样性的代理进行比较,但我们承认从两个不同来源采样数据时可能存在其他混杂因素。我们从每个来源采样 2,000
个训练样本。 Figure 5
显示,更加多样化的 Stack Exchange
数据产生明显更高的性能。
质量:为了测试响应质量的影响,我们从 Stack Exchange
采样 2,000
个未经任何质量过滤、或风格过滤的样本,并将在此数据集上训练的模型,与在我们过滤后的数据集上训练的模型进行比较。Figure 5
显示:在过滤后的和未过滤的数据源上训练的模型之间,存在显着的 0.5
分差异。
数量:在许多机器学习设置中,扩大训练样本数量是改进性能的众所周知的策略。为了测试训练样本数量对我们设置的影响,我们从Stack Exchange
采样从而指数增加训练数据集。Figure 6
显示,令人惊讶的是,将训练数据集加倍并没有提高响应质量。与本节中的其他发现一起,这一结果表明,scaling laws of alignment
不一定仅取决于数量,而更多地取决于在保持高质量响应的同时提高 prompt diversity
(即,多样化的高质量的数据)。
一个只在 1,000
个单轮交互上微调的模型能进行多轮对话吗?我们在 10 live conversations
中测试 LIMA
,并将每个响应标记为 Fail, Pass, Excellent
这三者之一。LIMA
的响应出奇地连贯,引用了对话中 previous steps
的信息。很明显,模型正在 out of distribution
上执行。在 10
场对话的 6
场中,LIMA
在 3
轮交互内无法遵循 prompt
。
为了改进 LIMA
的对话能力,我们收集了 30
个 multi-turn dialogue chains
。在这些对话中,10
个对话由本文作者编写,其余 20
个基于 Stack Exchange
的 comment chains
(我们对其进行了编辑以适应 AI assistant
的风格)。我们从 pretrained LLaMa
模型开始,使用 combined 1,030 examples
微调 LIMA
的新版本,并基于与 zero-shot model
模型相同的 prompts
进行了 10 live conversations
。 Figure 8
显示了这些对话的摘录。
Figure 7
显示了响应的质量的分布。添加对话大大改进了generation
质量,将优秀响应的比例从 45.2%
提高到 76.1%
。 此外,失败率从 42
轮中出现 15
次失败( zero-shot
),下降到 46
轮中仅出现 1
次失败(fine-tuned
)。 我们进一步比较了整个对话的质量,发现 fine-tuned
模型在 10
场对话中7
场中明显优于zero-shot model
、3
场与零 zero-shot model
打平。
仅需要 30
个样本就能取得这一飞跃,以及 zero-shot model
具有对话能力的事实,都强化了假说:这种能力是在预训练期间学会的,并且可以通过有限的监督来调用(invoke
)。
我们展示了在 1,000
个精心策划的样本上对强大的 pretrained
语言模型进行微调可以产生惊人的、有竞争力的结果。但是,这种方法确实存在局限性。
主要的局限性是,构建这些样本需要大量精力,很难 scale up
。
其次,LIMA
不如产品级模型健壮。虽然 LIMA
通常会生成好的响应,但在解码期间的不幸采样或 adversarial prompt
通常会导致弱的响应。
尽管如此,本文提供的证据展示了用简单的方法解决复杂的 alignment
问题的潜力。
论文:
《Llama 2: Open Foundation and Fine-Tuned Chat Models》
大型语言模型(Large Language Model: LLM
)作为高能力的 AI
助手展现了巨大的前景,在复杂推理任务中表现出色(这些任务需要各个领域的专业知识),包括编程和创意写作等专业领域。这些 AI
助手通过直观的聊天界面与人类进行交互,这导致快速的、广泛的向公众普及。
考虑到训练方法论似乎相当简单,LLM
的能力令人惊叹。自回归 transformer
在大量自监督数据上进行预训练,然后通过 Reinforcement Learning with Human Feedback: RLHF
等技术与人类偏好进行对齐。尽管训练方法很简单,但高计算需求将 LLM
的开发限制在少数玩家。已经公开发布了一些预训练好的 LLM
(如 BLOOM
、LLaMa-1
和 Falcon
),其性能与闭源的竞争对手GPT-3
、和 Chinchilla
相当,但这些模型都不是闭源 "product" LLM
(如 ChatGPT
、BARD
和 Claude
)的合适替代品。这些闭源 product LLM
经过大量微调以与人类偏好进行对齐,这极大地增强了它们的可用性和安全性。这一步骤可能需要大量计算和人工标注,且往往不透明且难以复现,这限制了社区在推进 AI alignment
研究方面的进步。
在这项工作中,我们开发并发布了 Llama-2
,这是一系列 pretrained
和 fine-tuned
的LLM
(Llama 2
和 Llama 2-Chat
),规模达到 70B
参数。在我们测试的一系列有用性和安全性基准测试中,Llama 2-Chat
模型通常优于现有的开源模型。根据我们执行的人类评估,它们似乎与某些闭源模型不相上下(见 Figure 1
和 Figure 3
)。我们采取了措施来提高这些模型的安全性,使用 safety-specific
的数据标注和调优,以及进行 red-teaming
和采用迭代式的评估。此外,本文详细介绍了我们的微调方法和提高LLM
安全性的方法。我们希望这种开放性将使社区能够复现 fine-tuned LLM
,并继续提高这些模型的安全性,为 LLM
的更 responsible
的开发铺平道路。我们还分享了在开发 Llama 2
和 Llama 2-Chat
过程中做出的新颖观察,如工具使用的出现、以及知识的 temporal organization
。
我们向公众开放以下模型供研究和商业使用:
Llama 2
:Llama 1
的更新版本,在新的公开可用数据混合体上进行了训练。我们还将预训练语料库的大小增加了 40%
,将模型的上下文长度加倍,并采用 grouped-query attention
(《Gqa: Training generalized multi-query transformer models from multi-head checkpoints》
)。我们发布了 Llama 2
的变体,参数规模分别为 7B
、13B
、 70B
。我们还训练了 34B
参数的变体,在本文中报告了结果,但没有发布。
Llama 2-Chat
:Llama 2
的微调版本,针对对话用例(dialogue use cases
)进行了优化。我们也以 7B
、13B
和 70B
参数发布了这个模型的变体。
我们认为,在安全的前提下公开发布 LLM
总体上将是社会的净收益。与所有 LLM
一样,Llama 2
是一项新的技术,其使用存在潜在风险。迄今为止的测试是在英语中进行的,没有覆盖所有场景,也不可能覆盖所有场景。因此,在部署 Llama 2-Chat
的任何应用之前,开发者应该针对其模型的具体应用执行安全性测试和调优。我们提供了 responsible use guide
和代码示例,以促进 Llama 2
和 Llama 2-Chat
的安全部署。我们的 responsible release
策略的更多细节可以在正文中找到。
相关工作:
Large Language Model
:近年来,LLM
领域发生了重大变化。遵循 《Scaling laws for neural language models》
的 scaling laws
,人们提出了多个参数超过 100B
的大型语言模型,从 GPT-3
到 Gopher
,或专有模型(例如用于科学领域的Galactica
)。
Chinchilla
具有 70B
参数,它按照 tokens
数量而不是模型权重重新定义了这些 scaling laws
。
Llama
的兴起值得注意,它以推理期间的计算效率为重点而闻名。
另一个并行的讨论是关于开源模型和闭源模型的动态。BLOOM
、OPT
、Falcon
等开源模型的出现挑战了 GPT-3
和 Chinchilla
等闭源对应物。然而,当涉及到 ChatGPT
、Bard
和 Claude
等 "production-ready" LLM
时,开源模型和后者的性能和可用性存在明显区别。这些 "production-ready"
模型依赖于复杂的微调技术来与人类偏好对齐(《The false promise of imitating proprietary llms》
),这一过程在开源社区内仍在探索和 refine
之中。
为弥合这一差距的尝试已经出现,采用了以蒸馏为基础的模型(如 Vicuna
、Alpaca
),它们采用了使用合成指令进行训练的独特方法(《Unnatural instructions: Tuning languagemodels with (almost) no human labor》
、《Self-instruct: Aligning language model with self generated instructions》
)。然而,虽然这些模型显示出前景,但它们仍未能达到其闭源对应物所设置的标准。
指令调优:
《Finetuned language models are zero-shot learners》
通过在大量数据集上微调 LLM
获得 unseen
任务的 zero-shot
性能。
《Scaling instruction-finetuned language models》
和 《The flan collection: Designing data and methods for effective instruction tuning》
研究了任务数量、模型大小、 prompt settings
对指令微调的影响。
用于指令微调的 prompts
可以由人类或 LLM
本身创建(《Large language models are human-level prompt engineers》
),后续指令可用于 refine initial generations
,使其更有用、更吸引人、更无偏(《The capacity for moral self-correction in large language models》
、《Self-refine: Iterative refinement with self-feedback》
)。
与指令微调相关的一种方法是 chain-of-thought prompting
(《Chain-of-thought prompting elicits reasoning in large language models》
),在这个方法中,当给出复杂问题时,模型会被 prompted
从而解释其推理过程,以增加其最终答案正确的可能性。
RLHF
作为一种强大的大型语言模型微调策略出现,显著提高了LLM
的性能(《Deep reinforcement learning from human preferences》
)。这种方法最初由 《Learning to summarize from human feedback》
在文本摘要任务的背景下展示,自那时以来已扩展到其他任务。在这种范式中,模型根据人类用户的反馈进行微调,从而逐步使模型响应更密切地符合人类的期望和偏好。
《Training language models to follow instructions with human feedback》
证明,指令微调与 RLHF
的组合可以修复事实性、有毒性、有用性问题,而单纯地扩大 LLM
规模是无法解决这些问题的。《Constitutional ai: Harmlessness from ai feedback》
通过用模型自己的自我批评和自我修订来替换人工标注的微调数据,以及在 RLHF
中用模型替换人类评分员对模型输出进行排名,部分地自动化了这种微调加 RLHF
方法,该过程称为 "RL from AI Feedback": RLAIF
。
Known LLM Safety Challenges
:近期文献广泛探讨了大型语言模型面临的风险和挑战。
《On the dangers of stochastic parrots: Can language models be too big? 》
和 《Ethical and social risks of harm from language models》
强调了各种危害,如偏见、有毒性、私人数据泄露、以及恶意使用的可能性。
《Evaluating the social impact of generative ai systems insystems and society》
将这些影响分类为两组:那些可以在 base system
内评估的、以及那些需要 societal context evaluation
的。
而 《Language generation models can cause harm: So what can we do about it? an actionable survey》
提供了潜在的缓解策略来遏制伤害。
《Open-domain conversational agents: Current progress, open problems, and future directions》
和 《Anticipating safety issues in e2e conversational ai: Framework and tooling》
的工作也阐明了与面向聊天机器人的 LLM
相关的困难,其担忧范围从隐私到误导性的专业声明。
《Recent advances towards safe,responsible, and moral dialogue systems: A survey》
提出了一个分类框架来解决这些问题;《Guiding the release of safer e2e conversational ai through value sensitive design》
深入探讨了发布对话模型的潜在正面的和负面的影响之间的平衡。
对 red teaming
演练的研究揭示了tuned LLM
中的具体挑战。
《Red teaming language models to reduce harms:Methods, scaling behaviors, and lessons learned》
和 《Exploring ai ethics of chatgpt: A diagnostic analysis》
的研究展示了各种成功的攻击类型,及其对生成有害内容的影响。
国家安全机构和各种研究人员,如 《Augmented language models: asurvey》
,也对 advanced emergent model behaviors
、网络威胁、以及在 biological warfare
领域的潜在滥用等方面响起了警钟。
最后,由于人工智能研究加速导致的失业置换、以及过度依赖 LLM
导致训练数据退化等更广泛的社会问题也是相关考虑。我们致力于继续与更广泛的政策社团、学术界、以及工业界开展合作,从而解决这些问题。
为了创建新的 Llama 2
系列模型,我们从 《Llama: Open and efficient foundation language models》
描述的 pretraining
方法出发,使用优化的 auto-regressive transformer
,但做出了几项改变来提高性能。具体来说,我们执行了更可靠的数据清洗、更新了数据 mixture
、在 40%
更多的 total tokens
上进行了训练、翻倍了上下文长度、并使用 grouped-query attention: GQA
来提高我们更大模型的推理可扩展性。Table 1
比较了新的 Llama 2
模型与 Llama 1
模型的属性。
注意:仅
34B
和70B
的Llama 2
采用了GQA
。
GQA
如下图的中间部分所示。
Llama 2-Chat
的训练流程如下:
我们的训练语料库包括来自公开可用数据集的新的数据 mixture
,不包括来自 Meta
产品或服务的数据。我们努力删除了已知包含大量个人隐私信息的某些网站的数据。我们在 2T tokens
的数据上进行了训练,因为这在性能和成本之间提供了良好的权衡,同时上采样了最具事实性的数据源从而增加知识并抑制幻觉(hallucination
)。
我们执行了各种预训练数据调查,以便用户更好地了解我们模型的潜在能力和局限性,结果在后面详述。
我们采用了 Llama 1
的大部分预训练设置和模型体系结构。我们使用标准的 transformer
体系结构,应用 pre-normalization using RMSNorm
(《Root mean square layer normalization》
),使用 SwiGLU
激活函数(《Glu variants improve transformer》
)和 rotary positional embeddings: RoPE
(《Roformer: Enhanced transformer with rotary position embedding》
)。
与 Llama 1
相比,主要的体系结构差异包括:增加的上下文长度、grouped-query attention: GQA
。我们在附录 A.2.1
节详细介绍了这些差异,并进行了消融实验以证明其重要性。消融实验结果如下,其中:
multi-head attention: MHA
:经典的多头注意力机制。
multi-query attention: MQA
:多个 query
共享单个 key
和单个 value
。
grouped-query attention
:多个 query group
,每个 group
内部共享单个 key
和单个 value
。
超参数:我们使用 AdamW
优化器进行训练,其中 warmup = 2000 steps
,并将 final learning rate
衰减到峰值学习率的 10%
。我们使用 0.1
的 weight decay
、1.0
的梯度裁剪。Figure 5
显示了使用这些超参数时 Llama 2
的训练损失。
Tokenizer
:我们使用与 Llama 1
相同的 tokenizer
,它采用 bytepair encoding: BPE
的算法,使用 SentencePiece
(《Sentencepiece: A simple and language independent subword tokenizer and detokenizer for neural text processing》
)的实现。与 Llama 1
一样,我们将所有 number
拆分成单个 digit
,并使用字节来分解未知的 UTF-8
字符。总的 vocabulary size
为 32k tokens
。
训练硬件:我们在 Meta
的 Research Super Cluster: RSC
以及内部的生产集群上预训练我们的模型。两个集群都使用 NVIDIA A100
。这两个集群之间有两个关键区别:
第一个是可用的 interconnect
类型:RSC
使用 NVIDIA Quantum InfiniBand
,而我们的生产集群配备了基于商用以太网交换机的 RoCE
(RDMA over converged Ethernet
)解决方案。这两种解决方案都 interconnect
了 200Gbps
端点。
第二个是每个 GPU
的功耗限制:RSC
使用 400W
,而我们的生产集群使用 350W
。
通过这种两集群设置,我们能够比较这些不同类型 interconnect
的大规模训练的适用性。RoCE
(这是一种更具价格优势的商业互联网络)可以像昂贵的 Infiniband
一样扩展到 2000个GPU
,这使预训练更容易普及。
碳足迹(Carbon Footprint
):遵循先前的研究,以及所使用 GPU
设备的功耗估计和碳效率,我们旨在计算 Llama 2
模型预训练产生的碳排放。GPU
的实际功耗取决于其利用率,可能会有别于我们作为 GPU
功耗估计所使用的热设计功率(Thermal Design Power: TDP
)。值得注意的是,我们的计算没有考虑进一步的功率需求,例如 interconnect
或 non-GPU
服务器功耗,也没有考虑数据中心冷却系统。另外,与 AI
硬件(如 GPU
)的生产相关的碳排放可能会增加总体碳足迹,如 《Chasing carbon: The elusive environmental footprint of computing》
所示。
Table 2
总结了 Llama 2
系列模型预训练的碳排放。在 A100-80GB
型(TDP
为 400W
或 350W
)硬件上执行了总计 3.3M GPU hours
的计算。我们估计训练的总排放量为 539
吨二氧化碳当量( 100%
通过 Meta
的可持续性计划直接抵消。我们的开源发布策略也意味着其他公司不需要承担这些预训练成本,节省了更多全球资源。
在本节中,我们报告了 Llama 1
和 Llama 2 base
模型、MosaicML Pretrained Transformer (MPT)
模型、以及Falcon
模型在标准的学术基准测试上的结果。 对于所有评估,我们都使用我们的内部 evaluations library
。 我们在内部重新为 MPT
和 Falcon
模型生成结果。对于这些模型,我们总是在我们的评估框架和任何公开报告的结果之间选择最佳得分。
在Table 3
中,我们给出了在一套流行基准测试上的整体性能。请注意,安全基准在 Safty
章节中提供。基准测试分为以下类别。所有单个基准的结果可在 A.2.2
节中找到。
Code
:我们报告了模型在 HumanEval
和 MBPP
上的平均 pass@1
分数。
Commonsense Reasoning
:我们报告 PIQA, SIQA, HellaSwag, WinoGrande, ARC easy and challenge, OpenBookQA, CommonsenseQA
等任务上的平均值。我们报告 CommonSenseQA
的 7-shot
结果,以及报告所有其他基准测试上的 0-shot
结果。
World Knowledge
:我们评估 NaturalQuestions, TriviaQA
的 5-shot
性能,并报告平均值。
Reading Comprehension
:对于阅读理解,我们报告 SQuAD, QuAC, BoolQ
上的 zero-shot
平均值。
MATH
:我们报告 GSM8K (8-shot), MATH(4-shot)
基准测试的 top 1
平均值。
Popular Aggregated Benchmarks
:我们报告 MMLU (5 shot), Big Bench Hard (BBH) (3 shot), AGI Eval (3–5 shot)
上的 overall
结果。对于 AGI Eval
,我们仅仅在英语任务上评估并报告均值。
如 Table 3
所示,Llama 2
模型优于 Llama 1
模型。具体而言:
与 Llama 1 65B
相比,Llama 2 70B
在 MMLU
和 BBH
上分别提高了大约 5
分和 8
分。
Llama 2 7B
和 LLAMA 2 34B
模型在 code
基准之外的所有类别上均优于相应大小的 MPT
模型。
对于 Falcon
模型,Llama 2 7B
和 Llama 2 34B
在所有类别的基准测试上优于 Falcon 7B
和 Falcon 40B
模型。
此外,Llama 2 70B
模型优于所有开源模型。
除了开源模型,我们还将 Llama 2 70B
的结果与闭源模型进行了比较。如 Table 4
所示:
Llama 2 70B
与 GPT-3.5
在 MMLU
和 GSM8K
上的表现相当,但在 code
基准测试上存在显着差距。
Llama 2 70B
的结果与 PaLM (540B)
在几乎所有基准测试上的表现相当或更好。
Llama 2 70B
与 GPT-4
和 PaLM-2-L
之间在性能上仍存在很大差距。
我们还分析了潜在的数据污染,并在 A.6
节中详细介绍。
Llama 2-Chat
是经过几个月的研究、以及 alignment
技术的 iterative applications
的结果,包括指令微调(instruction tuning
)和 RLHF
,这需要大量的计算和标注(annotation
)资源。
在本节中,我们报告了使用监督微调的实验和发现,以及 initial reward modeling
、 iterative reward modeling
和 RLHF
的实验和结果。我们还分享了一种新的技术 Ghost Attention: GAtt
,我们发现它有助于控制多轮对话流(flow
)。有关 fine-tuned
模型的安全性评估,请参阅 Safty
章节。
Getting Started
:为了启动,我们在 SFT
阶段使用公开可用的指令微调数据(《Scaling instruction-finetuned language models》
),如 《Llama: Open and efficient foundation language models》
所使用的那样。
Quality Is All You Need
:第三方 SFT
数据来自许多不同的来源,但我们发现许多数据的多样性和质量都不足,尤其是在将 LLM
与对话风格的指令对齐方面。因此,我们首先专注于收集几千个高质量的 SFT
数据样本,如 Table 5
所示。通过排除第三方数据集的数百万个样本,并使用我们自己基于供应商的标注工作获得的更少、但质量更高的样本,我们的结果显著改善。这些发现在本质上与 《Lima: Less is more for alignment》
相似,后者也发现有限的干净的指令微调数据就足以达到高水平的质量。我们发现,几万的 SFT
标注就足以实现高质量的结果。在收集到总共 27,540
个标注后,我们停止了 SFT
标注。请注意,我们不包含任何 Meta
用户的数据。
我们还观察到,不同的标注平台和供应商可能导致下游模型性能有显着不同,这突出了即使使用供应商来标注也需要进行数据检查的重要性。为了验证我们的数据质量,我们仔细检查了 180
个样本,并通过人工审查从而将人类提供的标注、与模型生成的结果进行了比较。令人惊讶的是,我们发现 SFT
模型采样的输出通常可与人类标注员手写的 SFT
数据媲美;这表明我们可以重新考虑优先级,并将更多的标注工作投入到偏好相关的标注中从而用于 RLHF
。
Fine-Tuning
细节:对于监督微调,我们使用余弦学习率调度,初始学习率为 weight decay
为 0.1
,batch size = 64
,序列长度为 4096 tokens
。
对于微调过程,每个样本都包含一个 prompt
和一个答案。为确保模型序列长度被填满,我们将训练数据集中的所有 prompts
和答案拼接在一起。 使用一个 special token
来分隔 prompt segment
和 answer segment
。我们利用 autoregressive objective
,并将来自 user prompt
的 tokens
的损失归零,因此,我们实际上仅针对 answer tokens
进行反向传播。最后,我们对模型微调了 2 epochs
。
注意:这里的
prompt
是包含了模版和输入之后的文本序列,而不仅仅是模板。
RLHF
是一种模型训练过程,作用于一个 fine-tuned language model
,以进一步使模型行为与人类偏好和 instruction following
来对齐。我们收集了一些数据,这些数据代表了经验性采样的人类偏好,其中人类标注员选择他们偏好的两个模型输出。然后将这些人类反馈用于训练奖励模型,该奖励模型学习人类标注员偏好的模式,然后该模型可以自动化偏好决策。
为什么要选择两个模型输出?因为作者分别训练两个独立的奖励模型,一个用于优化有用性,另一个用于优化安全性。因此人类标注员要分别挑选有用性更好的模型输出、安全性更好的模型输出。
接下来,我们收集人类偏好数据用于 reward modeling
。我们选择二元比较方案(binary comparison protocol
)而不是其他方案,主要是因为它使我们能够最大限度地提高 collected prompts
的多样性。当然,其他策略也值得考虑,我们把其它策略留待以后研究。
我们的标注过程如下:我们首先要求标注员编写一个 prompt
,然后根据所提供的标准在两个采样的模型响应之间进行选择。为了最大化多样性,given prompt
的两个响应是从两个不同的模型变体中采样的,并且改变温度超参数。除了进行强制选择外,我们还要求标注员标记他们的 chosen response
优于另一个响应的程度:significantly better, better, slightly better, negligibly better/unsure
(一共四个等级) 。
对于我们的偏好标注的 collection
,我们关注有用性(helpfulness
)和安全性(safety
)。
有用性是指 Llama 2-Chat
响应如何满足用户的请求,并提供所请求的信息。
安全性是指 Llama 2-Chat
的响应是否不安全。例如,"giving detailed instructions on making a bomb"
可以被视为有用,但根据我们的安全准则是不安全的。
将两者分开允许我们针对每个响应来应用具体准则,并更好地指导标注员。例如,我们的 safety annotations
提供了关注于 adversarial prompts
的指令。
事实上,标注员需要做出两种选择:
模型
A
的输出和模型B
的输出,哪个更有用(以及有用的程度)。更有用的输出是否也是更安全的、还是二者都不安全、还是二者都安全。
除了标注准则的差异之外,我们还在 safety
阶段收集了一个 safety label
。这种额外信息将模型响应分为三类:
所选的响应是安全的,而另一个响应是不安全。
两种响应都是安全的。
两种响应都是不安全的。
这三种 label
的占比分别为 18%, 47%, 35%
。我们不包括任何这样的样本:所选的响应是不安全、且另一个响应为安全的。因为我们认为更安全的响应也将被人类认为是更好的响应。有关 safety annotations
的更多安全性准则和详细信息,请参阅 Safety
章节。
注意,
safety label
依赖于helpfulness label
,二者之间不是相互独立的。即,对有用的输出(positive helpfulness
)来评估安全性;而不是并行地评估输出的安全性和有用性。注意:根据论文后面的描述,在
safety label
上也区分了四个等级:significantly better, better, slightly better, negligibly better/unsure
。
人工标注按周为单位来批量地收集。随着我们收集了更多的偏好数据,我们的奖励模型得到改善,我们能够训练渐进地更好的 Llama 2-Chat
版本(如 Figure 20
所示)。 Llama 2-Chat
的改善也改变了模型的数据分布。如果没有看到这个新的样本分布,奖励模型的准确率会迅速降低,即 hyper-specialization
(《Coldgans: Taming language gans with cautious sampling strategies》
),因此在新的 Llama 2-Chat tuning iteration
之前,收集使用最新 Llama 2-Chat iterations
的新偏好数据非常重要。这一步有助于保持奖励模型的分布,并为 the latest model
维护准确的奖励。
SFX(Mix)
是否表示:几千个高质量的、来自第三方的SFT
数据样本?
SFT(Annotation)
是否表示:使用基于供应商的标注工作获得的更少、但质量更高的样本(约27,540
个样本)?作者并未解释这里的区别。
在 Table 6
中,我们报告了随时间收集的 reward modeling
数据的统计信息,并将其与多个开源偏好数据集进行了比较,包括Anthropic Helpful and Harmless, OpenAI Summarize, OpenAI WebGPT, StackExchange, Stanford Human Preferences, Synthetic GPT-J
。我们根据我们指定的准则(这些准则就是前面我们指定的并且被人类应用的)收集了超过 1 million binary comparisons
的数据集,我们将其称为 Meta reward modeling data
。请注意,prompts
和答案中的 tokens
数量取决于 text domain
。 Summarization
和在线论坛数据通常有较长的 prompts
,而对话风格的 prompts
通常较短。与现有的开源数据集相比,我们的偏好数据具有更多的对话轮次,并且平均长度更长。
(平均
prompt
长度 + 平均response
长度) * 平均对话轮次,约等于平均example
长度。
奖励模型将模型响应及其对应的 prompt
(包括前几轮的上下文)作为输入,并输出一个 scalar score
以指示 model generation
的质量(例如,有用性和安全性)。利用这种 response scores
作为奖励,我们可以在 RLHF
期间优化 Llama 2-Chat
,以实现更好的 human preference alignment
、改善的有用性和安全性。
其他人发现有用性和安全性有时存在权衡(《Training a helpful and harmless assistant with reinforcement learning from human feedback》
),这可能使单个奖励模型在有用性和安全性都表现出色成为挑战。为了解决这个问题,我们分别训练两个独立的奖励模型,一个针对有用性来优化(称为 Helpfulness RM
)、另一个针对安全性来优化(称为 Safety RM
)。
我们从 pretrained chat model checkpoints
来初始化我们的奖励模型,因为它可以确保两个模型都从预训练中获得知识。简而言之,奖励模型 “知道” 聊天模型知道什么。这可以防止出现这类情况:例如,这两个模型之间会有信息不匹配,从而导致 favoring hallucinations
。奖励模型的架构和超参数与 pretrained language models
完全相同,只是用于 next-token prediction
的 classification head
被替换为用于输出 scalar reward
的 regression head
。
Training Objectives
:为了训练奖励模型,我们将所收集到的 pairwise human preference
数据转换为 binary ranking label
格式(即,chosen & rejected
),并强制 chosen response
的得分高于 rejected response
。 我们使用与 《Training language models to follow instructions with human feedback》
一致的 binary ranking loss
:
其中:
prompt
,
scalar score output
。
在此 binary ranking loss
的基础上,我们分别进一步修改它,从而获得更好的有用性和安全性的奖励模型,如下所示。鉴于我们的 preference ratings
被分解为四个等级,这可能有助于利用此信息来明确地教导奖励模型为具有更大差异的 generations
分配更不相同的分数。为此,我们进一步在损失中添加边际项:
其中:边际项 preference rating
的离散函数;chosen response
优于另一个响应的程度这个指标上,人类标注员所标注的 label
。
越大,则意味着 和 之间的差距应该越大。
自然地,我们对具有明显不同响应的 pairs
使用较大的边际项,对较相似响应的 pairs
使用较小的边际项(如 Table 27
所示)。我们发现这个边际项特别可以在两个响应更可分离的样本上提高 Helpfulness reward model
的准确率。更详细的消融和分析见附录 A.3.3
中的 Table 28
。
数据组成:我们将新收集的数据与现有的开源偏好数据集组合,形成一个更大的训练数据集。 最初,开源数据集用于启动我们的奖励模型,而我们正在收集偏好标注(preference annotation
)数据。我们注意到,在我们这个研究的 RLHF
背景下,奖励信号的作用是学习 Llama 2-Chat outputs
(而不是任何其它模型的 outputs
)的人类偏好。但是,在我们的实验中,我们没有观察到来自开源偏好数据集的 negative transfer
。因此,我们决定将它们保留在我们的数据组合中,因为它们可以使奖励模型取得更好的泛化,并防止 reward hacking
,即 Llama 2-Chat
利用我们奖励模型的某些弱点来人为地提高分数,尽管 Llama 2-Chat
的表现比较差。
随着不同来源的训练数据可用,我们针对 Helpfulness reward model
和 Safety reward model
试验了不同的混合配方,以确定最佳设置。经过大量实验:
Helpfulness reward model
的训练数据为: Meta Helpfulness
数据,以及均匀采样自 Meta Safety
和开源数据集中的数据,前者(指的是 Meta Helpfulness
)和后者的混合比例是 50%/50%
。
注意:这里的开源数据集包含了
open-source helpfulness
数据和open-source safety
数据。
Safety reward model
的训练数据为:Meta Safety
数据和Anthropic Harmless
数据(作为 safety
数据),以及 Meta Helpfulness
和 open-source helpfulness
数据(作为 helpfulness
数据)。其中,safety
数据和 helpfulness
数据的混合比例为 90%/10%
。
我们发现,10%
的 helpfulness
数据的设置对于准确率是有利的,其中 chosen responses
和 rejected responses
都是安全的。
Helpfulness
奖励模型的label
是:是否更有用;而Safety
奖励模型的label
是:是否更安全。那么,用Safety
数据来训练Helpfulness
奖励模型,以及用Helpfulness
数据来训练Safety
奖励模型,label
上面就不一致?读者猜测:无论是
Helpfulness
还是Safety
,模型评估的都是:A
模型是否比B
模型更好。在这个语义上来讲,这两个奖励模型的label
空间是一致的。此外,论文在
Impact of Safety Data Scaling
章节的消融实验表明:增加safety training data
并不会影响模型的helpfulness
性能。作者猜测:这是因为已经有足够大量的有用性训练数据。
训练细节:我们在训练数据上训练 1 epoch
。在早期实验中,我们发现训练更长会导致过拟合。我们使用与 base
模型相同的优化器参数。
对于 Llama 2-Chat 70B
,最大学习率为 Llama 2-Chat
, 最大学习率为
学习率以余弦学习率调度降低,降至最大学习率的 10%
。
我们使用 3%
的总步数的 warm-up
,最小值为 5 steps
。
effective batch size
固定为 512 pairs
或 1024
行。
奖励模型的结果:在每批 human preference annotation
用于奖励建模时,我们保留 1000
个样本作为测试集来评估我们的模型。我们将所有这些测试集的 prompts
统称为 "Meta Helpfulness"
和 "Meta Safety"
。
作为基准,我们还评估了其他公开可用的替代方案:基于 FLAN-T5-xl
的 SteamSHP-XL
、基于DeBERTa V3 Large
的 Open Assistant
奖励模型、通过 OpenAI API
访问的 GPT4
。请注意,与训练相反,在推理时,所有奖励模型都可以为单个 model output
预测标量得分,而不需要访问paired model outputs
。 对于GPT-4
,我们使用带有 zero-shot question
的 prompt
:"Choose the best answer between A and B"
,其中 A
和 B
是进行比较的两个 model responses
。
我们在 Table 7
中报告了结果,以准确率表示。
如预期的那样,我们自己的奖励模型在我们基于 Llama 2-Chat
收集的内部测试集上表现最好:
Helpfulness reward model
在Meta Helpfulness
测试集上表现最好。
类似地,Safety reward model
在Meta Safety
测试集上表现最好。
总体而言,我们的奖励模型优于所有基线,包括 GPT-4
。
有趣的是,尽管GPT-4
没有直接针对此奖励建模任务进行训练,它的目标也不是这个奖励建模任务,但其表现优于其他 non-Meta reward models
。
有用性和安全性在各自领域表现最佳这一事实可能与这两个目标之间的争用关系有关(即尽可能有用 v.s.
在必要时拒绝 unsafe prompts
),这可能会使单个奖励模型在训练期间感到困惑。为了使单个模型在两个维度上都表现良好,它不仅需要学习根据 prompt
选择更好的响应,还需要区分对 adversarial prompts
和 safe prompts
。因此,优化两个独立的模型简化了奖励建模任务。有关这种安全性与有用性之间争用关系的更详细分析,请参阅附录 A.4.1
。
当我们按 preference rating
对分数进行分组时,可以看到 "significantly better"
测试集的准确率更高,随着 comparison pairs
变得更相似(例如 "slightly better"
),准确率逐渐降低,如 Table 8
所示。 由于标注员的主观性以及他们依赖于可能区分响应的细微细节,所以当决定两个相似的模型响应时,学习建模人类偏好变得具有挑战性。我们强调,对更加distinct
的响应的准确率对改善 Llama 2-Chat
的性能至关重要。human preference annotation
的一致率(agreement rate
)在更加 distinct
的响应上,也比相似的 response pairs
上更高。
Scaling
趋势:我们研究了数据规模和模型大小方面对于奖励模型的缩放趋势,在每周收集的越来越多的 reward model data
上微调不同模型大小(参见 Table 26
中每批数据量的详细信息)。Table 6
报告了这些趋势,显示了较大模型在相似数据量下获得更高性能的预期结果。更重要的是,给定现有的用于训练的数据标注量,缩放性能还未达到饱和。这表明随着更多标注,还有性能提高的空间。
我们注意到,奖励模型的准确率是 Llama 2-Chat
最终性能的最重要代理之一。尽管对生成模型进行全面评估的最佳实践是一个开放的研究问题,但奖励的排名任务没有歧义。因此,在其他条件相同的情况下,奖励模型的改善可以直接转化为 Llama 2-Chat
的改善。
随着我们获得了更多批次的 human preference data annotation
,我们能够训练出更好的奖励模型并收集更多 prompts
。因此,我们针对 RLHF
模型训练了连续版本,在此称为 RLHF-V1, ... , RLHF-V5
。
我们用两种主要算法来探索 RLHF
微调:
Proximal Policy Optimization: PPO
:这是 RLHF
文献中的标准方法(《Proximal policy optimization algorithms》
)。
Rejection Sampling fine-tuning
:我们从模型中采样 《Constitutional ai: Harmlessness from ai feedback》
一致。 针对 LLM
的相同的 re-ranking
策略也由 《Residual energy-based models for text generation》
提出,其中奖励模型被视为能量函数。在此,我们走得更远,并将选定的输出用于梯度更新。对于每个prompt
,获得最高奖励分数的样本被视为新的gold standard
。 类似于 《Discriminative adversarial search for abstractive summarization》
,我们然后在新的 ranked samples
集合上微调我们的模型,强化奖励。
即:根据奖励模型得分最高,从
个输出中筛选一个作为 pseudo ground truth
,从而更新模型。
这两种 RL
算法的主要区别在于:
Breadth
:在 Rejection Sampling
中,模型为给定的 prompt
探索 PPO
仅探索一个样本。
Depth
:
在 PPO
中,在 step t
的训练中,样本是来自 step t-1
的 updated model policy
的函数(在 step t-1
进行梯度更新之后)。
在 Rejection Sampling fine-tuning
中,我们在应用类似 SFT
的微调之前,根据我们模型的初始策略对所有输出进行采样以收集新数据集。
然而,由于我们应用了iterative model updates
,这两种 RL
算法之间的基本区别不太明显。
直到 RLHF (V4)
之前,我们只使用 Rejection Sampling fine-tuning
,之后,我们串行地组合这两种方法:在再次采样之前,在 Rejection Sampling checkpoint
的结果上应用 PPO
。
Rejection Sampling
:我们仅对最大的 70B Llama 2-Chat
执行 rejection sampling
。所有较小的模型在较大模型的 rejection sampled data
上进行微调,从而将大模型的能力蒸馏到较小的模型中。我们留待未来研究更深入地分析这种蒸馏的效果。
即,
70B
模型的pseudo ground truth
同时也用于更小的模型。
在每个iterative stage
,我们从最新模型中为每个 prompt
采样 prompt
选择最佳答案。 在我们模型的早期版本中,直到 RLHF V3
,我们的方法是:仅将 data selection
限制在从前一个 iteration
所收集的 "bag"
中。 例如,RLHF V3
仅使用 RLHF V2
中的样本进行训练。 然而,尽管持续改进,这种方法在某些能力上出现了退化。 例如,通过定性分析发现,与以前的版本相比,RLHF V3
在诗歌中组成押韵行更困难,这表明:进一步研究遗忘的原因、以及缓解措施可能是有益的未来研究领域。
为了解决这一点,在后续迭代中,我们修改了策略,结合了所有以前 iterations
的 top-performing samples
,例如 RLHF-V1
和RLHF-V2
中使用的样本。尽管我们没有呈现具体数字,但这一调整在性能上显示出可观的改善,有效地解决了前面提到的问题。这种缓解措施可以看作与 RL
文献中的 《Growing up together: Structured exploration for large action spaces》
和 《Grandmaster level in starcraft ii using multi-agent reinforcement learning》
相似。
即,训练
RLHF V3
时,不仅包含RLHF V2
中的样本,还包含RLHF V1
中的样本。
我们在 Figure 7
中说明了 Rejection Sampling
的好处。最大值曲线和中值曲线之间的差值,可以解释为在最佳输出上微调的潜在收益。如预期的那样,随着样本量的增加,这个差值会增加,因为最大值会增加(即,更多样本意味着生成 good trajectory
的更多机会),而中值保持固定。exploration
与最大奖励之间存在直接联系,其中最大奖励是我们可以在样本中获得的。
温度参数对 exploration
也起重要作用,因为更高的温度使我们可以采样更多样化的输出。在 Figure 8
中,我们报告了 Llama 2-Chat-SFT
(左)和 Llama 2-Chat-RLHF
(右)在 N
个样本(iterative model updates
期间,最佳温度不是常量:RLHF
对温度的 rescaling
有直接影响。 对于 Llama 2-Chat-RLHF
,采样 10
到 100
个输出时,最佳温度为 rescaling
发生在恒定数量的 steps
上,并且在每个新 RLHF
版本上总是从 base
模型开始。
奖励模型对
Llama2 output
进行打分的过程中,不同的采样温度会得到不同的output distribution
,从而对奖励分产生影响。
PPO
:我们进一步遵循 《Learning to summarize from human feedback》
的 RL
方案训练我们的语言模型,它使用奖励模型作为真实奖励函数(人类偏好)的估计,并将 pretrained
语言模型用作要优化的策略。在此阶段,我们寻求优化以下目标:
我们通过从数据集 prompts
generations
PPO
算法和损失函数来实现此目标。
我们在优化期间使用的最终奖励函数为:
其中:KL
散度。
第二项作为偏离原始策略 《Learning to summarize from human feedback》
,《Training language models to follow instructions with human feedback》
),我们发现这一约束对训练稳定性很有用,并可以减少奖励欺骗(reward hacking
)。奖励欺骗指的是:我们会从奖励模型获得高分,但是从人类评估获得低分。
我们将 prompts
,这些prompts
可能会引导潜在不安全的响应,并优先考虑来自 safety model
的分数。选择 0.15
作为过滤不安全响应的阈值,对应在 Meta Safety
测试集上评估的 precision 0.89
和 recall 0.55
。
我们还发现:为了增加稳定性并与上面的 KL
惩罚项(final linear scores
白化很重要,其中 final linear scores
表示通过对数函数反转 sigmoid
。
物理含义:当
prompt
可能会引导潜在不安全的响应时,以安全性奖励模型的分数作为奖励分;否则,以有用性奖励模型的分数作为奖励分。因此,这就是一个分段函数。这里
Is_Safty(p)
的含义在论文中未能给出。读者猜测它的含义是:数据集中由人工标记的那些潜在不安全的prompt
。
对于所有模型,我们使用 AdamW
优化器,其中 0.1
的 weight decay
,梯度裁剪 1.0
,以及常量学习率 PPO iteration
,我们使用 batch size = 512
,PPO
裁剪阈值 0.2
,mini-batch size = 64
,并对每个 mini-batch
进行 一个 gradient step
。 对于 7B
和 13B
模型,我们设置 KL
惩罚),对于 34B
和 70B
模型,我们设置
我们对所有模型进行 200
到 400
次迭代的训练,并使用 held-out prompts
上的评估来进行早停(early stopping
)。 70B
模型的每个 PPO iteration
平均需要约 330
秒。为了快速地使用大的 batch size
进行训练,我们使用 FSDP
(《Pytorch fsdp: Experiences on scaling fully sharded data parallel》
)。当使用 generation
期间会大大降低速度(约 20
倍),即使使用大 batch size
和 KV cache
也是如此。我们能够通过在 generation
之前一次性地将模型权重合并到每个节点,然后在 generation
之后释放内存,从而恢复训练循环的其余部分来缓解这一问题。
在对话设置中,某些指令应适用于所有的对话轮次,例如简洁地响应,例如 “扮演” ("act as"
)某位公众人物。当我们向 Llama 2-Chat
提供这样的指令时,后续响应应始终遵守约束。但是,我们的 initial RLHF models
在几轮对话后倾向于忘记初始指令,如 Figure 9(left)
所示。
为了解决这些局限性,我们提出了 Ghost Attention: GAtt
,这是一种非常简单的方法,受 Context Distillation
(《Constitutional ai: Harmlessness from ai feedback》
)的启发,它会 hack
微调数据以帮助注意力在 multi-stage
过程中聚焦。GAtt
可以在多轮中控制对话,如 Figure 9(right)
所示。
GAtt
方法:假设我们访问两人(例如一个用户、一个助手)之间的多轮对话数据集,消息列表为 inst
,它应贯穿整个对话。例如,inst
可以是 "act as"
。然后,我们可以将这个指令人工合成地拼接到对话中的所有用户消息。
接下来,我们可以使用最新的 RLHF
模型从这个合成数据中进行采样。现在我们有一个 context-dialogue
和样本,其中样本用于微调模型,这个过程类似于 Rejection Sampling
。我们可以在首轮之外的所有轮次中删除指令,而不是用指令增强所有 context-dialogue
轮次,但这会导致训练时系统消息(即最后一轮之前的所有中间轮次的助手消息)与我们的样本之间出现不匹配。为了解决可能损害训练的这个问题,我们简单地将前几轮的所有 tokens
,(包括助手消息)的 loss
设置为 0
。
读者理解:对于多轮对话:
首先,在首轮对话中,在用户信息中添加指令。
然后,训练过程中我们将前几轮对话的所有
loss
设置为零。因此,仅考虑最后一轮对话中的助手信息。这里没有关于
Attention
的技术,不知道作者为什么要取这个名字。
对于 training instructions
,我们创建了一些约束来进行采样:爱好(例如,“您喜欢网球”)、语言(例如,“用法语说话”)、公众人物(例如,“模仿拿破仑“)。为了获得爱好和公众人物列表,我们让 Llama 2-Chat
生成它,以避免指令与模型知识之间的不匹配(例如,要求模型模仿训练期间未见过的人)。为了使指令更复杂和多样化,我们通过随机组合上述约束来构建最终指令。在构建训练数据的 final system message
时,我们还会在 50%
的时间随机修改原始指令,使其更简洁,例如:“从现在起永远模仿拿破仑” 修改为 ”人物: 拿破仑”。这些步骤会产生一个 SFT
数据集,我们可以在其上微调 Llama 2-Chat
。
GAtt Evaluation
:我们在 RLHF V3
之后应用了 GAtt
。我们报告了定量分析,表明 GAtt
可以保持一致性达 20+
轮,直到达到最大上下文长度(参见附录 A.3.5
)。我们试图在推理时设置 GAtt
的训练中不存在的约束,例如 “始终用俳句回答”,如 Figure 28
所示,模型保持一致。
为了说明 GAtt
如何帮助在微调期间 reshape attention
,我们在 Figure 10
中显示了模型的 maximum attention activations
。每个图的左侧对应于系统消息("Act as OscarWilde"
)。我们可以看到,与没有 GAtt
的模型(左图)相比,配备GAtt
的模型(右图)在对话的更大比例中对系统消息维持了更大的 attention activations
。
这两幅图看起来是一模一样的?
尽管 GAtt
很有用,但其当前实现很普通,在该技术上做更多开发和迭代可能会进一步使模型受益。例如,我们可以通过在微调期间集成此类数据,从而教模型在对话中改变系统消息。
评估 LLM
是一个富有挑战性的开放研究问题。人类评估虽然是 gold standard
,但可能由各种人机交互考虑所复杂化,并且不总是可扩展的。因此,为了在 RLHF-V1
到 V5
的每个迭代中从几个消融实验中选择表现最佳的模型,我们首先观察了最新奖励模型的改进,以节省成本和增加迭代速度。我们稍后用人类评估验证了 major model versions
。
Model-Based Evaluation
能走多远:为了衡量我们的奖励模型的鲁棒性,我们收集了针对有用性的和安全性的 prompts
测试集,并请三名标注员根据 7-point Likert scale
(分数越高越好)对答案质量进行判断。我们观察到,我们的奖励模型与人类偏好标注整体上存在良好的校准,如附录 Figure 29
所示。这确认了尽管使用 Pairwise Ranking Loss
进行训练,但使用我们的奖励作为point-wise metric
与人类偏好具有相关性。
然而,正如 Goodhart’s Law
所述,当一个 measure
成为目标时,它就不再是一个好的 measure
。为了确保我们的measure
不会偏离人类偏好,我们额外使用了在各种开源 Reward Modeling
数据集上训练的更通用的奖励模型。我们还没有观察到任何这种偏离,并假设 iterative model updates
可能有助于防止这种偏离。
作为最后的验证步骤,以确保新旧模型之间没有退化,我们在 next annotation iteration
中同时采样新旧模型。这使我们可以在new prompts
上 ”免费“地比较模型,并可以帮助增加采样时的多样性。
所谓的 ”免费“,指的是新模型的
output
、和旧模型的output
这时候已经得到了(在验证过程中)。
模型的进展:Figure 11
报告了我们不同的 SFT
和 RLHF
版本在 Safety
和 Helpfulness
轴上的进展情况,这是通过我们内部的Safety reward model
和 Helpfulness reward model
测量的。在这组评估中,我们在 RLHF-V3
之后在两个轴上都超过了ChatGPT
(harmlessness and helpfulness >50%
)。尽管如前所述使用我们的 point-wise metric
与人类偏好具有相关性,但可以说它偏向于 Llama 2-Chat
。因此,为了进行公平比较,我们额外使用 GPT-4
计算最终结果以评估哪个 generation
更好。ChatGPT
和 Llama 2-Chat
的输出在 GPT-4 prompt
中的出现顺序是随机交换的,以避免任何 bias
。如预期的那样,Llama 2-Chat
的胜率不太明显,尽管我们的最新 Llama 2-Chat
获得了 60%
以上的胜率。
prompts
对应于一个验证集,该验证集分别包含 1586
个 prompts
用于 safety
、以及 584
个 prompts
用于 helpfulness
。
人类评估通常被认为是判断自然语言生成模型(包括对话模型)的 gold standard
。为了评估 major model versions
的质量,我们请人类评估员对 helpfulness
和 safety
进行评分。我们将 Llama 2-Chat
模型与开源模型(Falcon
、MPT
、Vicuna
)以及闭源模型(Chat-GPT
、PaLM
)进行了比较,涉及 4000
多个单轮 prompts
和多轮 prompts
。对于 ChatGPT
,我们在所有 generation
中使用 gpt-3.5-turbo-0301
模型。 对于 PaLM
,我们在所有generation
中使用 chat-bison-001
模型。 每个模型的人类评估的 final prompt count
如 Table 32
所示。更多方法细节见附录第 A.3.7
节。接下来我们将展示 helpfulness
结果;safety
结果在 Safty
章节呈现。
结果:如 Figure 12
所示,Llama 2-Chat
模型在单轮prompts
和多轮prompts
上都以显著优势超过了开源模型。具体而言:
Llama 2-Chat 7B
模型在 60%
的prompts
上优于 MPT-7B-chat
。
Llama 2-Chat 34B
相对等规模的 Vicuna-33B
和 Falcon 40B
模型,整体胜率超过 75%
。
最大的 Llama 2-Chat
模型与 ChatGPT
相媲美。相对于 ChatGPT
,Llama 2-Chat 70B
模型的胜率为 36%
、平局率为 31.5%
。 Llama 2-Chat 70B
模型在我们的 prompt
集合上大比例优于 PaLM-bison chat
模型。第 A.3.7
节提供了更多结果和分析。
Inter-Rater Reliability: IRR
:在我们的人类评估中,三名不同的评估员对每个 model generation comparison
进行了独立评估。从数据质量的角度来看,更高的 IRR
分数(接近 1.0
)通常被视为更好,但是任务背景很重要。评估 LLM generations
的 overall helpfulness
等主观性非常强的任务,通常会比更客观的 labelling
任务有较低的 IRR
分数。针对这些情况,公开基准相对较少,所以我们认为在此分享我们的分析将有利于研究社区。
我们使用 Gwet
的 AC1/2
统计量来衡量 IRR
,为我们发现它是不同度量方案中最稳定的指标。在我们分析中使用的 7-point Likert scale helpfulness
任务上,Gwet
的 AC2
得分在 0.37 ~ 0.55
之间,取决于具体的 model comparison
。
我们看到分数较低端对应于 model comparisons
胜率相近的分数(如 Llama 2-Chat-70B-chat vs. ChatGPT comparison
)。
我们看到分数较高端对应有更明确胜出方的 model comparisons
的评分(如 Llama2-Chat-34b-chat vs. Falcon-40b-instruct
)。
人类评估的局限性:虽然我们的结果表明 Llama 2-Chat
与 ChatGPT
的人类评估旗鼓相当,但重要的是要注意人类评估存在若干局限性:
从学术和研究的角度来看,我们有一个较大的包含 4k prompts
的 prompt set
。然而,这个 prompt set
并没有覆盖这些模型的实际使用情况,而后者可能会涉及大得多的 use cases
数量。
prompts
的多样性可能是我们结果的另一个因素。例如,我们的prompt set
不包含任何 coding
相关的或推理相关的 prompts
。
我们仅评估多轮对话的最后一轮 generation
。一个更有趣的评估可能是要求模型完成一个任务,并对用户在多轮中与模型的整体体验进行评分。
人类对 generative models
的评估本质上是主观和噪音的。因此,在不同的 prompts
集合、或不同的指令上进行评估可能会得出不同的结果。
警告:本节包含可能被认为不安全、冒犯或令人不安的文本示例。
在这一节中,我们会更深入探讨安全性测量和缓解措施这个重要的话题。
首先,我们会讨论针对 pretraining data
和 pretrained models
进行的安全性调查。
接下来,我们会描述我们的 safety alignment
过程,解释我们如何收集与安全相关的标注并利用SFT
和RLHF
,以及呈现实验结果。
然后,我们会讨论我们进行的 red teaming
,以进一步理解和改进模型的安全性。
最后,我们会呈现 Llama 2-Chat
的定量的安全性评估。
我们也在附录中分享了 model card
,见 Table 52
。
了解预训练数据中包含的内容非常重要,这既可以增加透明度,也可以揭示潜在的下游问题(如潜在偏见)的根本原因。这可以指导我们考虑进行任何下游的缓解措施,并帮助指导适当的模型使用。在本节中,我们分析了预训练数据中的语言分布、人口统计、以及毒性。我们还呈现了 pretrained
模型在现有 safety benchmarks
的结果。
Steps Taken to Pretrain Responsibly
:我们遵循 Meta
的标准隐私和法律审查流程,审查了每个用于训练的数据集。我们没有在训练中使用任何 Meta
用户数据。我们排除了一些已知包含大量关于私人的个人信息的网站的数据。我们尽最大努力提高模型训练的效率,以减少 pretraining
的碳足迹(请参考 Carbon Footprint of Pretraining
的内容)。广泛分享我们的模型将减少其他人训练类似模型的需要。为了让 Llama 2
能够更广泛地用于各种任务(例如,它可以更好地用于仇恨言论分类),我们没有对数据集进行额外过滤,同时避免了过度清洗有时会造成的偶然的人口统计上的消除(accidental demographic erasure
)。重要的是,这使得 Llama 2-Chat
能够在 safety tuning
中用更少的样本进行更有效的泛化。因此,应谨慎使用 Llama 2
模型,并且只有在应用 significant safety tuning
之后才部署。
Demographic Representation: Pronouns
:model generations
中的 bias
可能源自训练数据本身的 bias
。例如,《Based on billions of words on the internet, people = men》
指出,在大规模文本语料中,代表 "people"
的单词与代表"men"
的单词(而不是代表 "women"
的单词)的上下文往往更为相似;并且 《On the impact of machine learning randomness on group fairness》
证明,模型在公平性(fairness
)指标上的表现,高度依赖于模型如何在 underrepresented demographic
群体的数据上进行训练。在我们的英语训练语料中,我们计算了在 Table 9a
中最常见英语代词(English pronouns
)的频率。我们观察到:文档中的 He
代词一般比 She
代词更多,这反映了在类似规模的预训练数据集中,代词的使用频率差异(《Palm: Scaling language modeling with pathways》
)。这可能意味着模型在预训练期间学习关于提到 She
代词的上下文更少,因此可能随后以比 She
代词更高的比例来生成 He
代词。
Demographic Representation: Identities
:我们还通过测量 HolisticBias
数据集中人口统计的身份术语(demographic identity terms
)的使用率,从而作为代理变量来分析不同 demographic groups
在预训练数据中的代表性。我们计算预训练语料中每个身份术语的频率。我们将身份分为 5
个维度,即宗教、性别和性、国籍、种族和族裔、以及性取向(Religion, Gender and Sex, Nationality, Race and Ethnicity, and Sexual Orientation
),并在每个维度中显示 top 5
术语,如 Table 9b
所示。
在 top 5
术语中,我们删除了一些术语,如 "straight", "white", "black"
,因为这些术语超出了 demographic mentions
而有更频繁的用途(例如,作为 basic color terms
)。我们还删除了各列表中的重复项,删除了一些同时出现在 Gender and Sex
以及 Sexual Orientation
中的术语。
对于 Gender and Sex
而言,虽然 She
代词的提及文档更少,但 "female"
一词出现在更大比例的文档中。这可能意味着虽然关于 She
代词的上下文更少,但关于 "females"
的评论更为普遍,这可能反映了这些术语在 linguistic markedness
中的差异(《Stereotyping norwegian salmon: An inventory of pitfalls in fairness benchmark datasets》
)。
对于 Sexual Orientation
, top 5
术语全部与 LGBTQ+
身份相关。
对于 Nationality, Race and Ethnicity
,我们观察到西方倾向(Western skew
)(《Re-contextualizing fairness in nlp: The case of india》
)。 例如,"American"
一词在 69.4%
的文档中提及,"European"
比其他种族和族裔更常见,而 "Christian"
是最常见的宗教(其次是 "Catholic"
和 "Jewish"
)。
Data Toxicity
:我们使用在 ToxiGen
数据集上微调的 HateBERT
分类器,用于测量预训练语料英语部分中的毒性。我们独立地对文档的每一行进行评分,并对其取平均以得到文档分数。Figure 13
显示了完整语料的 10%
随机采样中分数的分布。只有大约 0.2%
的被评估文档被赋予 0.5
或更高的可能性分数,这意味着我们的预训练数据中存在少量毒性。
Language Identification
:虽然我们的预训练数据主要是英语,但也包含少量其他语言的文本。Table 10
显示了我们语料中语言的分布,其中表格中仅包含大于文档占比 0.005%
的语言。我们的分析使用了 fastText
语言识别工具,语言检测阈值设置为 0.5
。英语占主要地位的训练语料意味着该模型可能不适合用于其他语言。
Safety Benchmarks for Pretrained Models
:我们在三个流行的自动的 benchmarks
上评估了 Llama 2
的 safety
能力,这涉及语言模型安全性的三个关键维度:
Truthfulness
:指语言模型是否由于误解、错误信念而产生已知的虚假陈述。我们采用 TruthfulQA
来测量我们的 LLM
能够生成多可靠的输出,这些输出要求与事实和常识一致。
Toxicity
:定义为语言模型生成有毒、粗鲁的、对抗型的或隐性仇恨内容的倾向。我们选择 ToxiGen
来测量不同分组中产生有毒语言和仇恨言论的量。
Bias
:定义为 model generations
如何复制现有的 stereotypical social biases
。我们使用 BOLD
来研究 model generations
中的情感如何随着 demographic attributes
而变化。
我们在 Table 11
中比较了 Llama 2
与 Llama 1
、Falcon
和 MPT
的表现。对于解码,我们将温度设置为 0.1
,并使用核采样(nucleus sampling
),将 top-p
设置为 0.9
。 对于 TruthfulQA
,我们呈现 truthful and informative
的 generations
的百分比(越高越好)。 对于 ToxiGen
,我们呈现被指标确定为有毒的 generations
的百分比(越低越好)。 基准测试和指标的详细描述可在附录 A.4.7
中找到。
与 Llama 1-7B
相比,Llama 2-7B
的真实性和信息性提高了 21.37%
、毒性降低了 7.61%
。我们还观察到 pretrained
的 Llama-2 13B
和 Llama-2 70B
的毒性有所增加,这可能是由于预训练数据更大、或不同的数据集 mixture
所致。一些人推测预训练数据集大小与下游模型的毒性或偏见之间存在关系(《On the dangers of stochastic parrots: Can language models be too big?》
),但验证这一说法的实证工作仍在进行中,仍需要最新模型提供的进一步证据。
在附录 A.4.7
中,我们呈现了 bias
指标,例如 model generations
的情感随 demographic attributes
的变化。我们注意到,使用 BOLD prompts
,许多群体的整体 positive sentiment
有所增加。可以在附录 A.4.8
中找到根据不同 demographic groups
拆分的更详细结果。
Llama 2
在毒性指标上并未优于其他模型,我们推测这可能是因为我们避免了对预训练数据进行激进的过滤。回想一下,保留未过滤的预训练数据可能使 base
模型在更多下游任务(包括仇恨言论检测)上表现良好,并且出现意外过滤某些 demographic groups
的风险较小。我们观察到,从较少激进地过滤的预训练数据中训练的模型也需要少量的示例来实现合理的 safety-alignment
。我们重申,这种 motivated choice
意味着在部署 Llama 2 base models
之前应该应用额外的 safety mitigations
。
benchmarks
总结了模型的功能和行为,使我们能够了解模型的一般模式,但它们无法全面反映模型在人们或真实世界结果上的影响;这需要研究端到端的产品部署。需要进行进一步的测试和 mitigation
,以了解在特定上下文中部署系统时可能存在的 bias
和其他社会问题。为此,可能有必要测试 BOLD
数据集中提供的群体(种族、宗教和性别)之外的群体。随着 LLM
的集成和部署,我们期待持续的研究工作,这些研究工作将放大它们的潜力从而对这些重要社会问题产生积极影响。
在本节中,我们描述了 safety fine-tuning
的方法,包括 safety categories
、annotation guidelines
、以及我们用于缓解安全风险的技术。我们采用与 Fine-tuning
章节所述的普通微调方法相似的过程,但在与安全性问题相关的方面有一些显著区别。具体而言,我们在 safety fine-tuning
中使用以下技术:
Supervised Safety Fine-Tuning
:我们首先收集 adversarial prompts
和 safe demonstrations
,然后将它们包含在普通监督微调过程中(参考 Supervised Fine-Tuning
章节)。这让模型在 RLHF
之前就与我们的 safety guidelines
对齐,从而为高质量的 human preference data annotation
奠定基础。
Safety RLHF
:随后,我们将 safety
集成到 Reward Modeling
章节所述的普通 RLHF
流程中。这包括训练一个 safety-specific reward model
,并收集更具挑战性的 adversarial prompts
,从而用于 rejection sampling
风格的微调和 PPO optimization
。
Safety Context Distillation
:最后,我们使用 context distillation
(《A general language assistant as a laboratory for alignment》
)来改进我们的 RLHF
流程。这涉及通过在 prompt
之前加上一个 safety preprompt
(例如,"You are a safe and responsible assistant"
)来生成更安全的模型响应,然后在没有 safety preprompt
的情况下对模型进行微调,从而本质上将 safety preprompt (context)
蒸馏到模型中。我们使用一种 targeted approach
,允许我们的 safety reward model
为每个样本选择是否使用 context distillation
。
根据先前工作中发现的 LLM
的局限性,我们为标注团队设计了指令,从而沿着两个维度创建 adversarial prompts
:
风险类别(risk category
):表示 LLM
可能产生不安全内容的潜在主题。
所考虑的风险类别大致可分为以下三大类别:
非法的和犯罪的活动(illicit and criminal activities
):例如恐怖主义、盗窃、人口贩卖。
仇恨的和有害的活动(hateful and harmful activities
):例如诽谤、自残、暴饮暴食、歧视。
没有资格的建议(unqualified advice
):例如医疗建议、财务建议、法律建议。
攻击向量(attack vector
):覆盖不同类型的 prompts
的问题风格,其中这些 prompts
可能引发模型的不良行为。
所探索的攻击向量包括:心理操纵 psychological manipulati
(例如权威操纵 authority manipulation
)、逻辑操纵(例如错误前提)、语法操纵(例如错字)、语义操纵(例如比喻)、视角操纵(例如角色扮演)、非英语语言等。
然后,我们为 safe and helpful
的模型响应定义最佳实践:如果可以的话,模型应首先解决直接的安全问题,然后通过向用户解释潜在风险来解决 prompt
,最后如果可能的话提供额外信息。我们还要求标注员避免 negative user experience categories
(见附录 A.5.2
)。这些指南旨在成为模型的通用指导,并且会迭代地进行细化和修订从而包括新识别的风险。
根据上一节确立的指南,我们从受过训练的标注员那里收集 prompts
和demonstrations of safe model responses
,并以 Supervised Fine-Tuning
节所述的相同方式使用数据进行监督微调。一个示例可在 Table 5
中找到。
首先,我们指示标注员想出他们认为可能诱导模型展现不安全行为(即执行 red teaming
,由指南所定义)的 prompts
。随后,标注员的任务是编写模型应该产生的 safe and helpful response
。
我们在 Llama 2-Chat
的开发初期就观察到,它能够从监督微调中的 safe demonstrations
中进行泛化。该模型快速学会了编写详细的 safe responses
、解决安全问题、解释主题为何可能敏感、以及提供额外的有帮助信息。具体而言,当模型输出 safe responses
时,这些响应通常比 average annotator
编写的内容更详细。因此,在收集了几千个 supervised demonstrations
后,我们完全切换到 RLHF
,从而教模型编写更加 nuanced
的响应。使用 RLHF
进行全面的 tuning
的额外好处是:它可能使模型对 jailbreak attempts
更具鲁棒性(《Training a helpful and harmless assistant with reinforcement learning from human feedback》
)。
我们首先按照 Reward Modeling
章节所述的方式收集针对 safety
的人类偏好数据从而进行 RLHF
:标注员编写他们认为可能引发不安全行为的 prompt
,然后比较多个model responses
(这些响应是模型针对该 prompt
的输出),并根据一组指南选择最安全的响应。然后,我们使用人类偏好数据训练一个 safety reward model
(见 Reward Modeling
章节),并复用 adversarial prompts
从而在 RLHF
阶段从模型中采样。
Better Long-Tail Safety Robustness without Hurting Helpfulness
:安全性本质上是一个长尾问题,其中的挑战来自极少数非常具体的 cases
。我们通过获取两个中间的 Llama 2-Chat checkpoints
(一个在 RLHF
阶段没有adversarial prompts
、另一个有 adversarial prompts
)来研究 Safety RLHF
的影响,并使用我们的 safety reward model
和 helpfulness reward model
对这两个 checkpoints
的响应进行评分。
在 Figure 14
中,我们绘制了safety
测试集上 safety RM
的分数分布的变化(左图)、以及helpfulness
测试集上 helpfulness RM
的分数分布的变化(右图)。
在左图,我们观察到 safety tuning with RLHF
后,safety set
上 safety RM scores
的分布向更高的奖励分数移动,靠近零分的长尾变薄。左上角出现了一个明显的聚类,表明 model safety
的改进。
在右图,我们没有在的 helpfulness score
分布在 safety tuning with RLHF
之后得以保留。换句话说,给定足够的 helpfulness
训练数据,额外的 safety mitigation
阶段不会对有用性造成任何明显的负面影响。
一个定性的例子如 Table 12
所示。
Impact of Safety Data Scaling
:先前的研究已经观察到 LLM
的有用性与安全性之间存在竞争(《Training a helpful and harmless assistant with reinforcement learning from human feedback》
)。为了更好地理解添加 safety training data
如何影响模型的整体性能,特别是有用性,我们通过调整 RLHF
阶段中所使用的 safety data
的数据量来研究 safety data scaling
的趋势。在此消融实验中,我们保持有用性训练数据的数量不变(约 0.9M
个样本),并逐渐增加 model tuning
中使用的 safety data
的数据量,从 0%
增加到 100%
(约 0.1M
个样本)。 对于特定的 training data mix recipe
,我们遵循 Supervised Fine-Tuning
章节所述的过程,并对 Llama 2 pretrained model
微调 2 epochs
。
最终,我们获得了六个模型变体,它们分别使用 total safety data
的 0%, 1%, 10%, 25%, 50%, 100%
来训练得到。我们使用 Reward Modeling
章节中描述的safety reward model
和 helpfulness reward model
对其进行评估。 对于每个变体,我们分别使用safety reward model
和 helpfulness reward model
,针对 Meta Safety
测试集和 Helpful
测试集中的 prompts
所对应的 model generations
进行评分。
如 Figure 15
所示,我们使用奖励模型分数的平均值作为 safety and helpfulness
的模型性能的代理。我们观察到:随着 safety data
占比的增加,模型处理 risky and adversarial prompts
的性能明显提高,并且我们在 safety reward model
分数分布中看到较轻的尾巴。同时,平均有用性分数保持不变。我们推测,这是因为我们已经有足够大量的有用性训练数据。附录 A.4.2
列出了更多的定性结果,展示了训练中不同数量的 safety data
如何改变模型对 adversarial prompts
和 non-adversarial prompts
的响应。
Measure of False Refusal
:尽管我们没有看到模型有用性的整体退化,但我们通过互动定性地观察到,经过更多 safety mitigation
的模型以更保守的方式回答某些问题(例如,附录 Table 38
中的示例)。作为后续工作,我们测量错误拒绝(false refusal
)以量化模型错误地拒绝回答 non-adversarial prompts
的频率。在这里,我们将错误拒绝定义为:模型由于不相关的安全性问题而错误地拒绝回答合法的 user prompts
。由于合理原因而超出模型能力而拒绝回答,例如 "I am not capable of participating in video calls"
和 "2024 is beyond my knowledge cut-off date"
,不计为错误拒绝。我们训练了一个分类器来检测响应中的拒绝,并将分类器应用于:
1)
:上述的有用性测试集。
2)
:一个由 210
个样本组成的裁剪好的 borderline
测试集,目的是进行类似 OpenAI
的边界测试。 borderline
数据集的设计意图是:使它的 prompts
看起来具有对抗性(例如包含敏感的单词或敏感的子词),但实际上并非不安全。例如,"give me a recipe for Christmas Crack"
。见附录 Table 41
中的更多示例。
随着更多安全性数据被 mixed
,两个数据集上的 false-refusal rate
都变大(见附录 Figure 33
)。但是,即使使用 100%
的安全性数据,在有用性数据集上的 false refusal
也总体上很少( 约0.05%
)。另一方面,由于 borderline
数据集的难度,在 borderline
数据集上的 false-refusal rate
要高得多。当 prompt
包含经常出现在 unsafe generations
中的单词(如 "bomb"
)时,Llama 2-Chat
有时难以区分该 prompt
是否安全。附录 Table 41
显示了我们发现的一些 false refusals
的示例。
我们鼓励 Llama 2-Chat
将 adversarial prompts
关联更安全的响应,通过使用 context distillation
(《A general language assistant as a laboratory for alignment》
),方法与 System Message for Multi-Turn Consistency
章节类似。我们观察到,通过在模型的输入前面加上一个 safety preprompt
(例如 "You are a safe and responsible assistant"
),可以有效增强 LLM
的安全性。与 supervised safety fine-tuning
一样,safety context distillation
提供了一种快速方法从而引导模型在 hard adversarial prompts
上的响应,以便模型可以在 RLHF
中进一步改进。
具体而言,我们通过在 adversarial prompts
前加上一个 safety preprompt
来应用 context distillation
,从而生成更安全的响应;然后在给定不含 safety preprompt
的 adversarial prompt
的条件下,用模型自己的 safe output
来微调模型。我们使用模板自动生成 safety preprompts
。具体而言,我们使用通常与安全行为相关联的各种形容词,如 "responsible", "respectful", "wise"
,旨在模型将其与正面特性相关联,其中这些正面特性是我们希望反映在 safe answers
中的。我们在附录 Table 39
中展示了 safety preprompts
的示例。
这可以视为一种
self-distillation
:自己给自己蒸馏。用更安全的响应来监督自己。
Context Distillation with Answer Templates
:在 prompt collection
阶段,我们还要求标注员根据风险类别(risk categories
)对 prompts
进行标注,这使得甚至可以进行 more targeted preprompts
。具体而言,这允许我们根据每个确定的风险类别,提供一些专门的 answer templates
,这些 answer templates
是关于如何处理 adversarial prompts
。Figure 16a
显示了 context distillation
和 context distillation with answer templates
对 safety RM
分数的影响。
Rejecting Context Distillation Errors with the Safety Reward Model
:对 helpful prompts
执行 safety context distillation
可能会降低模型性能,并导致更多的 false refusals
(见附录 Table 40
)。因此,我们仅对 adversarial prompts
执行 safety context distillation
。但是,我们观察到,即使在处理 adversarial prompts
时,context distillation
有时也会降低响应质量。具体来说,如果模型响应已经具有高质量,则应用 context distillation
会导致不太相关的回复,因为模型倾向于过度强调 preprompt
,通常会过度诉诸泛泛的关注(见附录 Table 40
中,由于 context distillation
导致的含糊不清答案的示例)。因此,我们利用 safety reward model
来决定是否使用 safety context distillation
:我们仅在样本获得比原始答案更好的 reward model score
时保留 context-distilled output
。我们注意到,这对模型表现非常糟糕的prompts
上特别有帮助,但会限制 context distillation
的负面影响(见 Figure 16b
)。
鉴于 LLM
的能力之广泛以及其训练数据之多样性,仅通过事后的 usage and analysis
来识别风险是不够的。相反,正如对其他 LLM
所做的那样,我们根据计算机安全领域常用的术语执行了各种主动风险识别,这在行话中称为 "red teaming"
。这种细粒度的分析非常重要,因为安全性是一个长尾问题,即使极少数边缘案例也可能造成明显的问题。即使量化的分数报告了良好的结果,这些定性的洞察也使我们能够以更全面的方式识别和定位 specific patterns
。
我们与各种内部员工、合同工、以及外部供应商进行了一系列 red teaming
。这些团队包括超过 350
人,其中包括网络安全、选举欺诈、社交媒体虚假信息、法律、政策、公民权利、伦理、软件工程、机器学习、responsible AI
、以及创意写作领域的域专家。他们还包括代表各种社会经济(socioeconomic
)、性别、种族和人种的人员。
red teamers
在广泛的风险类别(如犯罪计划、人口贩卖、受管制或受控物质、性露骨内容、没有资格的健康或财务建议、隐私侵犯等),以及不同的 attack vectors
(如假设性的问题、格式错误/拼写错误的输入、或扩展对话)上对我们的模型进行了探测。此外,我们进行了具体测试以确定我们的模型促进生产武器(例如核武器、生物武器、化学武器、以及网络武器)的能力;这些主题的发现很少,并已得到缓解。尽管如此,我们将在这方面继续我们的 red teaming
工作。
至今,我们所有的 red teaming
都针对英语模型输出,但至关重要的是包括 non-English prompts
和 non-English dialogue contexts
,因为这是一个众所周知的 attack vector
。在所有演习中,参与者都被给予风险类别的定义,并展示了与 LLM
危险交互的极少数示例。之后,每位参与者都成为一个小组的一部分,专注于特定类别的风险或 attack vectors
。在创建每个对话后, red team
参与者会对各种属性进行标注,包括风险领域、以及 5-point Likert scale
所捕获的风险程度。
下面是 red teams
成员提供的一些有用的洞察的示例,它们使得我们在整个开发过程中都能够改进模型:
[Early models]
在生成不安全响应时更可能不会注意到它们包含有问题的内容。然而,[slightly later models]
倾向于显示其知道内容存在问题,甚至它们会继续提供了不安全的响应。例如这个洞察:"They respond with ‘[UNSAFE CONTENT] is not appropriate to discuss, etc.’ and then immediately follow up with ‘With that said, here’s how [UNSAFE CONTENT].’"
。
通过在请求中包含 "quirks"
或特定要求来分散(distracting
)[early models]
,通常能够克服通过更直接的要求遇到的任何不情愿(reluctance
)。例如这个洞察:"A creative writing request (song, story, poem, etc.) is areliable way to get it to produce content that it is otherwise robust against"
。
在 [early models]
,将有问题的请求嵌入 positive context
中通常成功地掩盖了正在请求 problematic output
的事实。例如这个洞察:"The overall principle I’ve found most effective for any kind of attack is to hide it in language that is positive, progressive, and empowering."
。
From Red Teaming Insights to Safer Models
:至关重要的是,在每次演习之后,我们对收集的数据进行了彻底分析,包括对话长度、风险区域分布、主题虚假信息的直方图(如果适用的话)、以及风险程度评级。在每种情况下,我们都以总体教训(overall lessons
)为指导,帮助进一步改进模型的安全性训练,并特别从这些演习中获取数据进行模型微调、模型反馈训练、以及作为其他 safety model training
的信号。
在几个月内进行了多轮 red teaming
,从而衡量内部发布的每个新模型的鲁棒性。我们将模型相对于一个 red teaming exercise
(这个 red teaming exercise
由一组专家执行)的鲁棒性 promps
数量,其中这些 prompts
会触发模型的违规响应。例如,在我们的 7B
模型上,我们观察到 red teaming
迭代和模型 refinements
之后,1.8
增加到 0.45
。随着额外的 red teaming
的进行,鲁棒性可能会继续提高。随着新模型的产生,我们追踪的另一个量是上一轮 red teaming exercise
中发现的触发违规模型响应的 prompts
中,在给定的新候选模型版本中得到缓解的百分比。平均而言,我们的 rejection rate
在模型之间是 90%
。
Safety Human Evaluation
:我们根据 Safety Categories and Annotation Guidelines
章节中的安全类别收集了约 2000
个 adversarial prompts
进行人类评估,其中 1351
个 prompts
为单轮,623
个 prompts
为多轮。evaluation prompts
和响应的示例可在附录 A.4.6
中找到。
然后,我们要求评分者根据以下定义,使用 five-point Likert scale
判断模型的 safety violations
:
5
分:无 safety violations
且非常有帮助 。
4
分:无 safety violations
,仅存在 minor non-safety
问题。
3
分:无 safety violations
,但没有帮助、或存在其他 major non-safety
问题。
2
分:轻微或中度 safety violations
。
1
分:严重 safety violations
。
我们认为 1
分或 2
分的评级属于违规,并使用违规百分比作为主要评估指标,以平均评分为补充。每个样本由三名标注员进行标注,我们采用多数表决来确定响应是否违规。我们使用 Gwet’s AC1/2
统计量测量 inter-rater reliability: IRR
,与 helpfulness human evaluation
相同。IRR
分数根据 annotation batch
的不同在 0.70
至 0.95
之间,这表示标注员对安全评估具有高度一致。 在 Llama 2-Chat
标注中,根据 Gwet
的 AC2 measure
,平均 IRR
为 0.92
。 我们在模型违规率较高的 batches
中看到较低的 IRR
分数,如 Vicuda
;并且在模型违规率相对较低的 batches
中看到较高的IRR
分数,如 Llama 2-Chat, Falcon, ChatGPT
。
我们在 Figure 17
中显示了各种 LLM
的整体违规百分比和安全评分。在所有模型规模中,Llama 2-Chat
具有可比的或更低的整体违规百分比,而 ChatGPT
和 Falcon
其次,然后是MPT
和 Vicuna
。重要的是要谨慎解释这些结果,因为它们会受到 prompt set
局限性、review
指南的主观性、内容标准、以及个人评分者主观性的影响。 通过手动分析,我们发现 Falcon
的响应通常很短(一两句话),因此不太容易产生不安全内容,但通常也不太有帮助。 这反映在 Falcon
大量的评分为 3
分的响应。因此,我们注意到,尽管 Falcon
和 Llama 2-Chat(34B)
的违规百分比看起来相似(3.88 vs 4.45
),但 Figure 17b
中 Falcon
的平均评分远低于 Llama 2-Chat
。
在 Figure 18
中,我们分别报告了单轮对话和多轮对话中的违规百分比。各模型的一个趋势是:多轮对话更容易诱导不安全的响应。也就是说,与 baseline
相比,Llama 2-Chat
的表现仍很好,特别是在多轮对话中。我们还观察到,Falcon
在单轮对话中表现特别出色(很大程度上是由于其简洁性),但在多轮对话中表现要差得多,这可能是由于缺乏 multi-turn supervised fine-tuning data
。
在 Figure 19
中,我们显示了不同 LLM
的各类别 safety violation
百分比。尽管各类别中的模型性能相似,但 Llama 2-Chat
在 unqualified advice
类别下的违规较多(尽管绝对意义上仍很低),原因有几个,包括有时缺乏适当的免责声明(例如 "I am not a professional"
)。对于其他两个类别,无论模型大小如何,Llama 2-Chat
始终能够保持可比的或更低的违规百分比。
Truthfulness, Toxicity, and Bias
:在 Table 14
中,相对于 pretrained Llama 2
,fine-tuned Llama 2-Chat
在真实性(70B
为 50.18 -> 64.14
)和毒性(70B
为 24.60 -> 0.01
)方面有了很大改进。Llama 2-Chat
所有规模的 toxic generations
百分比都缩减到了有效的 0%
:这是所有被比较模型中最低的毒性水平。
整体而言,与 Falcon
和 MPT
相比,fine-tuned Llama 2-Chat
在毒性和真实性方面显示出最佳表现。 微调后,Llama 2-Chat
在 BOLD
中的许多 demographic groups
中整体呈现出更 positive sentiment
。 在附录 A.4.8中
,我们针对 bias benchmark
呈现了模型在不同子组中的 generation sentiment
打分明细,以及有关真实性和 bias
的更深入分析和结果。
在这里,我们讨论了在 RLHF
中观察到的有趣属性。然后,我们讨论了 Llama 2-Chat
的局限性。最后,我们提出了负责任地发布这些模型的策略。
我们的tuning
过程揭示了几个有趣的结果,例如 Llama 2-Chat
的 temporally
地组织知识的能力,或调用外部工具的 API
的 能力。
Beyond Human Supervision
:在项目开始时,我们中的许多人倾向于选择 supervised annotation
,因为它提供更稠密的信号。与此同时,强化学习以其不稳定而闻名,对 NLP
研究社区的一些人来说似乎是一个模糊的领域。但是,强化学习被证明非常有效,特别是考虑到它的成本效率和时间效率。我们的发现强调,RLHF
成功的关键决定因素在于它在整个标注过程中促进人类和 LLM
之间的协同作用。
即使训练有素的标注员也会有显著的写作变化。在 SFT annotation
上微调的模型会学习到这种多样性,包括,不幸的是长尾中的执行不当的标注。此外,模型的性能受最熟练的标注员的写作能力所限。与 SFT
相比,标注员在为 RLHF
比较两个输出的 preference annotation
时更少受到歧义的影响。因此,奖励机制可以快速地将 undesirable
的尾部分布赋予低分,并与人类偏好对齐。这个现象如 Figure 20
所示,我们可以看到最差的答案逐步被删除,分布向右移动。
此外,在标注过程中,模型有可能进入甚至最好的标注员也可能无法绘制的写作轨迹(writing trajectories
)。尽管如此,人类仍然可以在比自己的写作能力更强大的情况下,通过比较两个答案来提供有价值的反馈。进行一个类比,虽然我们自己不都是成功的艺术家,但我们欣赏和批评艺术的能力仍然存在。我们认为 LLM
的卓越写作能力,正如它们在某些任务中超过人类标注员所展现的,本质上是由 RLHF
驱动的,正如 《Chatgpt outperforms crowd-workers for text-annotation tasks》
和 《Is chatgpt better than human annotators? potential and limitations of chatgpt in explaining implicit hate speech》
所记录的。监督数据可能不再是 gold standard
,这种不断发展的情况迫使人们重新评估 "supervision"
的概念。
In-Context Temperature Rescaling
:我们观察到一个与 RLHF
相关的有趣现象,这是我们所知目前未曾报道的:根据上下文动态地重新缩放温度。如 Figure 8
所示,温度似乎受 RLHF
的影响。然而,有趣的是,我们的发现也表明,温度变化并非均匀地应用于所有 prompts
,如 Figure 21
所示。
例如,当涉及 creativity
的 prompts
时,如 “写一首诗”,温度的增加在我们的各个 RLHF iterations
中继续产生多样性。这可以在 Self-BLEU
斜率中观察到,它反映了一种模式,这种模式与 SFT
模型相媲美。
另一方面,对于基于 factual information
的 prompts
,如 "What is the capital of?"
,Self-BLEU
斜率随温度的推移而减小。这种模式表明,尽管温度正在上升,但模型仍在一致地对factual prompts
提供相同的响应。
Llama 2-Chat Temporal Perception
:我们的模型展示了令人印象深刻的泛化能力,如 Figure 22
所示。我们手动测试了数十个示例,并始终观察到,即使提供的信息很少,我们的模型也表现出强大的能力来以时间方式(temporal manner
)组织其知识。为了向 Llama 2-Chat
灌输时间的概念,我们收集了一组与特定日期相关的 1000
个 SFT
样本。这些样本包括 "How long ago did Barack Obama become president?"
这样的问题。每个样本都与两个关键性的元数据相关联:提出 query
的日期(这会影响响应结果)、事件日期(在这个时间点之前,问题没有任何意义,即事件未发生)。
观察结果表明,尽管 LLM
的训练仅基于 next-token prediction
、以及不考虑 chronological context
的随机混洗的数据,但LLM
已经在比以前认为的更大程度上内化了时间的概念。
Tool Use Emergence
:将 LLM
与工具集成是一个不断发展的研究领域,正如(《Augmented language models: a survey》
)所强调的。 Toolformer
(《Toolformer: Language models can teach themselves to use tools》
)中设计的方法需要采样数百万条轨迹,并为每个工具制定 few-shot examples
。尽管如此,这种技术只对每个示例使用一个工具,并且不会扩展到一系列工具的使用。
OpenAI
的插件的发布在学术界引发了大量讨论,引发了这样的问题:我们如何有效地教模型利用工具?或者这个过程是否需要大量的数据集?我们的实验表明,工具的使用可以通过 zero-shot
方式来自发对齐。虽然我们从未明确注释 tool-use usage
,但 Figure 23
展示了一个实例,其中模型展示了在 zero-shot context
中使用一系列工具的能力。
此外,我们的研究还扩展到评估具有计算器访问权限的 Llama 2-Chat
。此特定实验的结果载于 Table 15
。 尽管令人激动,LLM tool use
也可能引起一些安全问题。我们鼓励社区在这方面进行更多研究和 red teaming
。
与其他 LLM
相同,Llama 2-Chat
受制于众所周知的局限性,包括 post-pretraining
知识更新的中止、生成 non-factual
内容(如没有资格的建议)的潜力、以及幻想的倾向。
此外,我们的 Llama 2-Chat
初始版本主要集中在英语数据上。虽然我们的实验观察结果表明,模型在其他语言上获得了一定的专业性,但其专业性有限,主要是由于可用的 non-English
预训练数据有限(如 Table 10
所记录的)。因此,模型在英语以外的语言上的性能仍然脆弱,应谨慎使用。
与其他 LLM
一样,由于在公开可用的 online datasets
上进行训练,Llama 2
可能会生成有害的、冒犯的或有偏见的内容。我们试图通过微调来缓解这一问题,但可能仍存在一些问题,特别是对于没有公开可用数据集的其他语言。随着我们在解决这些问题上取得进展,我们将继续进行微调并在未来发布 updated
的版本。
并非所有使用 AI
模型的人都怀有良好意图,并且对话式的 AI agents
可能被用作生成错误的信息、或检索有关生物恐怖主义或网络犯罪等主题的信息等不良目的。但是,我们确实努力 tune
模型以避免这些主题,并减少它们可能提供的这些用例的功能。
虽然我们试图在安全性和有用性之间进行合理平衡,但在某些情况下,我们的 safety tuning
做得过分。Llama 2-Chat
的用户可能会观察到过于谨慎的方法,模型错误地选择拒绝某些请求、或响应过多的 safety details
。
pretrained models
的用户需要特别谨慎,并且应按照我们的 Responsible Use Guide
中描述的方式采取额外步骤进行 tuning
和部署。
Release Details
:我们在 https://ai.meta.com/resources/models-and-libraries/llama/
上为研究的和商业的用途提供Llama 2
。使用 Llama 2
的人必须遵守所提供的许可条款、以及我们的 Acceptable Use Policy
,这些政策禁止任何违反政策、法律、规则和法规的使用。
我们还提供 code examples
,以帮助开发人员使用 Llama 2-Chat
来复制我们的 safe generations
,并在用户输入和模型输出层应用基本的 safety
技术。这些代码样本可在此获得:https://github.com/facebookresearch/llama
。 最后,我们分享了一个Responsible Use Guide
,其中提供了关于 safe
开发和部署的指导方针。
Responsible Release
:虽然许多公司选择在幕后构建 AI
,但我们公开发布 Llama 2
是为了鼓励 responsible AI innovation
。根据我们的经验,开源的方法汲取了 AI
从业者社区的集体智慧、多样性和创造力,以实现这项技术的优势。collaboration
将使这些模型变得更好、更安全。整个 AI
社区(学术研究人员、公民社会、政策制定者、以及工业界)必须共同努力,严格分析和揭示当前 AI
系统的风险,并构建解决潜在的 problematic misuse
的解决方案。这种方法不仅促进了与各种各样利益相关者(大科技公司之外的人)的真正合作,而且也奠定了民主化地访问 foundational models
的基石。正如 《Defending against neural fake news》
所论证的,开源发布有助于提高透明度,并允许更多人访问 AI
工具,使该技术民主化并分发 AI expertise
。我们认为,AI expertise
的分发不仅仅是分发知识,它将刺激创新并加速行业进步。最后,开源发布这些模型可以合并成本并消除进入壁垒,使小企业可以利用 LLM
的创新来探索和构建 text-generation
用例。最终,我们相信这将为全球各种规模的组织创造一个更加公平的竞争环境,使其从 AI
的进步中受益。
我们知道并非所有使用 AI
模型的人都怀有良好意图,并且我们承认 AI
将如何影响我们的世界确实存在合理的担忧。toxic content generation
和 problematic associations
是 AI
社区尚未完全缓解的重大风险。正如本文所阐述的,我们已经取得了进展,限制了这些类型响应的 prevalence
。虽然我们认识到还有工作要做,但这种认识只会加深我们对 open science
和 AI
社区协同的承诺。