赞
踩
继2023年2月开源Llama之后,2023年7月Meta又开源了模型参数从70 亿到 700 亿不等的Llama 2,并同时开源了针对对话场景优化的LLaMA2-CHAT。LLama2 论文描述了微调和提高LLM安全性的方法以及在模型开发过程中的一些的观察。
论文摘要翻译:在这项工作中,我们开发并开源了 Llama 2,这是一组经过预训练和微调的大型语言模型 (LLMs),其参数规模从 70 亿到 700 亿不等。 我们微调过的被称为 Llama 2-CHAT的LLMs针对对话场景进行了优化。 我们的模型在测试的大多数基准上都优于开源聊天模型,根据我们对有用性和安全性的人工评估,它们可能是闭源模型的合适替代品。 我们详细描述了 Llama 2-Chat 的微调和安全改进方法,以便社区能够在我们的工作基础上继续发展,并为LLMs的负责任发展做出贡献。
LLAMA 2模型与LLama类似,只是做了几个改动来提高性能:
LLAMA 2和LLAMA 1 的对比如下图:
采用了LLAMA1中大部分的预训练设置和模型架构:
使用标准的transformer架构, 用RMSNorm 进行Pre-normalization
使用SwiGLU激活函数
使用rotary positional embeddings (RoPE)
与LLAMA1的主要区别是增加了上下文长度和使用grouped-query attention (GQA)
超参数:
使用超参对应的损失函数曲线如下图
Tokenizer: 与LLAMA 1一样使用BPE 算法,采用SentencePiece的实现。并且将所有数字拆分为单独的数字,并回退到byte来分解未知的 UTF-8 字符;总的词表大小为32k tokens。
模型使用NVIDIA A100s的集群训练,估计的碳足迹为539 tCO2eq。
报告了LLAMA1、LLAMA2、MosaicML Pretrained Transformer (MPT) 、Falcon在一些标准基准上的对比,结果如下图:
此外也将LLAMA 2 70B与闭源模型做了对比,如下图所示:
LlAMA 2-CHAT 是对包括指令微调和 RLHF的对齐技术进行数月研究和迭代应用的结果,需要大量计算和标注资源。
作者们一开始也先尝试了开源指令微调数据,但是发现这些数据缺乏多样性且质量不太好,所以决定先收集几千个高质量的SFT数据,样例数据如下图。
在仅使用比公开的几百万的第三方数据少的多的高质量样本后,得到的训练结果显著提升了,所以作者们得出了SFT的数据质量才是王道的结论,并发现数万数量级的高质量SFT数据集就可以获得高质量的结果。最终作者们的SFT数据集的大小为27540个标注样本。
因为观察到不同的标注平台和供应商的标注数据会造成模型性能差异,所以对标注质量的检测很重要。为了校验数据质量,人工校验了标注结果与SFT模型输出结果,并发现SFT模型输出结果与人工标注结果是有竞争性的。因此也表明可以转换优先级对SFT标注投入更多,而不是RLHF的偏好标注。
微调细节:
人类偏好数据选择二元比较协议(binary comparison protocol)
标注流程如下:
对于偏好标注,侧重于helpfulness和safety:
在安全阶段作者们还会收集安全标签,它将模型响应分为三类之一:1) 首选响应是安全的,其他响应不是,2) 两个响应都是安全的,3) 两个响应都是不安全的,这三类的比例分别为 18%、47% 和 35%。 这里不包括任何所选响应不安全而其他响应安全的示例,因为作者们相信更安全的响应也会被人类偏好或更好。
人工标注数据是按每周分批收集的,随着收集更多的偏好数据,奖励模型得以改进,因此能够训练更好的LLAMA2-CHAT版本。LLAMA2-CHAT的改进同时改变了模型的数据分布。如果没有接触到这个新的样本分布如hyper-specialization,奖励模型的准确性会迅速下降。所以在新的LLAMA2-CHAT迭代前用最新的LLAMA2-CHAT迭代版本来收集新的偏好数据很重要,这个步骤有助于保持奖励模型的分布并保持最新模型的准确奖励。
最终收集的数据共100万条,这个数据集与其他数据集的统计比较如下图:
奖励模型将一个模型的输出和对应的prompt(包括前一回合的上下文)作为输入,输出一个标量分数来评估模型生成的质量。
因为有研究表明,有时候helpfulness和safety相互权衡,所以作者们训练两个独立的奖励模型,一个用来优化helpfulness(Helpfulness RM),另一个用来优化safety(Safety RM)。
奖励模型从预训练chat模型的checkpoints初始化得到,这可以保证两个模型可以受益于预训练过程中获得的知识。模型的架构和超参和预训练一致,除了将下一个token预测的分类head用输出标量奖励的回归head代替。
为了训练奖励函数,将收集的人类偏好数据对转换成二元排序标签形式(chosen & rejected),并强制使被选择的输出有更高的分数。 损失函数与InstructGPT 一致:
L
r
a
n
k
i
n
g
=
−
l
o
g
(
σ
(
r
θ
(
x
,
y
c
)
−
r
θ
(
x
,
y
r
)
)
)
(
1
)
\mathcal{L}_{ranking} = - log(\sigma(r_{\theta}(x, y_c) - r_{\theta}(x, y_r))) \qquad (1)
Lranking=−log(σ(rθ(x,yc)−rθ(x,yr)))(1)
式中的
r
θ
(
x
,
y
)
r_{\theta}(x, y)
rθ(x,y)是模型权重
θ
\theta
θ时对prompt x 和 completion y 的标量分数,
y
c
y_c
yc是标注员选择的更偏好的模型响应,
y
r
y_r
yr是被拒绝的那个。
在此二元排序损失基础上,因为偏好评分如3.2.1节所述标注了四个点的维度(如significantly better),可以利用这个信息指导奖励模型为那些存在更大差异的生成结果分配更有差异的分数,所以作者们在损失中加入了一个margin分量:
L
r
a
n
k
i
n
g
=
−
l
o
g
(
σ
(
r
θ
(
x
,
y
c
)
−
r
θ
(
x
,
y
r
)
−
m
(
r
)
)
)
(
2
)
\mathcal{L}_{ranking} = - log(\sigma(r_{\theta}(x, y_c) - r_{\theta}(x, y_r)-m(r))) \qquad (2)
Lranking=−log(σ(rθ(x,yc)−rθ(x,yr)−m(r)))(2)
式中的margin m ( r ) m(r) m(r)是偏好评分的离散函数,对差异很大的响应对给一个大margin,而相似的响应对给一个小的margin,如下图所示。作者们发现margin分量有助于提高helpfulness奖励模型的准确性,特别是两个响应差异更明显时。
将收集的奖励数据与已有的开源偏好数据集组成更大的训练数据集。
经过试验,helpfulness奖励模型采用所有的Meta Helpfulness数据,及等量的从Meta Safety和开源数据集均匀采样得到的数据。
Safety 奖励模型采用所有的Meta Safety和Anthropic Harmless数据,及Meta Helpfulness和开源的helpfulness数据,前者和后者的比例为90/10。
对收集的每一批的人类偏好标注数据,留出1000个作为测试集来评估模型,将所有prompts组成的测试集称为“Meta Helpfulness"和"Meta Safety"。
将:SteamSHP-XL、the Open Assistant、 GPT4 作为baseline。 对GPT-4, 使用prompt “Choose the best answer between A and B,” (A和B是待比较的两个响应)
奖励模型结果如上图:
作者们按下图按偏好评级对分数进行分组时,可以发现:
对于奖励模型的大小、标注数据大小、奖励模型的准确性的示意如下图,有如下观察:
在相似规模的数据上,更大的模型获得了更好的性能
在有更多标注数据时,规模效应没有变得停滞,说明如果有更多的标注数据仍有性能提升的空间
尽管评估生成模型性能的最佳实践没有定论,但奖励模型的准确性作为LLama2-CHAT最终性能的最重要指标之一是没有歧义的
RLHF微调涉及两个主要算法:
这两种RL算法的主要区别在于:
因为作者们按批次收到人类偏好标注样本,RLHF模型也就有版本区分,记作RLHF-V1,…, RLHF-V5。在RLHF-V4之前,只使用拒绝采样微调,从RLHF-V4开始使用两种RL算法,在拒绝采样的checkpoint的结果上应用PPO,再重新采样。
只在最大的模型70B LLAMA-CHAT进行拒绝采样,所有更小的模型都是从最大模型的拒绝采样数据上进行微调,也就是蒸馏了大模型的能力到小模型。
在每个迭代阶段,从最新模型中为每个prompt抽取K个答案样本,用实验时可以获得的最佳奖励模型对每个样本进行评分,并选择最佳答案。在RLHF-V3之前的模型版本中,只会收集从前一个迭代得到的样本,比如RLHF-V3 只会用从RLHF-V2的样本来训练。但是作者们发现尽管有持续的提升,但是会导致某些能力的退步,比如RLHF-V3对诗词韵律相比之前版本有退化。所以在接下来的迭代中,作者们修改了策略,合并了所有之前的迭代中表现好的样本,比如RLHF-V1和RLHF-V2的样本。
拒绝采样的优势如上图所示:
对不同temperature,Llama 2-Chat-SFT (上图左) and a Llama 2-Chat-RLHF(上图右) 在N个样本中的最大奖励曲线如上图。
在这一步中,预训练语言模型是待优化的策略,奖励模型作为真实奖励(人类偏好)的估计,优化的目标为:
a
r
g
m
a
x
π
E
p
∼
D
,
g
∼
π
[
R
(
g
∣
p
)
]
(
3
)
\mathop{argmax}_{\pi} \mathbb{E}_{p\sim \mathcal{D}, g \sim \pi}[R(g|p)] \qquad (3)
argmaxπEp∼D,g∼π[R(g∣p)](3)
通过从数据集
D
\mathcal{D}
D 中采样prompts p 和策略
π
\pi
π的生成结果g来迭代改进策略,并使用PPO算法和损失函数来实现这个目标。
在优化过程中使用的最终的奖励函数如下式,包括从原先的策略
π
0
\pi_0
π0发散得到的惩罚项,就像之前的研究工作一样,作者们发现这个约束有助于训练的稳定性,并减少reward hacking即从奖励模型得到很高的分数但是人工评估时分数很低:
R
(
g
∣
p
)
=
R
~
c
(
g
∣
p
)
−
β
D
K
L
(
π
θ
(
g
∣
p
)
∣
∣
π
0
(
g
∣
p
)
)
(
4
)
R(g \mid p) = \tilde{R}_c(g \mid p) - \beta D_{KL}(\pi_{\theta}(g \mid p) \ || \ \pi_0(g \mid p) ) \qquad (4)
R(g∣p)=R~c(g∣p)−βDKL(πθ(g∣p) ∣∣ π0(g∣p))(4)
将
R
c
R_c
Rc定义为safety(
R
s
R_s
Rs)和helpfulness(
R
h
R_h
Rh)奖励函数的分段函数,作者们打标了数据集中的一些prompts,这些prompts很可能得到不安全的响应因此优先使用safety模型。而0.15被用作过滤不安全响应的阈值,它对应着在Meta Safety测试集上评估时0.89的精度和0.55的召回。并且作者们发现白化最后的线性分数(用 logit 函数反转 sigmoid)有助于增加稳定性并且平衡上式的KL惩罚项(
β
\beta
β)
R
c
(
g
∣
p
)
=
{
R
s
(
g
∣
p
)
if IS_SAFETY
(
p
)
or
R
s
(
g
∣
p
)
<
0.15
R
h
(
g
∣
p
)
otherwise
R
~
c
(
g
∣
p
)
=
WHITEN
(
LOGIT
(
R
c
(
g
∣
p
)
)
)
对所有的模型有如下超参:
对所有的模型训练200至400次迭代,用一些留出的prompts来评估进行earyly stopping。 对于70B的模型一次PPO迭代平均花费330秒,为了训练更快,使用FSDP,但是做了一些修改使生成速度更快。
在对话设置中,一些指令应该在对话的所有回合中都满足,比如简洁地回答或者"act as"。但是作者们的初始RLHF模型在对话的几个回合之后就忘记了初始的指令,比如下图的左侧示意的。
为了改进模型忘记最初的指令,使用了GAtt方法,使用后的效果如上图右侧
假设有来自用户和智能助手的多轮对话,用一个列表的消息表示 [ u 1 , a 1 , ⋯ , u n , a n ] [u_1, a_1, \cdots, u_n, a_n] [u1,a1,⋯,un,an],其中 u n u_n un和 a n a_n an对应第n回合的用户和智能助手的消息。定义一个指令inst,需要在整个对话中遵循,比如inst可以为“act as",将这个指令与对话中所有的用户信息连接。
接着,用最新的RLHF模型从这个合成数据中采样,训练的时候,将之前回合的所有tokens对应的损失置为0,包括智能助手的消息。
对于训练指令,作者们还创建了一些合成限制条件来自于:Hobbies (“You enjoy e.g. Tennis”), Language (“Speak in e.g. French”), or Public Figure (“Act as e.g. Napoleon”)。为了获得爱好和公众人物列表,作者们要求 Llama 2-Chat 生成这些列表,以避免指令和模型知识之间的不匹配(例如,要求模型扮演它在训练中没有遇到过的人)。为了使指令更加复杂多样,通过随机组合上述约束条件来构建最终指令。在为训练数据构建最终系统信息时,也会对原始指令进行半数以上的修改,以减少其冗长程度,例如,“Always act as Napoleon from now”->“Figure: Napoleon.” ,这些步骤产生了一个 SFT 数据集,在此基础上对 Llama 2-Chat 进行微调。
作者们从RLHF-V3开始应用GAtt方法,表明GAtt方法可以在20+个回合以上保持一致,直到达到最大上下文长度。下图可视化了GAtt方法的有效性。
因为人工评估不总是能够规模化,为了节省成本和加快迭代速度,在RLHF-V1至V5的每次迭代中为了选择性能最好的模型,首先观察最新奖励模型的奖励提升。
为了确保奖励模型的鲁棒性,先评估了奖励模型与人工偏好标注是一致的。
下图是不同的SFT模型和RLHF模型与ChatGPT用模型评估的结果,左边的图是用作者们自己的奖励模型评估,右边是用GPT-4评估。
人工评估是判断自然语言生成包括对话模型的金标准,为了评估主要模型版本的质量,要求人类标注员在helpfulness和safety上评估模型,评估数据集包括超过4000条的单轮和多轮的prompts。
如下图所示结果表明:
在人工评估中,三个不同的标注员对每个模型生成提供独立的评估,作者们使用了Gwet’s AC1/2统计来测量inter-rater reliability(IRR)
尽管人工评估表明LLAMA2-CHAT模型可与ChatGPT匹敌,但也要考虑其局限性:
对于训练中使用的每个数据集,作者们遵循了 Meta 的标准隐私和法律审查流程。在训练中未使用任何 Meta 用户数据。排除了某些已知包含大量个人隐私信息的网站的数据。尽最大努力高效地训练模型,以减少预训练的碳足迹(第 2.2 节)
人口代表性-代词: 在英语训练语料库中,作者们计算了如下图中的表 9a 中最常见的英语代词的频率。代词He相比于She更高。
人口代表性-身份:将语料中的叙述语分成五类,每一类显示top5的项(做了一些去重处理),如下图中的表9b
数据有毒性:从数据中抽样出10%样本来判断样本的有毒性(用的HateBERT分类器),如下图所示,预训练数据中有少量的有毒数据。
语言分布:下图显示了预训练数据中的语言分布,语言检测是通过fastText的语言检测实现的(阈值为0.5)。
预训练模型在安全评估基准上的表现:如下图所示,LLAMA2-7B 相比与LLAMA1-7B在真实性上有21.37%的提升,在有毒性上有7.61%的下降。但是13B和70B的LLAMA2在有毒性上有增加。LLAMA2相比其他模型在有毒性上也没有什么优势,作者们认为是因为在预训练数据过滤时激进的尽可能保留数据。
为标注团队设计了指令,将对抗性prompts分为两个维度:
而risk category被分为以下三个类别:
attack vector 包括:
并定义了模型响应关于safe和helpful的最佳实践:
该模型应首先发现当前的安全问题(如果适用)
通过向用户解释潜在风险来处理prompt
最后在可能的情况下提供其他信息。
除此之外,还要求注释者避免负面的用户体验类别(论文附录 A.5.2)。 该指南是作为模型的一般指南,并经过迭代细化和修订来包含新识别的风险。
根据4.2.1节的指南,从经过培训的标注者那收集prompts和安全模型响应演示,然后按照3.1的方式来进行有监督微调。一个训练数据样例如上面图片中的Table 5。
采用类似3.2.2的方法收集关于安全性的人类偏好数据:标注员编写他们认为会引发不安全行为的prompt,比较多个对prompt的模型响应,根据一系列指南选择最安全的一个响应。然后如3.2.2节所描述的训练safety奖励模型,并且在RLHF阶段会重复使用从模型中采样到的对抗prompts。
为了更好的理解Safety数据规模如何影响RLHF模型性能,做了消融实验,实验中保持helpfulness数据量不变(约0.9M样本),逐渐增加safety 数据量的大小,从0%, 1%, 10%, 25%, 50%, and 100%(约0.1M样本)的总safety数据。结果表明增加safety数据的比例,模型在处理危险和对抗性prompts的性能提升很快,并且在safety奖励模型分数分布上有更弱的长尾效果,同时helpfulness分数保持不变。如下图所示
模型的错误拒绝:实验发现训练时的sefety样本越多,错误拒绝率就越大,但是错误拒绝率很小即使是100%的safety样本也只有0.05%。 同时作者们发现LLAMA2-CHAT对于判断包含了在不安全生成中频繁的词比如bomb的prompt是否安全有困难。
Context Distillation: 作者们发现通过给模型加一个safety preprompt 如:“You are a safe and responsible assistant”,LLM的安全性能力可以有效提升。所以作者们先给每一个对抗性prompts添加一个safety preprompt来生成更安全的响应,然后用它自己的安全输出(去掉preprompt)来微调模型。safety preprompt 是由模板自动生成,用不同形容词如"responsible," "respectful’, "wise,"等来关联安全行为。
Context Distillation with Answer Templates: 在prompt收集阶段,作者们还要求标注员根据风险类别标注prompt,也就是提供了对抗样本该如何解决的更详细的答案模板。
对于helpful prompts加safety context distillation会损害模型性能并造成更多的错误拒绝,所以作者们只对对抗性prompts加safety context distillation,并同时让safety奖励模型来决定是否使用safety context distillation,效果如下图右图。
下面的图片的左图显示了Context Distillation 和 Context Distillation with Answer Templates对safety奖励模型分数的影响
组成了一个超过350人的来自各个领域的专家的团队来进行 red teaming。根据red teaming得到的洞见来改进模型的安全性。
在迭代过程中,有两个指标来跟踪新模型的鲁棒性:
收集了约2000条如4.2.1节的安全性类别的对抗性prompts用于人工评估,里面有1351个单轮对话prompts,623条多轮对话prompts,例子如附录A4.6.
使用如下定义的five-point Likert scale 来评估模型的安全违规:
将1和2定义为违反了安全性,并将安全违规率作为主要评估指标,平均评分作为补充。每一个例子由3位标注员打分并将多数投票作为响应是否违规。使用Gwet’s AC1/2来测量IRR,IRR分数按标注批次介于0.7和0.95之间,表明在安全性评估上较高的一致性。
下图比较了不同LLM在不同安全性类别上的违规率,LLAMA2-CAHT在unqualified advice类别上有相对更高的违规率
经过微调后的LLAMA2-CHAT比预训练模型在truthfulness和toxicity上都有所提升
模型也表现出来使用工具使用的涌现能力,比如下图评估了计算器使用的能力
LLAMA2-CHAT也有与其他LLM一样的局限性,如幻觉,生成有害的内容等。
在网站:https://ai.meta.com/llama 发布了Responsible Use Guide.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。