searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

llama3技术报告解读

2024-09-23 09:42:56
50
0

1 Llama Models

Model Launch date Model sizes Context Length Tokenizer Acceptable use policy License Model Card
Llama 2 7/18/2023 7B, 13B, 70B 4K Sentencepiece Use Policy License Model Card
Llama 3 4/18/2024 8B, 70B 8K TikToken-based Use Policy License Model Card
Llama 3.1 7/23/2024 8B, 70B, 405B 128K TikToken-based Use Policy License Model Card

1.1 测评集指标

1.2 模型架构

1.2.1 模型架构:GQA,8-kv head

1.2.2 超参

  • 405B有126 层,层数少两层,这是一个训练阶段上方便流水线并行做切分的技巧。
  • 长文拼接时候,使用attention mask防止不同来源的数据串味。样本间穿越在标准预训练阶段影响不大,但作者说,在扩长序列时影响很大。
  • 词表大小为128K,英语语料的压缩率有所提高,同样计算量能够过更多数据,并且增强了非英语的能力。oken 词汇表结合了来自 tiktoken3 分词器的 100K tokens 和额外的 28K tokens,以更好地支持非英语语言。与 Llama 2 分词器相比,新分词器在样本英语数据上的压缩率从 3.17 提高到 3.94 个字符每个 token。这使得模型在相同的训练计算量下可以“阅读”更多的文本。还发现,添加来自特定非英语语言的 28K tokens 既提高了压缩比,也提高了下游性能,而对英语分词没有影响。
  • RoPE 的基数频率超参theta 调到了500000;Xiong 等人(2023)表明这个值对上下文长度达到 32,768 时有效。
  • Llama 3 405B 使用的架构有 126 层,token 表示维度为 16,384,有 128 个注意力头。模型大小是根据规模定律计算出的,对于我们的 3.8 × 10^25 FLOPs 训练预算来说是计算最优的。
  • 实施了两阶段方法来开发能够准确预测下游基准性能的规模定律:
    • 首先建立计算最优模型在下游任务上的负对数似然与训练 FLOPs 之间的相关性。
    • 接下来利用规模定律模型和使用更高计算 FLOPs 训练的旧模型,将下游任务上的负对数似然与任务准确率相关联。

1.2.3 多模态

Vision Adapter

Speech Adapter

2 训练配方

2.1 预训练

2.1.1 数据清洗

  • PII和安全过滤
    • PII数据(个人隐私数据)清洗、去重、去黄、做模型洗数据(fasttext),混合代码和推理数据,多语言数据。主要通过清洗有害域名来移除数据。
    • 除了其他缓解措施外,实施了过滤器以从可能含有不安全内容或大量PII数据的站点上移除数据,包括根据各种Meta安全标准被评为有害的域名,以及已知包含成人内容的域名。
  • 文本提取和清洗
    • 处理非截断网络文档的原始HTML内容,提取高质量、多样化的文本。为此,构建了一个自定义解析器,用于提取HTML内容,并优化了去除样板文本和内容召回的精确度。通过人类评估比较了我们解析器的质量,与优化文章类内容的流行第三方HTML解析器相比,发现其性能更优。
    • 仔细处理了包含数学和代码内容的HTML页面,以保留该内容的结构。保留了图像alt属性文本,因为数学内容经常以预渲染图像的形式表示,其中数学内容也提供在alt属性中。实验性地评估了不同的清洗配置。
    • 与普通文本相比,发现markdown对主要在网络数据上训练的模型性能是有害的,因此去除了所有的markdown标记。
  • 去重:在URL、文档和行级别应用了多轮去重
    • URL级别去重
      • 在整个数据集上执行URL级别的去重,为每个URL对应的页面保留最新版本。
    • 文档级别去重
      • 在整个数据集上执行全局MinHash去重,以移除几乎重复的文档。
    • 行级别去重
      • 执行了与ccNet类似的积极行级别去重。移除了在每30M文档的桶中出现超过6次的行。尽管手动定性分析显示,行级别去重不仅移除了诸如导航菜单、Cookie警告等各种站点的剩余样板文本,还移除了频繁的高质量文本,但我们的实证评估显示了强有力的改进。
    • 启发式过滤:开发了启发式规则,以移除额外的低质量文档、异常值和重复过多的文档。一些启发式的例子包括:
      • 使用重复n-gram覆盖率比率来移除由重复内容(如日志或错误消息)组成的行。这些行可能非常长且唯一,因此无法通过行去重过滤。
      • 使用“脏字”计数来过滤出未被域名阻止列表覆盖的成人站点。
      • 使用基于Kullback-Leibler散度的token分布来过滤与训练语料库分布相比含过多异常token的文档。
    • 基于模型的质量过滤
      • 此外,尝试应用各种基于模型的质量分类器来选择高质量的token。包括使用fasttext训练的快速分类器,以识别给定文本是否会被Wiki百科引用,以及基于Roberta的分类器,它们在Llama 2预测上训练。为了基于Llama 2训练质量分类器,创建了一个由Llama 2的聊天模型确定是否满足描述的质量要求的清洁网络文档训练集。使用DistilRoberta为每个文档生成质量分数,以提高效率。通过实验评估了各种质量过滤配置的有效性。
    • 代码和推理数据
      • 学习了DeepSeek-AI的工作,构建了特定领域的管道来爬取代码和与数学相关的网页,并训练了特定的分类器。代码和推理分类器都是基于Roberta的模型,它们在Llama 2注释的网络数据上训练。与上述一般质量分类器不同,进行了针对包含数学演绎、STEM领域推理和与自然语言交织的代码的网页的提示调整。由于代码和数学的token分布与自然语言大不相同,这些管道实现了特定领域的HTML提取、定制的文本特征和过滤启发式。
    • 多语言数据
      • 类似于ccnet清洗流程。
      • 使用基于fasttext的语言识别模型,将文档分类为176种语言。
      • 在每种语言的数据中执行文档级别和行级别的去重。
      • 应用语言特定的启发式和基于模型的过滤器,以移除低质量的文档。
      • 使用基于Llama 2的多语言分类器对多语言文档进行质量排名,以确保优先考虑高质量内容。通过实验确定用于预训练的多语言token数量,平衡模型在英语和多语言基准上的性能。

2.1.2 数据配比

  • 数据配比-打标签:
    • 做模型做细粒度的打标签工作,然后根据标签采样,配不同的量去试。
    • 最终敲定了:50% 通用数据, 25% 数理数据, 17% 代码数据, 8% 多语言数据。
    • 实际这个过程比这个深入很多,据消息国内某知名大模型团队能做到上千级别的细粒度标签实验。
  • 探索数据配比的scaling law:没有展开,大概的方法是在不同的小模型上做不同的配比实验,然后用来预测大模型的最优配比。
  • 数据退火:作者发现在大模型训练的最后阶段,用高质量的数据学习能提高性能。于是在最后40B数据上,作者逐渐将学习率衰减到0。并且作者发现,数据退火方法,可以用来筛数据,量少,效果明显,实验更高效。

2.1.3 预训练规模

  • 预训练是在大规模上执行的:我们在15.6T tokens上预训练一个带有405B参数的模型,使用8K tokens的上下文窗口。这个标准预训练阶段之后是一个持续的预训练阶段,它将支持的上下文窗口增加到128K tokens。
  • 调整数据混合。在训练期间,我们对预训练数据混合进⾏了⼏次调整,以提⾼模型在特定下游任务上的性能。特别是,我们在预训练期间增加了⾮英语数据的百分⽐,以提⾼Llama 3的多语⾔性能。我们还上采样数学数据以提⾼模型的数学推理性能,我们在预训练的后期增加了更多最新的⽹络数据以推进模型的知识截⽌⽇期,并且我们对后来被识别为质量较低的预训练数据⼦集进⾏了降采样。

2.1.4 初始训练

  • 余弦学习率调度,LR峰值为 8 × 10−5 , 线性WarmUp使用8000 steps, 然后在120M Steps上衰减到 8 × 10−7

  • 上下文长度和BatchSize缓慢增加:

    • 初期使用4M的BatchSize和4096长度;
    • 预训练了252M tokens后加倍到8M的BatchSize和 8192长度;
    • 预训练了2.87T tokens后再次加倍到16M的BatchSize。

    这种训练配⽅⾮常稳定:观察到的损失峰值很少,并且不需要⼲预来纠正模型训练发散。

2.1.5 长上下文训练

  • Llama 3 405B预训练:利用课程学习的理念,分6个阶段,从8K 逐步增加到 128K。

  • 不在早期训练长序列,因为自注意力层中的计算在序列长度上呈二次方增长。

  • 以增量方式增加支持的上下文长度,直到模型成功适应增加的上下文长度。

    评估成功的适应: - 模型在短上下文评估中的性能是否完全恢复; - 模型是否完美解决了长达该长度的“大海捞针”任务。

  • 长上下文预训练阶段使用了大约 800B 训练 tokens。

2.1.6 退火训练

  • 最后40M token,保持128K长度,逐渐线性缩减学习率到0。
  • 在退火阶段,调整了数据混合,以提高选择特定领域的高质量数据的比例。
  • 计算了退火期间模型检查点的平均值,以产生最终的预训练模型。

2.2 后训练

2.2.1 整体思路

在几轮中通过人类反馈与模型对齐,每轮都涉及在指令调整数据上进行监督式微调(SFT)和直接偏好优化(DPO)。在这个后训练阶段,我们还整合了新的能力,如工具使用,并观察到在其他领域,如编码和推理,取得了显著的改进。最后,安全缓解措施也在后训练阶段纳入模型。

2.2.2 对话数据格式

  • 多种角色的输入输出的设定和特殊token(各种特殊的头部token和终止token)。tooluse功能需要在单个对话回合中生成多个消息并将其发送到不同的位置(用户/ipython等)
    • 头部token:用于指示对话中每条消息的来源和目的地。
    • 终止token:用于指示合适在User和AI之间交替发言。

2.2.3 RewardModel

  • 直接用预训练后的模型做RewardModel,用来筛选数据做RS和DPO。
  • 过滤掉具有相似响应的样本。
  • 除了好坏标注之外,增加一路人工编辑,作为最优秀的质量样本 edited > chosen > rejected
  • 在训练期间将提示和多个响应合并成单行,响应随机打乱。这是将响应分别放在不同行中并计算分数的标准场景的近似,但在消融研究中,这种方法在不损失准确性的情况下提高了训练效率。

2.2.4 SFT

  • 微调数据来源:

    • 人工注释手机的提示 + RS拒绝采样的响应
    • 针对特定能力的目标合成数据
    • 少量人工策划的数据
  • 拒绝采样:

    • 使用奖励模型在我们的人类标注提示上执行拒绝采样RS;从最佳检查点采样K(10~30)个输出。
    • 在后训练的后期,引入sytem prompt来引导RS响应符合期望的语气、风格或格式,这些可能因不同能力而异。
    • 为了提升RS效率使用了paged_attn,控制了最大输出长度以控制内存,效率提升2倍+。
    • 与此拒绝采样数据和其他数据源(包括合成数据)一起,使用标准交叉熵损失对目标tokens进行微调(同时掩盖提示tokens的损失)。

LLM(Large Language Models,大型语言模型)在进行拒绝采样时,通常是为了生成符合特定条件或分布的文本序列。以下是使用LLM进行拒绝采样的一些步骤和技术细节:
---
定义目标条件:
首先,你需要定义你想要生成文本的条件或分布。这可能是一个特定的主题、风格、长度或其他任何文本属性。

生成候选文本:
使用LLM生成一系列候选文本。这可以通过给定一个或多个提示(prompts)来完成,这些提示指导模型生成特定类型的文本。

评估候选文本:
对于每个候选文本,使用一个评估函数来确定它是否符合目标条件。这个评估函数可以是简单的规则(例如,文本长度或包含特定关键词),也可以是更复杂的模型(例如,另一个LLM或分类器)。

拒绝不符合条件的文本:
如果候选文本不符合评估函数设定的条件,就拒绝它,并重复生成和评估过程。

接受符合条件的文本:
一旦生成的文本符合条件,就接受它作为最终输出。

优化生成过程:
为了提高效率,可以对生成过程进行优化。例如,通过调整提示来引导模型更直接地生成符合条件文本,或者通过并行生成多个候选文本来减少等待时间。

考虑多样性:
在拒绝采样过程中,可能需要考虑生成文本的多样性,以避免生成过于相似的文本样本。

迭代改进:
根据生成的文本样本的质量,可能需要对评估函数或生成过程进行迭代改进。

使用高级技术:
在某些情况下,可能需要使用更高级的技术,如变分推断(Variational Inference)或强化学习(Reinforcement Learning),来指导LLM生成更符合目标条件的文本。

考虑计算成本:
拒绝采样可能会因为高拒绝率而导致计算成本较高。因此,需要权衡生成文本的质量和所需的计算资源。

---
使用LLM进行拒绝采样的一个关键挑战是确保生成的文本既符合目标条件,又保持自然和连贯。这通常需要仔细设计评估函数和生成提示,以及可能的迭代调整和优化。

拒绝采样(Rejection Sampling)是一种简单的蒙特卡洛模拟方法,用于生成服从特定概率分布的随机样本。它通常用于那些直接采样困难的分布。以下是拒绝采样的基本步骤和一些技术细节:
---
定义目标分布:
首先,需要定义想要采样的目标分布f(x),这个分布可能没有封闭形式的逆函数,或者直接从它生成样本很困难。

选择辅助分布:
选择一个容易采样的辅助分布g(x),它应该与目标分布形状相似,并且在整个目标分布定义域内都有定义。此外,辅助分布的值不应小于目标分布的最大值。

确定边界:
确定一个常数c,使得对于所有的x,都有c⋅g(x)≥f(x)。这个常数c是辅助分布与目标分布的上界比。

采样过程:
从辅助分布g(x)中生成一个随机样本x。计算u,它是在[0, c⋅g(x))]区间内均匀分布的一个随机数。
如果u≤f(x),则接受x作为目标分布的样本;否则,拒绝x并重复上述过程。

重复采样:
重复上述过程,直到获得所需的样本数量。

---
技术细节:
---
效率问题:
拒绝采样可能效率不高,特别是如果常数c选择得过大,导致大量样本被拒绝。因此,选择一个好的辅助分布和合适的c值是关键。

接受率:
接受率是被接受样本与生成样本的比例。理想情况下,这个比例应该尽可能高,以提高算法的效率。

收敛性:
拒绝采样方法在理论上是收敛的,即随着采样次数的增加,样本的分布将越来越接近目标分布。

自相关性:
由于拒绝采样依赖于重复的尝试和错误过程,生成的样本可能存在一定程度的自相关性。

实现:
在编程实现时,通常需要考虑如何高效地从辅助分布中采样,以及如何快速计算目标分布和辅助分布的值。

优化:
在某些情况下,可以通过调整辅助分布或使用分层抽样(Stratified Sampling)等技术来提高拒绝采样的效率。

---
拒绝采样是一种直观且易于实现的方法,但它可能不是在所有情况下都是最优的。在实际应用中,可能需要考虑更高级的采样技术,如重要性采样(Importance Sampling)或马尔可夫链蒙特卡洛(MCMC)方法。
  • 微调超参:
    • 405b模型使用1e-5 学习率训 8.5K to 9K steps。这些超参设置在不同回合和数据混合中都表现良好。
  • 数据处理和质量控制:
    • 数据混合:
      • 在每一轮后训练中,仔细调整主题、复杂性、质量分类等轴上的整体数据混合,以在广泛的基准测试中调整性能。最终的数据混合在一些高质量资源上多次采样,并降低其他资源的采样。
    • 数据清洗:
      • 在早期轮次中,观察到数据中存在⼀些不良模式,例如过度使⽤表情符号或感叹号。因此,实施了⼀系列基于规则的数据移除和修改策略,以过滤或清洗有问题的数据。例如,为了缓解过于道歉的语⽓问题,识别出过度使⽤的短语(如“I’m sorry”或“I apologize”),并仔细平衡数据集中这类样本的⽐例。
    • 数据修剪:
      • 主题分类:
        • 将 Llama 3 8B 微调为一个主题分类器
        • 在所有数据上进行推理
        • 分类为粗粒度(如“数学推理”)和细粒度(如“几何和三角学”)的桶。
      • 质量评分:
        • 基于 RM 的分数:认为处于 RM 分数最高四分位数的数据是高质量的。
        • 基于 Llama 的分数:提示 Llama 3 检查点:
          • 对每个样本在三点量表上进行:一般英语数据(准确性、指令跟随和语气/呈现)评分
          • 对编码数据(错误识别和用户意图)进行:两点量表评分
          • 并将获得最高分数的样本视为高质量。
        • 多路召回:RM 和基于 Llama 的分数有很高的不一致率,发现结合这些信号在我们的内部测试集上获得了最佳的召回率。最终选择被 RM 或基于 Llama 的过滤器标记为高质量的示例。
      • 难度评分:
        • 可以把复杂意图的数据提取出来。
        • 因为对优先考虑模型更复杂的示例感兴趣,所以使用两种难度度量:Instag和Llama 评分。
        • Instag:提示 Llama 3 70B 对 SFT 提示进行意图标记,其中更多的意图意味着更高的复杂性。
        • 提示 Llama 3 在三点量表上测量对话的难度。
      • 语义去重:
        • 首先使用 RoBERTa对完整对话进行聚类;
        • 然后在每个聚类内按质量分数 × 难度分数排序;
        • 然后我们通过迭代所有排序的示例,只保留与迄今为止在聚类中看到的示例的最大余弦相似度小于阈值的示例,进行贪婪选择。
  • 特定领域的数据合成工作:
    • 用来生成代码,数学推理的数据 (MCTS),长文本建模数据,ToolUse数据,Steerability数据。
    • 代码:
      • 代码专家模型:用于在后续轮次的post-train中手机高质量的人工主食代码
      • 生成SFT合成数据:
      • SystemPrompt:引导改进格式
      • 质量过滤器:移除不良样本

2.2.5 DPO

  • 对比PPO,发现DPO对于大规模模型需要的计算量更少,并且在像IFEval这样的指令跟随基准测试中表现更好。
  • DPO超参设置:
    • 1e-5的学习率,β设置为0.1
  • DPO算法修改:
    • token屏蔽,一些特殊的字符(bos_token、eos_token)不参与学习。
      • 因为bos_token、eos_token同时出现在正负样本(chosen/reject)中会导致tail repetition & abruptly generating termination tokens(这两个现象广泛出现在未能充分训练的LLM上)
    • 在选择的序列上增加一个额外的NLL loss进行正则化,缩放系数为0.2。(在IRPO论文里提到的方法,类似正负样本的精细化调权手段)。
      • 有助于通过保持生成的期望格式和防止选chosen的对数概率下降,来进一步稳定DPO训练。
  • 在训练中,主要使用以前一轮对齐中表现最好的模型收集的最新一批偏好数据。因此,训练数据更好地符合正在优化的策略模型的分布。

2.2.6 模型融合

  • 模型权重平均,RM, SFT, or DPO分别在各个阶段使用不同的数据/超参实验,然后融合。

2.2.7 迭代轮次

  • 同LLama2,迭代6轮,每一轮重新采样标注/合成一次偏好数据,训练RewardModel,然后走RS、DPO。

2.2.8 数据方面

  • 做的特别细,常用的方法如做细粒度标签采样,做模型打各种角度的分,精细的语义去重等
  • 合成数据
  • “model-as-judge”做数据质量筛选
  • 偏好数据注释过程与Llama 2类似。我们在每一轮后部署多个模型进行注释,并为每个用户提示采样两个来自不同模型的响应。这些模型可能使用不同的数据混合和对齐配方,允许不同的能力强度(例如,编码专业知识)和增加数据多样性。我们要求注释者根据他们更喜欢选择的响应而不是拒绝的响应的程度,将其偏好强度分为四个等级之一:明显更好,更好,稍微更好或略好。我们还在偏好排名后增加了一个编辑步骤,鼓励注释者进一步改进首选响应。注释者可以直接编辑首选响应或提示模型以改进其自身响应。因此,我们的偏好数据的一部分有三个排名的响应(编辑过的 > 被选择的 > 被拒绝的)。
  • 用于Llama 3训练的偏好注释的统计数据。一般英语涵盖了多个子类别,如基于知识的问答或精确指令跟随,这些不在特定能力范围之内。与Llama 2相比,我们观察到提示和响应的平均长度增加,表明我们正在训练Llama 3处理更复杂的任务。此外,我们还实施了质量分析和人类评估流程,以严格评估收集的数据,使我们能够完善我们的提示并为注释者提供系统、可操作的反馈。例如,随着Llama 3在每一轮后改进,我们相应地增加提示的复杂性,以针对模型滞后的领域。
  • 在每一轮后训练中,我们使用当时可用的所有偏好数据进行奖励建模,同时仅使用来自各种能力的最新批次进行DPO训练。对于奖励建模和DPO,我们使用被标记为选择的响应明显优于或优于拒绝的对应物的样本进行训练,并丢弃响应相似的样本。
  • 偏好数据注释过程
    • 人类注释收集的提示,拒绝采样的响应
    • 针对特定能力的合成数据
    • 少量人类策划的数据

2.3 模型评估

2.3.1 标准基准

评估涵盖了八个顶级类别:(1) 常识推理;(2) 知识;(3) 阅读理解;(4) 数学、推理和问题解决;(5) 长上下文;(6) 代码;(7) 对抗性评估;以及 (8) 综合评估

2.3.2 模型鲁棒性

使用MMLU基准测试来评估我们的预训练模型对多项选择题(MCQ)设置中的设计选择的鲁棒性。

先前的工作报道说,模型性能可能对此类设置中的看似任意的设计选择敏感,例如,模型分数甚至排名可能会随着上下文中示例的顺序和标签、提示的确切格式或答案选项的格式和顺序而改变。

2.3.3 对抗性基准

还评估了几个领域的对抗性基准:问题回答、数学推理和释义检测。

这种测试探测模型在特意创建的具有挑战性的任务上的能力,并且可能也会指向在基准测试上的过拟合。

  • 问答:Adversarial SQuAD和Dynabench SQuAD。
  • 数学推理:GSM-Plus。
  • 释义检测:PAWS。(PAWS-X也是向量模型榜单C-MTEB中比较难的测评集;主要目标是判断区分出同型同词不同义的句子的能力)

PAWS、PAWS-X数据集的产生

  • 为了生成高质量的数据,研究人员需要保证句子间词语的高度重叠,同时也要平衡同义句和非同义句生成的结果。具体的流程分为词序交换、人物语法复核以及方向翻译来保证生成数据集的质量符合要求。

    • 首先源句子被送入到一个序列化的语言模型中,创建出交换词序的变体同时包含有效的语义信息。但这时还无法确定它们是否是源句子的同义句。随后生成的句子变体将交与人类评测者来进行语法合理性评测,并由多个评测者来判断每个句子与源句子是否是同义句。
    • 但其中一个重要的问题在于这种词序交换策略会倾向于生成非同义句(例如下面的句子交换了好坏:为什么坏事会发生在好人身上?/为什么好事会发生在坏人身上?)。为了保证同义句和非同义句间的平衡,研究人员引入了第三个步骤:backtranslation回译。
    • 回译具有相反的偏执,倾向于在改变词序和词语选择时保持句子的含义不变。这一策略与前面的方法一起保证了PAWS数据的平衡,特别对于Wiki百科部分的句子尤为重要。

2.3.4 污染分析

我们进行了污染分析,以估计基准测试分数在多大程度上可能受到预训练语料库中评估数据的污染影响。在以前的工作中,使用了许多不同的污染方法,具有各种不同的超参数 - 我们参考Singh等人(2024)的概述。这些方法都可能存在误报和漏报,如何最好地运行污染分析仍然是一个开放的研究领域。在这里,我们主要遵循Singh等人(2024)的建议。

0条评论
0 / 1000
陈****婳
3文章数
1粉丝数
陈****婳
3 文章 | 1 粉丝
原创

llama3技术报告解读

2024-09-23 09:42:56
50
0

1 Llama Models

Model Launch date Model sizes Context Length Tokenizer Acceptable use policy License Model Card
Llama 2 7/18/2023 7B, 13B, 70B 4K Sentencepiece Use Policy License Model Card
Llama 3 4/18/2024 8B, 70B 8K TikToken-based Use Policy License Model Card
Llama 3.1 7/23/2024 8B, 70B, 405B 128K TikToken-based Use Policy License Model Card

1.1 测评集指标

1.2 模型架构

1.2.1 模型架构:GQA,8-kv head

1.2.2 超参

  • 405B有126 层,层数少两层,这是一个训练阶段上方便流水线并行做切分的技巧。
  • 长文拼接时候,使用attention mask防止不同来源的数据串味。样本间穿越在标准预训练阶段影响不大,但作者说,在扩长序列时影响很大。
  • 词表大小为128K,英语语料的压缩率有所提高,同样计算量能够过更多数据,并且增强了非英语的能力。oken 词汇表结合了来自 tiktoken3 分词器的 100K tokens 和额外的 28K tokens,以更好地支持非英语语言。与 Llama 2 分词器相比,新分词器在样本英语数据上的压缩率从 3.17 提高到 3.94 个字符每个 token。这使得模型在相同的训练计算量下可以“阅读”更多的文本。还发现,添加来自特定非英语语言的 28K tokens 既提高了压缩比,也提高了下游性能,而对英语分词没有影响。
  • RoPE 的基数频率超参theta 调到了500000;Xiong 等人(2023)表明这个值对上下文长度达到 32,768 时有效。
  • Llama 3 405B 使用的架构有 126 层,token 表示维度为 16,384,有 128 个注意力头。模型大小是根据规模定律计算出的,对于我们的 3.8 × 10^25 FLOPs 训练预算来说是计算最优的。
  • 实施了两阶段方法来开发能够准确预测下游基准性能的规模定律:
    • 首先建立计算最优模型在下游任务上的负对数似然与训练 FLOPs 之间的相关性。
    • 接下来利用规模定律模型和使用更高计算 FLOPs 训练的旧模型,将下游任务上的负对数似然与任务准确率相关联。

1.2.3 多模态

Vision Adapter

Speech Adapter

2 训练配方

2.1 预训练

2.1.1 数据清洗

  • PII和安全过滤
    • PII数据(个人隐私数据)清洗、去重、去黄、做模型洗数据(fasttext),混合代码和推理数据,多语言数据。主要通过清洗有害域名来移除数据。
    • 除了其他缓解措施外,实施了过滤器以从可能含有不安全内容或大量PII数据的站点上移除数据,包括根据各种Meta安全标准被评为有害的域名,以及已知包含成人内容的域名。
  • 文本提取和清洗
    • 处理非截断网络文档的原始HTML内容,提取高质量、多样化的文本。为此,构建了一个自定义解析器,用于提取HTML内容,并优化了去除样板文本和内容召回的精确度。通过人类评估比较了我们解析器的质量,与优化文章类内容的流行第三方HTML解析器相比,发现其性能更优。
    • 仔细处理了包含数学和代码内容的HTML页面,以保留该内容的结构。保留了图像alt属性文本,因为数学内容经常以预渲染图像的形式表示,其中数学内容也提供在alt属性中。实验性地评估了不同的清洗配置。
    • 与普通文本相比,发现markdown对主要在网络数据上训练的模型性能是有害的,因此去除了所有的markdown标记。
  • 去重:在URL、文档和行级别应用了多轮去重
    • URL级别去重
      • 在整个数据集上执行URL级别的去重,为每个URL对应的页面保留最新版本。
    • 文档级别去重
      • 在整个数据集上执行全局MinHash去重,以移除几乎重复的文档。
    • 行级别去重
      • 执行了与ccNet类似的积极行级别去重。移除了在每30M文档的桶中出现超过6次的行。尽管手动定性分析显示,行级别去重不仅移除了诸如导航菜单、Cookie警告等各种站点的剩余样板文本,还移除了频繁的高质量文本,但我们的实证评估显示了强有力的改进。
    • 启发式过滤:开发了启发式规则,以移除额外的低质量文档、异常值和重复过多的文档。一些启发式的例子包括:
      • 使用重复n-gram覆盖率比率来移除由重复内容(如日志或错误消息)组成的行。这些行可能非常长且唯一,因此无法通过行去重过滤。
      • 使用“脏字”计数来过滤出未被域名阻止列表覆盖的成人站点。
      • 使用基于Kullback-Leibler散度的token分布来过滤与训练语料库分布相比含过多异常token的文档。
    • 基于模型的质量过滤
      • 此外,尝试应用各种基于模型的质量分类器来选择高质量的token。包括使用fasttext训练的快速分类器,以识别给定文本是否会被Wiki百科引用,以及基于Roberta的分类器,它们在Llama 2预测上训练。为了基于Llama 2训练质量分类器,创建了一个由Llama 2的聊天模型确定是否满足描述的质量要求的清洁网络文档训练集。使用DistilRoberta为每个文档生成质量分数,以提高效率。通过实验评估了各种质量过滤配置的有效性。
    • 代码和推理数据
      • 学习了DeepSeek-AI的工作,构建了特定领域的管道来爬取代码和与数学相关的网页,并训练了特定的分类器。代码和推理分类器都是基于Roberta的模型,它们在Llama 2注释的网络数据上训练。与上述一般质量分类器不同,进行了针对包含数学演绎、STEM领域推理和与自然语言交织的代码的网页的提示调整。由于代码和数学的token分布与自然语言大不相同,这些管道实现了特定领域的HTML提取、定制的文本特征和过滤启发式。
    • 多语言数据
      • 类似于ccnet清洗流程。
      • 使用基于fasttext的语言识别模型,将文档分类为176种语言。
      • 在每种语言的数据中执行文档级别和行级别的去重。
      • 应用语言特定的启发式和基于模型的过滤器,以移除低质量的文档。
      • 使用基于Llama 2的多语言分类器对多语言文档进行质量排名,以确保优先考虑高质量内容。通过实验确定用于预训练的多语言token数量,平衡模型在英语和多语言基准上的性能。

2.1.2 数据配比

  • 数据配比-打标签:
    • 做模型做细粒度的打标签工作,然后根据标签采样,配不同的量去试。
    • 最终敲定了:50% 通用数据, 25% 数理数据, 17% 代码数据, 8% 多语言数据。
    • 实际这个过程比这个深入很多,据消息国内某知名大模型团队能做到上千级别的细粒度标签实验。
  • 探索数据配比的scaling law:没有展开,大概的方法是在不同的小模型上做不同的配比实验,然后用来预测大模型的最优配比。
  • 数据退火:作者发现在大模型训练的最后阶段,用高质量的数据学习能提高性能。于是在最后40B数据上,作者逐渐将学习率衰减到0。并且作者发现,数据退火方法,可以用来筛数据,量少,效果明显,实验更高效。

2.1.3 预训练规模

  • 预训练是在大规模上执行的:我们在15.6T tokens上预训练一个带有405B参数的模型,使用8K tokens的上下文窗口。这个标准预训练阶段之后是一个持续的预训练阶段,它将支持的上下文窗口增加到128K tokens。
  • 调整数据混合。在训练期间,我们对预训练数据混合进⾏了⼏次调整,以提⾼模型在特定下游任务上的性能。特别是,我们在预训练期间增加了⾮英语数据的百分⽐,以提⾼Llama 3的多语⾔性能。我们还上采样数学数据以提⾼模型的数学推理性能,我们在预训练的后期增加了更多最新的⽹络数据以推进模型的知识截⽌⽇期,并且我们对后来被识别为质量较低的预训练数据⼦集进⾏了降采样。

2.1.4 初始训练

  • 余弦学习率调度,LR峰值为 8 × 10−5 , 线性WarmUp使用8000 steps, 然后在120M Steps上衰减到 8 × 10−7

  • 上下文长度和BatchSize缓慢增加:

    • 初期使用4M的BatchSize和4096长度;
    • 预训练了252M tokens后加倍到8M的BatchSize和 8192长度;
    • 预训练了2.87T tokens后再次加倍到16M的BatchSize。

    这种训练配⽅⾮常稳定:观察到的损失峰值很少,并且不需要⼲预来纠正模型训练发散。

2.1.5 长上下文训练

  • Llama 3 405B预训练:利用课程学习的理念,分6个阶段,从8K 逐步增加到 128K。

  • 不在早期训练长序列,因为自注意力层中的计算在序列长度上呈二次方增长。

  • 以增量方式增加支持的上下文长度,直到模型成功适应增加的上下文长度。

    评估成功的适应: - 模型在短上下文评估中的性能是否完全恢复; - 模型是否完美解决了长达该长度的“大海捞针”任务。

  • 长上下文预训练阶段使用了大约 800B 训练 tokens。

2.1.6 退火训练

  • 最后40M token,保持128K长度,逐渐线性缩减学习率到0。
  • 在退火阶段,调整了数据混合,以提高选择特定领域的高质量数据的比例。
  • 计算了退火期间模型检查点的平均值,以产生最终的预训练模型。

2.2 后训练

2.2.1 整体思路

在几轮中通过人类反馈与模型对齐,每轮都涉及在指令调整数据上进行监督式微调(SFT)和直接偏好优化(DPO)。在这个后训练阶段,我们还整合了新的能力,如工具使用,并观察到在其他领域,如编码和推理,取得了显著的改进。最后,安全缓解措施也在后训练阶段纳入模型。

2.2.2 对话数据格式

  • 多种角色的输入输出的设定和特殊token(各种特殊的头部token和终止token)。tooluse功能需要在单个对话回合中生成多个消息并将其发送到不同的位置(用户/ipython等)
    • 头部token:用于指示对话中每条消息的来源和目的地。
    • 终止token:用于指示合适在User和AI之间交替发言。

2.2.3 RewardModel

  • 直接用预训练后的模型做RewardModel,用来筛选数据做RS和DPO。
  • 过滤掉具有相似响应的样本。
  • 除了好坏标注之外,增加一路人工编辑,作为最优秀的质量样本 edited > chosen > rejected
  • 在训练期间将提示和多个响应合并成单行,响应随机打乱。这是将响应分别放在不同行中并计算分数的标准场景的近似,但在消融研究中,这种方法在不损失准确性的情况下提高了训练效率。

2.2.4 SFT

  • 微调数据来源:

    • 人工注释手机的提示 + RS拒绝采样的响应
    • 针对特定能力的目标合成数据
    • 少量人工策划的数据
  • 拒绝采样:

    • 使用奖励模型在我们的人类标注提示上执行拒绝采样RS;从最佳检查点采样K(10~30)个输出。
    • 在后训练的后期,引入sytem prompt来引导RS响应符合期望的语气、风格或格式,这些可能因不同能力而异。
    • 为了提升RS效率使用了paged_attn,控制了最大输出长度以控制内存,效率提升2倍+。
    • 与此拒绝采样数据和其他数据源(包括合成数据)一起,使用标准交叉熵损失对目标tokens进行微调(同时掩盖提示tokens的损失)。

LLM(Large Language Models,大型语言模型)在进行拒绝采样时,通常是为了生成符合特定条件或分布的文本序列。以下是使用LLM进行拒绝采样的一些步骤和技术细节:
---
定义目标条件:
首先,你需要定义你想要生成文本的条件或分布。这可能是一个特定的主题、风格、长度或其他任何文本属性。

生成候选文本:
使用LLM生成一系列候选文本。这可以通过给定一个或多个提示(prompts)来完成,这些提示指导模型生成特定类型的文本。

评估候选文本:
对于每个候选文本,使用一个评估函数来确定它是否符合目标条件。这个评估函数可以是简单的规则(例如,文本长度或包含特定关键词),也可以是更复杂的模型(例如,另一个LLM或分类器)。

拒绝不符合条件的文本:
如果候选文本不符合评估函数设定的条件,就拒绝它,并重复生成和评估过程。

接受符合条件的文本:
一旦生成的文本符合条件,就接受它作为最终输出。

优化生成过程:
为了提高效率,可以对生成过程进行优化。例如,通过调整提示来引导模型更直接地生成符合条件文本,或者通过并行生成多个候选文本来减少等待时间。

考虑多样性:
在拒绝采样过程中,可能需要考虑生成文本的多样性,以避免生成过于相似的文本样本。

迭代改进:
根据生成的文本样本的质量,可能需要对评估函数或生成过程进行迭代改进。

使用高级技术:
在某些情况下,可能需要使用更高级的技术,如变分推断(Variational Inference)或强化学习(Reinforcement Learning),来指导LLM生成更符合目标条件的文本。

考虑计算成本:
拒绝采样可能会因为高拒绝率而导致计算成本较高。因此,需要权衡生成文本的质量和所需的计算资源。

---
使用LLM进行拒绝采样的一个关键挑战是确保生成的文本既符合目标条件,又保持自然和连贯。这通常需要仔细设计评估函数和生成提示,以及可能的迭代调整和优化。

拒绝采样(Rejection Sampling)是一种简单的蒙特卡洛模拟方法,用于生成服从特定概率分布的随机样本。它通常用于那些直接采样困难的分布。以下是拒绝采样的基本步骤和一些技术细节:
---
定义目标分布:
首先,需要定义想要采样的目标分布f(x),这个分布可能没有封闭形式的逆函数,或者直接从它生成样本很困难。

选择辅助分布:
选择一个容易采样的辅助分布g(x),它应该与目标分布形状相似,并且在整个目标分布定义域内都有定义。此外,辅助分布的值不应小于目标分布的最大值。

确定边界:
确定一个常数c,使得对于所有的x,都有c⋅g(x)≥f(x)。这个常数c是辅助分布与目标分布的上界比。

采样过程:
从辅助分布g(x)中生成一个随机样本x。计算u,它是在[0, c⋅g(x))]区间内均匀分布的一个随机数。
如果u≤f(x),则接受x作为目标分布的样本;否则,拒绝x并重复上述过程。

重复采样:
重复上述过程,直到获得所需的样本数量。

---
技术细节:
---
效率问题:
拒绝采样可能效率不高,特别是如果常数c选择得过大,导致大量样本被拒绝。因此,选择一个好的辅助分布和合适的c值是关键。

接受率:
接受率是被接受样本与生成样本的比例。理想情况下,这个比例应该尽可能高,以提高算法的效率。

收敛性:
拒绝采样方法在理论上是收敛的,即随着采样次数的增加,样本的分布将越来越接近目标分布。

自相关性:
由于拒绝采样依赖于重复的尝试和错误过程,生成的样本可能存在一定程度的自相关性。

实现:
在编程实现时,通常需要考虑如何高效地从辅助分布中采样,以及如何快速计算目标分布和辅助分布的值。

优化:
在某些情况下,可以通过调整辅助分布或使用分层抽样(Stratified Sampling)等技术来提高拒绝采样的效率。

---
拒绝采样是一种直观且易于实现的方法,但它可能不是在所有情况下都是最优的。在实际应用中,可能需要考虑更高级的采样技术,如重要性采样(Importance Sampling)或马尔可夫链蒙特卡洛(MCMC)方法。
  • 微调超参:
    • 405b模型使用1e-5 学习率训 8.5K to 9K steps。这些超参设置在不同回合和数据混合中都表现良好。
  • 数据处理和质量控制:
    • 数据混合:
      • 在每一轮后训练中,仔细调整主题、复杂性、质量分类等轴上的整体数据混合,以在广泛的基准测试中调整性能。最终的数据混合在一些高质量资源上多次采样,并降低其他资源的采样。
    • 数据清洗:
      • 在早期轮次中,观察到数据中存在⼀些不良模式,例如过度使⽤表情符号或感叹号。因此,实施了⼀系列基于规则的数据移除和修改策略,以过滤或清洗有问题的数据。例如,为了缓解过于道歉的语⽓问题,识别出过度使⽤的短语(如“I’m sorry”或“I apologize”),并仔细平衡数据集中这类样本的⽐例。
    • 数据修剪:
      • 主题分类:
        • 将 Llama 3 8B 微调为一个主题分类器
        • 在所有数据上进行推理
        • 分类为粗粒度(如“数学推理”)和细粒度(如“几何和三角学”)的桶。
      • 质量评分:
        • 基于 RM 的分数:认为处于 RM 分数最高四分位数的数据是高质量的。
        • 基于 Llama 的分数:提示 Llama 3 检查点:
          • 对每个样本在三点量表上进行:一般英语数据(准确性、指令跟随和语气/呈现)评分
          • 对编码数据(错误识别和用户意图)进行:两点量表评分
          • 并将获得最高分数的样本视为高质量。
        • 多路召回:RM 和基于 Llama 的分数有很高的不一致率,发现结合这些信号在我们的内部测试集上获得了最佳的召回率。最终选择被 RM 或基于 Llama 的过滤器标记为高质量的示例。
      • 难度评分:
        • 可以把复杂意图的数据提取出来。
        • 因为对优先考虑模型更复杂的示例感兴趣,所以使用两种难度度量:Instag和Llama 评分。
        • Instag:提示 Llama 3 70B 对 SFT 提示进行意图标记,其中更多的意图意味着更高的复杂性。
        • 提示 Llama 3 在三点量表上测量对话的难度。
      • 语义去重:
        • 首先使用 RoBERTa对完整对话进行聚类;
        • 然后在每个聚类内按质量分数 × 难度分数排序;
        • 然后我们通过迭代所有排序的示例,只保留与迄今为止在聚类中看到的示例的最大余弦相似度小于阈值的示例,进行贪婪选择。
  • 特定领域的数据合成工作:
    • 用来生成代码,数学推理的数据 (MCTS),长文本建模数据,ToolUse数据,Steerability数据。
    • 代码:
      • 代码专家模型:用于在后续轮次的post-train中手机高质量的人工主食代码
      • 生成SFT合成数据:
      • SystemPrompt:引导改进格式
      • 质量过滤器:移除不良样本

2.2.5 DPO

  • 对比PPO,发现DPO对于大规模模型需要的计算量更少,并且在像IFEval这样的指令跟随基准测试中表现更好。
  • DPO超参设置:
    • 1e-5的学习率,β设置为0.1
  • DPO算法修改:
    • token屏蔽,一些特殊的字符(bos_token、eos_token)不参与学习。
      • 因为bos_token、eos_token同时出现在正负样本(chosen/reject)中会导致tail repetition & abruptly generating termination tokens(这两个现象广泛出现在未能充分训练的LLM上)
    • 在选择的序列上增加一个额外的NLL loss进行正则化,缩放系数为0.2。(在IRPO论文里提到的方法,类似正负样本的精细化调权手段)。
      • 有助于通过保持生成的期望格式和防止选chosen的对数概率下降,来进一步稳定DPO训练。
  • 在训练中,主要使用以前一轮对齐中表现最好的模型收集的最新一批偏好数据。因此,训练数据更好地符合正在优化的策略模型的分布。

2.2.6 模型融合

  • 模型权重平均,RM, SFT, or DPO分别在各个阶段使用不同的数据/超参实验,然后融合。

2.2.7 迭代轮次

  • 同LLama2,迭代6轮,每一轮重新采样标注/合成一次偏好数据,训练RewardModel,然后走RS、DPO。

2.2.8 数据方面

  • 做的特别细,常用的方法如做细粒度标签采样,做模型打各种角度的分,精细的语义去重等
  • 合成数据
  • “model-as-judge”做数据质量筛选
  • 偏好数据注释过程与Llama 2类似。我们在每一轮后部署多个模型进行注释,并为每个用户提示采样两个来自不同模型的响应。这些模型可能使用不同的数据混合和对齐配方,允许不同的能力强度(例如,编码专业知识)和增加数据多样性。我们要求注释者根据他们更喜欢选择的响应而不是拒绝的响应的程度,将其偏好强度分为四个等级之一:明显更好,更好,稍微更好或略好。我们还在偏好排名后增加了一个编辑步骤,鼓励注释者进一步改进首选响应。注释者可以直接编辑首选响应或提示模型以改进其自身响应。因此,我们的偏好数据的一部分有三个排名的响应(编辑过的 > 被选择的 > 被拒绝的)。
  • 用于Llama 3训练的偏好注释的统计数据。一般英语涵盖了多个子类别,如基于知识的问答或精确指令跟随,这些不在特定能力范围之内。与Llama 2相比,我们观察到提示和响应的平均长度增加,表明我们正在训练Llama 3处理更复杂的任务。此外,我们还实施了质量分析和人类评估流程,以严格评估收集的数据,使我们能够完善我们的提示并为注释者提供系统、可操作的反馈。例如,随着Llama 3在每一轮后改进,我们相应地增加提示的复杂性,以针对模型滞后的领域。
  • 在每一轮后训练中,我们使用当时可用的所有偏好数据进行奖励建模,同时仅使用来自各种能力的最新批次进行DPO训练。对于奖励建模和DPO,我们使用被标记为选择的响应明显优于或优于拒绝的对应物的样本进行训练,并丢弃响应相似的样本。
  • 偏好数据注释过程
    • 人类注释收集的提示,拒绝采样的响应
    • 针对特定能力的合成数据
    • 少量人类策划的数据

2.3 模型评估

2.3.1 标准基准

评估涵盖了八个顶级类别:(1) 常识推理;(2) 知识;(3) 阅读理解;(4) 数学、推理和问题解决;(5) 长上下文;(6) 代码;(7) 对抗性评估;以及 (8) 综合评估

2.3.2 模型鲁棒性

使用MMLU基准测试来评估我们的预训练模型对多项选择题(MCQ)设置中的设计选择的鲁棒性。

先前的工作报道说,模型性能可能对此类设置中的看似任意的设计选择敏感,例如,模型分数甚至排名可能会随着上下文中示例的顺序和标签、提示的确切格式或答案选项的格式和顺序而改变。

2.3.3 对抗性基准

还评估了几个领域的对抗性基准:问题回答、数学推理和释义检测。

这种测试探测模型在特意创建的具有挑战性的任务上的能力,并且可能也会指向在基准测试上的过拟合。

  • 问答:Adversarial SQuAD和Dynabench SQuAD。
  • 数学推理:GSM-Plus。
  • 释义检测:PAWS。(PAWS-X也是向量模型榜单C-MTEB中比较难的测评集;主要目标是判断区分出同型同词不同义的句子的能力)

PAWS、PAWS-X数据集的产生

  • 为了生成高质量的数据,研究人员需要保证句子间词语的高度重叠,同时也要平衡同义句和非同义句生成的结果。具体的流程分为词序交换、人物语法复核以及方向翻译来保证生成数据集的质量符合要求。

    • 首先源句子被送入到一个序列化的语言模型中,创建出交换词序的变体同时包含有效的语义信息。但这时还无法确定它们是否是源句子的同义句。随后生成的句子变体将交与人类评测者来进行语法合理性评测,并由多个评测者来判断每个句子与源句子是否是同义句。
    • 但其中一个重要的问题在于这种词序交换策略会倾向于生成非同义句(例如下面的句子交换了好坏:为什么坏事会发生在好人身上?/为什么好事会发生在坏人身上?)。为了保证同义句和非同义句间的平衡,研究人员引入了第三个步骤:backtranslation回译。
    • 回译具有相反的偏执,倾向于在改变词序和词语选择时保持句子的含义不变。这一策略与前面的方法一起保证了PAWS数据的平衡,特别对于Wiki百科部分的句子尤为重要。

2.3.4 污染分析

我们进行了污染分析,以估计基准测试分数在多大程度上可能受到预训练语料库中评估数据的污染影响。在以前的工作中,使用了许多不同的污染方法,具有各种不同的超参数 - 我们参考Singh等人(2024)的概述。这些方法都可能存在误报和漏报,如何最好地运行污染分析仍然是一个开放的研究领域。在这里,我们主要遵循Singh等人(2024)的建议。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0