正在准备模型……加载期间可以浏览示例。
温度

0.8

采样

k=5

前往英文原站

英文版本由原始网站提供,是否前往?

The English version is hosted on the original website. Continue there?

什么是 Transformer?

Transformer 是一种神经网络架构,显著改变了人工智能处理信息的方式。它最早在 2017 年的论文 《Attention is All You Need》 中提出,随后广泛用于深度学习,包括 OpenAI 的 GPT、Meta 的 Llama 和 Google 的 Gemini 等文本生成模型。它也用于音频生成、图像识别、蛋白质结构预测,甚至游戏决策等领域。

文本生成 Transformer 的基本任务是预测下一个词元(token):给定用户输入,接下来最可能出现的词元,也就是单词或单词的一部分是什么?它的核心机制是自注意力,可以在处理序列时建立不同位置之间的联系,捕捉远距离依赖。

当前视图使用 UER 中文 GPT-2。它是预训练的中文续写模型,包含 12 个 Transformer 层,每层有 12 个注意力头,嵌入维度为 768。模型沿用 GPT-2 的结构,中文词表包含 21,128 个词元。为减小浏览器下载体积,线性层权重采用 INT8 量化;界面展示的注意力矩阵和预测结果由这个部署版本计算。它用于续写文字,并非对话助手。

Transformer 的整体结构

文本生成 Transformer 可以分为三个主要部分:

  1. 嵌入(Embedding):把输入文字拆成词元,再转换成用于表达含义的数值向量。词元可以是单词,也可以是单词的一部分。
  2. Transformer 层(Block)是处理输入的基本单元,每层包括:
    • 注意力机制(Attention):让不同词元交换信息,捕捉上下文以及词语之间的关系。
    • 多层感知机(MLP):对每个词元独立进行前馈计算。注意力负责词元之间的信息交流,MLP 则进一步加工每个词元的表示。
  3. 输出概率(Output Probabilities):最后的线性层和 Softmax 将处理后的向量转成概率,用来预测下一个词元。

嵌入(Embedding)

假设输入提示词 “Data visualization empowers users to”,希望模型接着生成文字。模型需要先将文字转换为能够处理的数字表示,这就是嵌入的作用。过程包含四步:1)分词;2)取得词元嵌入;3)加入位置信息;4)将词元嵌入与位置编码相加,得到最终的输入向量。

图 1:嵌入示意图(原版英文界面)
图 1:展开嵌入模块,观察文字如何变成向量。步骤依次为(1)分词、(2)词元嵌入、(3)位置编码、(4)最终嵌入。图中保留原版英文界面。

第 1 步:分词(Tokenization)

中文模型采用 WordPiece 分词。例如,今天天气会被拆成四个汉字词元。某些词语、符号和拉丁字母片段使用其他词元,## 表示词内的接续片段。词表共包含 21,128 个词元。下方示意图展示的是原版英文 GPT-2 的分词;中文分词可以在上方交互视图中观察。

第 2 步:词元嵌入(Token Embedding)

中文模型用 768 维向量表示每个词元。嵌入矩阵的形状为 (21,128, 768),约包含 1620 万个参数。这些训练得到的向量会经过下文介绍的相同 Transformer 运算。

第 3 步:位置编码(Positional Encoding)

除了词元本身的含义,模型还需要知道它在序列中的位置。不同模型使用不同的位置编码方法。GPT-2 的位置编码矩阵是在训练过程中学习得到的。

第 4 步:最终嵌入

将词元嵌入与位置编码相加,就得到最终的输入向量。这个向量同时包含词元的语义信息和它在序列中的位置信息。

Transformer 层(Block)

Transformer 的主要计算发生在一个个层中,每层包含多头自注意力和多层感知机。多个层依次堆叠,词元的表示随计算逐层变化,逐步融合更丰富的上下文信息。这里使用的 GPT-2(small)共有 12 层。

多头自注意力(Multi-Head Self-Attention)

自注意力建立词元之间的联系,让每个词元的表示受到其他词元的影响。多个注意力头可以从不同角度捕捉关系,例如局部语法联系或更广的语义上下文。下面按计算顺序逐步展开。

第 1 步:查询、键和值矩阵

图 2:查询、键和值示意图(原版英文界面)
QKVij=(∑d=1768Embeddingi,d⋅Weightsd,j)+Biasj QKV_{ij} = ( \sum_{d=1}^{768} \text{Embedding}_{i,d} \cdot \text{Weights}_{d,j}) + \text{Bias}_j
图 2:从输入嵌入计算查询(Query)、键(Key)和值(Value)矩阵。

每个词元的嵌入被转换成三个向量:查询(Query,Q)、键(Key,K)和值(Value,V)。转换通过与训练得到的权重矩阵相乘并加上偏置完成。可以用搜索引擎来类比它们的分工:

  • 查询(Query,Q)像搜索框中输入的搜索词,表达这个词元想要“寻找什么信息”。
  • 键(Key,K)像搜索结果中各网页的标题,用来判断哪些内容与查询相关。
  • 值(Value,V)像网页的实际内容。查询与键匹配后,模型按相关程度汇总这些值。

通过 Q、K、V,模型可以计算注意力分数,并据此决定在预测时应从各词元获取多少信息。

第 2 步:拆分为多个注意力头

查询、键和值向量被拆分给多个注意力头,GPT-2(small)中有 12 个头。每个头独立处理向量的一部分,学习不同的语法或语义关系。这种并行计算能丰富模型的表示能力。

第 3 步:带掩码的自注意力

每个头都会计算带掩码的自注意力,让模型关注相关的输入内容,同时无法访问当前词元之后的未来词元。

图 3:注意力示意图(原版英文界面)
图 3:使用查询、键和值矩阵计算带掩码的自注意力。
  • 点积(Dot Product):将查询矩阵与转置后的键矩阵相乘,得到注意力分数组成的方阵,描述输入词元之间的相关程度。
  • 缩放与掩码(Scaling · Mask):先缩放注意力分数,再将矩阵中对应未来词元的位置设为负无穷。这样模型预测下一个词元时就无法“偷看”未来。
  • Softmax 与 Dropout:Softmax 将分数转换为注意力权重,每行之和为 1,表示对当前及此前词元的关注程度。训练时还可以应用 Dropout 进行正则化;推理时将其关闭。

第 4 步:输出与拼接

将归一化后的注意力权重与值(Value)矩阵相乘,得到每个头的注意力输出。GPT-2 的 12 个头各自捕捉不同的关系,它们的输出会被拼接起来,再经过一次线性投影。

多层感知机(MLP)

图 4:多层感知机示意图(原版英文界面)
图 4:MLP 将词元表示映射到更高维度,再映射回原维度。

多头自注意力融合了上下文后,词元表示还会经过多层感知机(MLP)。MLP 包含两次线性变换,中间使用 GELU 激活函数引入非线性。

第一次线性变换将维度从 768 扩展到 3072,扩大为原来的四倍,让模型在更高维空间中学习更丰富、更复杂的模式。

第二次线性变换把维度压回 768,在保留有用的非线性变换结果的同时,恢复原来的向量大小。

自注意力会在不同词元之间汇总信息;MLP 则独立处理每个词元,将其表示从一个空间映射到另一个空间。

输出概率

最后的线性层将最后一个词元的表示投影到 21,128 维空间。每个值都是一个词表候选词元的 logit。温度和采样设置决定如何根据这些分数预测下一个词元。

图 5:输出概率示意图(原版英文界面)
图 5:输出分数转换为各候选词元的概率,用于选择下一个词元。

最后一步是从分布中采样。temperature(温度)会影响这个过程:在转换为概率之前,将模型输出的 logits 除以 temperature:

  • temperature = 1:除以 1 不改变分数,Softmax 的结果保持不变。
  • temperature < 1:放大分数差距,使概率分布更集中,输出更容易预测。
  • temperature > 1:缩小分数差距,使概率分布更平缓,生成文本的随机性更高,有时也被称为更有“创造性”。

还可以用 top-k 和 top-p 进一步限定采样范围:

  • top-k sampling:只保留概率最高的 k 个候选词元,过滤其余候选。
  • top-p sampling:按概率从高到低,保留累计概率达到阈值 p 的最小候选集合。

调节 temperature、top-k 和 top-p,可以在输出的确定性与多样性之间取得不同的平衡。

辅助结构与机制

除了注意力和 MLP,Transformer 还有一些帮助模型稳定工作和训练的机制。层归一化有助于稳定数值分布;Dropout 通过随机失活减少过拟合;残差连接让信息和梯度更容易穿过深层网络。

层归一化(Layer Normalization)

层归一化对每个词元的特征进行归一化,再使用学到的缩放和偏置调整结果,帮助稳定训练并改善收敛。在 GPT-2 的每个 Transformer 层中,它分别出现在自注意力之前和 MLP 之前。

随机失活(Dropout)

Dropout 是一种减少过拟合的正则化方法:训练时随机将部分激活值置零,减少模型对特定神经元的依赖,帮助它学习更能泛化的特征。模型推理时会关闭 Dropout。

残差连接(Residual Connections)

残差连接在 2015 年提出的 ResNet 中得到广泛应用。它提供一条绕过某些计算层的捷径,将输入加到这些层的输出上,缓解深层网络中的梯度传播困难。GPT-2 的每个 Transformer 层有两次残差连接,分别围绕注意力子层和 MLP 子层。

交互功能

你可以通过以下交互探索 Transformer 的内部工作过程:

  • 输入自己的文字,观察模型如何处理输入并预测下一个词元,查看注意力权重、中间计算和最终输出概率。
  • 调节温度滑块,观察概率分布怎样变化,以及如何影响生成的确定性与多样性。
  • 切换 Top-k 和 Top-p 采样,尝试不同参数,观察候选范围和概率分布如何变化。
  • 探索注意力图,将指针移到词元上,高亮显示相关权重,查看模型如何利用上下文。

视频教程(英文)

Transformer Explainer 是如何实现的?

本工具在浏览器中运行 GPT-2(small)。模型基于 Andrej Karpathy 的 nanoGPT 项目中的 PyTorch 实现,并转换为 ONNX 格式,通过 ONNX Runtime 在浏览器中执行。界面使用 JavaScript 和 Svelte,动态可视化使用 D3.js。数值会随用户输入更新。

谁开发了 Transformer Explainer?

Transformer Explainer 由佐治亚理工学院的 Aeree Cho、Grace C. Kim、Alexander Karpekov、Alec Helbling、Jay Wang、Seongmin Lee、Benjamin Hoover、Polo Chau 共同开发。