Transformer是一种神经网络架构,自2017年论文Attention is All You Need提出后,成为深度学习首选架构,驱动了开放人工智能(OpenAI)的GPT(GPT)、元(Meta)的Llama(Llama)及谷歌(Google)的Gemini(Gemini)等文本生成模型。除文本外,它还应用于音频生成、图像识别、蛋白质结构预测和游戏,展现多领域通用性。文本生成Transformer模型基于下一词预测原则:给定用户提示,预测最可能的下一个词元(单词或词的一部分)。
正文
什么是 Transformer?
Transformer 是一种神经网络架构,从根本上改变了人工智能的方法。它最早出现在 2017 年的开创性论文《Attention is All You Need》中,此后成为深度学习模型的首选架构,驱动了 OpenAI 的 GPT、Meta 的 Llama、Google 的 Gemini 等文本生成模型。除了文本,Transformer 还应用于音频生成、图像识别、蛋白质结构预测,甚至游戏。文本生成 Transformer 模型的基本原则是下一 token 预测:给定用户提示,最可能的下一个 token(一个词或词的一部分)是什么?其核心创新和力量在于自注意力机制,能处理整个序列并比以往架构更有效地捕捉长距离依赖。GPT-2 系列是文本生成 Transformer 的突出例子。Transformer Explainer 由 GPT-2(small)驱动,有 1.24 亿参数。它并非最新或最强,但共享当前最先进模型的许多架构组件和原理,是理解基础的理想起点。
Transformer 架构
每个文本生成 Transformer 由三个关键组件组成:
- 嵌入:文本输入被分成称为 token 的较小单元,可以是词或子词。这些 token 被转换为称为嵌入的数值向量,捕捉词的语义。
- Transformer 块:处理和转换输入数据的基本构建块。每个块包括:
- 注意力机制:核心组件,允许 token 与其他 token 通信,捕捉上下文信息和词间关系。
- MLP(多层感知机)层:独立作用于每个 token 的前馈网络。注意力层目标是在 token 之间路由信息,MLP 目标是细化每个 token 的表示。
- 输出概率:最后的线性层和 softmax 层将处理后的嵌入转换为概率,使模型能预测序列中的下一个 token。
嵌入
假设你想用 Transformer 生成文本。添加提示:“Data visualization empowers users to”。输入需要转换为模型能理解和处理的格式。嵌入将文本转换为模型可用的数值表示。转换提示为嵌入需要:1)对输入分词,2)获取 token 嵌入,3)添加位置信息,4)将 token 和位置编码相加得到最终嵌入。

第1步:分词
分词是将输入文本分解为更小、更易管理的片段,称为 token。这些 token 可以是一个词或子词。词 “Data” 和 “visualization” 对应唯一 token,而 “empowers” 被分成两个 token。完整 token 词汇表在训练模型前决定:GPT-2 的词汇表有 50,257 个唯一 token。现在我们把输入文本分成有不同 ID 的 token,就可以从嵌入中获得它们的向量表示。
第2步:token 嵌入
GPT-2(small)将词汇表中每个 token 表示为 768 维向量;向量维度取决于模型。这些嵌入向量存储在一个形状为 (50,257, 768) 的矩阵中,包含约 3900 万个参数!这个庞大矩阵让模型为每个 token 分配语义意义:在语言中使用或含义相似的 token 在高维空间中靠得近,不相似的更远。
第3步:位置编码
嵌入层还编码输入提示中每个 token 的位置信息。不同模型使用不同位置编码方法。GPT-2 从头训练自己的位置编码矩阵,直接整合进训练过程。
第4步:最终嵌入
最后,将 token 编码和位置编码相加,得到最终嵌入表示。这个组合表示既捕捉 token 的语义含义,也捕捉它们在输入序列中的位置。
Transformer 块
Transformer 处理的核心在 Transformer 块,包括多头自注意力和多层感知机层。大多数模型由多个这样的块依次堆叠组成。token 表示从第一个块到最后一个块逐层演化,让模型构建对每个 token 的复杂理解。这种分层方法带来输入的高阶表示。我们考察的 GPT-2(small)模型由 12 个这样的块组成。
多头自注意力
自注意力机制让模型捕捉序列中 token 之间的关系,使每个 token 的表示受其他 token 影响。多个注意力头让模型从不同角度考虑这些关系;例如,一个头可能捕捉短程句法联系,另一个追踪更广的语义上下文。下面逐步介绍多头自注意力的计算。
第1步:Query、Key 和 Value 矩阵

每个 token 的嵌入向量被转换为三个向量:Query (Q)、Key (K)、Value (V)。这些向量通过将输入嵌入矩阵乘以学习到的 Q、K、V 权重矩阵并加上偏置得到。这里用网页搜索类比帮助建立直觉:
- Query (Q) 是你在搜索引擎栏输入的搜索文本。这是你想“查找更多信息”的 token。
- Key (K) 是搜索结果窗口中每个网页的标题。它表示查询可能关注的候选 token。
- Value (V) 是显示的网页实际内容。一旦把合适的搜索词(Query)与相关结果(Key)匹配,我们想获取最相关页面的内容(Value)。
通过这些 QKV 值,模型可以计算注意力分数,决定生成预测时每个 token 应获得多少关注。
第2步:多头拆分
Query、Key 和 Value 向量被拆分成多个头——在 GPT-2(small)中是 12 个头。每个头独立处理嵌入的一部分,捕捉不同句法和语义关系。这种设计促进多样语言特征的并行学习,增强模型表示能力。
第3步:掩码自注意力
在每个头中,执行掩码自注意力计算。该机制让模型通过关注输入的相关部分来生成序列,同时阻止访问未来 token。

- 点积:Query 和 Key 矩阵的点积决定注意力分数,产生一个方阵,反映所有输入 token 之间的关系。
- 缩放·掩码:注意力分数被缩放,并对注意力矩阵的上三角应用掩码,防止模型访问未来 token,将这些值设为负无穷。模型需要学会在不“偷看”未来的情况下预测下一个 token。
- Softmax·Dropout:掩码和缩放后,注意力分数通过 softmax 操作转换为概率,然后可选地用 dropout 正则化。矩阵每行和为 1,表示它左侧每个其他 token 的相关性。
第4步:输出和拼接
模型使用掩码自注意力分数乘以 Value 矩阵,得到自注意力机制的最终输出。GPT-2 有 12 个自注意力头,每个捕捉 token 之间的不同关系。这些头的输出被拼接,并通过线性投影。
MLP:多层感知机

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

最后一步是从该分布中采样生成下一个 token。温度超参数在此过程中起关键作用。数学上非常简单:模型输出 logits 除以温度:
- 温度 = 1:将 logits 除以 1 对 softmax 输出没有影响。
- 温度 < 1:较低温度通过锐化概率分布使模型更自信和确定,输出更可预测。
- 温度 > 1:较高温度产生更软的概率分布,允许生成文本更多随机性——有人称之为模型“创造力”。
此外,采样过程可用 top-k 和 top-p 参数进一步细化:
- top-k 采样:将候选 token 限制为概率最高的前 k 个 token,过滤掉可能性较低的选项。
- top-p 采样:考虑累积概率超过阈值 p 的最小 token 集合,确保只有最可能的 token 参与,同时仍允许多样性。
通过调整温度、top-k 和 top-p,可以在确定性和多样性输出之间平衡,按特定需求定制模型行为。
辅助架构特征
有几个辅助架构特征提升 Transformer 模型性能。它们对整体性能重要,但对理解架构核心概念不那么重要。层归一化、Dropout 和残差连接是 Transformer 模型中的关键组件,尤其在训练阶段。层归一化稳定训练并帮助模型更快收敛。Dropout 通过随机停用神经元防止过拟合。残差连接让梯度直接流过网络,帮助防止梯度消失问题。
层归一化
层归一化帮助稳定训练过程并改善收敛。它通过归一化特征的输入,确保激活的均值和方差一致。这种归一化有助于缓解内部协变量偏移问题,让模型更有效学习,并降低对初始权重的敏感度。每个 Transformer 块中应用两次层归一化:一次在自注意力机制前,一次在 MLP 层前。
Dropout
Dropout 是一种正则化技术,通过在训练中随机将一部分模型权重设为零来防止神经网络过拟合。这鼓励模型学习更稳健的特征,减少对特定神经元的依赖,帮助网络更好泛化到新的未见数据。模型推理期间 Dropout 被停用。这本质上意味着我们使用训练过的子网络集成,带来更好的模型性能。
残差连接
残差连接最早在 2015 年的 ResNet 模型中引入。这一架构创新通过支持训练非常深的神经网络,彻底改变了深度学习。本质上,残差连接是绕过一层或多层的捷径,将某层的输入加到其输出。这有助于缓解梯度消失问题,使堆叠多个 Transformer 块的深度网络更容易训练。在 GPT-2 中,每个 Transformer 块内使用两次残差连接:一次在 MLP 前,一次在 MLP 后,确保梯度更易流动,较早层在反向传播期间获得足够更新。
交互功能
Transformer Explainer 具有交互性,可以探索 Transformer 内部运作。一些交互功能:
- 输入自己的文本序列,看模型如何处理并预测下一个词。探索注意力权重、中间计算,看最终输出概率如何计算。
- 使用温度滑块控制模型预测的随机性。探索如何通过改变温度值让模型输出更确定或更有创意。
- 选择 top-k 和 top-p 采样方法,调整推理时的采样行为。试验不同值,看概率分布如何变化并影响模型预测。
- 与注意力图交互,看模型如何关注输入序列中的不同 token。悬停 token 以高亮其注意力权重,探索模型如何捕捉上下文和词间关系。
视频教程
https://www.youtube.com/watch?v=ECR4oAwocjs
Transformer Explainer 如何实现?
Transformer Explainer 直接在浏览器中运行一个实时 GPT-2(small)模型。该模型源自 Andrej Karpathy 的 nanoGPT 项目的 GPT PyTorch 实现,并转换为 ONNX Runtime 以实现无缝的浏览器内执行。界面用 JavaScript 构建,前端框架为 Svelte,动态可视化用 D3.js。数值随用户输入实时更新。
评论
多数读者称赞该交互式可视化直观易懂,对新手友好,但部分人担忧其基于 GPT-2 的细节(如绝对位置编码、dropout)偏离现代模型实践,可能误导外行;少数电气背景读者则对“transformer”一词的跨领域歧义调侃或困惑。
肯定可视化对新手直观友好
- 多条评论表示网站界面出色、描述直观,帮助初学者理解注意力与 LLM 机制(认可度:较多人) > 网站很棒,描述直观(@utopcell)
认为该可视化在技术上偏离现代实践
- 有读者指出页面使用绝对位置编码、dropout 等已非现代配方,且温度解释中“安全”用词不当;单一可视化难以让人同时掌握词嵌入与注意力(认可度:较多人) > 虽页面声明不现代,但此类细节对模型可学表示有重大影响,恰是最关键的部分(@E-Reverance)
对 “transformer” 术语的调侃与困惑
- 具电气背景的读者初见误以为讲电力变压器,或期待变形金刚内容,反映术语跨领域歧义(认可度:少数人) > 这完全不是我期待的,本来还指望能看到更多宇宙大帝呢(@esseph)
认为注意力头本质是动态构造的单层网络
- 有读者指出注意力矩阵与值向量相乘等效于以注意力矩阵为权重的全连接层,模型推理时动态建网,此机制少被强调而该可视化便于观察(认可度:少数人) > 注意力头在推理时依据键与查询动态构造出小型单层网络,这点很少被讲解却十分精妙(@andblac)
对分离键值查询矩阵动机的疑惑
- 有读者表示一直不理解为何要单独设置键、查询、值矩阵及其具体作用(认可度:少数人)
页面可能导致低端设备崩溃
- 一位用户报告该页面导致其 Chromebook 崩溃,此前从未发生(认可度:少数人)
有价值的补充
- 辅助资源:除本工具外,bbycroft 的 LLM 可视化网站与图解 Transformer 文章被读者推荐给初学者;另有读者自制全带宽 Transformer 可视化用于讲座。
- 温度参数洞见:有读者引研究指出,温度为零的生成缺乏惊喜感而显人工,因为人类语言选择追求高效与避错,而非单纯“安全”。