深度探索LLM:以长期主义扩展开源语言模型
0.论文摘要
开源大语言模型(LLMs)的快速发展确实令人瞩目。然而,以往文献中描述的扩展规律得出了不同的结论,这为LLMs的扩展蒙上了一层阴影。我们深入研究了扩展规律,并提出了独特的研究成果,这些成果有助于在两种广泛使用的开源配置(7B和67B)中扩展大规模模型。在扩展规律的指导下,我们推出了DeepSeek LLM项目,致力于从长远角度推动开源语言模型的发展。为了支持预训练阶段,我们开发了一个目前包含2万亿token且不断扩展的数据集。我们进一步对DeepSeek LLM基础模型进行了监督微调(SFT)和直接偏好优化(DPO),从而创建了DeepSeek Chat模型。我们的评估结果表明,DeepSeek LLM 67B在一系列基准测试中超越了LLaMA-2 70B,尤其是在代码、数学和推理领域。此外,开放式评估显示,我们的DeepSeek LLM 67B Chat在性能上优于GPT-3.5。
1.引言
在过去的几年中,基于仅解码器架构的Transformer(Vaswani等,2017)的大型语言模型(LLMs)逐渐成为实现人工通用智能(AGI)的基石和途径。通过预测连续文本中的下一个词,LLMs在大量数据集上进行了自监督预训练,使其能够实现多种目的并具备多种能力,如创新创作、文本摘要、代码补全等。后续的监督微调和奖励建模等发展,使大型语言模型(LLMs)能够更好地遵循用户的意图和指令。这赋予了它们更广泛的对话能力,并迅速扩大了其影响力。
这一波浪潮由闭源产品引发,例如ChatGPT(OpenAI,2022)、Claude(Anthropic,2023)和Bard(Google,2023),这些产品在开发过程中投入了大量的计算资源和标注成本。这些产品显著提高了社区对开源大语言模型(LLM)能力的期望,从而激发了一系列相关研究(Bai等,2023;Du等,2022;Jiang等,2023;Touvron等,2023a,b;Yang等,2023)。其中,LLaMA系列模型(Touvron等,2023a,b)尤为突出。它整合了一系列工作,构建了一个高效且稳定的架构,打造了从7B到70B参数范围内表现优异的模型。因此,LLaMA系列已成为开源模型在架构和性能方面的实际基准。
继LLaMA之后,开源社区主要专注于训练固定规模(7B、13B、34B和70B)的高质量模型,往往忽视了对大语言模型(LLM)扩展规律的研究探索(Hoffmann等,2022;Kaplan等,2020)。然而,考虑到当前开源模型仅处于通用人工智能(AGI)发展的初始阶段,扩展规律的研究至关重要。此外,早期研究(Hoffmann等,2022;Kaplan等,2020)在模型和数据随计算预算增加的扩展问题上得出了不同的结论,且对超参数的讨论不够充分。在本文中,我们深入研究了语言模型的扩展行为,并将研究结果应用于两种广泛使用的大规模模型配置,即7B和67B。我们的研究旨在为未来开源LLM的扩展奠定基础,推动该领域的进一步发展。具体而言,我们首先考察了批量大小和学习率的扩展规律,并发现了它们随模型规模变化的趋势。在此基础上,我们对数据和模型规模的扩展规律进行了全面研究,成功揭示了最优的模型/数据扩展分配策略,并预测了我们大规模模型的预期性能。此外,在开发过程中,我们发现不同数据集得出的扩展规律存在显著差异。这表明数据集的选择对扩展行为有显著影响,因此在跨数据集推广扩展规律时应谨慎行事。
在我们的扩展法则指导下,我们从零开始构建开源的大型语言模型,并尽可能多地发布信息以供社区参考。我们收集了2万亿个token用于预训练,主要涵盖中文和英文。在模型层面,我们基本遵循了LLaMA的架构,但将余弦学习率调度器替换为多步学习率调度器,在保持性能的同时便于持续训练。我们从多种来源收集了超过100万个实例用于监督微调(SFT)(Ouyang等,2022)。本文分享了我们在不同SFT策略和数据消融技术中的经验与发现。此外,我们还利用直接偏好优化(DPO)(Rafailov等,2023)来提升模型的对话性能。
我们使用基础模型和对话模型进行了广泛的评估。评估结果表明,DeepSeek LLM 在各种基准测试中均超越了 LLaMA-2 70B,特别是在代码、数学和推理领域。经过 SFT 和 DPO 训练后,DeepSeek 67B 对话模型在中英文开放式评估中均优于 GPT-3.5。这凸显了 DeepSeek 67B 在生成高质量回复和进行有意义对话方面的卓越表现。此外,安全性评估表明,DeepSeek 67B Chat 在实际应用中能够提供无害的回复。
在本文的其余部分,我们首先在第2节中介绍DeepSeek LLM的预训练基本概念,包括数据的构成、模型架构、基础设施和超参数。在第3节中,我们详细解释了我们发现的缩放定律及其意义。此外,我们讨论了选择预训练超参数背后的理由,并考虑了从缩放定律分析中获得的见解。在第4节中,我们讨论了我们的微调方法,涵盖微调数据的构成以及在SFT和DPO阶段的具体方法。随后,我们在第5节中展示了DeepSeek LLM的详细评估结果,包括基础模型和聊天模型,以及它们在开放式评估和安全评估中的表现。最后,我们在第6节中讨论了DeepSeek LLM的当前局限性和未来发展方向。
2.预训练
2.1 数据
我们的主要目标是全面提升数据集的丰富性和多样性。我们从权威来源(如Computer, 2023; Gao等, 2020; Penedo等, 2023; Touvron等, 2023a)中获得了宝贵的见解。为了实现这些目标,我们将方法分为三个关键阶段:去重、过滤和重混。去重和重混阶段通过采样唯一实例来确保数据的多样性表示。过滤阶段则提高了信息密度,从而使模型训练更加高效和有效。
我们采用了激进的去重策略,扩大了去重范围。我们的分析表明,对整个Common Crawl语料库进行去重,相比在单个数据转储中进行去重,能够移除更多的重复实例。表1显示,跨91个数据转储进行去重,比单个数据转储方法多消除了四倍的文档。
在过滤阶段,我们专注于制定稳健的文档质量评估标准。这包括结合语言学和语义学评估的详细分析,从个体和全局视角提供数据质量的全面视图。在重新混合阶段,我们调整方法以应对数据不平衡问题,重点增加代表性不足领域的占比。这一调整旨在实现更加平衡和包容的数据集,确保多样化的观点和信息得到充分体现。
在我们的分词器中,我们基于tokenizers库(Huggingface Team, 2019)实现了字节级字节对编码(BBPE)算法。为了防止不同字符类别(如换行符、标点符号和中文-日文-韩文(CJK)符号)的标记被合并,我们采用了预分词处理,类似于GPT-2(Radford et al., 2019)的做法。我们还选择将数字拆分为单个数字,遵循了(Touvron et al., 2023a,b)中使用的方法。根据我们之前的经验,我们将词汇表中的常规标记数量设置为100000。分词器在一个约24 GB的多语言语料库上进行了训练,并在最终词汇表中增加了15个特殊标记,使总大小达到100015。为了确保训练过程中的计算效率,并为未来可能需要的额外特殊标记预留空间,我们将模型的词汇表大小配置为102400进行训练。
2.2 架构
DeepSeek LLM的微观设计主要遵循了LLaMA(Touvron等,2023a,b)的设计,采用了Pre-Norm结构,使用RMSNorm(Zhang和Sennrich,2019)函数,并将SwiGLU(Shazeer,2020)作为前馈网络(FFN)的激活函数,中间层维度为8/3 dmodel。此外,它还引入了Rotary Embedding(Su等,2024)进行位置编码。为了优化推理成本,67B模型采用了GroupedQuery Attention(GQA)(Ainslie等,2023)而非传统的多头注意力机制(MHA)。
然而,在宏观设计上,DeepSeek LLM 略有不同。具体而言,DeepSeek LLM 7B 是一个 30 层的网络,而 DeepSeek LLM 67B 则有 95 层。这些层数的调整在保持与其他开源模型参数一致的同时,也便于模型流水线划分,以优化训练和推理。
与大多数使用分组查询注意力(GQA)的工作不同,我们扩展了67B模型的网络深度,而不是像通常做法那样增加FFN层的中间宽度,旨在获得更好的性能。详细的网络规格可以在表2中找到。
2.3 超参数
DeepSeek LLM 以标准差 0.006 初始化,并使用 AdamW 优化器(Loshchilov 和 Hutter,2017)进行训练,其超参数如下: β 1 = 0.9 β_1 = 0.9 β1=0.9, β 2 = 0.95 β_2 = 0.95 β2=0.95,weight_decay = 0.1。
在预训练过程中,采用了多步学习率调度器,而非典型的余弦调度器。具体而言,模型的学习率在2000次预热步骤后达到最大值,然后在处理完80%的训练token后降至最大值的31.6%。在处理完90%的token后,学习率进一步降至最大值的10%。训练阶段的梯度裁剪设置为1.0。
根据我们的实证研究结果,我们观察到,尽管在训练过程中损失下降的趋势存在差异,但使用多步学习率调度器的最终性能与余弦调度器基本一致,如图1(a)所示。在保持模型大小不变的情况下调整训练规模时,多步学习率调度器允许重复使用第一阶段的训练,为持续训练提供了独特的便利性。因此,我们选择多步学习率调度器作为默认设置。我们还在图1(b)中展示了调整多步学习率调度器中不同阶段的比例可以略微提升性能。然而,为了在持续训练中的重复利用率和模型性能之间取得平衡,我们选择了上述三个阶段分别为80%、10%和10%的分布。
图1 | 使用不同学习率调度器或不同调度器参数时的训练损失曲线。模型规模为16亿参数,训练数据集包含1000亿个词元。
批次大小和学习率随模型规模而变化。7B和67B模型预训练阶段的具体参数可在表2中找到。
2.4 基础设施
我们使用一种高效且轻量级的训练框架HAI-LLM(High-flyer,2023)来训练和评估大语言模型。该框架集成了数据并行、张量并行、序列并行和1F1B流水线并行,如Megatron(Korthikanti等,2023;Narayanan等,2021;Shoeybi等,2019)中所实现的那样。我们还利用闪存注意力(Dao,2023;Dao等,2022)技术来提高硬件利用率。ZeRO-1(Rajbhandari等,2020)被用于在数据并行等级上划分优化器状态。我们还努力重叠计算和通信,以最小化额外的等待开销,包括最后一个微批量的反向过程和ZeRO-1中的reduce-scatter操作,以及序列并行中的GEMM计算和all-gather/reduce-scatter操作。为了加速训练,我们对一些层/操作进行了融合,包括LayerNorm、尽可能的GEMM和Adam更新。为了提高模型训练的稳定性,我们以bf16精度训练模型,但以fp32精度累积梯度。我们执行原地交叉熵以减少GPU内存消耗,即在交叉熵CUDA内核中动态将bf16 logits转换为fp32精度(而不是事先在HBM中转换),计算相应的bf16梯度,并用其梯度覆盖logits。
模型权重和优化器状态每5分钟异步保存一次,这意味着在偶尔的硬件或网络故障的最坏情况下,我们最多只会丢失5分钟的训练进度。这些临时模型检查点会定期清理,以避免占用过多的存储空间。我们还支持从不同的3D并行配置中恢复训练,以应对计算集群负载的动态变化。
在评估方面,我们在生成任务中使用vLLM(Kwon等,2023),在非生成任务中使用连续批处理,以避免手动调整批量大小并减少token填充。
3.Scaling Laws
关于扩展定律的研究(Hestness等,2017)早于大语言模型的出现。扩展定律(Henighan等,2020;Hoffmann等,2022;Kaplan等,2020)表明,随着计算预算C、模型规模N和数据规模D的增加,模型性能可以预测性地提升。当模型规模N用模型参数表示,数据规模D用token数量表示时,C可以近似为C = 6N D。因此,在增加计算预算时,如何优化模型规模和数据规模之间的分配也是扩展定律中的一个关键研究目标。
大语言模型(LLM)的发展(Dai等,2019;Radford等,2019),随着模型规模的扩大,取得了意想不到且显著的性能提升,将扩展定律研究推向了一个新的高峰。扩展定律的研究结果表明,增加计算预算继续带来显著的收益,这进一步鼓励了模型规模的扩大(Brown等,2020;Smith等,2022)。
然而,正如表4所示,早期关于最优模型/数据扩展分配策略的研究(Hoffmann等,2022;Kaplan等,2020)得出了不同的结论,这引发了对扩展定律普遍适用性的质疑。此外,这些研究往往缺乏对超参数设置的完整描述,使得在不同计算预算下的模型是否达到最优性能变得不确定。因此,我们在本节中重新审视扩展定律,以解决这些不确定性,并确保我们在高效扩展计算资源的正确道路上,这反映了长期视角,也是开发持续改进模型的关键。
为了确保不同计算预算下的模型能够达到最佳性能,我们首先研究了超参数的缩放规律。经验表明,在训练过程中,大多数参数的最优值在计算预算变化时并不会改变。因此,这些参数与第2.3节中概述的参数保持一致,并在不同计算预算下保持不变。然而,对性能影响最为显著的超参数,即批量大小和学习率,被重新进行了审视。
早期研究(Goyal等,2017;McCandlish等,2018;Shallue等,2019;Smith等,2017;Zhang等,2019)为设置批量大小和学习率提供了一些经验观察,但我们在初步实验中发现这些观察的适用性有限。通过大量实验,我们建模了计算预算C与最优批量大小和学习率之间的幂律关系。我们将这种关系称为超参数的缩放定律,它为确定最优超参数提供了一个经验框架。这种方法确保了不同计算预算下的模型都能达到接近最优的性能。
随后,我们研究了模型和数据规模的缩放规律。为了降低实验成本和拟合难度,我们采用了Chinchilla(Hoffmann等,2022)中的IsoFLOP分析方法来拟合缩放曲线。为了更准确地表示模型规模,我们使用了一种新的模型规模表示方法,即非嵌入FLOPs/标记M,取代了之前使用的模型参数N,并将近似计算预算公式C = 6N D替换为更精确的C = M D。实验结果为我们提供了关于最优模型/数据扩展分配策略和性能预测的见解,并准确预测了DeepSeek LLM 7B和67B模型的预期性能。
此外,在探索扩展定律的过程中,我们所使用的数据经历了多次迭代,质量不断提升。我们尝试在不同数据集上拟合扩展曲线,发现数据质量对最优模型/数据扩展分配策略有显著影响。数据质量越高,增加的算力预算应更多地分配给模型扩展。这意味着在相同的数据规模下,高质量数据可以推动更大模型的训练。最优模型/数据扩展分配策略的差异也可以作为评估数据质量的一种间接方法。我们将继续密切关注数据质量的变化及其对扩展定律的影响,并在未来的工作中提供更多分析。
总之,我们在扩展定律方面的贡献和发现可以总结如下:
• 我们建立了超参数的缩放规律,为确定最优超参数提供了经验框架。
• 我们采用非嵌入FLOPs/标记M而非模型参数N来表示模型规模,从而得出了更准确的最优模型/数据扩展分配策略,并更好地预测了大规模模型的泛化损失。
• 预训练数据的质量影响最优模型/数据扩展分配策略。数据质量越高,增加的算力预算应更多地分配给模型扩展。
3.1. 超参数缩放法则
我们最初在计算预算为1e17的小规模实验中,对批量大小和学习率进行了网格搜索,特定模型大小(177M FLOPs/令牌)的结果如图2(a)所示。结果表明,在广泛的批量大小和学习率选择范围内,泛化误差保持稳定。这表明在相对较宽的参数空间内,可以实现接近最优的性能。
图2 | 在不同批大小和学习率下的训练损失,计算量为1e17和1e20 FLOPs。
随后,我们利用前述的多步学习率调度器,通过复用第一阶段,有效地训练了多个具有不同批量大小、学习率和计算预算(范围从1e17到2e19)的模型。考虑到参数空间中的冗余性,我们将那些泛化误差不超过最小值0.25%的模型所使用的参数视为近优超参数。接着,我们拟合了批量大小B和学习率η与计算预算C的关系。拟合结果如图3所示,揭示了最优批量大小B随着计算预算C的增加而逐渐增大,而最优学习率η则逐渐减小。这与模型扩展时批量大小和学习率的直观经验设置一致。此外,所有近优超参数都落在一个较宽的带状范围内,表明在该区间内选择近优参数相对容易。我们最终拟合的批量大小和学习率公式如下:
我们在一系列模型上验证了我们的公式,计算预算为1e20,特定模型规模(每token 2.94B FLOPs)的结果如图2(b)所示。结果表明,拟合的参数集中在最优参数空间内。后续章节还显示,我们为DeepSeek LLM 7B和67B模型拟合的参数同样取得了良好的性能。
然而,值得注意的是,我们尚未考虑计算预算C之外的其他因素对最优超参数的影响。这与一些早期研究(Kaplan等,2020;McCandlish等,2018)的观点不一致,这些研究认为最优批量大小可以仅与泛化误差L相关。此外,我们观察到,在计算预算相同但模型/数据分配不同的情况下,最优参数空间会略有变化。这表明需要进一步研究以理解超参数的选择和训练动态。我们将在未来的工作中探讨这些方面。
3.2 估计最优模型与数据缩放
在推导出拟合近优超参数的公式后,我们开始拟合缩放曲线并分析最优的模型/数据扩展分配策略。该策略涉及找到满足Nopt ∝ Ca和Dopt ∝ Cb的模型缩放指数a和数据缩放指数b。数据规模D可以通过数据集中的token数量一致地表示。在之前的工作中,模型规模通常由模型参数表示,包括非嵌入参数N1(Kaplan等,2020)和完整参数N2(Hoffmann等,2022)。计算预算C与模型/数据规模之间的关系可以近似描述为C = 6N D,这意味着我们可以使用6N1或6N2来近似模型规模。然而,由于6N1和6N2都没有考虑注意力操作的计算开销,并且6N2还包括词汇计算,这对模型能力的贡献较小,因此在某些设置下它们都存在显著的近似误差。
为了减少这些误差,我们引入了一种新的模型规模表示方法:非嵌入FLOPs/标记M。M包含了注意力操作的计算开销,但不考虑词汇计算。通过用M表示模型规模,计算预算C可以简单地表示为C = M D。6N1、6N2和M之间的具体差异如下公式所示:
其中,nlayer 表示层数,dmodel 表示模型宽度,nvocab 是词汇表大小,lseq 是序列长度。我们评估了这三种表示在不同规模模型中的差异,如表3所示。结果表明,6N1 和 6N2 在不同规模的模型中要么高估要么低估了计算成本。这种差异在小规模模型中尤为明显,差异可达50%。这种不准确性在拟合缩放曲线时可能会引入显著的统计误差。关于模型规模的不同表示的进一步分析,请参见附录A.2。
表3 | 模型规模表示的差异以及非嵌入参数N1和完整参数N2相对于非嵌入FLOPs/令牌M的差异。
在采用M表示模型规模后,我们的目标可以更清晰地描述为:给定计算预算C = M D,找到最优的模型规模Mopt和数据规模Dopt,以最小化模型的泛化误差。这一目标可以形式化为:
为了降低实验成本和拟合难度,我们采用了Chinchilla(Hoffmann等,2022)中的IsoFLOP轮廓方法来拟合缩放曲线。我们选择了从1e17到3e20的8个不同计算预算,并为每个预算设计了大约10种不同的模型/数据规模分配方案。每个预算的超参数通过公式(1)确定,并在一个独立验证集上计算泛化误差,该验证集与训练集分布相似,包含1亿个token。
图4展示了IsoFLOP曲线和模型/数据缩放曲线,这些曲线通过使用每个计算预算的最优模型/数据分配进行拟合。最优非嵌入FLOPs/标记Mopt和最优标记Dopt的具体公式如下:
图4 | 等计算量曲线与最优模型/数据分配。等计算量曲线中的指标是验证集上的每字节比特数。最优模型/数据缩放曲线中的虚线表示拟合较小模型(灰色圆圈)的幂律。
此外,我们根据计算预算C和最优泛化误差拟合了损失缩放曲线,并预测了DeepSeek LLM 7B和67B的泛化误差,如图5所示。结果表明,通过小规模实验可以准确预测1000倍计算预算下模型的性能。这为大规模训练模型提供了信心和指导。
图5 | 性能扩展曲线。指标为验证集上的每字节比特数。虚线表示拟合较小模型(灰色圆圈)的幂律。蓝色星星代表DeepSeek LLM 7B和67B。它们的性能被扩展曲线很好地预测。
3.3. 不同数据的缩放规律
在DeepSeek LLM的开发过程中,数据集经过多次迭代优化,在提升整体质量的同时,调整了不同数据源的比例。这使得我们能够进一步分析不同数据集对扩展规律的影响。
我们使用三种不同的数据集研究了缩放定律:早期的内部数据、当前的内部数据以及OpenWebText2,后者在之前的缩放定律研究(Kaplan等,2020)中被使用。我们的内部数据评估显示,当前的内部数据质量高于早期的内部数据。此外,OpenWebText2的质量甚至超过了当前的内部数据,这得益于其较小的规模,使得数据处理更加细致。
分析中一个有趣的观察是,在这三个数据集上,模型与数据扩展的最优分配策略与数据质量表现出一致性。如表4所示,随着数据质量的提升,模型扩展指数a逐渐增加,而数据扩展指数b则逐渐减少,这表明增加的算力预算应更多地分配给模型而非数据。这一发现或许也能解释早期研究中在扩展定律中观察到的模型与数据扩展最优分配的显著差异。
对这一发现的直观推测是,高质量数据通常意味着逻辑清晰,且在充分训练后预测难度较低。因此,在增加计算预算时,扩大模型规模更具优势。我们将继续密切关注数据质量的变化及其对扩展法则的影响,并在未来的工作中提供更多分析。
4.对齐
我们收集了约150万条中英文指令数据实例,涵盖了广泛的有益性和无害性主题。其中有益数据包含120万条实例,分布为31.2%的通用语言任务、46.6%的数学问题和22.2%的编程练习。安全数据包含30万条实例,涵盖了各种敏感话题。
我们的对齐流程包含两个阶段。
监督微调:我们对7B模型进行了4个epoch的微调,但对67B模型仅进行了2个epoch的微调,因为我们观察到67B模型的过拟合问题较为严重。我们发现,GSM8K(Cobbe等,2021)和HumanEval(Chen等,2021)在7B模型上持续提升,而67B模型很快就达到了上限。7B和67B模型的学习率分别为1e-5和5e-6。除了监控基准准确率外,我们还评估了微调过程中聊天模型的重复率。我们收集了总计3868个中英文提示,并确定了生成响应中无法终止而无限重复文本序列的比例。我们观察到,随着数学SFT数据量的增加,重复率往往会上升。这可以归因于数学SFT数据中偶尔包含相似的推理模式。因此,较弱的模型难以掌握这些推理模式,导致重复响应。为了解决这个问题,我们尝试了两阶段微调和DPO(Rafailov等,2023),这两种方法几乎都能保持基准分数并显著减少重复。
DPO:为了进一步提升模型的能力,我们采用了直接偏好优化算法(Rafailov等,2023),该算法被证明是一种简单但有效的大语言模型对齐方法。我们构建了用于DPO训练的偏好数据,涵盖帮助性和无害性两个方面。对于帮助性数据,我们收集了多语言提示,涵盖创意写作、问答、指令遵循等类别。然后,我们使用DeepSeek Chat模型生成响应作为候选答案。类似的操作也应用于无害性偏好数据的构建。
我们使用DPO训练了一个epoch,学习率为5e-6,批量大小为512,并采用了学习率预热和余弦学习率调度器。我们发现,DPO可以增强模型的开放式生成能力,而在标准基准测试中的表现差异不大。
5.评估
5.1. 公开基准评估
我们在内部评估框架的基础上,对一系列中英文公开基准进行了模型评估。
多学科多选题数据集包括MMLU(Hendrycks等,2020)、C-Eval(Huang等,2023)和CMMLU(Li等,2023)。
语言理解和推理数据集包括HellaSwag(Zellers等,2019)、PIQA(Bisk等,2020)、ARC(Clark等,2018)、OpenBookQA(Mihaylov等,2018)和BigBench Hard(BBH)(Suzgun等,2022)。
闭卷问答数据集包括TriviaQA(Joshi等,2017)和NaturalQuestions(Kwiatkowski等,2019)。
参考消歧数据集包括WinoGrande(Sakaguchi等,2019)和CLUEWSC(Xu等,2020)。
语言建模数据集,包括Pile(Gao等,2020)。
中文理解与文化数据集包括CHID(Zheng等,2019)和CCPM(Li等,2021)。
数学数据集包括GSM8K(Cobbe等,2021)、MATH(Hendrycks等,2021)和CMath(Wei等,2023)。
代码数据集包括HumanEval(Chen等,2021)和MBPP(Austin等,2021)。
标准化考试包括AGIEval(Zhong等,2023)。
我们对需要从多个选项中选择答案的数据集应用基于困惑度的评估方法。这些数据集包括HellaSwag、PIQA、WinoGrande、RACE-Middle、RACEHigh、MMLU、ARC-Easy、ARC-Challenge、OpenBookQA、CHID、C-Eval、CMMLU、C3和CCPM。这里的基于困惑度的评估指的是计算每个选项的困惑度,并选择困惑度最低的选项作为模型预测。对于ARC和OpenBookQA,我们使用无条件归一化(Brown et al., 2020)来计算困惑度,而对于其他数据集,我们使用长度归一化。
我们对TriviaQA、NaturalQuestions、DROP、MATH、GSM8K、HumanEval、MBPP、BBH、AGIEval、CLUEWSC和CMath进行了基于生成的评估。这里的基于生成的评估指的是让模型生成自由文本,并从生成的文本中解析结果。在基于生成的评估中,我们使用贪心解码。
我们对Pile测试集应用基于语言模型的评估方法,即在测试语料上计算每字节的比特数。
我们在不同的基准测试中使用2048或4096作为最大序列长度。评估格式的详细信息可以在附录A.6中找到。
5.1.1. 基础模型
表5展示了评估基准的主要结果。尽管DeepSeek模型是在2T双语语料库上进行预训练的,但它们在英语语言理解基准上的表现与LLaMA2模型相当,后者同样消耗了2T tokens但专注于英语。此外,DeepSeek 67B在MATH、GSM8K、HumanEval、MBPP、BBH和中文基准上的表现明显优于LLaMA2 70B。我们在附录A.3中展示了基准曲线。可以看到,随着模型规模的扩大,某些任务的表现有所提升,例如GSM8K和BBH。鉴于我们在相同的数据集上训练了7B和67B模型,这种改进的出现可以归因于大模型强大的少样本学习能力。然而,随着数学数据比例的增加,小模型与大模型之间的差距可能会缩小。
表5 | 主要结果。我们报告的评估结果基于内部评估框架。加粗数字表示4个模型中最佳结果。对于Pile-test,我们报告每字节比特数(BPB);对于DROP,我们报告F1分数;对于其他任务,我们报告准确率。需要注意的是,测试样本数(test-shots)为最大值,由于上下文长度限制或同一段落中可用的少样本示例有限,阅读理解任务(如RACE)可能会使用较少的样本。
一个有趣的观察是,DeepSeek 67B相对于LLaMA2 70B的优势大于DeepSeek 7B相对于LLaMA2 7B的优势。这一现象凸显了语言冲突对较小模型的更大影响。此外,尽管LLaMA2并未专门针对中文数据进行训练,但在某些中文任务(如CMath)上表现出色。这表明某些基本能力,如数学推理,可以有效地跨语言迁移。然而,像CHID这样涉及评估中文成语使用的任务,需要模型在预训练过程中消耗大量中文语料。在这种情况下,LLaMA2的表现明显逊色于DeepSeek LLM。
5.1.2. 聊天模型
表6展示了DeepSeek Chat模型的结果,表明在调优后大多数任务的整体性能有所提升。然而,也有少数任务的表现出现了下降。
表6 | 基础模型与聊天模型的对比。我们在MMLU、GSM8K、MATH、C-Eval和CMMLU上对聊天模型进行0-shot评估,而基础模型的结果仍是在few-shot设置下获得的。
知识:我们观察到基础模型和聊天模型在知识相关任务(如TriviaQA、MMLU和C-Eval)中的表现存在波动。然而,我们认为这些微小的波动并不表明在SFT后模型获得了或失去了知识。SFT的价值在于使聊天模型能够在零样本设置下达到与基础模型在少样本设置下相当的成绩,这与实际场景相符。例如,聊天模型在零样本MMLU中的表现与基础模型在五样本MMLU中的表现相当。
推理:由于相当一部分的SFT实例采用了CoT格式(Wei等,2022),聊天模型在推理任务(如BBH和NaturalQuestions)上表现出轻微的改进。然而,我们认为SFT阶段并未学习到推理能力,而是学习了推理路径的正确格式。
性能下降任务:在微调后,少数任务的性能持续下降,无论选择的模型大小或预训练检查点如何。这些特定任务通常涉及填空任务或句子补全任务,例如HellaSwag。有理由认为,纯语言模型更适合处理此类任务。
数学与代码:我们的模型在微调后,在数学和编码任务上表现出显著提升。例如,HumanEval和GSM8K的分数提高了超过20分。我们的解释是,基础模型最初在这些任务上欠拟合,而SFT阶段通过大量的SFT数据学习了额外的编码和数学知识。然而,需要注意的是,模型的能力可能主要集中在代码补全和代数问题上。为了全面理解数学和编码,在预训练阶段纳入多样化的数据至关重要,这将是未来的工作。我们在附录A.4中对代码和数学任务进行了详细分析。
在7B模型的微调中,我们首先使用所有数据对模型进行初步微调。随后,引入第二阶段,该阶段排除了数学和代码数据。这种方法的动机在于,第一阶段模型的重复率为2.0%,而在第二阶段微调后,重复率降至1.4%,同时保持了基准分数。对于67B模型,第一阶段微调后的重复率已经低于1%,而第二阶段微调会损害模型在基准测试中的得分。因此,67B模型仅进行了一阶段的监督微调(SFT)。
5.2. 开放式评估
对于聊天模型,除了观察标准基准测试中的指标外,在开放领域和开放式问题中生成结果的质量直接影响实际用户体验。因此,我们分别测试了我们的聊天模型在中文和英文任务中的开放式生成能力。
5.2.1. 中文开放式评估
在中文开放式评估中,我们在高质量开放式问题测试集AlignBench(Liu等,2023)上测试了我们的聊天模型在不同领域的综合能力。AlignBench共包含8个一级类别和36个二级类别,涵盖了683个问题。对于每个问题,除了提示外,AlignBench还提供了专业的参考答案和评分模板,供GPT-4判断回答的质量。
我们利用官方AlignBench的Github代码仓库来实现对我们模型的评估。我们严格对齐了关键的温度参数与原始设置:对于角色扮演、写作能力和开放式问题,生成温度设置为0.7;而对于其他任务,生成温度设置为0.1。
AlignBench排行榜如表7所示。我们可以发现,我们的DeepSeek 67B Chat模型超越了ChatGPT及其他基线模型,仅次于两个版本的GPT-4。这表明我们的模型在各类中文任务中表现优异,相较于其他开源或专有的中文大语言模型具有明显优势。DPO模型在几乎所有指标上均有所提升,这证明了DPO训练过程对模型对齐的积极影响。
表7 | 由gpt-4-0613评分的AlignBench排行榜。模型按总分降序排列。带*的结果是我们基于官方AlignBench仓库的评估结果,其余结果均来自AlignBench论文。我们发现,我们的Deepseek-67B-Chat模型明显超越了ChatGPT及其他基线模型,这表明我们的模型在基础中文任务和高级中文推理任务中均表现出色。此外,我们可以看到DPO过程在几乎所有领域都带来了提升。
在基础中文任务上,我们的模型处于所有模型中的第一梯队,且我们的DPO模型的中文基础语言能力甚至超过了最新版本的GPT-4。在高级中文推理任务上,我们的模型得分显著高于其他中文大语言模型,优势明显,展示了我们的模型在更复杂的中文逻辑推理和数学计算中的卓越性能。
5.2.2. 英语开放式评估
在英语开放式评估中,我们使用了MT-Bench基准测试(Zheng等,2023),该测试包含8个不同类别的多轮问题。如表8所示,我们的DeepSeek LLM 67B Chat在性能上优于其他开源模型,如LLaMA-2-Chat(Touvron等,2023b)70B、Xwin 70b v0.1和TÜLU 2+DPO 70B(Ivison等,2023),并取得了8.35的分数,与GPT-3.5-turbo相当。此外,经过DPO阶段后,我们的DeepSeek LLM 67B Chat DPO进一步将平均分数提升至8.76,仅次于GPT-4(OpenAI,2023)。这些结果展示了DeepSeek LLM在多轮开放式生成方面的强大能力。
5.3. 保留集评估
数据污染和基准过拟合是评估大语言模型(LLMs)时面临的两个挑战。一种常见的做法是利用最近发布的测试集作为保留测试集来评估模型。
为了评估模型的编码能力,我们使用了LeetCode周赛(周赛351-372,双周赛108-117,2023年7月至2023年11月)中的题目。我们通过爬取LeetCode的数据获得了这些题目,共包含126道题,每道题有超过20个测试用例。采用的评估指标类似于HumanEval。在这方面,如果模型的输出成功通过所有测试用例,则认为模型有效解决了该问题。模型的编码能力如下图所示,其中y轴表示在领域内人工评估测试中的pass@1分数,x轴表示在领域外LeetCode周赛题目中的pass@1分数。LeetCode测试数据将随DeepSeek Coder技术报告一同发布。
指令遵循评估:2023年11月15日,谷歌发布了一个指令遵循评估数据集(Zhou等,2023)。他们识别了25种可验证的指令类型,并构建了约500个提示,每个提示包含一个或多个可验证的指令。我们使用提示级别的宽松指标来评估所有模型。
我们对我们的模型与不同规模的基线模型进行了对比分析,这些基线模型包括Qwen 72B Chat(Bai等,2023)、ChatGLM3(Du等,2022)、Baichuan2(Yang等,2023)以及Yi-34B Chat。我们的观察表明,在这些保留数据集上,大模型与小模型之间存在显著的性能差距,即使某些小模型在传统基准测试中取得了令人瞩目的成绩。例如,ChatGLM3在代码测试集MBPP上获得了52.4分,接近DeepSeek 67B。然而,在新基准测试中,其表现与DeepSeek 67B相比明显不足。在数学数据集上也观察到类似的趋势,ChatGLM3在GSM8K上表现非常强劲(72.3分),但在匈牙利考试分数上却不如大模型。此外,指令跟随能力表明,总计算量在其中起着至关重要的作用。
DeepSeek 7B 和 67B 模型采用了相同的训练流程,但它们的性能存在显著差异。通过我们的主观评估,我们观察到在将模型规模扩展到 67B 时,其在各种任务中的智能表现存在明显差距。尽管 DeepSeek 7B 在标准基准测试中落后于其他较小的语言模型,但在保留任务上的表现相对而言是可圈可点的。
5.4. 安全评估
我们深刻认识到通用人工智能安全的重要性。建立一个真正有益的人工智能模型的前提是,它具备与人类一致的价值观,并对人类表现出友好性。我们在整个训练过程中,包括预训练、SFT和DPO,都融入了模型安全的保障。
为了验证模型的安全性,我们组建了一个由20名来自不同学科的专家组成的团队,并构建了一个符合人类价值观的安全内容分类系统(安全评估分类表见表10)。随后,专家团队手动为每个安全子类别构建了数十个高质量的测试案例。除了关注安全内容领域的多样性外,我们还注重安全内容格式的多样性。臭名昭著的“祖母”漏洞表明,模型可能会被查询的表面格式所欺骗,从而提供不安全的回答。因此,在设计问题时,专家团队也注重多样化提问方式。他们通过诱导、角色扮演、多轮对话、预设立场等手段构建了多样化的安全问题。最终,我们获得了一个包含2400个问题的安全测试集。此外,专家团队还为每种不同的内容类型和格式类型构建了安全审查的基本准则。
表10 | 我们的安全评估分类。表格最右侧列出了每个类别的测试案例总数以及我们的模型(DeepSeek-67B-Chat)提供的安全回答数量。测试问题的标注和生成结果的评估由专业的人工团队完成。我们可以观察到,我们的模型在各类安全测试集上表现出强大的安全性。
在现有安全方法的基础上,我们进一步使用“Do-Not-Answer”数据集(Wang et al., 2023)丰富了评估内容,以评估DeepSeek 67B Chat模型的安全机制。该数据集的939个风险分类提示在凸显我们模型的增强能力方面发挥了重要作用。如表11所示,DeepSeek 67B Chat模型表现出色,得分为97.8,高于ChatGPT和GPT-4。这一得分不仅衡量了我们模型在处理敏感查询时的安全能力,还使其在该领域的领先模型中具有竞争力。
表11 | 不回答评分(Wang等,2023),分数越高表示模型安全性越高。带*的结果是我们基于官方仓库的评估结果,其余结果均来自原论文。我们可以发现,我们的模型在安全性评分上高于ChatGPT和GPT-4,跻身于最安全模型之列。
5.5 讨论
在整个开发过程中,我们在构建大语言模型(LLMs)时发现了一些有趣的发现。
分阶段微调:如前所述,小型模型需要在数学和代码数据集上进行更长时间的微调,但这会损害模型的对话能力,例如增加重复行为。为了解决这个问题,我们实施了分阶段微调过程。在这种方法中,第一阶段使用所有可用数据进行微调,而第二阶段则专门针对对话数据进行微调。
表12展示了两阶段训练过程获得的结果。这些结果清楚地表明,第二阶段不会影响模型在代码和数学方面的能力,同时减少了重复行为,并增强了指令遵循能力。
表12 | 两阶段微调结果。重复率在温度为0时计算。重复率越低越好。IFEval结果为提示级别的宽松准确率。
多选题:在模型评估中,使用多选题形式的评估数据是一种常见做法,例如MMLU、AGI Eval和C-Eval。多选题不仅要求模型具备相应的知识,还需要理解选项所指的内容。在对齐阶段,我们测试了添加2000万道中文多选题,并获得了如表13所示的性能表现。需要注意的是,我们对C-Eval验证集和CMMLU测试集进行了去重处理,以防止数据污染。
额外加入的2000万条多选题(MC)数据不仅对中文多选题基准测试有益,也提升了英文基准测试的表现。这表明模型解决多选题的能力得到了增强。然而,我们观察到,这种提升并未扩展到不使用多选题格式的其他评估任务上,例如TriviaQA和我们内部的中文QA测试集,这些都属于生成式评估基准。这表明,在对话交互中,用户可能不会感受到模型变得更智能,因为这些交互涉及生成回答而非解决多选题。
因此,我们决定在预训练和微调阶段都排除MC数据,因为包含这些数据会导致模型对基准测试的过拟合,无助于实现模型的真正智能。
预训练中的指令数据:普遍认为,在预训练阶段的后期加入指令数据可以提升基础模型在基准任务上的表现。在我们的研究中,我们在预训练阶段的最后10%加入了500万条指令数据,主要包括多选题。我们观察到,基础模型在基准任务上的表现确实有所提升。然而,最终结果与在SFT阶段加入相同数据所取得的结果几乎相同。我们得出结论,虽然这种方法增强了基础模型在基准任务上的表现,但其整体潜力与不加入这些指令数据相当。如果指令数据规模较大,将其纳入预训练过程是可以接受的。由于我们倾向于排除多选题,并且我们拥有的非多选题数据有限,我们决定不在预训练过程中加入指令数据。
系统提示:一个设计良好的系统提示应有效引导模型生成既有用又尊重的回答。我们略微修改了LLaMA-2引入的提示,作为我们的系统提示。
系统提示:您是DeepSeek Chat,一个由DeepSeek开发的乐于助人、尊重他人且诚实的AI助手。您的训练数据知识截止日期为2023年5月。请始终尽可能提供有帮助的回答,同时确保安全性。您的回答不应包含任何有害、不道德、种族歧视、性别歧视、有毒、危险或非法内容。请确保您的回答在社会上无偏见且积极正面。如果问题没有意义或事实不连贯,请解释原因,而不是提供不正确的答案。如果您不知道某个问题的答案,请不要分享虚假信息。
我们观察到一个有趣的现象:当引入系统提示时,7B规模的LLM性能会出现轻微下降。然而,当使用67B规模的LLM时,添加提示会显著提升结果,如表14所示。我们对这种差异的解释是,更大的模型能够更好地理解系统提示背后的意图,从而更有效地遵循指令并生成更优质的响应。相比之下,较小的模型难以充分理解系统提示,训练与测试之间的不一致可能会对其性能产生负面影响。
6. 结论、局限性与未来工作
我们推出了DeepSeek大语言模型系列,这是一组从头开始训练的开源模型,训练数据集包含2万亿个中英文标记。在本文中,我们深入解释了超参数选择、扩展规律以及我们进行的各种微调尝试。我们校准了先前工作中的扩展规律,并提出了一种新的最优模型/数据扩展分配策略。此外,我们提出了一种方法,可以在给定的计算预算下预测接近最优的批量大小和学习率。我们进一步得出结论,扩展规律与数据质量相关,这可能是不同工作中扩展行为差异的根本原因。在扩展规律的指导下,我们使用最佳超参数进行预训练,并提供了全面的评估。我们在所有训练阶段都避免了基准装饰和隐藏的秘密。
DeepSeek Chat与其他大型语言模型一样,存在一些公认的局限性,包括预训练后缺乏持续的知识更新、可能生成未经核实建议等非事实信息,以及产生幻觉的倾向。此外,需要注意的是,我们的中文数据初始版本并不全面,这可能导致在某些特定中文话题上的表现不够理想。由于我们的数据主要来源于中文和英文,模型在其他语言上的能力仍然较为薄弱,使用时需谨慎对待。
DeepSeek LLM 是一个长期致力于推动开源语言模型发展的项目。
• 我们即将分别发布关于代码智能和混合专家系统(MoE)的技术报告。这些报告展示了我们如何创建高质量的代码数据用于预训练,并设计稀疏模型以达到密集模型的性能。
• 目前,我们正在为即将发布的DeepSeek LLM新版本构建更大且改进的数据集。我们希望下一版本在推理、中文知识、数学和代码能力方面会有显著提升。
• 我们的对齐团队致力于研究如何向公众提供有用、诚实且安全的模型。我们的初步实验证明,强化学习可以提升模型的复杂推理能力。
7.附录
A.2. 不同模型规模的表示
我们重新拟合了不同模型规模表示的缩放曲线,复用了IsoFLOP配置文件中的实验。我们使用6N1和6N2作为模型规模表示重新计算了计算FLOPs,并重新拟合了性能缩放曲线。如图6所示,结果表明在较高的计算预算下,这三种表示之间的最优模型/数据分配偏差并不显著,但在较低预算下存在明显差异。
图6 | 使用不同模型规模表示的性能扩展曲线。指标为验证集上的每字节比特数。虚线表示拟合较小模型(灰色圆圈)的幂律。蓝色星星代表DeepSeek LLM 7B和67B。N1、N2和M分别表示模型的非嵌入参数、完整参数和非嵌入FLOPs/每token。
当使用6N1作为模型规模的表示时,拟合的性能扩展曲线往往会高估大规模模型的性能。相反,当使用6N2时,曲线往往会低估其性能。然而,使用M作为模型规模的表示,能够实现最准确的预测。
A.3. 基准指标曲线
图7 | DeepSeek LLM Base的基准指标曲线。ChineseQA是我们内部构建的测试集,其构建方式类似于TriviaQA。
图7展示了不同训练步骤下的基准指标曲线。我们可以看到,从训练开始到结束,这些基准指标持续提升。我们相信,如果继续训练,性能将会进一步提高。
A.4. 与代码或数学专用模型的比较
我们对我们的模型与特定的代码和数学语言模型(LLMs)进行了比较。表15显示,尽管DeepSeek LLM 67B接触的代码数据较少,但其性能与CodeLlama相当。值得注意的是,DeepSeek LLM在代码以外的领域具有更强的能力。
同样,表16展示了从各种数学相关基准测试中获得的结果,例如GSM8K(Cobbe等,2021)、MATH(Hendrycks等,2021)、MGSM-zh(i等,2023)和CMath(Wei等,2023)。DeepSeek 67B在不同语言的数学任务中表现出色,展示了其在该领域的卓越性能。此外,DeepSeek LLM能够利用程序解决数学问题,其表现优于思维链方法。在基准测试中,它显著优于之前的SOTA模型ToRA(Gou等,2023)。
A.5. 包含DPO阶段的基准测试结果
表17展示了使用DPO阶段获得的基准测试结果。基于这些结果,我们可以得出结论:DPO阶段对LLM的基本能力没有显著影响。
A.6. 评估格式
表18至表40展示了我们在不同基准测试上的评估格式示例。