大型语言模型(LLM)的发展已走过漫长历程,从早期的GPT模型演进至如今复杂的开源权重LLM。最初,LLM训练过程仅聚焦于预训练,但此后已扩展至包含预训练与后训练两个阶段。后训练通常涵盖监督式指令微调与对齐,这一方法因ChatGPT而广为人知。
自ChatGPT首次发布以来,训练方法已不断演进。本文将梳理预训练与后训练方法的最新进展,尤其是近几个月取得的突破。

每月有数百篇LLM论文提出新技术与方法。然而,判断哪些方法在实践中真正有效的最佳途径之一,是审视最新顶尖模型的预训练与后训练流程。幸运的是,近几个月有四款重要新LLM发布,并附有相对详细的技术报告。
本文将聚焦以下模型的预训练与后训练流程:
- 阿里巴巴的Qwen 2
- Apple Intelligence基础语言模型
- 谷歌的Gemma 2
- Meta AI的Llama 3.1
这些模型按arXiv.org上技术论文的发表日期排序,巧合的是这也与字母顺序一致。
本文是我利用业余时间与周末完成的热情之作。若您认为本文有价值并希望支持我的工作,请考虑购买我的书籍并推荐给同事。您在亚马逊上的评价也将令我感激不尽!
- 《构建大型语言模型(从零开始)》(http://mng.bz/M96o)是一本高度聚焦的书籍,专门讲解用PyTorch从零编码LLM,涵盖从预训练到后训练的全流程——这或许是真正理解LLM的最佳途径。
- 《机器学习问答与AI》(https://nostarch.com/machine-learning-and-ai-beyond-basics)适合已掌握基础知识的读者,深入探讨深度神经网络、视觉Transformer、多GPU训练范式、LLM等中高级概念。
- 《PyTorch与Scikit-Learn机器学习》(https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/)是机器学习、深度学习与AI的全面指南,理论实践并重,是新手入门的最佳选择。
让我们从Qwen 2开始,这是一个实力强劲的LLM模型系列,与其他主流LLM不相上下。但出于某些原因,其知名度不及Meta AI、微软和谷歌的开源权重模型。
在探讨Qwen 2技术报告中讨论的预训练与后训练方法之前,先简要总结其核心规格。
Qwen 2 模型共有五种版本。其中包含四种常规(密集)大语言模型,参数量分别为 0.5B、1.5B、7B 和 72B。此外还有一个 570 亿参数的混合专家模型,其中 140 亿参数可同时激活。(由于架构细节并非本次重点,我不会深入探讨混合专家模型;但简而言之,该模型与 Mistral AI 的 Mixtral 类似,区别在于其激活的专家数量更多。如需高层级概述,可参阅我文章《模型合并、混合专家与迈向更小 LLM》中的 Mixtral 架构 章节。)
Qwen 2 大语言模型的突出特点之一是其出色的多语言能力,支持 30 种语言。它们还拥有惊人的 151,642 个词元词汇量(作为参考,Llama 2 使用 32k 词汇量,Llama 3.1 使用 128k 词元词汇量);根据经验法则,词汇量翻倍可使输入词元数量减半,从而在相同输入中容纳更多文本。这尤其有助于处理多语言数据和编码,覆盖标准英语词汇之外的词语。
以下是与其他后续介绍的 LLM 的简要 MMLU 基准对比。(请注意,MMLU 是一个多项选择基准测试,因此存在局限性;但它仍是报告 LLM 性能最流行的方法之一。)

(如果你不熟悉 MMLU,我在最近的演讲中第 46 分 05 秒处简要讨论过它。)
Qwen 2 团队使用 7 万亿训练词元训练了 1.5B、7B 和 72B 参数模型,这是一个合理的规模。作为对比,Llama 2 模型使用 2 万亿词元训练,而 Llama 3.1 模型使用 15 万亿词元训练。
有趣的是,0.5B 参数模型使用了 12 万亿词元进行训练。然而,研究人员并未对其他模型使用更大的 12 万亿词元数据集进行训练,因为他们在训练过程中没有观察到任何改进,且额外的计算成本并不合理。
其中一个重点领域是改进数据过滤管道以去除低质量数据,并增强数据混合以提高数据多样性——这一主题将在我们后续研究其他模型时再次提及。
有趣的是,他们还使用了 Qwen 模型(尽管未说明细节,我推测是指上一代 Qwen 模型)来合成额外的预训练数据。预训练过程包含了“多任务指令数据……以增强上下文学习和指令遵循能力。”
此外,他们分两个阶段进行训练:常规预训练,随后是长上下文训练。后者在预训练的最后阶段使用“高质量、长篇幅数据”将上下文长度从 4,096 个词元增加到 32,768 个词元。

(遗憾的是,技术报告的另一个特点是数据集细节匮乏,因此如果我的总结看起来不够详细,那是因为公开信息不足。)
Qwen 2 团队采用了流行的两阶段后训练方法,首先进行监督指令微调(SFT),在 50 万个样本上训练了 2 个 epoch。这一阶段旨在提升模型在预设场景下的响应准确性。

在 SFT 之后,他们使用直接偏好优化(DPO)来使 LLM 与人类偏好对齐。(在他们的术语中,这被有趣地称为基于人类反馈的强化学习,RLHF。)正如我几周前在《LLM 预训练与奖励模型评估技巧》一文中讨论的那样,SFT+DPO 方法似乎是目前最流行的偏好调优策略,因为它比其他方法(如使用 PPO 的 RLHF)更易于使用。(如果你想了解 DPO 的工作原理,我最近从零开始实现了它,代码在这里。)
对齐阶段本身也分为两个步骤。首先,在现有数据集上使用 DPO(离线阶段)。其次,使用奖励模型来形成偏好对(在线阶段)。在此过程中,模型在训练期间生成多个响应,奖励模型在“实时”(即训练过程中)选择优先响应用于优化步骤。这通常也被称为“拒绝采样”。
在数据集构建方面,他们使用了现有语料库,并辅以人工标注,以确定 SFT 的目标响应,并识别 DPO 所需的偏好和拒绝响应。研究人员还合成了人工标注的数据。
此外,团队使用 LLM 生成专门针对“高质量文学数据”的指令-响应对,以创建用于训练的高质量问答对。

Qwen 2 是一个相对强大的模型,与早期版本的 Qwen 类似。在 2023 年 12 月参加 NeurIPS LLM 效率挑战赛时,我记得大多数获胜方案都使用了 Qwen 模型。
关于Qwen 2的训练流程,最引人注目的是合成数据同时用于预训练和后训练。此外,专注于数据集过滤(而非尽可能多地收集数据)也是LLM训练中值得关注的趋势之一。在此我想说,数据量越大越好,但前提是必须达到特定质量标准。
直接偏好优化(DPO)已成为使LLM更贴近用户偏好的主流方法之一,本文将多次提及这一概念。若想了解其工作原理,我在此提供了从零实现的代码:
Direct Preference Optimization (DPO) for LLM Alignment (From Scratch)
非常欣喜地看到苹果公司在arXiv.org上发布了另一篇技术论文,详细阐述了他们的模型训练方法。这无疑是个意料之外的惊喜!
在《Apple Intelligence Foundation Language Models》论文中(访问地址:https://arxiv.org/abs/2407.21075),研究团队介绍了为苹果设备"Apple Intelligence“场景开发的两款主要模型。为简洁起见,本节将这两款模型统称为AFM(Apple Foundation Models)。
具体而言,论文描述了AFM的两个版本:一个30亿参数的设备端模型(适用于手机、平板或笔记本电脑),以及一个参数规模未公开、性能更强的服务器模型。
这些模型专为聊天、数学和编程任务而设计,但论文并未涉及编程相关的训练细节与能力。
与Qwen 2类似,AFM也是密集LLM,未采用混合专家架构。
在此要向研究人员致以双重敬意:首先,除使用公开数据和出版商授权数据外,他们尊重网站的robots.txt文件并避免抓取这些网站;其次,他们明确表示已使用基准数据进行去污染处理。
为强化Qwen 2论文的结论之一,研究人员强调质量远胜于数量。(设备端模型词汇量为4.9万token,服务器模型为10万token,均明显小于Qwen 2模型使用的15万token词汇量。)
有趣的是,预训练并非分2阶段而是3阶段进行:
- 核心(常规)预训练
- 持续预训练:降低网络抓取(低质量)数据权重,提升数学与代码数据权重
- 通过更长序列数据与合成数据扩展上下文长度

让我们更详细地了解这三个步骤。
核心预训练是苹果预训练流程的第一阶段。这类似于常规预训练:AFM服务器模型在6.3万亿token上训练,批次大小为4096,序列长度为4096 token。这与Qwen 2模型非常相似(后者在7万亿token上训练)。
然而,对于AFM设备端模型来说,情况变得更有趣了——该模型是从一个更大的64亿参数模型(与上一段描述的AFM服务器端模型一样,是从头开始训练的)中蒸馏和剪枝得到的。
关于蒸馏过程,除了提到“通过将目标标签替换为真实标签与教师模型top-1预测(教师标签权重设为0.9)的凸组合来使用蒸馏损失”之外,没有太多细节。
我觉得知识蒸馏在LLM预训练中正变得越来越普遍和有用(Gemma-2也使用了它)。我计划将来某天更详细地介绍它。现在,先简要概述一下这个过程在高层是如何运作的。

如上图所示,知识蒸馏仍然涉及在原始数据集上进行训练。然而,除了数据集中的训练token外,待训练的模型(称为学生模型)还会从更大的(教师)模型接收信息,与没有知识蒸馏的训练相比,这提供了更丰富的信号。缺点是你必须:1) 先训练更大的教师模型,以及 2) 使用更大的教师模型计算所有训练token的预测。这些预测可以提前计算(这需要大量存储空间),也可以在训练期间计算(这可能会减慢训练过程)。
持续预训练阶段包括一个小的上下文长度扩展步骤,从4,096个token扩展到8,192个token,使用的数据集包含1万亿个token(核心预训练集是其五倍大)。然而,主要重点是在高质量数据混合上进行训练,特别强调数学和代码。
有趣的是,研究人员发现蒸馏损失在这种情况下并没有益处。
第三个预训练阶段仅涉及1000亿个token(第二阶段所用token的10%),但代表了更显著的上下文长度扩展,达到32,768个token。为了实现这一点,研究人员用合成的长上下文问答数据扩充了数据集。

苹果公司在后训练过程中似乎采取了与预训练同样全面的方法。他们同时使用了人工标注和合成数据,并强调数据质量优先于数量。有趣的是,他们并未依赖预设的数据比例,而是通过多次实验调整数据混合比例,以达到最优平衡。
后训练阶段包含两个步骤:监督式指令微调,随后进行多轮基于人类反馈的强化学习(RLHF)。
这一过程中特别值得注意的一点是,苹果为RLHF阶段引入了两种新算法:
-
带教师委员会的拒绝采样微调(iTeC)
-
基于镜像下降策略优化的RLHF
鉴于本文篇幅,我不会深入探讨这些方法的技术细节,但以下是简要概述:
iTeC算法将拒绝采样与多种偏好调优技术(具体包括SFT、DPO、IPO和在线RL)相结合。苹果并非依赖单一算法,而是独立使用每种方法训练模型。这些模型生成响应后,由人类评估并提供偏好标签。这些偏好数据被用于在RLHF框架中迭代训练奖励模型。在拒绝采样阶段,一个模型委员会生成多个响应,由奖励模型从中选出最佳答案。
这种基于委员会的方法相当复杂,但相对可行——尤其是考虑到所涉及模型规模较小(约30亿参数)。若在Llama 3.1的70B或405B参数等更大模型上实施此类委员会,无疑会更具挑战性。
至于第二种算法——基于镜像下降的RLHF,之所以被选中,是因为它比常用的PPO(近端策略优化)更有效。

苹果的预训练和后训练方法相对全面,这可能是因为风险极高(该模型部署在数百万甚至数十亿台设备上)。然而,由于这些模型规模较小,大量技术也变得可行——因为一个3B模型还不到最小Llama 3.1模型的一半大小。
亮点之一在于,他们并非简单地在RLHF和DPO之间二选一,而是以委员会形式使用了多种偏好调优算法。
同样有趣的是,他们明确将问答数据作为预训练的一部分——我在上一篇文章《指令预训练LLM》中讨论过这一点。
总而言之,这是一份令人耳目一新且愉悦的技术报告。
谷歌的Gemma模型最近在《Gemma 2:在实用规模上改进开放语言模型》一文中被描述。
在讨论预训练和后训练过程之前,我将在以下概述部分介绍一些关键事实。
Gemma 2 模型提供三种规模:20亿、90亿和270亿参数。其核心在于探索那些不一定需要扩大训练数据集规模,而是致力于开发相对小型且高效的大型语言模型(LLM)的技术。
值得注意的是,Gemma 2 拥有高达 256k 词元的词汇量。作为对比,Llama 2 的词汇量为 32k 词元,而 Llama 3 则为 128k 词元。
此外,Gemma 2 采用了与 Mistral 早期模型类似的滑动窗口注意力机制,这很可能是为了降低内存成本。有关 Gemma 2 架构的更多详情,请参阅我上一篇文章中的 Gemma 2 部分。
Gemma 的研究人员认为,即使是小型模型也常常存在训练不足的问题。然而,他们并非简单地增加训练数据集的规模,而是专注于通过其他方法(例如知识蒸馏,这与苹果公司的做法类似)来维持质量并实现改进。
虽然 270B 参数的 Gemma 2 模型是从零开始训练的,但较小的模型则采用了与之前解释的苹果方法类似的知识蒸馏技术进行训练。
270B 模型在 13 万亿个词元上训练,90B 模型在 8 万亿个词元上训练,而 20B 模型则在 2 万亿个词元上训练。此外,与苹果的方法类似,Gemma 团队优化了数据混合比例以提升性能。

Gemma 模型的训练后处理过程包括典型的监督微调(SFT)和基于人类反馈的强化学习(RLHF)步骤。
指令数据使用了仅包含英文的提示对,这些数据是人工生成和合成生成内容的混合体。具体且有趣的是,回复主要由教师模型生成,并且在 SFT 阶段也应用了知识蒸馏。
在 SFT 之后,其 RLHF 方法的一个有趣方面是,用于 RLHF 的奖励模型比策略(目标)模型大十倍。
Gemma 采用的 RLHF 算法相当标准,但有一个独特的转折:他们通过一种名为 WARP 的方法对策略模型进行平均,WARP 是 WARM(加权平均奖励模型)的后续方法。我之前在我的文章《模型合并、专家混合,以及迈向更小的 LLM》中详细讨论过这种方法。

Gemma 团队似乎非常重视知识蒸馏,他们在预训练和训练后处理阶段都使用了这项技术,这与苹果的做法类似。有趣的是,他们没有采用多阶段预训练方法,或者至少没有在他们的论文中详细说明。

Meta的Llama大语言模型新版本发布总是备受瞩目。此次发布还附带了一份92页的技术报告:《Llama 3模型系列》。最后但同样重要的是,本部分我们将审视上个月发布的第四篇重磅模型论文。
除了发布庞大的4050亿参数模型,Meta还更新了此前80亿和700亿参数的模型,使其在MMLU基准测试中的性能略有提升。

尽管Llama 3像其他近期的大语言模型一样采用了分组查询注意力机制,但令人惊讶的是,Meta AI拒绝了滑动窗口注意力和混合专家方法。换句话说,Llama 3.1看起来非常传统,其重点显然在于预训练和后训练,而非架构创新。
与之前的Llama版本类似,模型权重是公开可用的。此外,Meta表示他们更新了Llama 3的许可协议,现在终于可以(被允许)使用Llama 3进行合成数据生成或知识蒸馏,以改进其他模型。
Llama 3在庞大的15.6万亿token数据集上进行了训练,相比Llama 2的1.8万亿token有了显著增加。研究人员表示,它至少支持八种语言(而Qwen 2能够处理20种语言)。
Llama 3的一个有趣之处在于其128,000的词汇量,这是使用OpenAI的tiktoken分词器开发的。(对于分词器性能感兴趣的人,我在这里做了一个简单的基准比较。)
在预训练数据质量控制方面,Llama 3采用了基于启发式的过滤以及基于模型的质量过滤,利用了像Meta AI的fastText和基于RoBERTa的分类器等快速分类器。这些分类器还有助于确定训练数据混合中使用的上下文类别。
Llama 3的预训练分为三个阶段。第一阶段涉及使用15.6万亿token和8k上下文窗口进行标准的初始预训练。第二阶段继续预训练,但将上下文长度扩展到128k。最后阶段是退火,进一步提升了模型的性能。下面我们将更详细地探讨这些阶段。
在他们的训练设置中,初始批次包含400万个token,每个序列长度为4096。假设400万这个数字是四舍五入后的结果,这意味着批次大小约为1024个token。处理完前2.52亿个token后,他们将序列长度翻倍至8192。训练进行到2.87万亿个token后,他们再次将批次大小翻倍。
此外,研究人员在整个训练过程中并未保持数据混合比例不变。相反,他们调整了训练过程中使用的数据混合方式,以优化模型学习和性能。这种动态数据处理方法可能有助于提升模型在不同数据类型上的泛化能力。
与其他一次性增加上下文窗口的模型相比,Llama 3.1的上下文扩展采用了更渐进的方式:研究人员通过六个不同阶段,将上下文长度从8000个token逐步增加到128,000个token。这种逐步递增的方式可能使模型能够更平滑地适应更大的上下文。
用于此过程的训练集包含8000亿个token,约占整个数据集大小的5%。
在第三个预训练阶段,研究人员在一个规模较小但质量较高的混合数据集上训练模型,他们发现这有助于提升在基准数据集上的表现。例如,在GSM8K和MATH训练集上进行退火处理,显著提升了相应GSM8K和MATH验证集的性能。
在论文第3.1.3节中,研究人员指出退火数据集大小为400亿个token(占整个数据集大小的0.02%);这个400亿token的退火数据集用于评估数据质量。在第3.4.3节中,他们提到实际退火仅使用了4000万个token(占退火数据的0.1%)。

在后训练过程中,Meta AI团队采用了一种相对直接的方法,包括监督微调(SFT)、拒绝采样和直接偏好优化(DPO)。
他们观察到,与这些技术相比,像RLHF结合PPO这样的强化学习算法稳定性较差,且更难扩展。值得注意的是,SFT和DPO步骤在多个轮次中迭代重复,并同时使用了人工生成和合成数据。
在进一步描述细节之前,他们的工作流程如下图所示。

需要注意的是,尽管他们使用了DPO,但同时也像RLHF那样开发了一个奖励模型。最初,他们利用预训练阶段的检查点,结合人工标注数据训练了该奖励模型。随后,这个奖励模型被用于拒绝采样过程,帮助筛选出适合进一步训练的提示。
在每一轮训练中,他们不仅对奖励模型应用了模型平均技术,还对SFT和DPO模型进行了同样的操作。这种平均方法涉及将近期和先前模型的参数进行合并,以稳定(并提升)随时间推移的性能。
对于对模型平均技术细节感兴趣的读者,我在之前文章《模型合并、专家混合与迈向更小LLM》的“理解模型合并与权重平均”部分讨论过这一话题:Model Merging, Mixtures of Experts, and Towards Smaller LLMs。
总而言之,其核心是一个相对标准的SFT + DPO阶段。不过,这一阶段会重复多轮。此外,他们还引入了用于拒绝采样的奖励模型(类似于Qwen 2和AFM)。同时,他们也像Gemma那样使用了模型平均,但不仅限于奖励模型,而是涉及所有模型。

Llama 3 模型仍然相当标准,与早期的 Llama 2 模型相似,但采用了一些有趣的方法。值得注意的是,庞大的 15 万亿 token 训练集使 Llama 3 区别于其他模型。有趣的是,与苹果的 AFM 模型一样,Llama 3 也实施了三阶段预训练过程。
与其他近期的大型语言模型相比,Llama 3 没有采用知识蒸馏技术,而是选择了更直接的模型开发路径。在后训练中,该模型使用了直接偏好优化(DPO),而不是其他模型中流行的更复杂的强化学习策略。总体而言,这一选择很有趣,因为它表明其重点是通过更简单(但经过验证)的方法来优化 LLM 性能。
从本文讨论的四个模型——阿里巴巴的 Qwen 2、苹果的基础模型(AFM)、谷歌的 Gemma 2 和 Meta 的 Llama 3——中,我们能学到什么?
这四个模型在预训练和后训练方面采用了不同的方法。当然,方法论上存在重叠,但没有一个训练流程是完全相同的。在预训练方面,一个共同特征似乎是所有方法都使用了多阶段预训练流程,即先进行通用核心预训练,然后进行上下文长度扩展,有时还会进行高质量退火步骤。下图再次展示了预训练中采用的不同方法。

在后期训练方面,各个流程也并非完全相同。拒绝采样似乎已成为后期训练中的常见环节。然而,在DPO或RLHF的选择上,目前尚未达成共识或形成偏好(此处并非双关)。

因此,总的来说,开发高性能大语言模型并没有单一的配方,而是存在多种路径。
最后,这四个模型的性能大致相当。遗憾的是,其中几个模型尚未进入LMSYS和AlpacaEval排行榜,因此我们目前还无法进行直接比较,只能参考MMLU等多选基准测试的得分。
本杂志是我个人的热情项目。对于那些希望支持我的人,请考虑购买一本我的《从零开始构建大语言模型》一书(https://amzn.to/4fqvn0D)。(我相信您会从这本书中收获颇丰,因为它以其他地方找不到的详细程度解释了LLM的工作原理。)
如果您阅读了这本书,并且有几分钟的空闲时间,我将非常感激您能留下一个简短的评价。这对我们作者帮助很大!
另外,我最近也在Substack上启用了付费订阅选项,以便直接支持本杂志。