开源模型正展现着它们蓬勃的生命力,不仅数量激增,性能更是愈发优秀。图灵奖获得者 Yann LeCun 也发出了这样的感叹:「开源人工智能模型正走在超越专有模型的路上。」
专有模型在技术性能和创新能力上展现了非凡的力量,但是它们不开源的性质成为 LLM 发展的阻碍。一些开源模型虽然为从业者和研究者提供了多样化的选择,但大多数只公开了最终的模型权重或推理代码,越来越多的技术报告将其范围限制在顶层设计和表面统计之内。这种闭源的策略不仅限制了开源模型的发展,而且还在很大程度上阻碍了整个 LLM 研究领域的进步。
这意味着,这些模型需要更全面和深入地共享,包括训练数据、算法细节、实现挑战以及性能评估的细节。
Cerebras、Petuum 和 MBZUAI 等的研究者们共同提出了 LLM360。这是一项全面开源 LLM 的倡议,主张向社区提供与 LLM 训练相关的一切,包含训练代码和数据、模型检查点以及中间结果等。LLM360 的目标是让 LLM 训练过程透明化,使每个人都能复现,从而推动开放和协作式的人工智能研究的发展。
- 论文地址:https://arxiv.org/pdf/2312.06550.pdf
- 项目网页:https://www.llm360.ai/
- 博客:https://www.llm360.ai/blog/introducing-llm360-fully-transparent-open-source-llms.html
研究者们制定了 LLM360 的架构,重点关注其设计原则和完全开源的理由。他们详细规定了 LLM360 框架的组成部分,包含数据集、代码和配置、模型检查点、指标等具体细节。LLM360 为当前和未来的开源模型树立了透明度的样本。
研究者在 LLM360 的开源框架下发布了两个从头开始预训练的大型语言模型:AMBER 和 CRYSTALCODER。AMBER 是基于 1.3T token 进行预训练的 7B 英语语言模型。CRYSTALCODER 是基于 1.4T token 预训练的 7B 英语和代码语言模型。在本文中,研究者们总结了这两个模型的开发细节、初步评估结果、观察结果以及从中汲取的经验和教训。值得注意的是,在发布时,AMBER 和 CRYSTALCODER 在训练过程中分别保存了 360 个和 143 个模型检查点。
接下来,就一起看看文章的具体内容吧。
LLM360 的框架
LLM360 将为 LLM 预训练过程中需要收集哪些数据和代码提供一个标准,以确保已有的工作能更好地在社区中流通、共享。它主要包含以下几个部分:
1. 训练数据集和数据处理代码
预训练数据集对大型语言模型的性能至关重要。因此,了解预训练数据集,用以评估潜在的行为问题和偏见非常重要。此外,公开的预训练数据集有助于提高 LLM 在后续微调和适应各领域时的可扩展性。最近的研究表明,在重复数据上进行训练会不成比例地降低模型最终的性能。因此,公开原始预训练数据,有助于避免在下游微调或继续在特定领域进行预训练时使用到重复的数据。综合以上原因,LLM360 倡导公开大型语言模型的原始数据集。在合适的情况中,还应公开关于数据过滤、处理和训练顺序的详细信息。
2. 训练代码、超参数与配置
训练代码、超参数和配置对 LLM 训练的性能和质量有重大影响,但并不总是公开披露。在 LLM360 中,研究者开源预训练框架的所有训练代码、训练参数以及系统配置。
3. 模型检查点
定期保存模型检查点也相当有用。它们不仅对训练过程中的故障恢复至关重要,而且对训练后的研究也很有用,这些检查点可以让后来的研究者从多个起点继续训练模型,无需从头开始训练,有助于复现和深入研究。
4. 性能指标
训练一个 LLM 往往需要花费数周至数月,训练期间的演化趋势可以提供有价值的信息。然而,目前只有亲历者才能获得训练的详细日志和中间指标,这阻碍了对 LLM 的全面研究。这些统计数据往往包含了难以察觉的关键见解。即使是对这些衡量标准进行方差计算这样的简单分析,也能揭示重要的发现。例如,GLM 的研究团队就是通过分析梯度规范行为,提出了一种有效处理损失尖峰和 NaN 损失的梯度收缩算法。
Amber
AMBER 是 LLM360 「大家庭」的第一位成员,同时发布的还有它的微调版本:AMBERCHAT 和 AMBERSAFE 。
数据及模型细节
表 2 列出了 AMBER 包含 1.26 T token 的预训练数据集的详细信息,包括数据的预处理、格式、数据混合比例,以及 AMBER 的架构细节和特定的预训练超参数。具体请在项目主页参阅 LLM360 代码库。
AMBER 采用了与 LLaMA 7B4 一致的模型架构,表 3 总结了 LLM 的详细架构配置。
在预训练过程和超参数方面,研究者们尽可能地遵循了 LLaMA 的预训练超参数。AMBER 使用 AdamW 优化器进行训练,超参数为:β₁= 0.9,β₂= 0.95。同时,研究者还发布了几个 AMBER 的微调版本:AMBERCHAT 和 AMBERSAFE 。AMBERCHAT 是基于 WizardLM 的指令训练数据集微调得出的。更多参数细节,请阅读原文。
实验及结果
研究者们采用了 Open LLM 排行榜上的四个基准数据集来评估 AMBER 的性能。如图 4 所示,在 HellaSwag 和 ARC 中, AMBER 的得分在预训练期间单调增加,而在 TruthfulQA 的得分随着训练的进行而降低。在 MMLU 数据集中, AMBER 的得分在预训练的初始阶段下降,然后开始上升。
在表 4 中,研究者将 AMBER 的模型性能与 OpenLLaMA、RedPajama-INCITE、Falcon、MPT 等类似时间段内训练出的模型进行了比较。许多模型的设计灵感都来自 LLaMA 。可以发现,AMBER 在 MMLU 的得分较为出色,但在 ARC 上的表现稍逊一筹。与其他类似模型相比,AMBER 的表现相对较强。
CRYSTALCODER
LLM360 「大家庭」的第二位成员是 CrystalCoder。
CrystalCoder 是一个基于 1.4 T token 训练的 7B 语言模型,实现了编码和语言能力之间的平衡。与大多数之前的代码 LLM 不同,CrystalCoder 是通过精心混合文本和代码数据进行训练的,以最大化在这两个领域的实用性。与 Code Llama 2 相比,CrystalCoder 的代码数据在预训练过程中较早引入。此外,研究者在 Python 和 Web 编程语言上训练了 CrystalCoder,以提高其作为编程助手的实用性。
模型架构
CrystalCoder 采用了与 LLaMA 7B 非常相似的架构,加入了最大更新参数化(muP)。除了这种特定的参数化,研究者还进行了一些修改。另外,研究者还使用 LayerNorm 代替 RMSNorm,因为 CG-1 架构支持高效计算 LayerNorm。
实验及结果
如图 6 所示,研究者在 Open LLM Leaderboard 中的四个基准数据集以及编码基准数据集上对该模型进行了基准测试。
从表 5 中可以看出,CrystalCoder 在语言任务和代码任务之间取得了很好的平衡。
ANALYSIS360
Pythia 等先前的工作表明,通过分析模型的中间检查点,可以进行深入研究。研究者希望 LLM360 还能为社区提供有用的参考和研究资源。为此,他们发布了 ANALYSIS360 项目的初始版本,这是一个对模型行为进行多方面分析的有组织存储库,包括模型特征和下游评估结果。
作为对一系列模型检查点进行分析的示例,研究者对 LLM 中的记忆化进行了初步研究。最近的研究显示,LLM 可能会记忆大部分训练数据,通过适当的提示可以提取这些数据。这种记忆化不仅存在着泄露私人训练数据方面的问题,而且如果训练数据包含重复或特殊性,还会降低 LLM 的性能。研究者发布了所有检查点和数据,因此他们可以对整个训练阶段的记忆化进行全面分析。
以下为本文所采用的记忆化得分方法,该得分表示在长度为 k 的提示后续长度为 l 的 token 的准确性。具体记忆化得分设置,请参阅原文。
图 7 展示了 10 个选定检查点的记忆化分数分布情况。
研究者根据所选检查点对数据块进行分组,并在图 8 中绘制每个检查点的每个数据块组的记忆化分数。他们发现 AMBER 检查点对最新数据的记忆化程度超过之前的数据。此外对于每个数据块,记忆化分数在额外训练后会略有下降,但之后会持续上升。
图 9 展示了序列之间在记忆化得分和可提取 k 值的相关性。可见,检查点之间存在很强的相关性。
总结
研究者总结了对 AMBER 和 CRYSTALCODER 的观察结果和一些启示。他们表示,预训练是一项计算量巨大的任务,许多学术实验室或小型机构都无力承担。他们希望 LLM360 能够提供全面的知识,让用户了解 LLM 预训练过程中发生的情况,而无需亲自动手。
更多详细内容,请阅读原文。