Transformer模型图解

Hacker News Top 工具

摘要

一个交互工具,视觉化解释Transformer模型的架构,使用GPT-2来说明关键组件,如嵌入、注意力机制和输出预测。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/09/21 21:44

# Transformer 解析器:LLM Transformer 模型可视化详解 来源:https://poloclub.github.io/transformer-explainer/ ## 什么是 Transformer? Transformer 是一种神经网络架构,从根本上改变了人工智能的研究路径。Transformer 首次出现在 2017 年的开创性论文《Attention is All You Need》(https://dl.acm.org/doi/10.5555/3295222.3295349)中,此后已成为深度学习模型的首选架构,为 OpenAI 的 **GPT**、Meta 的 **Llama** 和 Google 的 **Gemini** 等文本生成模型提供支持。除文本生成外,Transformer 还应用于音频生成(https://huggingface.co/learn/audio-course/en/chapter3/introduction)、图像识别(https://huggingface.co/learn/computer-vision-course/unit3/vision-transformers/vision-transformers-for-image-classification)、蛋白质结构预测(https://elifesciences.org/articles/82819),甚至游戏对战(https://www.deeplearning.ai/the-batch/reinforcement-learning-plus-transformers-equals-efficiency/),展现了其在多领域的强大适应性。 从根本上说,文本生成 Transformer 模型遵循**下一个词元预测**原则:给定用户输入的文本提示,模型预测*最可能的下一个词元(单词或单词片段)*。Transformer 的核心创新与强大之处在于其使用的自注意力机制,使其能处理完整序列并更有效地捕捉长程依赖关系,优于先前的架构。 GPT-2 系列模型是文本生成 Transformer 的典型代表。Transformer 解析器基于 GPT-2(https://huggingface.co/openai-community/gpt2)(小型)模型构建,该模型拥有 1.24 亿参数。虽然它并非最新或最强大的 Transformer 模型,但其架构组件和原理与当今最先进的模型共享诸多共同点,是理解基础知识的理想入门选择。 ## Transformer 架构 每个文本生成 Transformer 都由以下**三个核心组件**构成: 1. **嵌入**:文本输入被分解为称为词元(token)的更小单元,这些词元可以是单词或子词。这些词元被转换为称为嵌入的数值向量,用于捕捉单词的语义含义。 2. **Transformer 块**是模型处理和转换输入数据的基本构建模块。每个块包括: * **注意力机制**,Transformer 块的核心组件。它允许词元相互通信,捕捉上下文信息及单词之间的关系。 * **MLP(多层感知机)层**,一个前馈网络,独立处理每个词元。注意力层的目标是路由词元间的信息,而 MLP 的目标则是精炼每个词元的表示。 3. **输出概率**:最终的线性层和 softmax 层将处理后的嵌入转换为概率,使模型能够预测序列中的下一个词元。 ## 嵌入 假设你想使用 Transformer 模型生成文本。你输入了这样的提示:“Data visualization empowers users to”。此输入需要转换为模型能理解并处理的格式。这就是嵌入的作用:它将文本转换为模型可用的数值表示。要将提示转换为嵌入,我们需要 1) 分词,2) 获取词元嵌入,3) 添加位置信息,最后 4) 将词元编码和位置编码相加得到最终的嵌入。我们来看看每一步是如何完成的。 图 1. 展开嵌入层视图,展示输入提示如何转换为向量表示。该过程涉及(1)分词,(2)词元嵌入,(3)位置编码,和(4)最终嵌入。 ### 第 1 步:分词 分词是将输入文本分解为更小、更易处理的单元(称为词元)的过程。这些词元可以是单词或子词。单词“Data”和“visualization”对应唯一的词元,而单词“empowers”则被拆分为两个词元。完整的词元词汇表在训练模型前确定:GPT-2 的词汇表包含 50,257 个唯一词元。现在我们已经将输入文本拆分为具有唯一 ID 的词元,接下来可以从嵌入中获取它们的向量表示。 ### 第 2 步:词元嵌入 GPT-2(小型)将词汇表中的每个词元表示为一个 768 维向量;向量的维度取决于模型。这些嵌入向量存储在一个形状为 (50,257, 768) 的矩阵中,包含约 3900 万个参数!这个庞大的矩阵使模型能够为每个词元赋予语义含义,即在语言中用法或含义相似的词元在这个高维空间中位置相近,而不相似的词元则相距较远。 ### 第 3 步:位置编码 嵌入层还会编码输入提示中每个词元的位置信息。不同的模型使用不同的位置编码方法。GPT-2 从头开始训练自己的位置编码矩阵,并将其直接整合到训练过程中。 ### 第 4 步:最终嵌入 最后,我们将词元编码和位置编码相加,得到最终的嵌入表示。这种组合表示同时捕捉了词元的语义含义及其在输入序列中的位置。 ## Transformer 块 Transformer 处理的核心在于 Transformer 块,它包含多头自注意力和多层感知机层。大多数模型由多个这样的块顺序堆叠而成。词元表示在从第一个块到最后一个块的各层中不断演化,使模型能够对每个词元建立复杂的理解。这种分层方法产生了对输入的高层表示。我们分析的 GPT-2(小型)模型包含 12 个这样的块。 ### 多头自注意力 自注意力机制使模型能够捕捉序列中词元之间的关系,因此每个词元的表示都受到其他词元的影响。多个注意力头允许模型从不同角度考虑这些关系;例如,一个头可能捕捉短程句法联系,而另一个头则追踪更广泛的语义上下文。在下一节中,我们将逐步介绍多头自注意力的计算过程。 #### 第 1 步:查询、键和值矩阵 QKV_ij = (∑_{d=1}^{768} Embedding_{i,d} · Weights_{d,j}) + Bias_j 图 2. 从原始嵌入计算查询、键和值矩阵。 每个词元的嵌入向量被转换为三个向量:查询 (Q)、键 (K) 和值 (V)。这些向量通过将输入嵌入矩阵与为 Q、K 和 V 学习到的权重矩阵相乘得到。以下网页搜索类比可以帮助我们理解这些矩阵: - **查询 (Q)** 是你在搜索引擎栏中输入的搜索文本。这是你想要*“查找更多信息”*的词元。 - **键 (K)** 是搜索结果窗口中每个网页的标题。它代表查询可能关注的词元。 - **值 (V)** 是显示的网页的实际内容。一旦我们将适当的搜索词(查询)与相关结果(键)匹配,我们就想获取最相关页面的内容(值)。 通过使用这些 QKV 值,模型可以计算注意力分数,这些分数决定了生成预测时每个词元应获得的关注程度。 #### 第 2 步:多头拆分 查询、键和值向量被拆分为多个头——在 GPT-2(小型)的情况下,是 12 个头。每个头独立处理嵌入的一部分,捕捉不同的句法和语义关系。这种设计有利于并行学习多样化的语言特征,增强了模型的表示能力。 #### 第 3 步:掩码自注意力 在每个头中,我们执行掩码自注意力计算。该机制允许模型通过关注输入的相关部分来生成序列,同时防止访问未来的词元。 图 3. 使用查询、键和值矩阵计算掩码自注意力。 - **点积**:查询和键矩阵的点积确定**注意力分数**,产生一个方阵,反映所有输入词元之间的关系。 - **缩放 · 掩码**:注意力分数被缩放,并对注意力矩阵的上三角部分应用掩码,以防止模型访问未来词元,将这些值设置为负无穷。模型需要在不“偷看”未来的情况下学习如何预测下一个词元。 - **Softmax · Dropout**:经过掩码和缩放后,注意力分数通过 softmax 操作转换为概率,然后可选地通过 dropout 进行正则化。矩阵的每一行之和为一,表示其左侧每个其他词元的相关性。 #### 第 4 步:输出与拼接 模型使用掩码自注意力分数与值矩阵相乘,得到自注意力机制的最终输出。GPT-2 有 12 个自注意力头,每个头捕捉词元之间的不同关系。这些头的输出被拼接,并通过一个线性投影。 ### MLP:多层感知机 图 4. 使用 MLP 层将自注意力表示投影到更高维度,以增强模型的表示能力。 在多头自注意力捕捉到输入词元之间的多样关系后,拼接的输出被传递到多层感知机(MLP)层,以增强模型的表示能力。MLP 块由两个线性变换组成,中间夹有 GELU(https://en.wikipedia.org/wiki/Rectified_linear_unit#Gaussian-error_linear_unit_(GELU))激活函数。 第一个线性变换将输入的维度从 768 扩展四倍至 3072。这个扩展步骤使模型能够将词元表示投影到更高维的空间,在那里它可以捕捉原始维度中可能不可见的更丰富、更复杂的模式。 第二个线性变换则将维度降回原始的 768 大小。这个压缩步骤将表示恢复到可控大小,同时保留了扩展步骤中引入的有用非线性变换。 与整合词元间信息的自注意力机制不同,MLP 独立处理每个词元,简单地将每个词元表示从一个空间映射到另一个空间,丰富了整体的模型容量。 ## 输出概率 在输入通过所有 Transformer 块处理后,输出被传递到最后的线性层,为词元预测做准备。该层将最终表示投影到一个 50,257 维的空间,其中词汇表中的每个词元都有一个对应的值,称为 `logit`。任何词元都可能是下一个单词,因此这个过程允许我们简单地根据这些词元成为下一个单词的可能性进行排序。然后我们应用 softmax 函数将 logits 转换为一个总和为一的概率分布。这将允许我们根据词元的可能性进行采样。 图 5. 词汇表中的每个词元根据模型输出 logits 被分配一个概率。这些概率决定了序列中下一个词元的可能性。 最后一步是从这个分布中采样生成下一个词元。`temperature` 超参数在此过程中起着关键作用。从数学上讲,这是一个非常简单的操作:模型输出 logits 被除以 `temperature`: - `temperature = 1`:将 logits 除以一不会对 softmax 输出产生影响。 - `temperature < 1`:较低的 temperature 通过锐化概率分布使模型更自信和确定性更强,导致输出更可预测。 - `temperature > 1`:较高的 temperature 产生更平滑的概率分布,允许生成的文本具有更多随机性——即一些人所称的模型*“创造性”*。 此外,采样过程可以使用 `top-k` 和 `top-p` 参数进一步优化: - `top-k 采样`:将候选词元限制为概率最高的前 k 个词元,过滤掉可能性较小的选项。 - `top-p 采样`:考虑累积概率超过阈值 p 的最小词元集合,确保只有最可能的词元参与贡献,同时仍保持多样性。 通过调整 `temperature`、`top-k` 和 `top-p`,你可以平衡确定性和多样性的输出,根据特定需求调整模型的行为。 ## 辅助架构特性 有多种辅助架构特性可以提升 Transformer 模型的性能。虽然它们对模型的整体性能很重要,但对于理解架构的核心概念而言并非关键。层归一化、Dropout 和残差连接是 Transformer 模型中的关键组件,尤其在训练阶段。层归一化稳定训练并帮助模型更快收敛。Dropout 通过随机停用神经元防止过拟合。残差连接允许梯度直接流经网络,有助于防止梯度消失问题。 ### 层归一化 层归一化有助于稳定训练过程并提高收敛速度。它通过对特征维度上的输入进行归一化来工作,确保激活值的均值和方差保持一致。这种归一化有助于缓解与内部协变量偏移相关的问题,使模型能够更有效地学习,并降低对初始权重的敏感性。层归一化在每个 Transformer 块中应用两次,一次在自注意力机制之前,一次在 MLP 层之前。 ### Dropout Dropout 是一种正则化技术,通过在训练期间随机将一部分模型权重设置为零,防止神经网络过拟合。这鼓励模型学习更鲁棒的特征,并减少对特定神经元的依赖,帮助网络更好地泛化到新的、未见过的数据。在模型推理期间,Dropout 被停用。这本质上意味着我们使用的是训练好的子网络的集成,从而带来更好的模型性能。 ### 残差连接 残差连接最早在 2015 年的 ResNet 模型中引入。这种架构创新通过使能够训练非常深的神经网络,彻底改变了深度学习。本质上,残差连接是绕过一层或多层的快捷方式,将一层的输入添加到其输出中。这有助于缓解梯度消失问题,使得训练堆叠了多个 Transformer 块的深层网络变得更容易。在 GPT-2 中,残差连接在每个 Transformer 块内使用两次:一次在 MLP 之前,一次在 MLP 之后,确保梯度在反向传播过程中能更顺畅地流动,并为较早的层提供足够的更新。 ## 交互功能 Transformer 解析器是交互式构建的,允许你探索 Transformer 的内部工作原理。在这里

相似文章

Transformer 数学探索器 [P]

Reddit r/MachineLearning

这个交互式工具通过数据流图可视化 Transformer 模型的数学基础,涵盖了从 GPT-2 到 Qwen 3.6 的架构以及各种注意力机制。