《Llama: The Llama 3 Herd of Models》预训练数据篇——论文精读笔记
论文链接:arxiv.org/pdf/2407.21783
本博客只针对Llama3中的训练数据做阅读笔记。后续会单独对Llama1-3的模型做总结。
摘要
- 多语言支持
- 工具使用能力
- 最大模型参数达到 405B,采用稠密的 Transformer 架构,而非更常见的混合专家(MOE)架构。
- 上下文窗口长度为 128K。
导言
预训练与后训练
- Llama 系列模型在预训练阶段使用了大量的多语言数据,达到 15TB 的规模。
- 后训练则采用了简单的监督微调(Supervised Fine Tuning,SFT),并通过算法如拒绝采样(Reject Sampling)和 DPO(Direct Preference Optimization)进行对齐。
关键因素
- 数据规模:Llama 系列模型坚持使用大量数据,强调数据质量与数量的平衡。
- 模型规模:Llama 3.1 在参数规模上达到了 405B,展示了模型的强大能力。
- 设计选择:模型在设计上选择了标准的稠密 Transformer,不采用 MOE(混合专家)架构。
性能评估
- 性能数据:模型在不同规模下(8B、70B、405B)的评估结果表明,随着模型规模增加,在多个评估任务上的性能确实有显著提升。
- 模型表现:在知识面上,405B 模型显示出更强的记忆能力,但在根据指令执行时,70B 模型表现相对不错,且成本效益更高。
3 Pre-Training
语言模型的预训练包括以下几个方面:
(1) 大规模训练语料的整理和筛选;
(2) 模型架构的开发以及相应的规模法则,用于确定模型的大小;
(3) 开发高效的大规模预训练技术;
(4) 制定预训练的完整方案。
3.1 预训练数据
数据收集及来源
数据集由多种来源构成,包括公共网络数据(如爬取的网页内容)和特定领域的文档(如代码和数学相关内容)。
数据清理
PII过滤:去除包含大量个人可识别信息(PII)和已知成人内容的网站。这是为了保护用户隐私和确保模型安全性。
HTML处理:自定义解析器用于从原始HTML中提取干净文本,优化了对于广告和导航栏的去除。
数学和代码的保留:在处理包含数学公式和代码的网页时,保留了其结构和重要的内容,尤其是图片标签中的文本描述,以确保信息的完整性。
数据去重
URL级别去重:保留每个URL的最新版本。
文档级别去重:通过MinHash算法去除近似重复的文档。
行级别去重:删除在每组3000万个文档中出现超过6次的行,以减少常见的冗余内容(如导航菜单、广告等)。
什么是哈希函数?
哈希函数(Hash Function)是一种将输入数据(通常是任意长度的数据)映射为固定长度的输出数据(称为哈希值或哈希码)的函数。
什么是MinHash?
MinHash的核心思想是通过哈希函数将集合映射到一个较小的特征空间,从而实现对集合相似度的高效估计。
具体步骤如下:
集合表示:首先,将每个文档表示为一个集合,通常是其特征(如单词、短语等)的集合。例如,文档D1的特征集合可以表示为{w1, w2, w3, ...}。
哈希函数:选择多个哈希函数,将集合中的元素映射到哈希值。每个哈希函数会为集合中的每个元素生成一个哈希值。
最小哈希值:对于每个哈希函数,找出集合中元素的最小哈希值。这些最小哈希值构成了该集合的MinHash签名。
相似度计算:两个集合的相似度(通常是杰卡德相似度)可以通过比较它们的MinHash签名来估计。如果两个集合的MinHash签名相似,那么它们的原始集合也很可能相似。
数据的最终构成比例为:
- 50%:通用知识
- 25%:数学和推理相关内容
- 17%:代码
- 8%:多语言文本
多语言处理
在多语言数据处理上,Llama采取了以下策略:
- 语言识别:使用fasttext模型识别176种语言,确保多语言数据的质量。
- 去重与质量检测:针对不同语言实施文档和行级别的去重,并应用特定的质量过滤器。
数据混合与优化
为了获得高质量的语言模型,需谨慎决定不同数据源在预训练数据中的比例:
- 知识分类:使用分类器对网页数据进行分类,以有效控制各类信息的比例,避免某些类别(如娱乐)过度代表。
- Scaling Law实验:通过小模型在不同数据混合上的表现预测大模型的性能,反复调整数据比例。
什么是scaling law?
Scaling law(比例法则)实验是指在机器学习,尤其是在深度学习和自然语言处理领域中,通过试验和观察模型性能与模型规模(如参数量、数据量等)之间的关系,以获取关于如何扩展模型和优化其表现的规律和指导。
退火数据
通过对少量高质量代码和数学数据进行退火,可以提高模型在特定基准测试上的分数。这意味着在模型训练完成后,使用高质量数据进行再训练以增强特定能力。
什么是退火?
通常情况下,深度学习中的退火指的学习率退火,训练过程中逐步降低学习率。初始阶段使用较高的学习率来快速收敛,然后逐渐降低学习率,使得模型能够更细致地调整参数,从而提高最终的收敛效果,减少震荡。这里对少量高质量代码和数学数据进行退火是指:在模型的初始训练阶段,通常会使用大量的、可能存在多样性和噪声的数据,以帮助模型建立起对各种输入的基本理解。一旦初步训练完成,退火过程就会使用高质量的数据进行微调,以便使模型更好地适应新的数据特点。