# 大模型大模型基础~02.大语言模型架构

##  概述

随着数据资源和计算能力的爆发式增长，语言模型的参数规模和性能表现实现了质的飞跃，迈入了**大语言模型**（Large Language Model, LLM）的新时代。

大语言模型不仅仅是**模型规模**的庞大，也涵盖了**训练数据规模**的庞大，以及由此衍生出的**模型能力**的强大。

### 平衡点

模型规模和数据规模的增长并非没有代价，它们带来了更高的**计算和存储需求**，这要求我们在模型设计时必须在资源消耗和性能提升之间找到一个恰当的**平衡点**。

于是有团队提出了大语言模型的**扩展法则**（Scaling Laws），揭示了模型的能力随模型和数据规模的变化关系，为大语言模型的设计和优化提供了宝贵的指导和参考。

#### Kaplan-McCandlish 扩展法则

这个法则由 OpenAI 团队提出，他们通过对不同的数据规模和模型规模进行实验，拟合出了模型性能与两者的关系：

$$
L(D) = {(\frac{D}{D_c})}^{\alpha_D}
$$

$$
\alpha_{D} \sim -0.095,\ D_{c} \sim 5.4 \times {10}^{13}
$$

$$
L(N)={(\frac{N}{N_{c}})}^{\alpha_{N}}
$$

$$
\alpha_{N} \sim -0.076,\ N_{c} \sim 8.8 \times {10}^{13}
$$

$L(D)$ 表示在模型规模固定时，不同数据规模下的交叉熵损失函数；$L(N)$ 表示在数据规模固定时，不同模型规模下的交叉熵损失函数。

损失函数越小说明模型越精确，性能越好。于是，模型的性能与模型规模和数据规模高度**正相关**。

OpenAI 在进一步研究**计算预算的最优分配**时发现，总计算量 $C$ 与数据量 $D$ 和模型规模 $N$ 的乘积近似成正比，即 $C \approx 6ND$。

结合上述内容进行优化，两者的**最优配置比例**应当为：$N_{o p t} \propto C^{0.73}, D_{o p t} \propto C^{0.27}$

>[!info]  信息
>这意味着，如果总计算预算增加了10 倍，模型规模应扩大约5.37 倍，而数据规模应扩大约1.86 倍，以实现模型的最佳性能。

#### Chinchilla 扩展法则

谷歌的 DeepMind 团队同样进行了研究，并据此提出了Chinchilla 扩展法则：

$$
L(N, D)=E+\frac{A}{N^\alpha}+\frac{B}{D^\beta}
$$

$$
E=1.69,\ A=406.4,\ B=410.7,\ \alpha=0.34,\ \beta=0.28
$$

于是两者的**最优配置比例**应当为：$N_{o p t} \propto C^{0.46}, D_{o p t} \propto C^{0.54}$

> [!info]  信息
> 这意味着，数据集量 $D$ 与模型规模 $N$ 几乎同等重要，如果总计算预算增加了10 倍，那么模型规模以及数据规模都应当扩大约3.16 倍。
> 
> 此外，Chinchilla 扩展法则进一步提出，理想的数据集大小应当是模型规模的 20 倍。例如，对于一个 7B（70 亿参数）的模型，最理想的训练数据集大小应为 140B（1400 亿）个Token。

### 涌现

随着模型训练数据规模以及参数数量的不断提升，大模型“解锁”了例如**上下文学习能力、常识推理能力、数学运算能力、代码生成能力**等新的能力，这些能力并非通过在特定下游任务上通过训练获得，而是随着模型复杂度的提升凭空自然**涌现**的。

![](https://img.papergate.top:5000/i/2025/08/68a7ef493c0c7.webp)

- 「**上下文学习**」：大语言模型在推理过程中，能够利用输入文本的上下文信息来执行特定任务的能力。
- 「**代码生成**」：大语言模型基于自然语言描述自动生成编程代码。
- 「**逻辑推理**」：大语言模型能够基于给定信息和规则进行合乎逻辑的推断和结论。

## 架构

绝大多数大语言模型均以 Transformer 框架为核心，并进一步演化出了三种经典架构，分别是Encoder-only 架构，Decoder-only 架构以及 Encoder-Decoder 架构。

### Encoder-only 架构

Encoder-only 架构仅选取了Transformer 中的编码器（Encoder）部分，用于接收输入文本并生成与上下文相关的特征。

具体来说，Encoder-only 架构包含三个部分，分别是**输入编码**部分，**特征编码**部分以及**任务处理**部分。

![](https://img.papergate.top:5000/i/2025/08/68a7f056d90ae.webp)

- 「**输入编码**」：包含分词、向量化以及添加位置编码三个过程。原始输入文本会被**分词器（Tokenizer）** 拆解为 **Token 序列**，随后通过**词表和词嵌入（Embedding）** 矩阵映射为**向量序列**。接着为了保留文本中单词的**顺序信息**，每个向量序列会被赋予**位置编码（Positional Encoding）** 。
- 「**特征编码**」：由多个相同的编码模块（Encoder Block）堆叠而成，其中每个编码模块包含自注意力模块（Self-Attention）和全连接前馈模块。这些模块通过自注意力机制和前馈网络**进一步提取和深化文本特征**。
- 「**任务处理**」：针对任务需求专门设计的模块，其可以由用户针对任务需求自行设计。

### Encoder-Decoder 架构

为了弥补 Encoder-only 架构在文本生成任务上的短板，Encoder-Decoder 架构在其基础上引入了一个解码器（Decoder），并采用**交叉注意力机制**来实现编码器与解码器之间的有效交互。

![](https://img.papergate.top:5000/i/2025/08/68a7f1d88c9b6.webp)

解码器包含了输出编码、特征解码以及输出生成三个部分：

- 「**输出编码**」：与编码器中的输入编码结构相同，包含分词、向量化以及添加位置编码三个过程，将原始输入文本转换化为带有位置信息的向量序列。
- 「**特征解码」**：与编码器中的特征编码部分在网络结构上高度相似，包括掩码自注意力（Masked Self-Attention）模块，交叉注意力模块和全连接前馈模块。

![](https://img.papergate.top:5000/i/2025/08/68a8118e90ced.webp)

- 「**输出生成**」：由一个线性层以及一个Softmax 层组成，负责将特征解码后的向量转换为词表上的概率分布，并从这个分布中采样得到最合适的 Token 作为输出。

>[!warning]  警告
>输出编码中的输出文本和分词器只在**训练阶段**存在，红色虚线表示“自回归”只在**推理阶段**存在。

具体工作流程如下：

在训练阶段，样本中同时包含了输入和真实（Ground Truth）输出文本。
- 输入文本首先被输入编码部分转化为**向量序列**，接着在特征编码模块中被多个堆叠起来的编码模块进一步处理，从而被转化为**上下文表示**。
- 输出文本之前会被添加特殊的开始标记`[START]`，然后在输出编码部分被分词、词嵌入和位置编码处理后，并行输入到特征解码模块中。
- 解码模块使用 Teacher Forcing 技术，在每轮预测时，使用真实输出文本中的已知部分作为输入，并结合从最后一个编码块得到的**上下文信息**，来预测**下一个 Token**，计算预测的Token 和真实 Token 之间的损失，通过反向传播更新模型参数。

> [!info]  信息
> 最后一个编码器的特征编码块包含了全部的上下文信息

在推理阶段，缺少真实的输出文本.
- 输出序列原始状态只有开始标记`[START]`，也**不再需要分词器**。
- 模型通过自回归的方式，在每轮采样生成 Token 后，会将其**拼接到输出序列中**，用于下一轮预测。
- 这个过程循环进行，直到生成特定的结束标记`[end] `或达到模型设定的最大输出长度。
- 在这一过程中，由于每轮的输入依赖于上一轮的采样结果，因此只能一步步地**串行输出**。

### Decoder-only 架构

为了**有效缩减模型的规模**以及**降低整体的计算复杂度**，Decoder-only 架构摒弃了 Encoder-Decoder 架构中的编码器部分以及与编码器交互的交叉注意力模块。在这种架构下，模型仅使用解码器来构建语言模型。

Decoder-only 架构同样包含了三个部分，分别是输入编码部分、特征解码部分以及输出生成部分。

![](https://img.papergate.top:5000/i/2025/08/68a7f57c9a78d.webp)

### 功能对比

#### 注意力矩阵

![](https://img.papergate.top:5000/i/2025/08/68a7f5dc6aefa.webp)

##### Encoder-only 架构

注意力矩阵来自于**自注意力模块**，用于捕捉输入序列中各个Token 之间的关系。Encoder-only 架构的注意力矩阵呈现出“**完全**”的注意力，即对于每个 Token 的理解都依赖于整个输入序列中的**所有 Token**。

>[!example]  示例
>在将输入Token $x_i$ 转换为上下文向量 $y_i$ 的过程中，模型能够综合利用从$x_1 \sim x_n$ 的所有输入信息，这就是所谓的**双向注意力机制**。在这种双向注意力机制的作用下，模型能够同时利用**前后文信息**，深入理解**复杂的语义联系**和**上下文依赖**。

##### Encoder-Decoder 架构

注意力矩阵较为复杂，它结合了编码器的**自注意力**、解码器的**掩码自注意力**以及**交叉注意力**三种机制。

- 编码器的自注意力矩阵与Encoder-only 架构类似，用于生成输入序列的全面上下文表示，呈现“完全”的注意力。
- 解码器的掩码自注意力矩阵则呈现出“下三角”的注意力，防止未来信息的“泄露”，确保解码过程的自回归特性。
- 交叉注意力机制允许解码器始终能够动态地参考编码器生成的完整上下文表示，确保输出与输入序列高度相关且连贯。

> [!example]  示例
> 编码器将输入 $x_i$ 转化为上下文向量时，可以利用从 $x_1 \sim x_n$ 的
所有输入信息（**自注意力**）。
>  
> 解码器在生成 Token $y_i$ 的时候，可以参考由 $x_1 \sim x_n$ 转化得到的
上下文向量（**交叉注意力**）以及先前生成的Token 序列 $y_1 \sim y_{i-1}$ 的相关信息（**掩码自注意力**）。

##### Decoder-only 架构

注意力矩阵来自于掩码自注意力模块，其特点是呈现出“下三角”的注意力模式。这意味着在预测当前 Token 时，模型只能依赖于已经生成的历史 Token 信息，体现了**单向注意力机制**。

> [!example]  示例
> 在生成Token $y_i$ 的时候，模型只能考虑先前 $y_1 \sim y_{i-1}$ 的信息，这样的设计确保了生成过程的顺序性和文本的连贯性。

#### 适用任务

##### Encoder-only 架构

双向注意力机制允许模型在预测每个Token 时都充分考虑序列中的前后文信息，捕捉丰富的语义和依赖关系。模型特别适合于**自然语言理解**（Natural Language Understanding, NLU）任务，如情感分析或文本分类等判别任务。

由于缺少解码器组件，模型无法直接生成所需目标序列，因此在**自然语言生成任务**（Natural LanguageGeneration, NLG）上可能表现不如专门设计的生成模型。

##### Encoder-Decode 架构

编码器和解码器的结合，使得模型可以有效地处理复杂的输入条件，并生成相关且连贯的高质量内容。模型非常适合于处理各种**复杂的有条件生成任务**，例如机器翻译、文本摘要和问答系统等需要同时理解输入并生成相应输出的场景。

新添加解码器也同样带来了模型规模以及计算量庞大的问题。

##### Decoder-only 架构

大规模预训练数据的加持使得 Decoder-only 架构的模型能够生成**高质量、连贯的文本**，在自动故事生成、新闻文章生成此类不依赖于特定的输入文本的无条件文本生成任务中表现出色。

然而，在模型规模有限的情况下（例如GPT-1 以及GPT-2 等模型），由于缺乏编码器提供的双向上下文信息，Decoder-only 架构的模型在理解复杂输入数据时存在一定局限性，表现可能不如Encoder-Decoder 架构。

## Encoder-only 模型

### BERT 语言模型

BERT（Bidirectional Encoder Representations from Transformers）是一种基于 Encoder-only 架构的预训练语言模型，由Google AI 团队于2018 年10 月提出。作为早期Encoder-only 架构的代表，BERT 在自然语言处理领域带来了突破性的改进。

其核心创新在于通过双向编码模型深入挖掘文本的上下文信息，从而为各种下游任务提供优秀的上下文嵌入。

#### 模型结构

BERT 模型的结构与 Transformer 中的编码器几乎一致，都是由多个编码模块堆叠而成，每个编码模块包含一个多头自注意力模块和一个全连接前馈模块。

根据参数量的不同，BERT 模型共有 BERT-Base 和 BERT-Large 两个版本。

- BERT-Base 由 12 个编码模块堆叠而成，隐藏层维度为 768，自注意力头的数量为 12，总参数数量为 1.1 亿；
- BERT-Large 由 24 个编码模块堆叠而成，隐藏层维度为 1024，自注意力头的数量为 16，总参数数量约为 3.4 亿。

#### 预训练方式

##### 数据集

BERT 使用小说数据集 BookCorpus（包含约8 亿个Token）和英语维基百科数据集（包含约25 亿个Token）进行预训练，总计约33 亿个Token，总数据量达到了15GB 左右。

##### 预训练任务

在预训练任务上，BERT 开创性地提出了**掩码语言建模**（Masked Language Model, MLM）和**下文预测**（Next Sentence Prediction, NSP）两种任务来学习生成上下文嵌入。

![](https://img.papergate.top:5000/i/2025/08/68a7fdd817d5c.webp)

具体步骤如下：

- 基于给定的原始文本**构造多个样本序列**，每个样本序列由原始文本中的两个句子组成，这两个句子有 50% 的概率是来自原文的连续句子，另外 50% 的概率是随机挑选的两个句子。
- 对构造出来的样本序列进行分词，并在序列的开头添加特殊标签 `[CLS]`，在每个句子的结尾添加特殊标签 `[SEP]`。其中 `[CLS]` 标签用于聚合整个序列的信息，而 `[SEP]` 标签则明确句子之间的界限。
- 利用处理后的序列进行下文预测任务，利用模型判断样本序列中的两个句子**是否为连续的**。
- 随机选择样本序列中大约15% 的 Token 进行遮掩，将其替换为特殊标签 `[MASK]` 或者随机单词。模型需要**预测这些被替换的Token 的原始内容**。

通过这两种预训练任务的结合，使 BERT 在理解语言的深度和广度上都有显著提升。BERT 不仅能够捕捉到 Token 的细粒度特征（掩码语言建模），还能够把握长距离的依赖关系和句子间的复杂联系（下文预测），为各种下游任务提供了坚实的语言理解基础。

#### 下游任务

由于 BERT 的输出是输入中所有Token 的向量表示，因此总长度不固定，无法直接应用于各类下游任务。为了解决这一问题，BERT 设计了 `[CLS]` 标签（Classification Token）来提取整个输入序列的聚合表示。

`[CLS] `标签**汇总整个输入序列的信息**，生成一个固定长度的向量表示，从而实现对所有Token 序列信息的概括，便于处理各种下游任务。

- 在文本分类任务中，可以将输出中 `[CLS]` 标签对应的向量提取出来，传递给一个全连接层，从而用于分类，例如判断整个句子的情绪是积极、消极或是中立的。
- 在问答系统任务中，需要输入问题以及一段相关的文本，即“`[CLS]` 问题`[SEP]` 文本`[SEP]`”。最终同样提取出 `[CLS]` 标签的对应向量，并传递给两个全连接层，用于判断答案是否存在于相关文本中。如果存在，这两个全连接层分别用于输出答案的起始和结束位置。
- 在语义相似度任务中，需要计算两段或者多段文本之间的语义相似度。在这一任务中，可以通过构造“`[CLS]` 文本1`[SEP]` 文本2 `[SEP]`”的方式，结合一个线性层来直接输出两个文本之间的相似度；也可以不添加额外的组件，直接提取 `[CLS]` 标签对应的向量，再利用额外的相似度度量方法（例如余弦相似度）来计算多段文本之间的相似度。

### RoBERTa 语言模型

RoBERTa（Robustly Optimized BERT Pretraining Approach）由Facebook AI（现更名Meta）研究院于2019 年7 月提出，旨在解决BERT 在**训练不充分**这一问题，以提升预训练语言模型的性能。

RoBERTa 在 BERT 的基础上采用了**更大的数据集**（包括更多的英文书籍、维基百科和其他网页数据）、**更长的训练时间**（包括更大的批次大小和更多的训练步数）以及**更细致的超参数调整**（包括学习率、训练步数等的设置）来优化预训练的过程，从而提高模型在各种自然语言处理任务上的性能和鲁棒性。

#### 预训练方式

##### 数据集

RoBERTa 在BERT 原有的小说数据集 BookCorpus（包含约 8 亿个Token）以及英语维基百科数据集（包含约 25 亿个Token）的基础上，添加了**新闻数据集** CC-News （包含约 76 GB 的新闻文章）、**网页开放数据集** OpenWebText（包含约38GB 的网页文本内容）以及**故事数据集** Stories（包含约31GB 的故事文本），总数据量达到约 160 GB。

##### 预训练任务

RoBERTa 移除了BERT 中的下文预测任务，并将BERT 原生的**静态掩码语言建模**任务更改为**动态掩码语言建模**。

- BERT 在数据预处理期间对句子进行掩码，随后在每个训练 epoch 中，掩码位置不再变化。
- RoBERTa 则将训练数据复制成10 个副本，分别进行掩码。

>[!example]  示例
>训练 40 个 epoch：
> 
> - BERT 在其**静态掩码**后的文本上训练了40 次
> 
> - RoBERTa 将 10 个不同掩码后的副本**分别训练**了4 次，从而增加模型训练的多样性，有助于模型学习到更丰富的上下文信息。

### ALBERT 语言模型

ALBERT（A Lite BERT）是由 Google Research 团队于2019 年9 月提出的**轻量级 BERT 模型**，通过**参数因子分解**技术和**跨层参数共享**技术显著减少了参数的数量，从而提高训练和推理效率。

#### 模型结构

##### 参数因子分解

在BERT 中，Embedding 层的输出向量维度 $E$ 与隐藏层的向量维 $H$ 是一致的，这意味着Embedding 层的输出直接用作后续编码模块的输入。ALBERT 将 Embedding 层的矩阵先进行分解，将词表对应的独热编码向量通过一个低维的投影层下投影至维度 $E$，再将其上投影回隐藏状态的维度 $H$。

>[!example]  示例
>BERT-Base 模型对应的词表大小$V$ 为 30000 左右，并且其隐藏层的向量维度 $H$ 设置为 768。因此，BERT 的 Embedding 层需要的参数数量是 $V \times H$ ，大约为 2304 万。
> 
> ALBERT 选择了一个较小的 Embedding 层维度，例如 128，并将参数数量拆解为 $V \times E + E \times H$ 。按照这个设计，ALBERT 的 Embedding 层大约需要 394 万个参数，大约是 BERT 参数数量的六分之一。

##### 跨层参数共享

以经典的 BERT-Base 模型为例，模型中共有12 层相同架构的编码模块，所有 Transformer 块的参数都是独立训练的。

ALBERT 为了降低模型的参数量，提出了跨层参数共享机制，只学习第一层编码模块的参数，并将其直接共享给其他所有层。该机制在一定程度上牺牲了模型性能，但显著提升了参数存储空间的压缩比，从而实现了更高效的资源利用。

#### 预训练方式

##### 预训练任务

在预训练任务的选择上，ALBERT 保留了BERT 中的**掩码语言建模**任务，并将**下文预测**任务替换为**句序预测**（Sentence Order Prediction, SOP）。

ALBERT 从文本中选择连续的两个句子，将这两个句子直接拼接起来，或是先将这两个句子的顺序翻转后再进行拼接，并将拼接后的内容作为输入样本，而模型需要预测该样本中的两个句子是**正序还是反序**。

![](https://img.papergate.top:5000/i/2025/08/68a80b59c488a.webp)
### ELECTRA 语言模型

ELECTRA（Efficiently Learning an Encoder that Classifies Token Replacements Accurately）是由Google Brain 和斯坦福大学的研究人员于2020 年3 月提出的另一种 BERT 变体，旨在解决大规模预训练语言模型中的**效率和可扩展性问题**。通过使用**生成器-判别器架构**，ELECTRA 能够更高效地利用预训练数据，提高了模型在下游任务中的表现。

#### 预训练方式

结合了生成对抗网络（Generative Adversarial Network, GAN）的思想，模型包含一个生成器和一个判别器：

- 生成器（Generator）是一个能进行掩码预测的模型（例如 BERT 模型），负责将掩码后的文本恢复原状。
- 判别器（Discriminator）执行替换词检测（Replaced Token Detection, RTD）任务，负责检测生成器输出的内容中的每个Token 是否是原文中的内容。

![](https://img.papergate.top:5000/i/2025/08/68a80cf776042.webp)

>[!info]  信息
>在BERT 中，只有 15% 的固定比例 Token 被掩码，模型训练的内容仅限于这15% 的Token。但是在 ELECTRA 中，判别器会判断生成器输出的所有 Token 是否被替换过，因此能够更好地学习文本的上下文嵌入。

## Encoder-Decoder 模型

### T5 语言模型

Google Research 团队在2019 年10 月提出了一种基于 Encoder-Decoder 架构的大型预训练语言模型T5（Text-to-Text Transfer Transformer），其采用了统一的文本到文本的转换范式来处理多种任务。

#### 模型结构

T5 模型的核心思想是将多种 NLP 任务统一到一个文本转文本的生成式框架中。

T5 通过不同的**输入前缀**来指示模型执行不同任务，然后生成相应的任务输出。可以视为早期的**提示（Prompt）** 技术的运用，通过构造合理的输入前缀，T5 模型能够引导自身针对特定任务进行优化，而无需对模型架构进行根本性的改变。

![](https://img.papergate.top:5000/i/2025/08/68a813fa91374.webp)

#### 预训练方式

T5 提出了名为 Span Corruption 的预训练任务： 从原始输入中选择 15% 的 Token 进行破坏，每次都选择**连续三个 Token**  作为**一个小段（span）** 整体被掩码成 `[MASK]`。

与 BERT 模型中采用的单个 Token 预测不同，T5 模型需要对整个被遮挡的连续文本片段进行预测。这些片段可能包括连续的短语或子句，它们在自然语言中构成了具有完整意义的语义单元。这一设计要求模型不仅等理解**局部词汇**的表面形式，还要可以捕捉更深层次的**句子结构**和**上下文之间的复杂依赖关系**。

#### 下游任务

T5 模型可以在**零样本（Zero-Shot）** 的情况下，利用 Prompt 工程技术直接适配到多种下游任务。

同时，T5 模型也可以通过**微调（Fine-Tuning）** 来适配到特定的任务。但是，微调过程需要针对下游任务收集带标签训练数据，同时也需要更多的计算资源和训练时间，因此通常只被应用于那些对精度要求极高且任务本身较为复杂的应用场景。

### BART 语言模型

BART（Bidirectional and Auto-Regressive Transformers）是由 Meta AI 研究院同样于 2019 年10 月提出的一个 Encoder-Decoder 架构模型。不同于 T5 将多种 NLP 任务集成到一个统一的框架，BART 旨在通过**多样化的预训练任务**来提升模型在**文本生成任务**和**文本理解任务**上的表现。

#### 预训练方式

BART 以重建被破坏的文本为目标，通过多种任务来破坏文本，然后训练模型对原始文本进行恢复：

- **Token 遮挡任务**（Token Masking）：类似于 BERT 中的 MLM 任务，在原始文本中随机采样一部分Token 并将其替换为 `[MASK]`，从而训练模型推断**被删除的 Token 内容**的能力。
- **Token 删除任务**（Token Deletion） ：在原始文本中随机删除一部分Token，从而训练模型推断**被删除的Token 位置以及内容**的能力。
- **连续文本填空任务**（Text Infilling）：类似于 T5 的预训练任务，在原始文本中选择几段连续的 Token（每段作为一个 span），整体替换为 `[MASK]`。其中 span 的长度服从$\lambda = 3$ 的泊松分布，如果长度为 0 则直接插入一个 `[MASK]`。这一任务旨在训练模型推断**一段 span 及其长度**的能力。
- **句子打乱任务**（Sentence Permutation）：将给定文本拆分为多个句子，并随机打乱句子的顺序。旨在训练模型推理**前后句关系**的能力。
- **文档旋转任务**（Document Rotation）：从给定文本中随机选取一个Token，作为文本新的开头进行旋转。旨在训练模型找到文本**合理起始点**的能力。

![](https://img.papergate.top:5000/i/2025/08/68a81703ac2e9.webp)

## Decoder-only 模型

### GPT 系列语言模型

#### GPT-1、GPT-2、GPT-3

##### 模型结构

GPT-1 在结构上与 BERT-Base 高度类似，两者都包含 12 个编码或解码模块，每个模块也同样由一个自注意力模块和一个全连接前馈模块组成。

两者的本质区别在于 BERT-Base 中的自注意力模块是双向的自注意力机制，而 GPT-1 中的自注意力模块则是带有掩码的单向自注意力机制。

![](https://img.papergate.top:5000/i/2025/08/68a81a32bf8f1.webp)

GPT-2 和 GPT-3 使用了更大规模的模型，如下：

![](https://img.papergate.top:5000/i/2025/08/68a81e44df200.webp)
##### 预训练方法 

###### 数据集

GPT-1 使用小说数据集 BookCorpus 来进行预训练，该数据集包含约8 亿个Token，总数据量接近5GB。

GPT-2 采用了全新的 WebText 数据集，该数据集由 40GB 经过精心筛选和清洗的网文本组成。

GPT-3 使用了更大规模和更多样化的互联网文本数据集，数据量接近1TB，涵盖了Common Craw、WebText、BookCorpus、Wikipedia等多个来源，包括书籍、网站、论坛帖子等各类文本形式。

###### 预训练任务

采用下一词预测任务，即基于给定的上文预测下一个可能出现的Token。

![](https://img.papergate.top:5000/i/2025/08/68a81b5ec694b.webp)

#### InstructGPT

InstructGPT 是 ChatGPT 的前身。它通过引入了**人类反馈强化学习**（Reinforcement Learning from Human Feedback, RLHF），显著提升了模型对**用户指令**的响应能力。

人类评估者首先提供关于模型输出质量的反馈，然后使用这些**反馈**来**微调模型**。

- **有监督微调**：收集大量“问题-人类回答”对作为训练样本，对大语言模型进行微调。
- **训练奖励模型**：针对每个输入，让模型生成多个候选输出，并由人工对其进行质量评估和排名，构成偏好数据集。用此偏好数据集训练一个**奖励模型**，使其可以对输出是否符合人类偏好进行打分。
- **强化学习微调**：基于上一步中得到的**奖励模型**，使用**强化学习**方法优化第一步中的**语言模型**。即在语言模型生成输出后，奖励模型对其进行评分，强化学习算法根据这些评分调整模型参数，以提升高质量输出的概率。

![](https://img.papergate.top:5000/i/2025/08/68a8220783fac.webp)

#### ChatGPT、GPT-4

OpenAI 于2022 年11 月推出了聊天机器人（ChatGPT, Chat Generative Pretraine Transformer）。ChatGPT“一鸣惊人”，以强大的对话能力展示出令人惊讶的智能，一度燃起了ChatGPT 是否可以通过“图灵测试”的讨论。

GPT-4 在理解复杂语境、捕捉语言细微差别、生成连贯文本等任务上进一步提升，并且能够更有效地处理数学问题、编程挑战等高级认知任务。此外，GPT-4 还引入了对图文双模态的支持，扩展了其在图像描述和视觉问题解答等应用领域的可能性。

GPT-4o 模型在前代GPT-4 的基础上，大幅提升了响应速度，显著降低了延迟，并且还增强了多模态处理能力以及多语言支持能力。

### LLAMA 系列语言模型

LLaMA（Large Language Model Meta AI）是由Meta AI 开发的一系列大语言模型，其模型权重在非商业许可证下向学术界开。

LLaMA 与GPT 系列的主要区别在于：GPT 系列的升级主线聚焦于模型规模与预训练语料的同步提升，而LLaMA 则在模型规模上保持相对稳定，更专注于提升预训练数据的规模。

![](https://img.papergate.top:5000/i/2025/08/68a8259109777.webp)

#### LLaMA1 模型

在模型架构方面，LLaMA1 采用了与GPT 系列同样的网络架构。但是，其在 Transformer 原始词嵌入模块、注意力模块和全连接前馈模块上进行了优化。

![](https://img.papergate.top:5000/i/2025/08/68a826dd55f00.webp)

- 在词嵌入模块上，为了提高词嵌入质量，LLaMA1 参考了GPTNeo 的做法，使用旋转位置编码（Rotary Positional Embeddings, RoPE）替代了原有的绝对位置编码，从而增强位置编码的表达能力，增强了模型对序列顺序的理解。
- 在注意力模块上，LLaMA1 参考了 PaLM 的做法，将 Transformer 中的 RELU 激活函数改为 SwiGLU 激活函数。并且，LLaMA1 在进行自注意力操作之前对查询（query）以及键（key）添加旋转位置编码。
- 在全连接前馈模块上，LLaMA1 借鉴了 GPT-3 中的 Pre-Norm 层正则化策略，将正则化应用于自注意力和前馈网络的输入。

#### LLaMA2 模型

LLaMA2 采纳了**人类反馈强化学习**的方法，进一步提升了模型的性能。

-  首先，其使用了大规模且公开的指令微调数据集对模型进行有监督的微调。
- 然后，LLaMA2 还训练了RLHF 奖励模型，并基于近似策略优化（Proximal Policy Optimization, PPO）以及拒绝采样（Rejection Sampling）进行强化学习对模型进行更新。

#### LLaMA3 模型

在模型架构上，LLaMA3 与前一代 LLaMA2 几乎完全相同，只是在分词（tokenizer）
阶段，将字典长度扩大了三倍，极大提升了推理效率。

- 这一改进减少了中文字符等语言元素被拆分为多个 Token 的情况，有效降低了总体Token 数量，从而提高了模型处理语言的连贯性和准确性。
- 另一方面，扩大的字典有助于减少对具有完整意义的语义单元进行分割，使模型在处理文本时可以更准确的捕捉词义和上下文，提高生成文本的流畅性和连贯性。

##  非Transformer 模型

Transformer 并非完美，其并行输入的机制会导致模型规模随输入序列长度平方增长，导致其在处理**长序列**时面临计算瓶颈。

RNN 在生成输出时，只考虑之前的隐藏状态和当前输入，理论上可以处理**无限长**的序列。传统的RNN 模型（如GRU、LSTM 等）在处理长序列时可能难以捕捉到长期依赖关系，且面临着**梯度消失**或**爆炸**问题。

为了克服这些问题，近年来，研究者提出了两类现代 RNN 变体，分别为状态空间模型（State
Space Model，SSM）和测试时训练（Test-Time Training，TTT）。

### 状态空间模型SSM

思想源自于控制理论中的动力系统：

![](https://img.papergate.top:5000/i/2025/08/68a82941669a5.webp)

其中，$u(t)$表示状态输入，$x(t)$表示状态变量，$y(t)$表示输出，$A$是状态矩阵，$B$是控制矩阵，$C$是输出矩阵，$D$是命令矩阵，有如下的系统方程：

$$
\begin{aligned}
x^{\prime}(t) & =\mathbf{A} x(t)+\mathbf{B} u(t) \\
y(t) & =\mathbf{C} x(t)+\mathbf{D} u(t)
\end{aligned}
$$

这个系统方程有三种形式：

- 连续形式：就是上面这种包含导数的形式，求解需要用到积分。适用于对连续数据（例如音频信号、时间序列）的处理，计算的结果准确，但是在训练和推理都非常慢。
- 递归形式：使用梯形法代替连续形式中的积分操作，可以得出离散化后递归形式下的系统方程，递归形式的SSM 类似于RNN，能够实现与序列长度呈线性复杂度的**高效推理**，但是无法并行训练，**有梯度消失或爆炸问题**。

$$
\begin{aligned}
x_k & =\overline{\mathbf{A}} x_{k-1}+\overline{\mathbf{B}} u_k \\
y_k & =\overline{\mathbf{C}} x_k
\end{aligned}
$$

- 卷积形式：将系统方程的递归形式进行迭代，可以得到卷积形式。卷积核是由SSM 中的矩阵参数决定的，由于这些参数在整个序列的处理过程中是固定的，被称为时不变性。时不变性使得SSM 能够一致地处理不同时间步长的数据，进行**高效的并行化训练**。但由于上下文长度固定，卷积形式的 SSM 在进行自回归任务时**延迟长且计算消耗大**。

$$
y_k=\overline{\mathbf{K}}_k * u_k
$$

结合离散化后 SSM 的递归形式和卷积形式的优缺点，可以选择在**训练时使用卷积形式**，**推理时使用递归形式**。

SSM 通过将上下文信息压缩到固定长度的隐藏状态中，成功将计算复杂度降低至线性级别，有效扩展了模型处理长上下文的能力。然而，随着上下文长度的持续增长，基于SSM 范式的模型可能会过早出现性能饱和。

### 训练时更新TTT

TTT 利用模型本身的参数来存储隐藏状态、记忆上文，在每一步推理中，对模型参数进行梯度更新，已实现上文的不断循环流入。

![](https://img.papergate.top:5000/i/2025/08/68a82ef2498b1.webp)

在预训练阶段，训练过程包含内部循环以及外部循环两个部分。

- 外部循环遵循传统的下词预测任务，通过自回归方式优化模型全局权重参数。
- 内部循环则是基于自监督的方式来优化隐藏状态。具体来说，模型需要在每个时间步动态地更新隐藏状态，使其能够不断适应新的输入数据。





---

> 作者: Aphros  
> URL: https://blog.papergate.top/posts/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%9F%BA%E7%A1%80~02.%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E6%9E%B6%E6%9E%84/  

