大数跨境

人大开放数据集小模型:玉兰-Mini 2.42B技术报告

人大开放数据集小模型:玉兰-Mini 2.42B技术报告 苏哲管理咨询
2025-01-03
6
导读:本文介绍了一份关于YuLan-Mini的详细技术报告,这是一个拥有24.2亿参数(2.42B)的高性能基础模型,在参数规模相似的模型中表现出顶尖性能。我们的预训练方法着重于通过三个关键技术贡献来增强训

-YuLan-Mini: An Open Data-efficient Language Model

Yiwen Hu, Huatong SongJia Deng, JiapengWang, Jie ChenKun Zhou, Yutao Zhu, Jinhao Jiang, Zican DongWayne Xin Zhao†, Ji-Rong Wen Gaoling School of Artificial Intelligence

Renmin University of China

batmanfly@gmail.com, jrwen@ruc.edu.cnRenmin University of China batmanfly@gmail.com, jrwen@ruc.edu.cn 中国人民大学batmanfly@gmail.com, jrwen@ruc.edu.cn

摘要

大规模语言模型(LLMs)的有效预训练一直是一项具有挑战性的任务,因为其巨大的资源要求和复杂的技术过程。本文介绍了一份关于YuLan-Mini的详细技术报告,这是一个拥有24.2亿参数(2.42B)的高性能基础模型,在参数规模相似的模型中表现出顶尖性能。我们的预训练方法着重于通过三个关键技术贡献来增强训练效果:一个精心设计的数据流水线结合了数据清洗和数据调度策略,一种强大的优化方法来减轻训练不稳定性,以及一种有效的退火方法,该方法融合了有针对性的数据选择和长上下文训练。值得注意的是,YuLan-Mini在训练了1080亿tokens后,实现了与行业领先模型相媲美的性能,而这些模型需要大量更多的数据。为了便于复现,我们发布了每个训练阶段数据组成的全部细节。项目详情可访问以下链接:https://github.com/RUC-GSAI/YuLan-Mini

目录

1介绍

2总体预训练配置

2.1模型架构

2.2标记器

2.3模型优化

2.4训练基础设施

3训练稳定性

3.1探索隐藏状态的变异性和训练不稳定性

3.1.1指标的初步实验

3.1.2对爆炸式隐藏状态的理论分析和实证证据。

3.2训练不稳定性缓解方法

3.2.1缩放初始化和缩放因子

3.2.2最大更新参数化

3.2.3通过重新参数化减轻不稳定性

3.3其他训练稳定方法的讨论

3.3.1基于热身的方法

3.3.2模块化方法

3.3.3数值优化方法

4数据流水线

4.1数据收集

4.2数据过滤

4.3逻辑推理数据的合成生成

4.3.1数学推理

4.3.2代码推理

4.3.3科学推理

4.3.4反思(Reflection

4.4数据混合

4.5数据课程

5退火

5.1优化设置

5.2退火阶段的数据选择

5.3长文本训练

5.4其他策略

6评价

6.1实验设置

6.1.1评估基准

6.1.2基准模型

6.1.3实现细节

6.2主要结果

6.3在预训练期间评估模型性能

7结论

感谢

参考文献

A变量的定义

B训练稳定性

B.1实验设置

C用于生成合成数据的提示

C.1数学

C.2 Code

C.3科学

D在预训练期间使用的开源数据集

E训练阶段的详细数据组成

1介绍

近年来,大型语言模型(LLMs[赵等,2023年,杜贝等,2024年,QwenTeam2024]已显著推动了人工智能技术的前沿。与通常专门化的传统机器学习方法不同,LLMs在各种领域和任务中表现出色,展示了它们作为多才多艺的通才的潜力。通常,LLMs是通过预训练和后训练技术的结合开发的。众所周知,预训练对于构建LLMs的基础能力至关重要[OpenAI2023年,Touvron等,2023年,DeepSeek-AI等,2024年,杨等,2024b]

对于Transformer语言模型,目前主流的预训练方法涉及对大规模未标记文本进行下一个token的预测。尽管这种方法在概念上很直接,但在技术上实现起来非常复杂。首先,研究人员必须设计一个有效且高效的数据流水线来支持预训练,通常涉及数据收集、数据清洗、数据混合和数据课程的过程。广泛认为,数据是提升模型能力最关键的要素之一。其次,考虑到LLM包含大量参数,训练过程具有挑战性,难以稳定和优化。训练过程中常见的问题如损失激增或梯度爆炸可能发生,潜在导致失败的情况发生。尽管工业公司发布了大量模型检查点,但核心技术细节通常在公开报告中保密。因此,我们对工业界如何开发顶尖语言模型知之甚少。

1: YuLan-Mini在八个基准测试中与其他基础模型的性能比较,基于GSM8KMATH-500HumanEvalMBPPMMLUARC-ChallengeHellaSwagCEval的平均得分。浮点运算次数(FLOPs)是根据Kaplan等人提出的缩放定律公式C = 6ND进行估计,其中N为模型大小,D为数据集大小。大小超过3B的模型显示为灰色。

幸运的是,研究界已经做出了显著的努力,以增强LLM预训练的数据资源可用性和培训方法的开放性[Allal等,2024年,Groeneveld等,2024年,Zhang等,2024]。首先,已发布了精心策划的数据集,以支持LLM预训练所需的数据准备工作。此外,各种开放研究出版物已记录了整体训练程序,提供了LLM预训练的基本理解[胡等,2024年,李等,2024]。这些贡献提供了预训练LLM的基本技术方法和必要资源。

尽管有这些进展,公开的LLMs(拥有完全披露技术细节的语言模型)仍然面临两个主要限制。首先,大多数这些模型在数据和计算资源方面往往表现不佳,与行业同行相比存在限制。虽然一些公开的LLMs在性能上达到了与行业模型相媲美的水平,但它们也需要类似数量的资源,这使得在研究领域内难以复制。因此,开发具有有限训练资源的竞争性LLMs仍然是一个挑战,特别是在大学实验室中。鉴于这些限制,我们的目标是通过显著提高开放模型的性能上限和训练效率来推进LLM预训练的透明度。具体来说,我们专注于开发相对规模较小的语言模型,即参数规模在10亿到30亿之间的模型(1B-3B),并在有限的计算预算内进行限制。我们的目标是仅使用公开数据构建一个小而强大的语言模型,同时分享关于如何改善在有限计算资源下的训练效率的经验或见解。

本文介绍了一份关于开发一个高性能2.42B参数语言模型(基础模型)的全面技术报告,该模型在类似参数规模的模型中表现出顶尖水平。在Transformer架构的基础上,我们设计了一种数据高效的LLM预训练方法。我们的方法包括三个主要贡献来增强训练效果:(1)精心设计的将数据清理与数据调度策略相结合的数据管道;(2)一种系统化的优化方法,可以有效减轻训练不稳定性;(3)一种有效的退火方法,整合了有针对性的数据选择和长上下文训练。我们探索了各种技术来提升YuLan-Mini的性能。特别是,我们广泛利用合成数据进行模型训练,包括类似o1的长思考数据。

此外,我们调查了可能导致训练不稳定的多个因素。我们分别提供支持4K28K上下文的两个版本的检查点。

为了展示我们预训练的基础模型的有效性,我们在各种基准测试上进行了广泛实验,并将其与研究和行业中的一些竞争性基础模型进行了比较。实验结果表明,我们的基础模型YuLan-Mini在这些比较模型中表现出非常有前景的结果。例如,它(28K版本)在MATH-500four-shot)上获得37.80分,在HumanEvalzero-shot)上获得64.00分,在MMLUfive-shot)上获得49.10分。图1展示了YuLan-Mini与其他行业模型的比较。

为了便于复制,我们报告了YuLan-Mini的完整训练详情,并发布了所有训练阶段的数据组成(附录E)。更多支持资源可在我们的项目链接中获取:https://github.com/RUC-GSAI/YuLan-Mini

2总体预训练配置

在本部分,我们将介绍预训练配置的概览,介绍其关键组件以及参与该过程的算法。有关本工作中所做的主要贡献的更详细讨论,请参阅第3节、第4节和第5节。

2.1模型架构

我们的模型基于一个仅包含解码器的变压器,具有高而窄的架构,受到之前研究的启发[Liu et al.2024cHu et al.2024]。它总共包含24.2亿个参数,其中22.3亿个为非嵌入参数。我们模型架构的超参数配置如表1所示。另外,我们重新参数化不同模块的每个权重矩阵,使用额外的可学习参数[Nishida et al.2024],增强了模型的训练稳定性(在第3节中讨论)。接下来,我们简要介绍我们架构中的主要组件。

利用嵌入链接 我们利用嵌入链接[Press and Wolf, 2017]来减少模型的参数规模并稳定训练。在我们的初步实验中,我们发现共享嵌入和反嵌入矩阵可以提高模型的收敛性。此外,当这些矩阵没有共享时,通常需要不同的初始化策略,我们将在第3节中讨论。

Layer normalizationLN被证明能够增强数值稳定性并加快学习速度[Ba等,2016]。我们将Pre-LN整合进我们的模型架构中,以提高收敛稳定性和速度,相较于Post-LN [Xiong等,2020]。在标准化形式方面,我们选择RMSNorm而非传统的LayerNorm,因为它在保持CUDA内存的同时达到了可比较的效果[Zhang and Sennrich2019]

我们的模型引入了一个使用Swish激活函数的门控线性单元(GLU),称为SwiGLU Shazeer [2020]。这种方法有效地捕捉复杂的数据关系,并且已被证明在相对较小的语言模型中是有效的,正如[Liu等,2024c]所示。

注意机制 我们采用了分组查询注意力(GQAAinslie等人[2023]),这使得模型能够在保持高性能的同时减少KV缓存的使用。具体地,我们采用了30个查询注意头和6个键值头的分组。我们选择不将KV头的大小设定为8的倍数,因为小型语言模型在推断过程中很少需要张量并行。

旋转嵌入 我们采用旋转位置嵌入(ROPE)来捕获模型中的位置信息,因为它以统一的方式集成了绝对和相对定位。

1:不同模型的超参数设置。rffn是前馈网络隐藏层大小与模型隐藏层大小的比率。符号的定义请参见表8

2:不同分词器的压缩比。值越高表示压缩效果更好。

在稳定训练阶段,我们将参数θ设定为10,000,在淬火阶段将其增加到49,000,使用调整的基频(ABF)将上下文长度扩展到28,67228K)个标记。

2.2标记器

Tokenization是一个关键的预处理步骤,将输入文本拆分为标记序列。下面,我们提供我们的分词器的细节。

词汇量一般来说,应选择词汇量来平衡其对模型参数大小和效率的影响。我们采用了Dagan等人[2024]提出的三种方法来平衡计算预算和词汇容量,得出最终约为99,000的词汇量。为简单起见,我们重用MiniCPM中的字节对编码(BPE)分词器[Hu等,2024]。具体来说,我们通过应用相应的BPE合并规则来截断词汇,以减少标记数。我们还从词汇表中启发式地删除了罕见的领域特定标记,同时在词汇表中添加了一些保留标记。修改后的词汇表统计数据和压缩率如表2所示。进行标记化实验的测试集来源于各种数据集,详细列在第6.3节中。总体而言,我们的标记化方法在不同领域之间实现了一个良好平衡的压缩率。

BPE-dropout现有的子词标记方法阻止语言模型理解单词Token的字母组成。为了缓解这个问题,BPE-dropout [Provilkov et al., 2020]提出了帮助模型更好地学习Token内部表示的方法,使其能够更有效地捕捉单词中可能存在的子词。具体来说,我们使用了相对较低的0.2dropout率,应用dropout方法只会导致Token数量略微增加(0.07%),如表2所示。

数字标记化在数学任务中起着至关重要的作用,包括数字计算和复杂推理。我们遵循将数字拆分为单个数字的常见做法[Bi等人,2024Yang等人,2023]。尽管其他方法,如三位数字标记化,可能实现更高的压缩率,但使用单个数字标记化通常会导致改善数字计算准确性[Wang等人,2024a]

2.3训练数据准备

数据作为开发模型能力的基础,我们采用特别设计的策略来收集和准备训练数据集。接下来,我们简要描述数据准备的一般流程。数据管道的更详细和全面的描述在第4节中提供。

数据收集与选择为了确保可重复性,我们的预训练数据主要来自开源预训练数据集和合成生成数据。主要的开源数据集包括FineWeb-Edu [Lozhkov et al., 2024a]the-stack-v2 [Lozhkov et al., 2024b]openweb-math [Paster et al., 2024]Chinese-FineWeb-Edu [Opencsg]OpenCoder-LLM [Huang et al., 2024]。整个预训练数据集经过严格的预处理,包括了1.08TToken用于训练。其中包括481B英语网络数据,138B一般英语知识,227B代码预训练数据,16.7B代码指导数据,93.8B数学预训练数据,15.5B数学指导数据和108B中文数据。

数据计划使用WSD调度方法[Hu et al., 2024],训练过程分为三个主要阶段:热身阶段、稳定训练阶段和退火阶段。热身阶段使用10B Token,稳定训练阶段利用990B Token,而退火阶段使用80B Token。为了更好地管理训练过程,我们将整个训练轨迹分为27个连续的课程阶段,每个阶段包含40B Token。在这些课程阶段之间过渡时,基于模型在各种基准和验证文本的困惑度(PPL)上的表现,会略微调整数据集的比例。但是,一旦为训练而安排,每个课程阶段的内部数据分布就无法修改。在退火阶段,指导数据和长上下文数据的比例增加。

2.3模型优化

模型优化过程中,超参数对培训稳定性和模型性能至关重要。

具体而言,我们采用了WSD学习率调度器[Hu et al., 2024]。在稳定训练阶段保持恒定的学习率消除了需要像余弦调度器一样指定结束步骤的必要性。这种方法便于在稳定训练期间继续从上一个检查点进行预训练。它还允许更灵活的数据准备:我们可以在前一个课程阶段运行时准备数据。此外,我们使用学习率退火的比例定律[Tissue et al., 2024]估计了稳定训练阶段的最佳退火比例为8%

为了训练稳定性,我们结合了类似于µP [Dey等人,2023bHu等人,2024Yang等人,2022]的参数初始化方法和WeSaR重参数化[Nishida等人,2024],使用相对较大的全局学习率0.01。采用较大学习率的理由是希望模型在退火阶段具有更大的提升潜力。我们设置AdamW超参数如下:β1 = 0.9β2 = 0.95ϵ = 10^-15,权重衰减为0.1z-loss系数为10^-4 [de BrébissonVincent2016]。我们使用方差为5 × 10^-5进行初始化。正如Wortsman等人[2024]发现的那样,延长预热比率可以增强训练稳定性,因此我们在10B Token上对模型进行线性预热。我们使用4.12M Token的批量大小,序列长度为4,096,在模型退火阶段扩展上下文长度,同时保持批大小中的总Token数不变。为防止bfloat16的精度错误,我们避免使用梯度累积。有关训练稳定性的详细分析可以在第3节中找到。

2.4训练基础设施

我们基于HuggingFace Trainer和其他开源库(DeepSpeedflash-attentionliger-kernel)构建了一个简单而高效的训练框架。

(a)训练损失。(b)梯度范数。

(b)

2:预训练过程中的训练损失和梯度。

具体来说,我们首先使用DeepSpeed集成提供的ZeRO-1数据并行处理,然后在确认它不会引起模型训练发散后切换到ZeRO-2。我们还利用Flash Attention和一个名为liger-kerneltriton内核库加速训练过程。通过使用融合内核,我们实现了训练时间30%减少,并最多节省了70%CUDA内存。我们通过调整激活检查点功能中的层数,进一步优化了CUDA内存使用和训练时间之间的平衡。为提高训练效率,我们在模型参数和NCCL通信中使用了bfloat16精度。模型的FLOPs利用率(MFU)估计为51.57%

关于硬件设置,我们最初采用了由SLURM系统管理的56A800-GPU集群[Yoo et al., 2003]。随后,通过将分布式优化器转换为通用检查点[Lian et al., 2024],我们将GPU的数量减少到48。为了最大化设备利用率,我们进行异步标记化和打包。考虑到我们集群的规模适中,遇到NCCL故障的可能性相对较低。因此,在评估了优缺点之后,我们决定每小时存储一个检查点,并实施自动重启。

为了有效评估,我们利用LLMBox [唐等,2024b]来整合vLLM [Kwon等,2023]用于生成任务,并采用KV缓存调度用于多项选择任务。有关评估设置和结果的详细描述,请参考第5节。

3 训练稳定性

训练稳定性对于LLM的有效预训练至关重要。在正常情况下,损失轨迹预计会平稳下降,并始终保持在其预期值附近,即使存在轻微扰动。然而,未正确初始化或使用不合适的架构或超参数进行训练的模型可能会经历边际稳定性或明显的不稳定性。在边际稳定的网络中,即使发生来自数据的轻微异常扰动,也可能将其推入非稳态。如果网络可以自我纠正,它将经历临时损失峰值;否则,训练可能会发散。

训练稳定性问题甚至存在于相对较小的语言模型的训练中。例如,正如Wortsman等人[2024]所经验观察到的那样,在相同的学习率下,模型越小,模型对数的数量级就越大,这是导致训练不稳定的典型因素。一般的方法,比如替换导致峰值的数据或降低学习率,通常只能缓解表面问题。

尽管文献中已经做出了重要的努力来减轻训练不稳定性[Takase等人,2023年,Yang等人,2022年,Wortsman等人,2024],但先前的研究通常集中在个别技术或进行规模相对较小的实验。在大规模预训练实验中,缺乏对各种潜在技术影响的系统调查。在我们的预训练过程中,我们遇到严重的训练不稳定性问题,促使我们进行深入研究如何有效解决这个问题。我们的主要方法涉及将µP样式的初始化[Dey等人,2023a]与重新参数化方法[Nishida等人,2024]相结合,以调整学习率并稳定训练。接下来,我们将介绍一个关于保持训练稳定性的详细方法。

3.1探索隐藏状态的变异性和训练不稳定性

为了有效地减少训练不稳定性,关键是要检查潜在的异常状态指标。通常,损失、梯度和隐藏状态是反映训练动态的三个相互关联的因素。在这些指标中,损失提供了关于不稳定性的表面线索,而梯度和隐藏状态通常揭示了导致病态状态的更深层因素。我们首先进行了初步实验,评估不同指标对训练不稳定性的影响。然后我们从理论上分析潜在原因。

3.1.1 指标的初步实验

我们进行了初步实验,展示了在训练过程中基于隐藏状态跟踪我们的指标的效果。

训练设置 由于在我们的模型上执行大量实验需要大量资源,我们通过使用一个具有相似架构的0.2B小代理模型进行替代实验来探索训练动态。我们采用相对较大的学习速率0.01,以暴露模型内潜在的不稳定性。我们在随后的实验中保持这个基准模型设置,详细内容请参见附录B。具体来说,我们的优化目标是在确保训练过程不会导致损失发散或梯度范数增长趋势的情况下实现最佳性能。

在大规模训练中,通常会使用分布式优化器,这意味着不同模块的梯度可能分布在各个数据并行的排名上。这种分布使得直接获取梯度变得低效。因此,我们主要跟踪每个模块的权重矩阵和隐藏状态(即它们的输出)。具体来说,我们记录权重和隐藏状态的均值和方差,以及通过计算得到的均方根(RMS)。

p2公式为RMS =方差+平均值。注意我们将transformer中各个模块的输出(例如,FFNAttentionRMSNorm)视为隐藏状态。

实证结果3a展示了我们关于训练不稳定性和隐藏状态爆炸之间关系的发现。在所有层中,随着训练步数的增加,无论是隐藏状态还是梯度范数都呈现出一致的上升趋势。有趣的是,这些中间趋势在预训练的早期阶段,当仅关注损失时很难检测到。此外,除了时间维度,与隐藏状态相关的指标也显示出在模型深度方面越来越分散的趋势(即,随着层数的增加)。最后一层方差与第一层方差之比呈线性增长,表明隐藏状态和梯度范数可能会在未来爆炸。根据这些结果,我们可以看到隐藏状态在影响训练稳定性方面发挥着重要作用。基于这些观察结果,我们的核心思想是监控和调整隐藏状态以保持训练稳定性。

除了监测隐藏状态之外,其他指标也可以帮助检测异常的优化问题。在我们的实验中,我们还研究了另一个稳定性指标,称为token嵌入变异性(TEV[Chung等,2024],它衡量了向量内数据条目的方差。通过比较两个输入向量的TEV,我们可以量化它们分布的不同程度。如果输入向量遵循彼此显着不同的分布,输出向量可能会出现大幅波动。这些输出向量本质上是一种特殊类型的隐藏状态,因此可以检测训练的不稳定性。然而,由于我们在实验中已记录隐藏状态,因此我们没有使用TEV作为额外的指标。

 (a)

3:发散性和收敛性试验之间训练动态的比较。y轴表示隐藏状态方差和梯度范数的值,以对数刻度显示。两种试验都有一致的损失,但隐藏状态方差和梯度范数的趋势不同。

3.1.2 对爆炸式隐藏状态的理论分析和实证证据。

在这部分中,我们首先对transformer的隐藏状态进行形式化,然后从理论上推导隐藏状态爆炸的三个潜在原因。我们还展示相应的经验证据,以验证将隐藏状态作为训练稳定性指标的有效性。

隐藏状态的形式化 为了更好地分析隐藏状态如何用于指示训练稳定性,我们首先通过正式定义模型中的隐藏状态来开始。由于Yulan-Mini是一个多层Transformer模型,第l层的隐藏状态,记为zl∈Rd,可以如下指定:

在这里,xl ∈ Rd表示第l层的输入。定义FFNMHA为具有子层输入u = RMSNorm(xl)v = RMSNorm(yl)的形式:

值得注意的是,我们专注讨论上文中的FFN层的简化版本。现代类似LLAMA架构通常使用GLU风格的非线性,我们将在第3.2节中讨论。基于这个定义,我们特别关注隐藏状态方差的变化,因为我们在实证观察中发现它在训练过程中往往会增加。如果不得到适当解决,这种增加的趋势可能导致训练不稳定。考虑到方差的关系var(a + b) = var(a) + var(b)。我们首先分析隐藏状态方差异常增加的问题,这一问题从残差连接中固有地产生。此外,我们展示了层归一化如何可以促进隐藏状态方差的增加,特别是当输入明显偏离其正常范围时。最后,我们表明层归一化中某些异常的更新实际上是由于注意力logits的平均值增长所驱动。

由于残差连接引起的隐藏状态爆炸,图3a展示了隐藏状态方差呈指数增长趋势。为了理解潜在原因,我们将隐藏状态表示为模型的权重和输入:

为了方便分析,我们首先假设:

在这种假设下,我们可以得到var(u) = var(v) = 1。在这种情况下,我们可以将方差表示为以下形式:

训练步骤

4:每个层次的LN输出方差。图5LN之前的注意力分数爆炸,这意味着,隐藏状态将根据每个层次中MHAFFN的方差增长。

其中Z表示经过缩放的注意力分数。LLM的基本维度dmodel通常很大(例如,我们模型中为1,920)。此外,Hugging Face中的基本设置使用权重矩阵的默认初始化标准差为0.02。训练代理模型时,这种初始化导致方差值显著增大,并且由前述注意力和FFN模块的影响加剧。结果,梯度范数变得非常大。关于注意力头的详细推导可在Takase等人[2023]的论文中找到。常见的缓解策略包括使用非常小方差初始化权重,通常与dmodel成反比,我们将在第3.2节中讨论。

根据以前的研究[Xiong等,2020年,Takase等,2023年,Wortsman等,2024],层归一化的输入方差不应明显小于1,否则可能导致梯度范数增加。

为了研究层归一化的影响,我们进行了一项实验,检查模型中LN层输出的方差(图4),其中嵌入层后跟着层归一化。我们实验证明,如果使用默认方差初始化嵌入层,我们必须将其输出乘以一个缩放因子,以确保输入到层归一化具有方差为1。因此,我们将scale_embed = 10的缩放因子应用于模型训练。对于不使用嵌入绑定的实验,我们直接将嵌入的初始化标准差设为1

由于注意力分数,隐藏状态可能发生爆炸。当应用上述提到的缩放嵌入方法时,我们在实证观察中发现,注意力分数也可能发生爆炸,导致隐藏状态的爆炸。我们首先检查注意力分数的计算过程,这个计算过程形式上定义为:

然后,我们按以下步骤计算注意力分数相对于查询矩阵和键矩阵的梯度:

6:进行了有关训练不稳定性缓解方法的消融实验。我们报告了训练的最后三个检查点的LAMBADA准确度的平均值,以及在我们的48A800-GPU集群上的估计运行时间。红色条形图显示了发散梯度范数或尖峰损失轨迹,绿色显示了收敛训练。

根据上述推导,我们发现涉及查询-键乘积项可能导致无界梯度,潜在地引起严重的自激励。在这种情况下,随着层数增加,注意力分数的均值逐渐增加,最终导致隐藏状态爆炸。因此,在训练过程中监控和规范注意力分数是至关重要的。

3.2训练不稳定性缓解方法

讨论完训练不稳定的潜在原因后,我们将介绍增强训练稳定性的缓解方法。

3.2.1 缩放初始化和缩放因子

正文段落内容: 正如在3.1.2节中讨论的那样,采用精心设计的初始化方法以及适当的缩放因子是解决训练不稳定性的关键策略。在这方面,我们探讨了Megatron-LM [Shoeybi et al., 2020]BLOOM [Scao et al.,的初始化策略。

2022].具体而言,我们根据方程(1)初始化FFN层的W2和注意力层的Wo(方程(2)),并初始化其余参数。

根据。在这里,我们将初始化标准差设定为σbase = p2/(5d)

分析上述初始化策略的影响,我们将初始化标准偏差代入方程(6)和(7),得到以下公式:

将得到的结果代入方程(4),我们可以测量整个网络中隐藏状态方差的增长。

成功规范了隐藏状态增长趋势。

在现代LLaMA架构中,更常见的是使用GLU风格的非线性,可以表示为FFN(u) = [F(uWgate) ⊙ (uWup)] · Wdown。我们初始化WupWgateW1相同,WdownW2相同。在此设置中,方程(10)中的上述推导仍然在经验证明有效。

3:用于训练稳定性的超参数设置比较,其中变量的详细解释见表8。我们包括SI [Takase等人,2023]进行比较,MiniCPM [Hu等人,2024]CerebrasGPT [Dey等人,2023a]。符号的定义可参见表8

输出logits的规模。

以这种方式初始化,我们在经验上发现,虽然在每一层的隐藏状态可能仍然有逐渐增加的趋势,但这种增加仍然在一个合理范围内。

3.2.2 最大更新参数化

在上面,我们通过理论分析和实证实验探讨了参数初始化的重要性和有效性。然而,当我们将在0.05B代理模型上选择的训练配置迁移到目标大小的模型时,不稳定性仍然存在。

为了确保在不同模型规模之间的超参数一致性,已经提出了最大更新参数化(µP) [Yang等人, 2022, 2024c],包括宽度缩放和深度缩放,有助于将超参数从较小的模型转移到较大模型的训练中。这种策略的典型用法可以在CerebrasGPT [Dey等人, 2023a]MiniCPM [Hu等人, 2024]中找到。特别是,他们发现在迁移过程中最佳学习率保持相当稳定。与第3.2.1节中的基本方法相比,µP提供了一个更系统化的方法来设置初始化和缩放因子。

我们应用µP,考虑嵌入参数、模型深度和模型宽度进行参数初始化。此外,我们在代理模型上进行全面的参数搜索,以确定最佳配置,探索批大小和学习率等参数。

3.2.3 通过重新参数化减轻不稳定性

使用微分方面时,我们发现即使在较大的学习率下仍会出现损失的波动。我们推测,这是因为尽管微分在训练的初期阶段减轻了不稳定性,但在较大的学习率下进行长时间更新时,仍可能偏离稳定状态。

因此,我们应用了Nishida等人在2024年提出的一种简单而有效的方法WeSaR,该方法经验性地将梯度范数的更新与梯度方向分离。这是通过将矩阵权重W重新参数化为一个额外的可学习参数α ∈ R来实现的:

我们发现上述的WeSaR方法在解决前文分析中突出的隐藏状态爆炸原因方面是有效的,如图3b所示。这可能是由于重新参数化,它将单个权重的梯度分布到多个新的重新参数化的权重上,从而减少由过大梯度引起的异常更新。

重参数化不仅适用于除层归一化之外的矩阵,如图6所示。

具体而言,我们初始化Wf ∼ N(0,σ2),并设置α = 1/γ。在这种情况下,很容易验证W ∼ N(0,(σ/γ)2),满足第3.2.1节中描述的缩放初始化要求。

3.3 其他训练稳定方法的讨论

在我们的培训过程中,我们深入探讨并利用各种培训稳定技术。以下,我们简要介绍这些方法。

3.3.1基于热身的方法

为了确保模型顺利从初始状态过渡到稳定的训练阶段,我们在实践中发现,采用学习率预热和序列长度预热通常是有效的,下面将对其进行详细介绍。

学习率预热是指从一个小的初始值(例如0)逐渐增加学习率到最大学习率,步数为TLRWortsman等人[2024]指出,较长的学习率预热可以降低对学习率的敏感性,这是通过在不同学习率下训练的稳定性来衡量的。我们在实证中验证了这个结论,并发现增加TLR确实增强了训练的稳定性。在我们的最终训练中,我们设定TLR = 2,433,大约相当于100亿个数据标记。

序列长度预热在训练中以短序列(例如64个标记)开始,并逐步在TSL的步骤中增加它们的长度,通常设置为TLR的几倍[L李等,2022]。这种方法背后的原理是,较长的序列长度在训练的早期阶段特别对极限梯度变化有显著贡献。在我们的实验中,我们还观察到长上下文训练期间(尤其是在第27课程阶段)损失也存在类似的波动。但是,由于我们已经使用其他方法稳定了训练,而这种方法需要对数据进行额外准备,因此我们最终决定不采用它。

3.3.2 模块化方法

在这部分中,我们介绍了基于模块的方法,通过调整模型中的特定组件来规范化模型状态。

QK LayerNorm及其变体(例如QKV LayerNormcapped QK LayerNorm)已被证明有效地缓解了注意力Logits的增长[Rybakov等,2024],我们在3.1.2节中也已经确定了这一点。我们强调QK LayerNorm的有效性,因为它直接解决了由隐藏状态之间的交互(QKT)引起的梯度指数增长,而其他一些方法只是试图控制下游的不稳定性。我们的实证研究显示,在训练稳定性方面,QK LayerNorm的优势很明显(见图7a7b)。然而,在训练中,它会显著降低计算速度:使用相同的加速配置,使用QK LayerNorm会增加34%的训练时间。考虑到在我们的初步实验中,先前提到的方法已经表现出了稳定性,我们最终决定不使用QK LayerNorm

嵌入绑定旨在共享嵌入和非嵌入的权重。

我们的实验表明,利用嵌入共享可以实现更快的收敛和更稳定的训练,并且在训练性能上没有显著的降级。

Z-loss最初被提出来减轻分类任务中logits的偏移和缩放[de Brébisson and Vincent, 2016]。随后,它被引入到LLMMoE训练中,以减轻logits层的增长[Chowdhery等,2023年,Zoph等,2022]。它向原始损失添加了一个与softmax归一化器logZ有关的辅助项:L = lm_loss + ζ log2 Z

(a)注意力值的方差和LN输出(b)梯度范数和损失轨迹

(b)

7:注意力值和LN输出变异度曲线(左)以及梯度范数和损失曲线(右)。使用QK LayerNorm后,我们防止了注意力logits和梯度的爆炸,使LN输出稳定在1附近,并保持损失一致。

在我们的实验中,我们设置了系数ζ = 10^-4,以鼓励逻辑回归接近于0。尽管消融研究没有显示出显著影响,但我们将其纳入最终的训练中。

3.3.3 数值优化方法

另外,我们考虑使用几种常见的方法来减少优化过程中的异常更新,如下所述。

为了防止由于梯度更新过大而导致的模型权重异常,权重衰减通过在更新步骤中从权重中减去惩罚项,而不是直接修改梯度来实现。形式上,我们将没有学习率或权重衰减的AdamW更新表示为:

在更新步骤t时,带有权重衰减的AdamW更新为θ → θ - stη(Δ - λθ),其中λ是权重衰减系数,st是学习率调度,η是最大学习率。先前的工作建议对更新使用独立的权重衰减,表示为θ → θ - st(ηΔ - λ'θ),据称适用于更广泛范围的学习率[Loshchilov and Hutter, 2019, Wortsman et al., 2024]。在PyTorch实现中,可以通过调整权重衰减系数λ和最大学习率来实现这种方法,遵循λ' = η·λ的关系。

优化器超参数在AdamW的更新中(方程式(11)), mˆ tvˆt分别代表第一和第二梯度矩的指数移动平均值(EMA)。如果梯度与ϵ大致相同的量级,则由于ϵ的存在,更新值将显著减小,这经验证导致了嵌入层固有的训练不稳定性。直接的解决方案是将ϵ从默认值10−8减小到10−15。一般来说,这种方法可以缓解在规模较大模型中异常嵌入梯度值引起的发散现象【Wortsman等人,2024年,Molybog等人,2023年】。

数值稳定性 在实际应用中,密切关注数值稳定性至关重要,因为它可能是训练不稳定的重要原因。在大规模模型训练中,float32往往受到低计算效率的影响。虽然float16在提供可比较的精度的同时具有更高的计算效率,但其数值表示范围受到限制(例如,可以表示的最大正数为65,504)。因此,bfloat16被提出作为精度和表示范围之间的折衷方案。它在很大程度上缓解了由于超出可表示范围而引起的训练不稳定性。然而,在实践中,与float16相比,bfloat16引入了精度问题。在李等人[2024]的实验中,使用bfloat16进行实验,其中包括1884YuLan-Mini整个预训练语料库的统计信息。退火过程中的数据详见表5。为了模型的可复现性,所有筛选的数据集都放在附录D中,而我们生成的剩余合成数据是开源的。

随机种子,18次运行发散,而在相同配置下使用float32则导致所有运行正常收敛。为了缓解bfloat16的精度问题,Gemma [Mesnard et al., 2024]发现将RMSNorm权重从1移动到0有所帮助,考虑到bfloat160周围具有对称的数值精度,但在1附近的不准确度更大。

限值削减为了进一步限制梯度在某一范围内,我们利用梯度削减值为1。我们发现使用较小的限制值并不能帮助稳定训练。此外,根据“3-σ”规则使用nn.init.trunc_normal_初始化LLM可能有助于数值稳定性。

4数据流水线

为了预训练一个有效的LLM,关键是要建立一个稳健的数据流水线,全面涵盖筛选预训练数据的关键步骤。这些步骤包括数据收集、过滤、选择、混合和课程设计。下面我们详细描述数据管道的每个步骤。

4.1 数据收集

为了进行预训练数据准备,我们主要参考了Yulan-3 [朱等,2024]Llama-3-SynE [陈等,2024]的数据配置,其中包括网页、百科全书、书籍、数学语料库、代码、一般知识和合成数据等各种广泛而多样的数据。表4总结了我们训练数据的组成情况。

4.2数据过滤

为了实现高效的数据训练方法,数据质量对最终模型的性能至关重要。为此,我们实施了彻底的数据清洗过程,以删除低质量的文本(图8)。

数据去重 数据去重是标准LLM训练实践中的关键步骤,因为先前的研究表明重复数据会显著降低模型性能[Tirumala等,2023]。我们使用Yulan-GARDEN库实现的MinHash算法来对训练数据进行去重[Sun等,2024]

启发式过滤 我们采用启发式方法来过滤数据,其中一些列举如下:

删除:我们删除包含少于20个标记的文档。

8:我们的数据过滤流程和推理数据的合成生成示意图。过滤流程包括从数据收集开始的六个步骤。合成数据生成包括预训练数据(水平线上方)和指导数据(线下)。

1.根据代码度量标准(例如,平均行长、字母字符比例和关键字统计),我们应用类似于DeepSeek-Coder [Guo等,2024]的过滤标准。

2.合成数据:我们移除含有混淆或重复内容的回复。对于数学文本,我们移除不包含高亮答案部分的回复(例如,$box{}$)。

基于主题的文本回忆为了增强模型在专业领域的能力,有必要包含大量与数学、代码和推理相关的知识文档。为此,我们通过训练专门针对这些类别定制的fasttext [Bojanowski等,2017]TinyBert [Jiao等,2020]分类器,从未使用的网页中提取相关文档。我们从FineWeb-Edu [Lozhkov等,2024a]DCLM [Li等,2024b]网页语料库中提取了104亿个数学文本标记、11亿个代码文本标记和10.1亿个推理文本标记。这些文本标记直接用于训练或用作合成指导数据的种子数据。此外,我们还重复使用了从Llama-3-SynE [Chen等,2024]中合成的科学数据(15亿条),涵盖了各种学科,如数学和物理。

基于模型的质量评分对于一般网页数据和数学预训练数据,我们使用FineWeb-Edu发布的fineweb-edu-scorer进行数据评分。对于Python代码数据,我们使用FineWeb-Edu发布的python-edu-scorer。为避免语言模型偏爱高度技术性页面,如arXiv摘要和提交的论文,这两个分类器侧重于初中水平的知识。按照Penedo等人[2024]的方法,我们使用评分工具对所有Python代码数据,大多数数学数据和网页数据进行质量评估。我们排除得分为12的数据,然后根据得分从35进行启发式排序(如第4.5节中详细说明)。

为了确保比较的公平性,我们根据选择的评估基准进行去污染处理。首先,我们标记需要去污染的训练集和基准数据,如GSM8K [Cobbe等,2021]MATH [Hendrycks等,2021]HumanEval [Chen等,2021]ARC [Yadav等,2019]。接下来,我们使用n-gram标记来划分所有基准数据,创建一个污染集合。我们使用标记而不是单词来形成n-gram片段,这在数学和编程领域达到更高水平的去污染效果。另外,我们排除出现超过四次的20元组片段,因为它们通常与问题或解决方案无关。最终,污染集合包括1,917,428个元组。对于每个训练文档,如果超过10%的生成的20元组出现在污染集合中,则我们将排除该文档在最终的预训练集中。

4.3 逻辑推理数据的合成生成

推理被广泛认为是LLMs中最理想的能力之一[Huang and Chang, 2023]。然而,与像知识记忆这样的基本技能不同,推理在LLMs中更具挑战性。导致这种困难的一个潜在原因是真实数据集中缺乏包含逻辑或复杂推理的高质量文本。为解决这一局限性,一种常见的方法是生成与推理相关的数据样本,如链式思维数据,这些数据重点展示了可能导致最终解决方案的思维过程,而非直接生成问题-答案对[Wei等,2022]。为丰富多样性和覆盖范围,我们考虑了用于合成数据生成的广泛领域,如下所介绍。

4.3.1 数学推理

数学推理数据在预训练语料库中相对稀缺,但对于增强模型能力至关重要[魏等,2022]。为了填补这一空白,我们生成了多样化的数学推理数据,包括文档、说明和正式数学数据。

数学文档 对于数学文档,我们生成描述性内容,涵盖各种难度级别和主题风格。包括小学水平的数学概念解释和科学教育资料,以及适用于高中和大学水平内容的讲座脚本、教程、教育文章和问题集。我们主要从数学预训练语料库(如OpenWebMath [Paster et al., 2024])和在第4.2节描述的分类器中编制的自编数学数据集中获取与数学相关的种子数据。

思维链推理对于教学数据,我们采用三种方法进行文本合成。首先,我们使用Qwen2.5-Math-7B-Instruct [Yang等人,2024b]来为开源数据集中现有问题生成思维过程(例如,思维链),如Orca-Math [Mitra等人,2024b]MetaMathQA [Yu等人,2024]AMPS-Math [Hendrycks等人,2021b]NuminaMath [LI等人,2024]。其次,按照JiuZhang3.0的方法[Zhou等人,2024b],我们利用经过微调的Qwen2-Math-7B-Instruct[Ding等人,2024b]来自动生成新的数学问题(不包括思考过程),然后以与第一种方法相同的方式注释解决方法。为了获取更广泛的思维过程,我们选择更具挑战性的数据,例如来自NuminaMath数据集,并利用慢思考模型QwQ-32B-Preview [Qwen-Team2024]进行精炼。我们从我们的o1-复制项目带有LLMs的慢思考”[Jiang等人,2024Min等人,2024]中获取长形式思维数据。这些数据旨在增强我们基础模型的数学能力。

形式数学推理我们还结合来自形式数学的推理数据,例如形式定理证明,已经被证明可以增强对通用数学测试(如GSM8KMATH)的表现。具体来说,我们收集Lean策略(例如introsimp)数据集,类似于DeepSeek-Prover [Xin等,2024]及其相关的证明器状态,用于训练模型生成证明策略。对于Lean GitHub数据集[Wu等,2024],我们将每个文档中的推理步骤连接在一起,形成一个长的推理链。此外,受到LIME [Wu等,2021]的启发,我们使用三种推理基元来增强Lean Workbook [Ying等,2024]数据集:

(1)演绎推理:先前状态,策略后续状态;(2)归纳推理:后续状态,策略先前状态;(3)归纳推理:先前状态,后续状态策略。与直接预测下一个证明策略不同,我们训练模型以基于证明策略来预测先前或后续状态。

程序生成的数值推理LLM通过自然语言进行推理,这种方法灵活,但不允许验证每个步骤的正确性和必要性。为了增强模型的基本数值能力,我们从DeepMind-Math数据集[Saxton et al., 2019]中选择了加法、减法、乘法、除法和余数运算的子集。我们的目标是将简单的数学表达式(例如,“0.079 - 162等于多少?)转化为包含单独步骤的计算过程。这使得模型能够以类似于思维链的方式学习计算。这种方法主要适用于简单和有限的数学计算,仅适用于培训的早期和中期阶段。考虑到手动编写转换代码很费时,我们还利用主动框架来自动生成代码。

4.3.2  代码推理

为了进行代码推理,我们主要综合两种类型的数据:编程竞赛问题和现实世界的编程任务。我们还使用慢思考模型生成长篇推理思维数据。

通过ICL进行竞赛代码综合。为了增强现有的编程竞赛数据集,例如LeetCode等,我们利用一种称为上下文学习(ICL)的方法,通过利用少量示范来生成额外的例子,从而扩展和丰富数据。通过引入更广泛范围的具有挑战性的编程问题,我们显著丰富了数据集。

另外,我们使用OSS-Instruct方法生成实际的编程任务及其相应的解决方案,详细方法见之前的研究[魏等,2024]。该过程受到精心设计的提示的指导(见附录C),确保生成的任务与实际场景相关且适用。这种方法显著增强了数据集的实际实用性。

4.3.3 科学推理

科学推理对于拓展LLM的能力至关重要。要获得科学推理数据,我们考虑以下两种方法。

在第4.2节中,我们训练了一个科学分类器,从FineWeb-EduDCLM的网页数据中提取与各种科学领域相关的文档。我们利用这些科学数据作为种子数据,并应用类似于用于生成数学推理数据的综合方法来创建与科学相关的问题和答案[Chen等,2024]

科学问题与思考过程的缓慢 我们从高考试题和骆驼-ai中汇总了更加困难的科学问题,涵盖物理、化学和生物等学科。然后我们使用QwQ-32B-Preview来回答这些问题,获得困难科学数据问题的答案对。

4.3.4 反思(Reflection

推理能力的一个重要方面是反思和回溯当前状态的能力[Shinn等,2023]。在这项工作中,我们探讨生成反思数据以进一步增强模型的推理能力。首先,我们抽样数学问题,并通过将它们与黄金标签进行比较,收集正面和负面响应。然后,我们使用强大的模型Qwen2.5-Math-7B-Instruct来识别负面答复中的第一个错误并截断其后的内容。我们不仅仅是将正面回应与截断的负面回应进行简单串联,而是创建错误分析和过渡语句,以无缝且有效地连接这两个回应。

数据综合使用的提示请参见附录C

4.4 数据混合

我们的训练过程分为三个主要阶段:热身、稳定训练和退火。

在热身和稳定训练阶段,数据集的组成如下:60%通用。

英文数据(包括来自网络的45%和来自书籍、论文和其他相关来源的15%)、20%的代码数据、10%的数学数据,以及10%的一般汉语数据。在稳定训练的后期阶段,引入少量(<5%)的指导数据。我们在不同课程阶段保持相对一致的数据分布,并根据模型在各种基准测试上的困惑度表现轻微调整数据比例。我们努力避免数据分布大幅度变化,因为显著变化可能会导致损失突然上升。为了确保训练稳定性并考虑测试不准确性,两个连续阶段之间的数据分布变化保持在3%以内。

9:数学、代码和一般数据的数据混合比例。我们在稳定阶段保持网页数据的比例不变,然后在退火阶段逐渐减少。整个过程分为三个主要阶段:热身、稳定训练和退火(即虚线之后开始)。

在退火阶段,指令数据的比例增加到总体的19.19%:与编码相关的指令数据大约占11%,与数学相关的指令数据约占7%,通用指令数据约占1%。此外,长上下文数据的比例也增加,占用了约14.21%的标记数。

4.5 数据课程

根据之前的研究[KimLee, 2024; Chen, 2024],我们采用基于课程的方法在整个过程中准备训练数据。我们使用质量分类器,如fineweb-edu-scorer,根据教育难度评估内容,为适合小学和中学水平的文本内容分配较高的分数。手动检查发现,对于数学和代码的预训练数据,较低的分数通常表示较高的难度。相反,对于英文网页数据,我们发现基于教育水平分数的分阶段训练显著影响原始分布。因此,我们按照难度递增的顺序训练数学和代码数据,但不应用课程学习到网页数据上。

在整个训练过程中,我们会持续监控模型的性能,具体细节请参见第6.3节。我们每训练4B个标记就保存一次检查点并进行评估。每训练40B个标记时,我们会根据该阶段模型整体性能来重新评估和调整数据比例,以便在训练阶段之间进行转换。例如,如果模型在HumanEval基准测试中的表现在某个阶段没有改善或下降,我们可能会考虑在随后的阶段稍微增加代码数据量。

此外,在模型适应退火阶段的相对高比例的指导数据时,我们逐渐增加指导数据的量。然而,在整个稳定的训练阶段,这个比例不会超过5%

我们在图9中展示了培训课程中安排的数据分布,每个阶段的详细数据组成见附录E

5 退火

根据之前的研究[胡等,2024]显示,淬火阶段在提升模型性能方面非常有效。我们还在淬火阶段实施了有效的训练策略,具体如下描述。

5.1优化设置

在退火阶段,我们通过使用高质量的数据集和赋予模型长上下文处理能力来提高模型性能。因此,我们主要考虑两种设置,即学习率退火和上下文窗口扩展。

学习率退火 由于我们使用WSD调度器,在退火阶段,学习率将从稳定训练阶段的值逐渐减小。我们需要选择一个合适的学习率退火函数。我们研究了几种典型的学习率退火函数[Hägele等,2024]的性能,如线性退火、余弦退火、1-平方根退火。我们经验证明1-平方根的效果最好,因此我们选择1-平方根作为我们的学习率退火函数,其定义如下:

自然选择的概念是进化理论的基石。这是一种过程,即适应环境更好的生物往往能够存活并生产更多的后代。随着时间的推移,这一过程导致物种的逐渐变化。

分别表示当前步数、总步数和退火步数。

根据胡等人[2024]的工作,我们估计最佳的退火比例为8%,即800亿个Token。我们维持在稳定训练期间使用的相同批量大小,即400万个Token。学习率从10^-2降低到5.22 × 10^-5,共计18,802步。随后,学习率在最后的772步中保持不变为5.22 × 10^-5

上下文窗口扩展以前的研究[Chen等,2023]表明,由于RoPE中的分布外(OOD)旋转角度LLMs几乎无法处理超出其上下文窗口的文本。为了实现上下文窗口的扩展,将RoPE的基础频率增加以迁移OOD旋转角度并进行持续的预训练是一种有效的方法[Xiong等,2024]。因此,在退火阶段,我们将RoPE的基础频率θ从用于稳定训练的10,000增加到490,000,并对长文本模型进行训练。这种调整成功地将上下文长度从4,0964K)个标记扩展到28,67228K)个标记。

5.2退火阶段的数据选择

在模拟退火阶段选择高质量数据尤为重要[Hu et al., 2024]。随着学习率的降低,模型可以通过利用高质量数据快速提升性能。我们考虑使用以下方法在模拟退火阶段选择高质量数据:

我们包括各种高质量的数据源,特别是在第4.3节讨论到的合成推理数据。

我们使用基于梯度的数据选择方法,加速和改进了LESS方法[Xia et al., 2024],结合了用于构建多样化目标集的方法InsTag[Lu et al., 2024]

特别是,我们将形式化数学推理(在Lean中的定理证明)和高级推理数据(类似于o1的思维数据)结合起来,以提高模型在具有挑战性的数学基准测试中的表现,例如MATH-500,在表6中已经展示。

我们在表5中展示了退火阶段的最终数据构成。

5.3 长文本训练

在最后的80BToken的退火阶段,我们将RoPE的基础频率从10,000调整到490,000,并训练长序列,将上下文长度从4,096Token扩展到表5:退火阶段训练数据的详细信息。

28,672标记。我们在早期阶段避免使用长上下文进行训练,因为自注意力层的计算成本随序列长度的增加呈二次增长,这使得其价格昂贵[Dubey et al.2024]

在处理长文本时,我们观察到模型在短文本基准上的表现下降。为了增强长文本的能力并保留短文本的能力,我们精心设计数据的混合使用。我们通过增加书籍和连接的GitHub代码文本[Liu, 2024b]作为长文本数据来捕捉长期依赖关系,同时使用高质量的短文本来保留短文本的能力。此外,受之前研究Ding等人[2024a]Gao等人[2024]的启发,我们还应用了遮蔽的跨文档注意力来防止跨不同文档的注意力传递,以保留短文本上下文的能力。

5.4其他策略

在锻炼阶段的训练数据中包含一些指导数据,使用传统简单的打包方法来预训练数据可能会导致指导数据被拆分,从而影响其有效性。为了解决这个问题,我们提出了一种旨在在最大程度减少指导数据干扰的情况下保持训练效率的打包策略。这种策略涉及基于数据类型的不同打包方法。预训练数据是直接拼接的,而对于指导数据,如果它被分成两个序列,前一个序列的剩余部分将直接填充,并且这个指导数据作为第二个序列的开头。随后,任何多余的填充标记都将被预训练数据标记替换。通过包含指导数据,我们的主要目标是学习推理过程,而不仅仅专注于问题和答案的格式。因此,我们采用了与预训练相同的数据处理方法,直接包含问题-答案对,而不依赖于聊天模板。在计算损失时,指导和响应被视为单个文档,并且指导的损失不被屏蔽。

LLaMA3 [Dubey等,2024]中使用的方法,我们在退火阶段合并最后几个检查点,以生成最终的预训练模型。虽然这种策略可能会导致某些特定能力的轻微减少(例如,GSM8K),但通常会导致模型更加全面。

6 评价

在本节中,我们进行评估实验来验证我们的基础模型YuLan-Mini的有效性。我们首先设置评估实验,然后呈现实验结果。

6.1 实验设置

6.1.1 评估基准

为对LLMs性能进行全面评估,我们从以下几个方面选择基准测试。

1.语言理解:我们选择了广泛使用的英文基准MMLU [Hendrycks等,2021a]LAMBADA [Kazemi等,2023]RACE [Lai等,2017],以及中文基准CMMLU [李等,2024a]CEval [黄等,2023],来评估LLM的双语理解能力。这些基准涵盖了各种领域,如历史、科学和文化。

2.代码生成:我们选择Humaneval [Chen et al., 2021]MBPP [Austin et al., 2021]来评估LLMs生成自然语言问题的准确代码片段的能力。

3.数学推理:我们利用GSM8K [Cobbe等,2021]MATH500 [Hendrycks等,2021bLightman等,2024]来评估LLMs的数学推理能力。这些基准涵盖了从基本算术到高级数学问题的范围。

4.逻辑推理:我们利用ARCE [Yadav et al., 2019]ARC-C [Yadav et al., 2019]LLMs的逻辑推理能力进行评估,这些评估在各种知识领域中提供了全面的逻辑推理评估。

5.常识推理:我们使用WinoGrande [Sakaguchi et al., 2021]HellaSwag [Zellers et al., 2019]StoryCloze [Mostafazadeh et al., 2016]来评估LLM的常识推理能力,这些测试涉及对日常常识知识的理解和运用。

6.长文本理解:我们使用RULER [Hsieh等人,2024]来评估长文本理解能力,衡量其在序列长度增加时的性能变化。我们在上下文长度为28K标记的情况下对可应用的模型进行评估。

6.1.2 基准模型

为了确保综合评估,我们选择几个规模相当的小型LLMs(即基础模型范围从0.53B,包括嵌入大小)作为比较的基准:

-.MiniCPM-2.4B [胡等人,2024]: MiniCPM-2.4B1.06T个标记上进行了预训练,并采用了退火训练策略。尽管体积较小,但在一般任务中表现出色,同时支持在硬件资源有限的情况下部署。

-.Qwen系列模型[Qwen-Team, 2024, Yang等人, 2024a]:我们选择Qwen2-1.5BQwen2.5-0.5BQwen2.5-1.5B进行比较。这些小型语言模型已经在18T个标记上进行了预训练,训练细节尚未完全公开。它们在常规任务和领域特定任务中表现出良好的性能。

-.StableLM2-1.6B [Bellagente等人,2024]StableLM2-1.6B是由StabilityAI提出的一个小型LLM。它在一系列开源数据集上进行了预训练,利用了几个小型LLM来确定训练数据的比例。

-.SmolLM2-1.7B [Allal等人,2024]SmolLM2-1.7B是由HuggingFace TB Research开发的,基于其收集的高质量预训练语料库,已经在110亿个标记上训练,保持了速度和准确性之间的良好平衡。

-.Llama3.2-3B [Dubey等人,2024]Llama3.2-3B是由MetaAI开发的,它经过了长达9TToken的训练。在预训练阶段,它通过使用LLaMA3.1-8B70B模型的logits进一步精炼了知识。

-.Gemma2-2.6B [团队,2024]Gemma2-2.6BGoogle开发,经过2T标记的训练,主要包括网络文档、代码和数学文本。

6:数学、编程和长篇背景基准测试表现。带*标记的结果是从官方论文或报告中引用的。最佳和次佳结果分别用粗体和下划线标记。

6.1.3 实现细节

为了全面比较不同LLM的性能,我们采用多样的评估设置,设计特定方法来确保公平性和效率。

1.零样本和少样本设置:根据现有工作[Qwen-Team2024],对于LAMBADAHumanEvalMBPPRACEStoryClozeRULER,我们采用零样本设置。对于GSM8KMATH,我们采用4样本设置。对于MMLUCMMLUWinoGrandeCEval,我们采用5样本设置。对于HellaSwag,我们采用10样本设置。对于ARC-EARC-C,我们采用25样本设置。

2.链式思维(CoT:对于GSM8KMATH,我们遵循之前的工作[Qwen-Team2024],使用CoT提示促进LLM进行逐步推理。考虑到CoT提示可能带来的性能差异,我们同时利用原始数据集提供的短提示和kimi-k0-math生成的长提示。对于每个模型,我们使用两种提示类型进行性能评估,并选择得分更高的那种作为结果。

3.评估指标:对于问答任务,我们使用maj@1来评估GSM8KMATH,使用pass@1评估HumanEvalMBPP,对于其余的生成任务,我们使用模型响应的准确性。对于多项选择题,我们主要根据生成答案的准确性进行评估,通过选择困惑度最低的选项来确定。然而,对于ARC-EARC-C,我们采用标准化准确率[Brown等,2020]。为了准确衡量MATH-500的性能,我们进一步使用gpt-4o-mini验证所有模型生成结果的正确性,并进行手动检查。

4.生成的最大长度:对于GSM8KMATH模型,由于CoT提示可能导致输出较长,我们将短上下文(即4K)模型的最大生成长度设置为596,长上下文模型的为2,048。对于HumanEvalMBPP,我们将最大生成长度设置为400。对于其他生成任务,我们将其设置为128以提高效率。

5.评估框架:对于大多数任务,我们使用LLMBox [唐等人,2024b]来评估性能。具体来说,对于生成任务,我们启用vLLM [Kwon等人,2023]。然而,为了确保可重现性,我们在HumanEvalMBPP中使用EvalPlus [刘等人,2024a]

尽管我们做出了相当大的努力,但由于缺乏详细的评估设置信息,完全复现这些基线模型最初报告的结果仍然具有挑战性。为了公平比较,我们报道基线模型的性能结果,如官方技术报告中提供的。

表格7:常识推理基准测试表现。带*标记的结果引自官方论文或报告。

6.2 主要结果

7。此外,我们从这两个表中各选择了4个基准数据来构建图1。基于这些结果,我们可以得出以下关键观察:

YuLan-Mini在相对较小的语料库(1.08T标记)上接受了高竞争力的训练效果。为了确保在相对有限的数据上成功进行预训练,我们精心设计了数据处理流程,有效缓解了训练不稳定性,并实施了退火训练。此外,我们大部分的训练数据来自开源和合成数据集,表明通过仔细的数据清洗、选择和调度,我们可以在大学级实验室环境中开发出强大的基础模型,即使资源有限。这突显了我们预训练方法在数据效率上的优势。

数学和编码的卓越表现 关于数学推理的具体基准

(MATH-500GSM8K)和编码生成(HumanEvalMBPP)方面,YuLan-mini取得了领先的平均性能。这种持续的优势主要归因于高质量的预训练语料库和推理合成数据的使用(例如,正式的数学推理问题和类似o1的长时间思考数据)。我们的核心思想是扩展推理数据的类型,并增强我们基础模型的复杂推理能力,从而在数学基准上取得了显著的改进。

超出专门任务范围,YuLan-mini在各种通用基准测试中表现出色,涵盖了语言建模和常识推理等多个领域,突显了模型的多功能性。这表明我们的预训练方法很好地平衡了各种能力的学习,从而产生了一个强大的通用基础模型。这一成功归功于我们的数据混合和基于课程的调整策略,这些策略在调整阶段时精心平衡了数学、编码和一般知识相关语料库的初始比例,同时逐渐增强它们,以更好地发展高级能力。

由于计算资源有限,YuLan-Mini对长上下文训练样本的接触有限。因此,它对建模长上下文的能力尚未达到最先进的LLM水平,正如RULER基准测试结果所反映的那样。另外,由于缺乏GPU资源,我们当前的方法只能将上下文窗口扩展到28K。这一限制可以通过额外资源来支持进一步发展。

6.3在预训练期间评估模型性能

在预训练期间,持续评估模型的性能以监控任何不稳定或异常的训练问题至关重要。但是,现有的基准测试依赖于高级

(a)HumanEval上的性能曲线。(b)GSM8K上的性能曲线。

10:使用困惑度(PPL)和基于准确度的指标进行性能比较,以监控YuLan-Mini的代码生成和数学推理能力。

能力(例如,按照指示进行操作),通常随着足够的数据训练而发展。因此,在早期阶段,模型的性能往往保持在这些基准的较低水平,并在特定验证集上直接评估模型的性能将无法提供准确评估。

为解决这个问题,我们为训练的不同阶段设计了两种监控策略。在早期阶段,我们主要通过构建的验证数据集和LAMBADA基准上的困惑度指标来评估模型的性能。在后期阶段,我们转而使用选定基准(例如HumanEvalGSM8K)上的性能进行更全面的评估。接下来,我们介绍如何在预训练的早期阶段构建用于困惑度测量的验证集。

为了全面评估我们模型的关键能力,我们从英语理解、中文理解、代码生成和数学推理等方面创建了四个验证集。详细的数据构成如下。

1.中文:我们从FineWeb-Edu中随机选择2,118个样本,并计算用于能力评估的困惑度。

2.中文理解:我们从中文-FineWeb-Edu中随机选择1,679个样本用于计算困惑度。

3.代码生成:我们从广泛使用的代码指令数据集Python-Code-Instructions-18k-Alpaca中随机选择2,067个样本进行困惑度评估。

4.数学推理:我们从MathInstruct [Yue等人,2024]中随机抽取了1,499个开放性问题用于困惑度。

一旦高级功能得到良好发展,我们可以通过在选定的基准上评估模型来直接监视模型的性能。

7 结论

本文介绍了YuLan-Mini,一个具有24.2亿个参数的高性能基础模型。

我们提供所有必要的技术细节和资源来复现我们的模型,包括改进的训练方法以增强稳定性和效率,以及通过特别开发的训练课程组织的标记数据源。大量实验证明了YuLan-Mini的有效性,表明它在参数规模类似的行业对手中表现出色。我们的主要贡献在于以高度数据效率的方式实现了竞争性语言模型的复制,从而使得大学实验室能够做到这一点。此外,通过将训练数据与中间检查点对齐,我们的方法促进了对LLMs的深入研究,例如探索在预训练过程中模型容量如何发展。

在未来的工作中,我们计划发布YuLan-Mini的一个指导版本。此外,我们的目标是将YuLan-Mini扩展到其他架构和训练方法,并探索它在专业领域(如数学和编码)中的专业化。

感谢

我们诚挚感谢魏政路和韩旭在本工作中的协助。我们鼓励更多的研究人员合作,揭示LLMs的预训练秘密。

参考文献

省略。。。。。。

A变量的定义

我们将在表8中列出第3节中使用的所有变量的详细定义。

8:计算超参数所需变量的定义。

B训练稳定性

B.1实验设置

我们采用相对较大的学习率,以揭示模型内部的不稳定性。除非另有规定,我们采用试验学习率为0.01。我们从预训练数据集中抽样20B个标记,确保与最终训练中使用的源数据一致。

详细的架构设置在表9中列出。0.2B代理模型用于一般性的探索性实验,而0.05B0.4B模型用于µP实验。后者代理模型与最终模型具有相同的层数。

9:用于探索训练动态的小型代理模型

C用于生成合成数据的提示

C.1数学

为大学生撰写一篇教育性文章,内容与以下文本片段相关:{内容占位符}

不要只是列出概念,而是在转移到下一个概念之前对每个概念进行详细的拓展,因为我们更加重视对主题的深度理解和全面探讨,而不是广度。重点关注:

深入:确保对概念/章节进行全面覆盖。

吸引力:用学术、专业并具有吸引力的语调撰写,引起兴趣。

应用:包括具体的实际例子,比如微积分中的证明或历史中的重要日期和人物。

C.2 Code

C.3科学

D在预训练期间使用的开源数据集

Table 10:使用的所有开源数据集的综合列表。 对于仅通过链接可用的数据集,我们还在我们的项目网站https://github.com/RUC-GSAI/YuLan-Mini上提供额外的指导。

E训练阶段的详细数据组成

每个课程阶段数据的具体组成如表12所示,其中黑色代表英文网页和一般内容,绿色代表中文,蓝色代表代码,红色代表数学。第一阶段的前100亿标记在热身阶段使用。第一阶段的接下来30亿标记,以及第2至第25阶段,将在稳定训练阶段使用。第26和第27阶段构成退火阶段。

12:培训课程阶段的详细数据组成。

【声明】内容源于网络
0
0
苏哲管理咨询
为企业及组织提供AI+战略、数智化转型咨询及观点、建议等
内容 2002
粉丝 0
苏哲管理咨询 为企业及组织提供AI+战略、数智化转型咨询及观点、建议等
总阅读12.1k
粉丝0
内容2.0k