什么是 Transformer?
Transformer 是一种从根本上改变了人工智能方法的神经网络架构。Transformer 最初于 2017 年在开创性论文 《Attention is All You Need》 中被提出,此后已成为深度学习模型的首选架构,为 OpenAI 的 GPT、Meta 的 Llama 和 Google 的 Gemini 等文本生成模型提供动力。除了文本之外,Transformer 还应用于 音频生成、 图像识别、 蛋白质结构预测,甚至 游戏训练,展示了其在众多领域的通用性。
从根本上说,文本生成式 Transformer 模型运行在下一步标记预测 (next-token prediction)的原则上:给定用户的文本提示,紧随其后的最可能的下一个标记(单词或单词的一部分)是什么?Transformer 的核心创新和力量在于其使用的自注意力 (self-attention) 机制,这使得它们能够比以前的架构更有效地处理整个序列并捕捉长期依赖关系。
GPT-2 系列模型是文本生成式 Transformer 的显著代表。Transformer 解释器 (Transformer Explainer) 由拥有 1.24 亿参数的 GPT-2 (small) 模型提供支持。虽然它不是最新或最强大的 Transformer 模型,但它与当前的先进模型共享许多相同的架构组件和原理,使其成为理解基础知识的理想起点。
Transformer 架构
每个文本生成式 Transformer 由以下三个关键组件组成:
- 嵌入 (Embedding):文本输入被划分为称为标记的较小单元,这些标记可以是单词或子词。这些标记被转换为称为嵌入的数值向量,用于捕获单词的语义含义。
- Transformer 块 (Transformer Block) 是模型的基本构建块,用于处理和转换输入数据。每个块包括:
- 注意力机制 (Attention Mechanism),Transformer 块的核心组件。它允许标记与其他标记进行通信,捕获上下文信息和单词之间的关系。
- MLP(多层感知器)层,一个对每个标记独立操作的前馈网络。注意力层的目标是在标记之间路由信息,而 MLP 的目标是细化每个标记的表示。
- 输出概率 (Output Probabilities):最终的线性层和 softmax 层将处理后的嵌入转换为概率,使模型能够预测序列中的下一个标记。
嵌入 (Embedding)
假设你想使用 Transformer 模型生成文本。你添加这样的提示:"Data visualization empowers users to"。这个输入需要转换成模型能够理解和处理的格式。这就是嵌入的作用:它将文本转换为模型可以处理的数值表示。要将提示转换为嵌入,我们需要 1) 对输入进行分词,2) 获取标记嵌入,3) 添加位置信息,最后 4) 将标记和位置编码相加以获得最终的嵌入。让我们看看每个步骤是如何完成的。

步骤 1:分词 (Tokenization)
分词是将输入文本分解为称为标记 (tokens) 的更小、更易管理的部分的过程。这些标记可以是一个单词或子词。单词 "Data"
和 "visualization" 对应于唯一的标记,而单词
"empowers"
被分成两个标记。标记的完整词汇表在训练模型之前就已确定:
GPT-2 的词汇表有 50,257 个唯一标记。现在我们将输入文本分割成具有不同 ID 的标记,我们可以从嵌入中获得它们的向量表示。
步骤 2. 标记嵌入 (Token Embedding)
GPT-2 (small) 将词汇表中的每个标记表示为 768 维向量;向量的维度取决于模型。这些嵌入向量存储在形状为 (50,257, 768) 的矩阵中,包含约 3900 万个参数!这个庞大的矩阵使模型能够为每个标记分配语义含义,即在语言中使用或含义相似的标记在这个高维空间中被放置得更近,而不同的标记则相距更远。
步骤 3. 位置编码 (Positional Encoding)
嵌入层还编码有关每个标记在输入提示中位置的信息。不同的模型使用各种方法进行位置编码。GPT-2 从头开始训练自己的位置编码矩阵,将其直接整合到训练过程中。
步骤 4. 最终嵌入 (Final Embedding)
最后,我们将标记编码和位置编码相加,得到最终的嵌入表示。这个组合表示既捕获了标记的语义含义,也捕获了它们在输入序列中的位置。
Transformer 块 (Transformer Block)
Transformer 处理的核心在于 Transformer 块,它由多头自注意力和多层感知器层组成。大多数模型由多个这样的块组成,这些块按顺序堆叠在一起。标记表示通过层进化,从第一个块到最后一个块,使模型能够建立对每个标记的复杂理解。这种分层方法导致输入的高阶表示。我们正在研究的 GPT-2 (small) 模型由 12 个这样的块组成。
多头自注意力 (Multi-Head Self-Attention)
自注意力机制使模型能够捕获序列中标记之间的关系,使每个标记的表示受到其他标记的影响。多个注意力头允许模型从不同的角度考虑这些关系;例如,一个头可能捕获短程句法链接,而另一个头则跟踪更广泛的语义上下文。在下一节中,我们将逐步介绍如何计算多头自注意力。
步骤 1:查询、键和值矩阵 (Query, Key, and Value Matrices)
每个标记的嵌入向量被转换为三个向量: 查询 (Query, Q)、 键 (Key, K) 和 值 (Value, V)。这些向量是通过将输入嵌入矩阵与学习到的权重矩阵相乘得出的,分别对应 Q、 K 和 V。这里有一个网络搜索的类比来帮助我们建立对这些矩阵的直觉:
- 查询 (Query, Q) 是你在搜索引擎栏中输入的搜索文本。这是你想要"查找更多信息"的标记。
- 键 (Key, K) 是搜索结果窗口中每个网页的标题。它代表查询可以关注的可能标记。
- 值 (Value, V) 是显示的网页的实际内容。一旦我们将适当的搜索词(查询)与相关结果(键)匹配,我们就想获取最相关页面的内容(值)。
通过使用这些 QKV 值,模型可以计算注意力分数,这些分数决定在生成预测时每个标记应该受到多少关注。
步骤 2:多头分割 (Multi-Head Splitting)
查询、键和
值
向量被分割成多个头——在 GPT-2 (small) 的情况下,分成
12 个头。每个头独立处理嵌入的一个片段,捕获不同的句法和语义关系。这种设计促进了多样化语言特征的并行学习,增强了模型的表示能力。
步骤 3:掩码自注意力 (Masked Self-Attention)
在每个头中,我们执行掩码自注意力计算。这种机制允许模型通过关注输入的相关部分来生成序列,同时防止访问未来的标记。

- 点积 (Dot Product):查询 和 键 矩阵的点积决定了 注意力分数,产生一个反映所有输入标记之间关系的方阵。
- 缩放 · 掩码 (Scaling · Mask):注意力分数被缩放,并在注意力矩阵的上三角应用掩码,以防止模型访问未来的标记,将这些值设置为负无穷。模型需要学习如何在不"窥视"未来的情况下预测下一个标记。
- Softmax · Dropout:在掩码和缩放之后,注意力分数通过 softmax 操作转换为概率,然后可选地使用 dropout 进行正则化。矩阵的每一行总和为 1,并指示其左侧每个其他标记的相关性。
步骤 4:输出和拼接 (Output and Concatenation)
模型使用掩码自注意力分数并将它们与
值 矩阵相乘,得到自注意力机制的
最终输出。GPT-2 有 12 个自注意力头,每个头捕获标记之间的不同关系。这些头的输出被拼接并通过线性投影传递。
MLP:多层感知器 (Multi-Layer Perceptron)

在多个自注意力头捕获输入标记之间的多样关系之后,拼接的输出通过多层感知器 (MLP) 层传递,以增强模型的表示能力。MLP 块由两个线性变换组成,中间有一个 GELU 激活函数。
第一个线性变换将输入的维度从 768
扩展四倍到
3072。这个扩展步骤允许模型将标记表示投影到更高维的空间,在那里它可以捕获在原始维度中可能不可见的更丰富、更复杂的模式。
第二个线性变换然后将维度减少回原始大小 768。这个压缩步骤将表示带回到可管理的大小,同时保留在扩展步骤中引入的有用的非线性变换。
与跨标记集成信息的自注意力机制不同,MLP 独立处理标记,只是将每个标记表示从一个空间映射到另一个空间,从而丰富了整体模型容量。
输出概率 (Output Probabilities)
在输入通过所有 Transformer 块处理后,输出通过最终的线性层传递,以准备进行标记预测。这一层将最终表示投影到 50,257
维空间中,其中词汇表中的每个标记都有一个对应的值,称为
logit(对数几率)。任何标记都可能是下一个词,所以这个过程允许我们简单地根据它们成为下一个词的可能性对这些标记进行排名。然后我们应用 softmax 函数将对数几率转换为总和为 1 的概率分布。这将允许我们根据其可能性对下一个标记进行采样。

最后一步是通过从这个分布中采样来生成下一个标记。temperature(温度)超参数在这个过程中起着关键作用。从数学上讲,这是一个非常简单的操作:模型输出的对数几率简单地除以
temperature:
temperature = 1:将对数几率除以 1 对 softmax 输出没有影响。temperature < 1:较低的温度通过锐化概率分布使模型更加自信和确定性,导致更可预测的输出。temperature > 1:较高的温度创建更柔和的概率分布,允许生成的文本中有更多的随机性——有些人称之为模型的"创造力"。
此外,采样过程可以使用 top-k
和
top-p 参数进一步细化:
top-k 采样:将候选标记限制为概率最高的前 k 个标记,过滤掉不太可能的选项。top-p 采样:考虑累积概率超过阈值 p 的最小标记集,确保只有最可能的标记贡献,同时仍然允许多样性。
通过调整 temperature、top-k 和 top-p,你可以在确定性和多样化输出之间取得平衡,根据你的特定需求调整模型的行为。
辅助架构特性 (Auxiliary Architectural Features)
有几个辅助架构特性可以增强 Transformer 模型的性能。虽然它们对模型的整体性能很重要,但对于理解架构的核心概念来说并不那么重要。层归一化 (Layer Normalization)、Dropout 和残差连接 (Residual Connections) 是 Transformer 模型中的关键组件,特别是在训练阶段。层归一化稳定训练并帮助模型更快收敛。Dropout 通过随机停用神经元来防止过拟合。残差连接允许梯度直接流经网络,并有助于防止梯度消失问题。
层归一化 (Layer Normalization)
层归一化有助于稳定训练过程并改善收敛性。它通过在特征上归一化输入来工作,确保激活的均值和方差是一致的。这种归一化有助于缓解与内部协变量偏移相关的问题,使模型能够更有效地学习,并降低对初始权重的敏感性。层归一化在每个 Transformer 块中应用两次,一次在自注意力机制之前,一次在 MLP 层之前。
Dropout
Dropout 是一种正则化技术,通过在训练期间随机将模型权重的一部分设置为零来防止神经网络中的过拟合。这鼓励模型学习更健壮的特征,并减少对特定神经元的依赖,帮助网络更好地泛化到新的、未见过的数据。在模型推理期间,dropout 被停用。这本质上意味着我们正在使用训练过的子网络的集成,这导致更好的模型性能。
残差连接 (Residual Connections)
残差连接首次在 2015 年的 ResNet 模型中引入。这一架构创新通过使训练非常深的神经网络成为可能,彻底改变了深度学习。本质上,残差连接是绕过一个或多个层的快捷方式,将层的输入添加到其输出。这有助于缓解梯度消失问题,使训练具有多个 Transformer 块堆叠在一起的深度网络变得更容易。在 GPT-2 中,残差连接在每个 Transformer 块内使用两次:一次在 MLP 之前,一次在之后,确保梯度更容易流动,并且在反向传播期间早期层获得足够的更新。
交互式功能 (Interactive Features)
Transformer 解释器被设计为交互式的,允许你探索 Transformer 的内部工作原理。以下是你可以使用的一些交互式功能:
- 输入你自己的文本序列,查看模型如何处理它并预测下一个词。探索注意力权重、中间计算,并了解最终输出概率是如何计算的。
- 使用温度滑块来控制模型预测的随机性。探索如何通过更改温度值使模型输出更具确定性或更具创造性。
- 选择 top-k 和 top-p 采样方法,在推理过程中调整采样行为。尝试不同的值,查看概率分布如何变化并影响模型的预测。
- 与注意力图交互,查看模型如何聚焦于输入序列中的不同标记。将鼠标悬停在标记上以突出显示它们的注意力权重,并探索模型如何捕获上下文和词语之间的关系。