天天看点

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

作者:ChatGPT扫地僧

当我们点开Llama-2-chat的介绍页时候,我们可以得到其中的一些描述性信息: Llama-2-chat,先使用公开的在线数据【约2Trillion tokens】对 Llama 2进行预训练,然后通过监督微调【超10万条训练样本】得到Llama-2-chat 的初始版本,最后利用从人类反馈中强化学习(RLHF)【超100万条训练样本】对 Llama-2 -chat进行改进。

其中,参数版本范围涵盖70亿到700亿个参数,如下表所示,包括7B、13B以及70B三个版本,最大输入长度为4096个token。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

与之前的很多模型相比,可以看到SFT的规模只有强化阶段的十分之一,也就是说,llama2在强化方面,对齐上做了很多的工作,实际上当我们来看其技术报告时也会有这种感觉,76页的篇幅中有大段内容在讲强化。

正如,该工作所介绍到的“我们详细描述了我们对Llama 2-Chat进行微调和安全改进的方法,以便社区能够在我们的工作基础上为llm的负责任发展做出贡献。”

这是llama给人的一个很重要的侧重点,那就是安全、负责任的大模型。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

关于该工作的一些信息,我们可以看论文地址: https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/

以及开源的项目地址: https://github.com/facebookresearch/llama

事实上,今天对llama2的报道铺天盖地,有很多文章都在讲技术细节或者其他,我们也来看看,也着重的讲一些别样的东西,关注数据和评估,供大家一起参考。

一、从Llama2的模型卡片说起

模型卡片是个好东西,我们可以以结构化的方式来了解一个模型。

例如,我们可以从下表中找到一些细节:

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

Llama 2提供了包括预训练、微调阶段等,涵盖7B、13B、70B等参数范围的模型。实际上,还训练了34B的版本。

Llama 2输入输出都为文本,不是多模态。

Llama 2在今年1月到今年7月训练完成,也就是说花了半年的时间。

Llama 2采用的是自回归架构。

Llama 2可商用。

Llama 2是针对英文使用场景进行训练的,其他语种效果不会很好。

Llama 2训练花费了330万个GPU小时。

Llama 2在 2 万亿个token上进行了训练。使用的微调数据包括开源的指令数据以及一百万的强化数人工标注数据集,并且不涉及到用户信息。

Llama 2的预训练数据截止时间是2022年十月,但微调数据截止到今年的7月份。这个很新鲜。

除了这个,我们还可以再看看其耗费情况,

该模型预训练在 A100-80GB 型硬件(TDP 为 350-400W)上累计使用了 330 万 GPU 计算小时。估计总排放量为 539 tCO2eq。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

如上表所示,不同版本的消耗情况,其中,时间:训练每个模型所需的 GPU 总时间。功耗:所使用 GPU 的每个 GPU 设备的峰值功率容量,根据功率使用效率进行调整。

二、再看Llama2的预训练数据和基本架构

在模型架构上,使用优化的自回归Transformer,但做了一些改变来提高性能。

在数据方面,与第一代llama相比,采取了更健壮的数据清理,更新了数据混合的比率,额外增加了超过40%的token数,达到2万亿个token数据,这提供了一个很好的性能成本权衡,对最真实的来源进行上采样,以增加知识和抑制幻觉。

如下表是llama1的数据情况,我们可以再回顾下。重点就是其中只包括英文拉丁语种等,【大家经常会说他没中文,但实际上肯定包括,因为不可能清理地什么都没有】。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

在数据来源上,来自公开来源的新数据组合,其中不包括来自Meta产品或服务的数据。其中,在数据清洗上,从某些已知包含大量个人个人信息的网站上删除数据。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

从这个的分布看,我们可以看到,中文的占比已经达到了0.13%,位列第6位,这个与1代相比,理论上中文应该能支持的更好。

我们在这里再强调一下,预训练数据的截止日期为 2022 年 9 月,但一些微调数据的截止日期更近,可达 2023 年 7 月。

我们再看训练的架构,

Llama2采用了Llama 1中的大部分预训练设置和模型架构。使用RMSNorm应用预归一化,使用SwiGLU激活函数和旋转位置嵌入。

具体的,使用AdamW优化器进行训练,使用余弦学习率方式来动态调整学习率,预热2000步,并将最终学习率衰减到峰值学习率的10%,并使用0.1的权重衰减和1.0的梯度裁剪。

与Llama 1的主要架构差异包括增加了上下文长度【两倍关系】和分组查询关注(GQA)。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

分词器方面,使用与Llama 1相同的标记器,采用字节对编码(BPE)算法,使用sentencepece的实现。值得注意的是,与Llama 1一样,将所有数字拆分为单个数字,并使用字节来分解未知的UTF-8字符。总词汇表大小为32k。

三、再看Llama2的SFT微调与强化反馈

1、SFT微调阶段

先看SFT数据,该工作和很多工作一样,再次强调了质量就是你所需要的一切。quality is all you need。

第三方SFT数据可以从许多不同的来源获得,但发现其中许多缺乏多样性和质量,首先集中精力收集数千个高质量SFT数据示例,然后让供应商进行标注。

其实验表明,与采用来自第三方数据集的数百万个示例相比,使用来自基于供应商的标注工作的更少但更高质量的示例的训练结果得到了显著改善。

也就是说,一组有限的干净的指令调优数据足以达到高质量水平,成千上万的SFT注释足以获得高质量的结果。

该工作还观察到,不同的注释平台和供应商可能导致显著不同的下游模型性能,这突出了数据检查的重要性,即使在使用供应商来获取注释时也是如此。

为了验证数据质量,仔细检查了一组180个示例,将人工提供的标注与模型生成的样本【通过人工审查】进行比较之后,发现,SFT模型的输出通常与人类注释者手写的SFT数据可以媲美,所以可以重新确定优先级,并将更多的标注工作投入到RLHF的基于偏好的标注中。这个在人力的安排上很有趣且很重要。

因此,在总共收集了27540条注释后,停止了对SFT的标注。

我们再看微调的细节,对于监督微调,使用用余弦学习率动态变化,初始学习率为2 × 10−5,权重衰减为0.1,批大小为64,序列长度为4096个token。

对于微调过程,每个示例由提示和答案组成。为了确保模型序列长度被正确填充,将训练集中的所有提示和答案连接起来。使用一个特殊的token来分隔提示和回答部分。

在loss计算上,因为文本过长,所以利用自回归目标并将用户提示的token损失归零,因此,仅在回答的token上反向传播。

最后,在微调次数上,对模型进行了2个epoch的微调,这样的话,是否意味着可以减少过拟合?

2、反馈强化阶段

还是先看数据,在人类偏好数据收集方面,要求标注人员者首先编写提示,然后根据提供的标准在两个抽样模型回复之间进行选择。

为了使多样性最大化,对给定提示的两个响应从两个不同的模型变量中采样,并改变温度超参数。

除了给参与者一个强制选择之外,还要求标注者标记他们对选择的答案的偏好程度:他们的选择是明显更好,更好,稍微更好,或者可以忽略的更好/不确定。

为了让指令更安全,例如,“给出制作炸弹的详细说明”可能被认为是有帮助的,但根据安全指南,这是不安全的。除了标注准则的不同,在安全阶段额外收集了一个安全标签,并让标注人员进行标注。

对应的标签分为三类:1)首选回复是安全的,其他回复不是,2)两个回复都是安全的,3)两个回复都是不安全的。

最后,收集了一个大型数据集,其中包含超过100万条。

有趣的是,该工作发现,摘要和在线论坛数据通常有较长的提示,而对话式提示通常较短。现有的开源数据集相比,llama2的偏好数据具有更多的会话回合,并且平均更长。

最后,一个有趣的问题是多轮的优化,对于多轮对话,引入Ghost Attention (GAtt)有助于控制多个回合的对话效果。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

其实现思路为:

假设可以访问两个人(例如,用户和助手)之间的多轮对话数据集,其中包含消息列表 [u1, a1, . 。。, un, an],其中 un 和 an 分别对应于第 n 轮的用户消息和助理消息。

然后,定义一条指令inst,在整个对话过程中都应遵守该指令。例如,inst 可以是“充当”。

然后,将该指令综合连接到对话的所有用户消息。

接下来,可以使用最新的 RLHF 模型从这些合成数据中进行采样。这个采样很有趣,因为有了一个上下文对话和样本,可以采用类似于拒绝采样的方式,即在除第一轮之外的所有轮次中删除它,而不是用指令来增加所有上下文对话轮次,但这会导致系统消息之间的训练时间不匹配,即最后一个轮次之前出现的所有中间辅助消息。

因此, 为了解决这个可能会损害训练的问题,只需将前一轮的所有标记的损失设置为 0,包括辅助消息,从而达到目的。

四、再看Llama2如何做模型评估

模型评估中,最容易忽视的一个问题就是数据污染,即数据泄露。简单的去重diff还不能解决这个问题。

该工作认为,如果一个token在评估样本和训练集中出现在任何超过10个token的 n-gram中时,则认为它被污染了,并将样本的污染百分比定义为被污染的token的百分比。因此,在评估之前,先做了这个处理。

接下来,我们看它是怎么做模型评估费,如下表所示,给出了在一些榜单中的性能对比结果。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

其可以归位为常识推理、代码、世界知识、阅读几个、考试等几个维度。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

其中:

代码,包括HumanEval 和MBPP ,指标为平均pass@1分数。

常识性推理,包括PIQA 、SIQA 、HellaSwag、WinoGrande、ARC easy and challenge 、OpenBookQA 和CommonsenseQA ,指标为准确率的平均值。

世界知识,包括NaturalQuestions 和TriviaQA ,指标为准确率的平均值。

阅读理解,包括SQuAD 、QuAC 和BoolQ ,指标为准确率的。

数学。包括GSM8K和MATH,指标为准确率。

Standard Benchmarks基准。包括MMLU、Big Bench Hard H和AGI Eval。对于AGI Eval,只评估英语任务。指标为准确率。

具体细分指标如下:

1、MMLU评测

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

2、Standard Benchmarks

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

3、Code Generation代码生成

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

4、World Knowledge世界知识

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

5、Reading Comprehension阅读理解

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

6、Exams考试

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

此外,有个价值观评测值得很重要。这个采用了 TruthfulQA以及ToxiGen。

其中,对于TruthfulQA,给出了同时具有真实性和信息性的代数百分比(越高越好)。TruthfulQA的目的是测量模型的真实性,即模型识别主张是否真实的能力。"真实 "的定义是指 "真实世界的字面意义上的真实",而不是仅在信仰体系或传统中才是真实的主张。这一基准可以评估模型产生错误信息或虚假主张的风险。这些问题的写作风格多种多样,涵盖 38 个类别,设计具有对抗性。

对于 ToxiGen,给出了有毒性的百分比(越小越好),这个任务可以检查模型生成内容的毒性,论文地址:https://arxiv.org/pdf/2203.09509.pdf

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

五、最后看与Llama 1的差异性总结

1、架构与Llama 1上下文长度相比的变化

Llama 2的上下文窗口从2048个token扩展到4096个令牌。更长的上下文窗口使模型能够处理更多信息,这对于支持聊天应用程序中的更长的历史记录、各种摘要任务和理解更长的文档特别有用。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

表16比较了2k和4k上下文预训练在长上下文基准上的性能。两个模型都训练了150B个标记,保持相同的架构和超参数作为基线,仅改变上下文长度。

可以看到,在SCROLLS上的改进,其中平均输入长度为3.5k,并且在SQUAD上没有性能下降。

表17显示了较长的上下文模型在各种通用任务上保持了较强的性能。

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

2、Grouped-Query注意力

自回归解码的标准做法是缓存序列中前面标记的键(K)和值(V)对,从而加快注意力计算。然而,随着上下文窗口或批处理大小的增加,多头注意(MHA)模型中与KV缓存大小相关的内存成本显著增加。

对于较大的模型,KV缓存大小成为瓶颈,键和值预测可以跨多个头共享,而不会导致性能下降,因此可以使用具有单个KV投影的原始多查询格式或具有8 KV投影的分组查询关注变体,也就是GQA。此外还有MQA的做法【多头查询注意力,这个我们在之前的文章中有说过,可以看看】

Llama2开源可商用模型:从数据构造、模型架构和评估方式的总结

那么效果如何,在表18中,用MHA基线比较了MQA和GQA变体。

具体的,用150B令牌训练所有模型,同时保持固定的30B模型大小。

为了在GQA和MQA之间保持相似的总体参数计数,增加了前馈层的维度,以补偿注意层的减少。

对于MQA变体,将FFN维度增加1.33倍,对于GQA变体,将其增加1.3倍。

从结果中,可以看到,GQA变体在大多数评估任务上的表现与MHA基线相当,并且平均优于MQA变体。

总结

今天对llama2的报道铺天盖地,有很多文章都在讲技术细节或者其他,本文着重的讲了一些别样的东西,尤其关注数据和评估。

当然很多细节都在论文里,大家可以仔细看看?其中关于数据的处理,对于安全性的处理,对于奖励和强化阶段的标签细分,都值得我们借鉴。

今天就到这儿,下了地铁还写了许久,供大家参考。

参考文献

1、 https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/

2、https://github.com/facebookresearch/llama