这篇博客全面介绍了大型语言模型(LLMs)的构建流程,从流行架构的选择到实际建模的每个关键步骤。文章首先探讨了LLMs的模型架构,然后详细阐述了数据准备过程,包括数据的收集、清洗和去重,接着是关于如何进行有效标记化的讨论。在模型构建方面,博客详细解释了采用自监督学习方法的预训练过程,以及对模型进行指令微调和对齐的重要性。每个环节都被细致地讲解,使读者能够深入理解LLMs的构建和优化过程。这篇博客为那些对LLMs工作方式感兴趣的读者提供了一个指导。
训练流程示意:
1. 主流的LLM架构
- 常见架构类型:最广泛使用的LLM架构包括仅编码器、仅解码器和编码器-解码器。
- 基础架构:大多数LLM架构都基于Transformer(Transformer)作为构建模块。
- Transformer架构回顾:因此,我们也将在这里回顾Transformer架构。
Transformer
- 开创性工作:Vaswani等人提出Transformer框架,具有里程碑的意义,最初设计用于使用GPU进行有效的并行计算。
- 核心机制:Transformer的核心是(自)注意力机制,相比递归和卷积机制,它能够更有效地利用GPU捕捉长期上下文信息。
- Transformer语言模型架构:最初为机器翻译提出的Transformer语言模型架构,包括一个编码器和一个解码器。编码器由N=6个相同的Transformer层堆叠组成。每层有两个子层:第一个是多头自注意力层,另一个是简单的逐位置全连接前馈网络。解码器由6个相同的层堆叠组成。除了编码器层中的两个子层外,解码器还有第三个子层,它对编码器堆栈的输出执行多头注意力。注意力函数可以描述为将查询和一组键值对映射到一个输出,其中查询、键、值和输出都是向量。输出计算为值的加权和,其中每个值的权重由查询与相应键的兼容性函数计算得出。与执行一个具有dmodel维键、值和查询的单一注意力函数不同,发现将查询、键和值h通过不同的学习线性投影分别映射到dk、dk和dv维是有益的。位置编码被加入以融合有关序列中标记的相对或绝对位置的信息。
仅编码器架构
- 注意力层特点:在这个家族的模型中,每个阶段的注意力层都能访问初始句子中的所有词语。
- 预训练方法:这些模型的预训练通常包括以某种方式破坏给定句子(例如,通过掩盖句子中随机的单词),然后让模型找出或重构初始句子。
- 适用任务:编码器模型非常适合需要理解整个序列的任务,如句子分类、命名实体识别和抽取式问答。
- 代表模型:一个突出的仅编码器模型是BERT(Bidirectional Encoder Representations from Transformers。
仅解码器架构
- 注意力层特点:对于这些模型,每个阶段的注意力层只能访问句子中该词之前的词语。这些模型有时也被称为自回归模型。
- 预训练方法:这些模型的预训练通常被构建为预测序列中的下一个词(或标记)。
- 适用任务:仅解码器模型最适合涉及文本生成的任务。GPT模型是这一类别的突出例子。
编码器-解码器架构
- 架构特点:这些模型使用编码器和解码器,有时被称为序列到序列模型。在每个阶段,编码器的注意力层可以访问初始句子中的所有词语,而解码器的注意力层只访问输入中给定词之前的词语。
- 预训练目标:这些模型通常使用编码器或解码器模型的目标进行预训练,但通常涉及更复杂的内容。例如,一些模型通过用单个掩码特殊词替换文本中的随机文本跨度(可能包含几个词)进行预训练,目标是预测这个掩码词替换的文本。
- 适用任务:编码器-解码器模型最适合涉及基于给定输入生成新句子的任务,如摘要、翻译或生成式问答。
2. 数据清理
- 数据清理的重要性:数据质量对于基于其训练的语言模型的性能至关重要。数据清理技术,如过滤和去重,已被证明对模型性能有很大影响。
- 实例研究:作为一个例子,在Falcon40B中,Penedo等人展示了经过适当过滤和去重的网络数据单独可以构建强大的模型,甚至在性能上显著超过在The Pile上训练的最先进模型。尽管进行了广泛过滤,他们仍然从CommonCrawl获取了五万亿个标记。他们还发布了来自REFINEDWEB数据集的6000亿标记的提取物,以及在此基础上训练的1.3/7.5B参数语言模型。
- 数据精炼过程示意:
图:宏观数据精炼的后续阶段剔除了最初在CommonCrawl中的近90%文档。
2.1 数据过滤
数据过滤的目的是提高训练数据的质量和训练数据的有效性。常见的数据过滤技术包括:
- 去除噪声:指消除可能影响模型良好泛化能力的无关或噪声数据。例如,可以考虑从训练数据中删除错误信息,以降低模型生成错误回应的可能性。质量过滤的两种主流方法包括:基于分类器的和基于启发式的框架。
- 处理离群值:识别并处理数据中的离群值或异常,以防止它们对模型产生不成比例的影响。
- 处理数据不平衡:平衡数据集中类别或类别的分布,避免偏见,确保公平代表性。这对于负责任的模型训练和评估特别有用。
- 文本预处理:通过去除停用词、标点符号或可能不会显著贡献于模型学习的其他元素,来清洁和标准化文本数据。
- 处理模糊性:解决或排除可能在训练过程中混淆模型的模糊或矛盾数据。这可以帮助模型提供更确定和可靠的答案。
2.2 数据去重
- 去重的意义:去重指的是移除数据集中的重复实例或重复出现的相同数据的过程。重复的数据点可能会在模型训练过程中引入偏见,并减少多样性,因为模型可能多次从相同的示例中学习,可能导致对那些特定实例的过拟合。
- 改善泛化能力