一、结论写在前面
论文标题:To Code, or Not To Code? Exploring Impact of Code in Pre-training
论文链接:https://arxiv.org/pdf/2408.10914
即使对于非专门设计用于代码的模型,在LLMs预训练数据混合中包含代码已成为一种常见做法。尽管从业者之间共识,认为代码数据在通用LLMs性能中起着至关重要的作用,但只有有限的工作分析了代码对非代码任务的确切影响。
论文系统地研究了代码数据对通用性能的影响。论文提出问题:“预训练中使用的代码数据对大量下游任务(不仅仅是代码生成)有何影响?”
论文进行了广泛的消融实验,论文的结果表明,代码是泛化能力的关键构建模块,远超编程任务本身,而代码质量的改进对性能有巨大影响。论文在广泛的基准测试上进行了广泛的评估,涵盖了世界知识任务、自然语言推理和代码生成,以及LLM作为评判的胜率。在从4.7亿到28亿参数的模型上的实验中,论文发现了以下详细结果:
1.代码对非代码性能提供了关键的改进。使用代码预训练的模型初始化,提高了自然语言任务的性能。特别是,与仅使用文本的预训练相比,对于论文最佳的变体,添加代码使得自然语言推理相对提高了8.2%,世界知识提高了4.2%,生成胜率提升了6.6%,代码性能提高了12倍。
2.代码质量和属性至关重要。使用token式编程语言,以及如GitHub提交和合成生成的代码等代码相关数据集,可以提升预训练的性能。特别是,与基于网络的代码数据相比,在预训练中使用高质量的合成生成代码数据集,分别能提高自然语言推理和代码性能达9%和44%。此外,从包含合成数据的代码模型进行持续预训练,分别能提升1.9%和41%相对于不包含代码数据的代码模型初始化,自然语言推理和代码性能分别有所提升。
3.冷却期中的代码进一步提升了所有任务的表现。在预训练冷却期(cooldown)中包含代码数据,其中高质量数据集被加权,导致自然语言推理增加 3.6%,世界知识增加 10.1%,代码性能增加 20%,相对于冷却前的模型。更重要的是,带有代码的冷却期(cooldown)击败了基线(无冷却期的模型),胜率提高了 52.3%,其中胜率比无代码冷却期高出 4.1%。
尽管论文系统地研究了代码数据对下游自然语言任务的影响,但论文并未研究其对安全性的影响。此外,鉴于预训练的性质和论文所进行的众多消融实验,论文受限于较大的模型规模,因为计算成本过高。然而,鉴于论文的发现从470M到2.8B都成立,论文相信这些发现对于更大的模型规模和token预算也应成立。
二、论文的简单介绍
2.1 论文的背景
数据在近期的突破中扮演了至关重要的角色。最先进的模型强调了预训练数据混合、数据源多样性以及计算资源的可用性作为性能的关键驱动因素。一个关键问题是,数据的哪些属性赋予了最佳的泛化性能?
或许令人惊讶的是,即使模型并非明确旨在生成高质量代码,代码也常被包含在预训练中。代码数据集在结构和文本特征上与高质量网络数据集有显著差异。尽管如此,像PaLM、Gopher 和Bloom等几代并非明确支持代码生成的LLMs,在其预训练混合中包含了一定比例的代码数据与高质量自然语言数据。
在当前最先进的模型中,不仅包含代码数据,而且进一步增加代码比例已成为一种公认的规范——例如,Llama 3 在其预训练混合物中的代码数据比例是 Llama 2的四倍(Llama 3 为 17%,而 Llama 2 为 4.5%)。尽管实践者之间有一种共识,即代码数据在大型语言模型(LLMs)的性能中起着至关重要的作用,但目前仅有有限的工作分析了代码对非代码任务的确切影响。先前的工作显示了包含代码数据的特定好处,例如在有限数据体制下的扩展影响、实体跟踪能力 以及数学推理。然而,迄今为止还没有一项全面的研究系统地探讨代码数据对整体性能的影响。在本研究中,论文提出一个问题:“在预训练中使用的代码数据对广泛下游任务(除代码生成外)的影响是什么?”
论文进行了一系列大规模的控制性预训练实验,全面探讨了在训练过程中添加代码的时机、代码比例、规模效应以及所添加代码的质量和特性。尽管以严谨方式进行这些消融实验成本高昂,但论文发现了一致的宝贵结果:代码对非代码性能的提升至关重要。特别是,与仅使用文本的预训练相比,对于论文最佳的变体,添加代码使得自然语言(NL)推理相对提高了8.2%,世界知识提高了4.2%,生成胜率提升了6.6%,代码性能则提高了12倍。进一步地,在冷却阶段使用代码,相较于无代码冷却,自然语言推理提高了3.7%,世界知识提高了6.8%,代码性能提高了20%,并额外增加了4.1%的胜率。
图1:论文的实验框架概览:论文通过以下方式全面评估代码的影响:1)预训练中代码的比例,2)代码质量和属性,3)模型初始化,4)模型规模,以及5)引入代码的训练阶段。论文在一系列广泛的任务上评估生成的模型,包括自然语言推理、世界知识、代码和开放式生成。
2.2 论文的方法
论文描述了预训练数据、评估、训练和模型细节的详细信息。图1展示了高水平的实验框架。每个实验的精确细节及其结果在第3节中呈现。
2.2.1 预训练数据
论文描述了论文的预训练和冷却数据集的细节。论文的目标是评估预训练中代码的作用,遵循当前最先进的实践。因此,论文考虑包含两个阶段的预训练运行:1)持续预训练和 2)冷却期。持续预训练指的是从一个预训练模型初始化并训练固定token预算的模型。冷却期(Cooldown)涉及在训练的最后阶段对高质量数据集进行加权并调整学习率,以相对较少的token数量进行。在训练结束时对高质量数据集进行较小步数的加权可以显著提升模型质量。
文本数据集。论文使用SlimPajama预训练语料库作为自然语言文本数据的来源。SlimPajama是一个基于RedPajama-1.2T的去重、质量过滤、多语料库、开源数据集,包含来自CommonCraw、C4、GitHub、书籍、ArXiv、维基百科和StackExchange的文档。论文过滤掉了所有来自GitHub和StackExchange的文档,以去除代码和代码相关数据源,确保这是一个纯文本来源。SlimPajama总共包含6270亿个token。移除所有代码源后,论文的文本预训练语料库总共有5030亿个token。
代码数据集。为了探索不同代码数据属性的影响,论文在实验中使用了多个代码源:
•WEB-BASED CODE DATA 作为主要的代码数据源,论文从用于训练StarCoder的Stack数据集。Stack数据集包含基于文档计数的25种编程语言。经过所有过滤步骤后,纯代码和token子集的大小为1390亿个token。
•MARKDOWN DATA 论文还单独处理了Markdown、CSS和HTML等token样式语言。经过所有过滤步骤后,这个token子集的大小为1800亿个token。
•SYNTHETIC CODE DATA 为了剔除代码数据集的质量,论文使用了一个专有的合成生成的代码数据集,该数据集包含经过形式验证的Python编程问题。论文将此视为高质量的代码数据源。最终的合成数据集包含32亿个代码token。
•代码相关数据:最后,为了探索代码数据的不同属性,论文包含了一个版本的代码数据,其中包括GitHub提交、Jupyter笔记本、StackExchange线程等辅助数据。对于GitHub提交和Jupyter笔记本,论文使用Stack 提供的作为数据集。论文使用SlimPajama 中包含的StackExchange版本。总计论文有214亿个代码相关数据token。
预训练冷却数据集。冷却过程涉及在预训练的最后步骤中加大对高质量数据集的权重。近期工作发现这可以提高下游任务的性能,特别是在帮助传授指令遵循能力方面。论文选择了一个由高质量文本、数学、代码和指令风格文本数据集组成的预训练冷却混合体。
2.2.2 评估
论文的目标是系统地理解代码对一般性能的影响,这需要一个广泛的评估套件,延伸到代码生成之外的多种下游任务。为此,论文在基准测试上评估模型,这些基准测试是模型在1)世界知识、2)自然语言推理和3)代码性能方面能力的合理agent。此外,论文报告由LLM作为评判的胜率。表1展示了完整的评估套件及其相应的分组,以及所使用的指标。
论文简要描述了用于每个类别的复合数据集:
1.世界知识。这些基准旨在衡量世界知识,测试在给定上下文下的知识记忆、检索和问答能力。论文包括了Natural Questions Open和TriviaQA作为数据集。论文报告这两个基准的平均精确匹配分数。
2.自然语言推理。自然语言(NL)推理套件包含11个基准测试,涉及基于自然语言的推理,如问答,自然语言推理(natural language inference,NLI) ,句子补全(sentence completion),共指解析( co-reference resolution)以及通用智能(general intelligence)。论文在表1中列出了所有组成部分基准测试的完整列表。论文报告所有基准测试的平均准确率得分。
3.代码。虽然论文的主要关注点是通用性能,但论文也希望衡量代码生成性能的任何变化。对于代码基准测试,论文专注于函数补全任务。论文在HumanEval-Python和MBPP上进行评估。论文报告这些基准测试的平均pass@1得分。
论文在不同规模上评估性能:从470M到2.8B参数模型。在论文较小的470M参数规模下,模型能力有限,因此为了确保公平比较,论文仅比较所有模型性能均高于随机的基准测试。这与先前的工作Muennighoff等人[2023];Lozhkov等人[2024]一致。
LLM-as-a-judge胜率。除了特定任务的判别性能外,论文还使用LLM-as-a-judge胜率来评估生成性能。使用LLM-as-a-Judge基准测试已成为一种自动替代人工评估的方法,后者通常费时费力且成本高昂。作为评估者的LLM根据详细的提示比较两个完成结果,这是感兴趣任务的有价值agent,在两个候选答案之间选择,根据给定属性评分)。先前的工作表明,使用LLM作为评估者是合理的agent,并与人类偏好一致。
论文使用Dolly-200英语数据集,该数据集由从Dolly-15K数据集中精选的200个示例组成。这些提示是开放式的,涵盖了通用的非代码用例。因此,使用此数据集进行评估是评估代码对更加灵活和通常开放式的任务影响的有价值agent。考虑到模型在学术基准测试和更开放式生成之间的已知张力,这一点尤为宝贵 - 最近的研究表明,随着开放式生成性能的提高,传统学术任务的性能会下降。这是因为大型语言模型的监督微调越来越被目标撕裂:改进传统学术基准和训练大型语言模型遵循指令、获得对话能力以及变得有用且无害。因此,为了对所有性能指标有一个更全面的看法,论文还报告了胜率。
对于论文的胜率评估,论文使用Cohere Command-R+3作为大型语言模型评判。
表1: 考虑用于评估的数据集:论文在上述详细基准上进行了广泛的评估。这些基准为自然语言推理、世界知识、开放式文本生成和代码生成任务的性能提供了有价值的agent。
2.2.3 训练与模型细节
对于预训练模型,论文采用470M和2.8B参数的仅解码器自回归Transformer模型,这些模型采用标准的语言建模目标进行训练。论文使用并行注意力层、SwiGLU激活函数、密集层中无偏差,以及词汇量大小为256,000的字节对编码(BPE)分词器。所有模型均使用AdamW优化器进行预训练,批量大小为512,采用余弦学习率调度器,预热步数为1325。论文使用的最大序列长度为8192。
基础设施。论文使用 TPU v5e 芯片进行训练和评估。所有模型均使用 FAX框架进行训练。为了严格评估每个消融实验,论文总共预训练了 64 个模型。考虑到所需的规模和计算资源,这是一项巨大的工作。每个预训练运行 200B token,对于 470M 参数模型需要 4,736 TPU 芯片小时,对于 2.8B 参数模型需要 13,824 TPU 芯片小时。每个冷却运行 40B token,对于 470M 模型需要 1,024 TPU 芯片小时。
2.3 论文的效果
这里论文将报告每个实验变体的描述和总体结果。论文系统地研究了以下内容:(1) 使用代码预训练模型初始化大型语言模型,(2) 模型规模的影响,(3) 预训练数据中代码比例的变化,(4) 代码数据的质量和属性,(5) 预训练冷却中的代码数据。最后,论文比较了所得的预训练配方。图 1 展示了论文实验设计的关键杠杆。
2.3.1 使用代码预训练模型初始化大型语言模型
图 2:使用代码预训练模型的初始化影响:与仅使用文本模型的初始化相比,使用代码预训练模型进行初始化可以提高推理和代码生成能力,其中当继续使用高比例文本进行预训练时,改进最为显著(平衡->文本,代码文本)。请注意,这些变体旨在隔离初始化的作用,因此不包括冷却期。
论文探索了不同预训练模型的初始化方式,以了解使用包含大量代码数据的语言模型作为初始化是否能提高性能。这些关键消融实验及其token计数总结在表2中。论文简要描述如下:
•文本语言模型(TEXT-ONLY BASELINE):从头开始使用 glorot-normal 初始化在仅文本数据上预训练的模型,共400B tokens。
•平衡语言模型(BALANCED-ONLY):模型在预训练中使用等比例的代码和文本数据(50% 文本和 50% 代码)进行训练,共400B tokens。
•平衡初始化文本语言模型(BALANCED -> TEXT):该模型使用平衡语言模型(50% 文本和 50% 代码)进行初始化,并继续使用文本数据进行预训练,共200B tokens。
•代码初始化文本语言模型(CODE -> TEXT):与其他变体不同,该模型使用在代码数据集上预训练的代码语言模型进行初始化,该数据集包含80%的代码数据和20%的token样式代码数据,共200B tokens。然后,论文继续使用文本数据对模型进行预训练。
自然语言推理 如图2所示,以100%代码预训练模型(代码→文本)初始化在自然语言(NL)推理基准测试中表现最佳,紧随其后的是平衡文本模型。代码-文本模型和平衡文本模型在NL推理任务上分别以8.8%和8.2%的相对改进超越了纯文本基线。仅平衡模型相对于基线提升了3.2%。这表明,从包含代码混合的预训练模型初始化对NL推理任务有显著的积极影响。进一步使用包含小比例代码的文本混合进行持续预训练,结果显示在代码-文本和平衡→文本模型中均取得了最佳性能。
图3:模型规模对不同任务的影响。论文观察到,规模在高达Z的7倍增长中提供了显著的增益,但整体趋势在不同规模下保持一致,显示出模型大小间结果的一致性。
世界知识任务 对于世界知识任务,论文发现平衡-文本模型在所有其他变体中表现最佳,相较于代码→文本模型提升了21%,相对于纯文本模型提升了4.1%。这表明世界知识任务的性能似乎依赖于更平衡的数据混合进行初始化,以及在持续预训练阶段中更大比例的文本。总体而言,与仅使用文本预训练相比,代码数据对世界知识任务仍然是有益的。
自然语言任务与代码生成之间的权衡 在代码生成任务中,仅平衡模型取得了最佳性能,论文看到相较于平衡→文本和代码→文本模型,分别有46.7%和54.5%的相对提升。这是预期的结果,因为仅平衡模型在整个预训练过程中包含了50%的代码。然而,该模型在提高代码生成性能的同时,牺牲了自然语言任务的性能。代码→文本和平衡→文本模型在自然语言推理任务中分别实现了2.97%和2.3%的相对增长,在世界知识任务中分别实现了17.3%和22.2%的相对提升,相较于仅平衡模型。
生成质量胜率比较 此外,论文比较了每种代码变体(代码-文本和平衡-仅)与仅文本模型的生成性能。论文报告了胜率,并观察到代码的存在对生成质量有显著的正面影响。代码→文本和平衡-仅模型在胜负率上均比仅文本变体高出6.6%。论文再次指出,用于计算胜率的Dolly-200-English评估集经过精心策划,以反映开放式问题,并且是非代码评估。这证实了预训练混合中的代码数据不仅提高了推理能力,还帮助模型产生更高质量的生成结果。
2.3.2 规模的影响
为了了解上面的发现是否适用于更大的模型,论文按照470M规模相同的模型变体,使用相同的token预算训练了2.8B参数模型。图9展示了2.8B模型与470M结果的比较。
2.8B与470M模型的比较 将模型规模扩展至2.8B参数,使得所有任务类别中的所有模型变体性能均优于470M结果。在自然语言推理和世界知识平均性能方面,balanced-text模型通过规模扩大获得了33.1%的相对提升,相较于470M规模的同一模型。code→text和仅balanced模型的改进分别为31.7%和30%的相对提升。
论文发现,自然语言推理的改进相对较小,balanced-text、code-text和仅balanced模型分别获得了5.3%、9.2%和5.2%的相对增益。然而,世界知识和代码性能几乎翻了三倍,所有模型变体均如此。特别是,2.8B的balanced→text模型在世界知识方面提升了2.7倍,在代码评估方面提升了2.5倍,相较于470M模型。
2.8B模型变体间的趋势 值得注意的是,在采用代码预训练模型进行初始化方面,2.8B模型延续了470M参数规模下的相同趋势。code→text和balanced-text模型在自然语言任务上分别以6.9%和6.1%的相对增益超过balanced模型,但在代码生成性能上分别显著落后43.1%和46.3%。这些结果表明,随着模型规模的增大,自然语言任务与代码生成之间的权衡加剧。
总体而言,论文的实验扩展至更大规模的结果显示,这些结果得以保持,并与论文在470M参数消融实验中观察到的趋势一致。
图 4 :预训练中代码比例对不同任务的影响:论文观察到,随着预训练中代码比例的增加,代码任务的性能呈线性增长。相比之下,NL 推理和世界知识任务对代码比例更为敏感,并存在一个最佳的代码比例范围,在此范围内收益最为明显。
2.3.3 预训练中的代码数据比例
在这些实验中,论文调整了预训练混合数据中代码数据的比例,以了解在非代码任务上最大化性能所需的最佳代码量。这里,论文关注预训练的第一阶段,即随机初始化阶段。论文训练了六个模型,每个模型处理 2000 亿个token,代码比例分别为:0%,25%,50%,75%,90% 和 100%。剩余的比例由文本数据填充。对于每个变体,论文独立训练一个新的模型,以便仔细剖析不同代码比例的影响。
自然语言推理与世界知识 对于自然语言推理任务,随着代码量的增加,如图angle所示,模型性能相较于纯文本模型(0 %代码)有所提升。最佳性能来自一个包含25%代码和75%文本的模型,相对于0%代码模型,性能提升了3.4%。尽管性能在代码占比达到75%时仍保持稳定,但当代码比例进一步提高时,性能开始急剧下降,特别是在100%代码训练的模型中,性能相较于无代码模型急剧下降了18.3%。
对于世界知识任务,论文观察到与增加代码量呈反比的关系。如图angle中间插图所示,当代码占比为25%时,性能相对下降了3.4%,而当代码占比达到75%时,这一相对下降幅度恶化至31%,相较于无代码模型。完全基于代码的模型(100%代码)在世界知识任务中表现不佳(相对于纯文本模型下降了86%),因为在预训练混合中缺乏获取所需知识的数据源。
代码性能 在代码评估方面,随着代码量的增加,性能呈线性提升,其中最佳模型为纯代码模型。如图4右侧插图所示,100%代码模型在代码基准测试中相较于25%代码模型提升了2.6倍。正如预期,对于0%代码的模型,平均pass@1得分降至0。
2.3.4 代码质量与属性对通用性能的影响
论文通过改变代码数据的质量和组成来研究其特性。论文首先(a)从从头开始训练的角度进行研究,因为论文希望隔离代码数据不同属性的确切影响。其次(b),论文在持续预训练实验中纳入最佳的代码数据变体(高质量合成代码),以观察代码质量的影响是否能转移。论文报告了在NL推理和代码任务上的性能。这些是论文研究的属性:
•MARKUP-STYLE DATA: 论文将token样式编程语言与基于网络的其余代码分开。论文将20%的纯代码token替换为token样式token。
•CODE ADJACENT DATA: 论文不仅使用纯基于网络的代码数据,还将15%的代码token替换为代码相关数据集——包括GitHub问题(5%)、Stack-Exchange (5%)和Jupyter Notebooks (5%),从而得到一个代码相关模型。
•CODE QUALITY: 为了控制代码的质量,论文将10%的现有代码token替换为合成生成的高质量代码数据集。其余比例的基于网络的代码数据保持不变,从而得到一个代码合成模型。
纯代码预训练 论文将上述变体与仅在Stack数据集中的基于网络的代码数据上训练的模型进行比较,该模型构成了论文的基线模型。请注意,所有这些变体都使用相同数量的token进行预训练,以确保公平比较(200B token)。
在图5a中,论文评估了代码质量和代码组成的影响。论文观察到,包括多样化的代码来源和合成代码在内的所有变体,都能在自然语言处理方面带来增益。
图 5:使用代码数据不同属性的影响:(a) 作为最具影响力的代码数据源,综合生成的高质量代码提升了代码预训练中的自然语言推理和代码性能。(b) 这些使用综合生成的高质量代码数据的改进同样适用于持续预训练设置。
然而,相对于代码的语言性能,只有综合生成的代码提升了代码基准测试。论文将此归因于论文的代码评估,其中论文测量了Python n 的性能,因此不同的编程语言或与代码相关的数据略微降低了结果。在此,codetmarkup 和 codetadjacent 相对于代码(仅限网页代码)在自然语言推理上分别带来了 2.8% 和 6.3% 的相对改进,但在代码评估中分别导致了 15.7和9.4% 的下降。
论文的合成代码数据(codetsynth)是最具影响力的消融实验。考虑到其在整个数据集中相对较小的份额,这一点尤其令人印象深刻。尽管权重较小,仅为 10%,但包含合成数据相对于仅限网页代码的基线在自然语言推理上带来了 9% 的相对改进,在代码基准测试上带来了 44.9% 的改进。论文注意到,考虑到合成数据与代码相关数据(32亿 vs 214亿 tokens)或代码token数据(32亿 vs 40亿 tokens)相比的有限数量,以及预训练分配中的权重(10% vs 15% vs 20% 分别对应合成数据、代码相关、代码token数据),合成数据带来的提升更为显著。这表明,未来改进的一个关键杠杆是增加此类高质量代码数据源的比例。
持续预训练 在此,基于仅代码预训练的发现,论文将codetsynth融入论文最佳的持续预训练变体(balancedtsynth→text)。论文将其与不含合成代码数据的相同变体(balanced→text)进行对比,以评估论文的合成数据在此设置中的迁移效益。同样,论文在这些实验中使用相同数量的代码和文本token。
如图5b所示,balancedtsynth-text在NL推理和代码方面分别比balanced→text实现了2%和35%的相对提升。这进一步证实,即使是一小部分高质量的代码数据,不仅在代码预训练中提升性能,而且在持续预训练后,还能增强代码和非代码性能。
图 6:预训练冷却阶段代码数据的影响:在冷却阶段包含代码数据相对于无代码冷却,在下游任务中有所提升。两种冷却变体在所有任务上都优于无冷却。
2.3.5 预训练冷却阶段中的代码
论文评估了在预训练的最后阶段引入代码的影响。这里,论文考虑冷却阶段,其中论文加权高质量的文本、数学、代码和指令风格数据集。论文将学习率调度从基于余弦的调整为线性退火,最终学习率为1e-6。论文通过比较三种模型来评估在冷却中包含代码的影响:冷却前的预训练模型,无代码数据的冷却,以及包含20%代码数据的冷却。对于论文的预训练模型,论文使用平衡文本(balanced-text),因为它是论文最佳的预训练变体。论文在所有变体中保持相同的token预算——40Btoken,这是预训练模型token预算的10%。
不同任务中冷却阶段使用代码的影响 在图 6 中,论文评估了冷却阶段使用代码数据对模型在自然语言推理、世界知识和代码基准测试中性能的影响。在各项任务中,论文发现使用代码数据的冷却阶段最为有益,相对于无冷却阶段的模型,在自然语言推理、世界知识和代码任务中分别提升了 3.6%、10.1% 和 20%。
相比之下,论文发现不包含代码的冷却阶段对自然语言推理和代码任务都没有提供任何提升,而在世界知识任务上相对于无冷却阶段只提供了3.1%的相对改进,这显示了代码数据在预训练的冷却阶段中也起着至关重要的作用。
图 7 : 通过胜率衡量的冷却期生成性能:所有冷却期变体都显著提升了生成质量。论文发现,包含代码的冷却期带来了最大的收益,最高胜率达到 52.3%,超过了无冷却期模型。
冷却后的生成胜率如预期所示,冷却期对生成性能产生了显著影响,这可以通过胜率来衡量(见图 7)。这是因为论文在预训练混合中增加了高质量数据源的权重,包括诸如 Dolly v2这样的指令风格数据集。两种冷却期变体(无代码冷却期,带代码冷却期)都大幅超越了无冷却期模型,胜率分别为 48.2% 和 52.3%(见图 7)。比较两种冷却期变体,包含代码相较于无代码冷却期,在对抗无冷却期模型时额外提升了 4.1%的生成胜率。
2.3.6 比较预训练配方
表 2:模型变体及其相应的预训练配方:预训练配方包括初始预训练、继续预训练和冷却阶段。平衡到文本在自然语言(NL)性能上表现最佳,而仅平衡在代码生成方面表现显著更好。
考虑到迄今为止的所有实验,论文试图总结论文的发现,并为使用代码数据进行预训练推荐方案。表 varUpsilon 展示了不同变体及其预训练阶段。
自然语言任务的最佳方案 在预训练的所有阶段包含代码数据在所有任务类别中均有所改进。在最终方案中,论文发现包含代码数据的平衡文本模型随后进行冷却对应于自然语言任务中的最佳整体性能,考虑 NL推理、世界知识和生成性能。值得注意的是,该模型在生成胜率上达到了最高,为 37.7%,对比仅文本的 33.7%。
代码性能的最佳方案 在表 2 中展示的完整方案中,仅平衡模型对应于代码基准测试的最佳性能。该模型相对于第二好的代码→文本模型实现了 20% 的相对增益,相对于平衡→文本模型实现了 55% 的相对增益。然而,仅平衡模型在自然语言性能上落后,相对于平衡→文本模型有 2.5% 的相对差异和 5.0% 的胜率差异。
在预训练的所有阶段包含代码数据对论文的三个任务类别和生成性能都有益。论文推荐的最佳整体通用下游性能方案是,从零开始预训练时包含代码和文本数据的平衡混合,在持续预训练期间使用相对较低的代码比例,并将代码数据纳入冷却混合中。此外,论文建议在预训练的所有阶段包含高质量的代码数据。
图 8:通过完整冷却时间的变体在胜率上衡量的生成性能。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。