什么是Transformer?
Transformer是一种神经网络架构,从根本上改变了人工智能的实现方式。Transformer最早于2017年在开创性论文《注意力就是你所需要的一切》("Attention is All You Need")中被提出,从那以后,它就成为了深度学习模型的首选架构,为诸如OpenAI的GPT、Meta的Llama以及谷歌的Gemini等文本生成模型提供了支持。除了文本领域,Transformer还被应用于音频生成(audio generation)、图像识别(image recognition)、蛋白质结构预测(protein structure prediction),甚至是游戏玩法(game playing),这展示了它在众多领域的通用性。
从根本上讲,文本生成的Transformer模型是基于“下一个单词预测”(next-word prediction)的原理运行的:给定用户输入的文本提示,接下来最有可能跟随这个输入的“下一个单词”是什么呢?Transformer的核心创新和强大之处在于其对自注意力机制的运用,这使得它们能够比以前的架构更有效地处理整个序列,并捕捉长距离的依赖关系。
GPT-2系列模型是文本生成Transformer的杰出例子。Transformer解释器由GPT-2(小型)模型(GPT-2)驱动,该模型有1.24亿个参数。虽然它不是最新的或最强大的Transformer模型,但它与当前最先进的模型有着许多相同的架构组件和原理,这使得它成为理解基础知识的理想起点。
Transformer架构(Transformer Architecture)
每个文本生成的Transformer都由以下“三个关键组件”(three key components)组成:
- 嵌入层(Embedding):文本输入被分割成称为标记(token)的较小单元,这些标记可以是单词或子词。这些标记被转换为称为嵌入的数值向量,嵌入捕获了单词的语义含义。
- Transformer模块(Transformer Block)是处理和转换输入数据的模型的基本构建块。每个模块包括:
- 注意力机制(Attention Mechanism),这是Transformer模块的核心组件。它允许标记与其他标记进行通信,捕获上下文信息以及单词之间的关系。
- 多层感知机(MLP,Multilayer Perceptron)层,这是一个前馈网络,独立地对每个标记进行操作。虽然注意力层的目标是在标记之间传递信息,但MLP的目标是细化每个标记的表示。
- 输出概率(Output Probabilities):最终的线性层和Softmax层将处理后的嵌入转换为概率,使模型能够对序列中的下一个标记进行预测。
嵌入层(Embedding)
假设你想使用Transformer模型生成文本。你输入这样一个提示:“数据可视化使用户能够”(“Data visualization empowers users to”)
。这个输入需要被转换为模型能够理解和处理的格式。这就是嵌入层的作用:它将文本转换为模型可以处理的数值表示。为了将提示转换为嵌入,我们需要1)对输入进行标记化,2)获取标记嵌入,3)添加位置信息,最后4)将标记和位置编码相加,以获得最终的嵌入。让我们看看这些步骤是如何完成的。

步骤1:标记化(Step 1: Tokenization)
标记化是将输入文本分解为称为标记的更小、更易于管理的部分的过程。这些标记可以是一个单词或一个子词。单词 "数据"("Data")
和 "可视化"("visualization")
对应于唯一的标记,而单词 "使能够"("empowers")
被拆分为两个标记。标记的完整词汇表在训练模型之前就已确定:GPT-2的词汇表有 50,257
个唯一标记。现在我们将输入文本拆分为具有不同ID的标记,我们可以从嵌入中获得它们的向量表示。
步骤2:标记嵌入(Step 2. Token Embedding)
GPT-2(小型)将词汇表中的每个标记表示为一个768维的向量;向量的维度取决于模型。这些嵌入向量存储在一个形状为 (50,257, 768)
的矩阵中,其中包含大约3900万个参数!这个庞大的矩阵使模型能够为每个标记赋予语义含义。
步骤3:位置编码(Step 3. Positional Encoding)
嵌入层还对输入提示中每个标记的位置信息进行编码。不同的模型使用不同的方法进行位置编码。GPT-2从零开始训练自己的位置编码矩阵,并将其直接集成到训练过程中。
步骤4:最终嵌入(Step 4. Final Embedding)
最后,我们将标记编码和位置编码相加,以获得最终的嵌入表示。这个组合表示既捕获了标记的语义含义,又捕获了它们在输入序列中的位置。
Transformer模块(Transformer Block)
Transformer处理的核心在于Transformer模块,它由多头自注意力机制和多层感知机层组成。大多数模型由多个这样的模块依次堆叠而成。标记表示从第一个模块到最后一个模块逐层演变,使模型能够对每个标记建立复杂的理解。这种分层方法导致了输入的高阶表示。我们正在研究的GPT-2(小型)模型由 12
个这样的模块组成。
多头自注意力机制(Multi-Head Self-Attention)
自注意力机制使模型能够关注输入序列的相关部分,使其能够捕获数据中的复杂关系和依赖关系。让我们逐步看看这种自注意力是如何计算的。
步骤1:查询、键和值矩阵(Step 1: Query, Key, and Value Matrices)

每个标记的嵌入向量被转换为三个向量:查询(Query,Q)、键(Key,K)和值(Value,V)。这些向量是通过将输入嵌入矩阵与为Q、K和V学习的权重矩阵相乘得到的。这里有一个网页搜索的类比,帮助我们理解这些矩阵背后的一些概念:
- 查询(Q,Query)是你在搜索引擎栏中输入的搜索文本。这是你想要“找到更多关于它的信息”的标记。
- 键(K,Key)是搜索结果窗口中每个网页的标题。它代表了查询可以关注的可能标记。
- 值(V,Value)是显示的网页的实际内容。一旦我们将适当的搜索词(查询)与相关结果(键)匹配,我们就想要获取最相关页面的内容(值)。
通过使用这些QKV值,模型可以计算注意力分数,这些分数决定了在生成预测时每个标记应该受到多少关注。
步骤2:多头分割(Step 2: Multi-Head Splitting)
查询(Query,Q)、键(Key,K)和值(Value,V)向量被分割成多个头——在GPT-2(小型)的情况下,分割成 12
个头。每个头独立处理嵌入的一部分,捕获不同的句法和语义关系。这种设计有助于并行学习不同的语言特征,增强了模型的表示能力。
步骤3:掩码自注意力机制(Step 3: Masked Self-Attention)
在每个头中,我们执行掩码自注意力计算。这种机制允许模型通过关注输入的相关部分来生成序列,同时防止访问未来的标记。

- 注意力分数(Attention Score):查询(Query,Q)和键(Key,K)矩阵的点积决定了每个查询与每个键的对齐程度,生成一个方阵,反映了所有输入标记之间的关系。
- 掩码(Masking):将一个掩码应用于注意力矩阵的上三角部分,以防止模型访问未来的标记,将这些值设置为负无穷大。模型需要学习如何在不“偷看”未来的情况下预测下一个标记。
- Softmax:掩码之后,注意力分数通过Softmax操作转换为概率,该操作对每个注意力分数取指数。矩阵的每一行总和为1,表示其他每个标记与它左边标记的相关性。
步骤4:输出和连接(Step 4: Output and Concatenation)
模型使用掩码自注意力分数,并将它们与值(Value,V)矩阵相乘,以获得自注意力机制的最终输出(final output)。GPT-2有 12
个自注意力头,每个头捕获标记之间不同的关系。这些头的输出被连接起来,并通过一个线性投影层。
MLP:多层感知机(MLP: Multi-Layer Perceptron)

在多头自注意力捕获了输入标记之间的各种关系之后,连接后的输出被传递到多层感知机(MLP)层,以增强模型的表示能力。MLP模块由两个线性变换组成,中间有一个GELU(即高斯误差线性单元Gaussian Error Linear Unit,是一种在深度学习中使用的激活函数)激活函数。第一个线性变换将输入的维度增加四倍,从 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
,你可以在确定性输出和多样化输出之间取得平衡,使模型的行为符合你的特定需求。
高级架构特性(Advanced Architectural Features)
有几种高级架构特性可以提升Transformer模型的性能。虽然这些特性对模型的整体性能很重要,但对于理解架构的核心概念来说并非至关重要。层归一化(Layer Normalization)、随机失活(Dropout)和残差连接(Residual Connections)是Transformer模型中的关键组件,尤其是在训练阶段。层归一化可以稳定训练过程,帮助模型更快地收敛。随机失活通过随机停用神经元来防止过拟合。残差连接允许梯度直接在网络中流动,有助于防止梯度消失问题。
层归一化(Layer Normalization)
层归一化有助于稳定训练过程并提高收敛速度。它通过对特征维度上的输入进行归一化操作,确保激活值的均值和方差保持一致。这种归一化有助于缓解内部协变量偏移的问题,使模型能够更有效地学习,并降低对初始权重的敏感性。在每个Transformer块中,层归一化会应用两次,一次在自注意力机制之前,一次在多层感知机(MLP)层之前。
随机失活(Dropout)
随机失活是一种正则化技术,用于在训练过程中通过随机将一部分模型权重设置为零来防止神经网络过拟合。这鼓励模型学习更鲁棒的特征,减少对特定神经元的依赖,帮助网络更好地泛化到新的、未见过的数据。在模型推理阶段,随机失活会被停用。这实际上意味着我们使用的是训练好的子网络的集合,从而提高了模型的性能。
残差连接(Residual Connections)
残差连接于2015年首次在残差网络(ResNet)模型中被提出。这一架构创新通过使深度神经网络的训练成为可能,彻底改变了深度学习领域。本质上,残差连接是一种捷径,它绕过一个或多个层,将一层的输入添加到其输出中。这有助于缓解梯度消失问题,使得训练由多个Transformer块堆叠而成的深度网络变得更加容易。在GPT - 2中,每个Transformer块内会使用两次残差连接:一次在多层感知机(MLP)之前,一次在之后,确保梯度能够更顺畅地流动,并且在反向传播过程中早期的层能够得到足够的更新。
交互特性(Interactive Features)
Transformer解释器被设计为具有交互性,允许你探索Transformer的内部工作原理。以下是一些你可以体验的交互特性:
- 输入你自己的文本序列,以查看模型如何处理它并预测下一个词。探索注意力权重、中间计算过程,并了解最终输出概率是如何计算的。
- 使用温度(temperature)滑块 来控制模型预测的随机性。通过改变温度((temperature))值,探索如何使模型输出更具确定性或更具创造性。
- 选择top - k和top - p采样方法 来调整推理过程中的采样行为。尝试不同的值,观察概率分布如何变化以及如何影响模型的预测。
Top - k采样
定义:Top - k采样是指在模型生成下一个token时,从概率分布中选取概率最高的k个token,然后再从这k个token中按照它们各自的概率进行随机采样,确定最终生成的token。
作用:这种方法可以避免模型总是选择概率最高的token,增加了生成结果的多样性。比如在生成故事时,若不使用Top - k采样,模型可能会反复生成一些常见的词汇或短语,导致内容单调,而Top - k采样能让模型有机会选择一些相对不那么常见但也合理的词汇,使故事内容更丰富。
局限性:当k值设置过大时,可能会引入较多低概率且语义可能不相关的token,导致生成文本出现语义混乱;若k值设置过小,又可能无法有效增加多样性,还是容易陷入重复生成的问题。
Top - p采样(核采样)
定义:Top - p采样会根据token的概率从高到低进行排序,然后计算累计概率,当累计概率达到阈值p时,就停止选择,从这些累计概率达到p的token中进行随机采样。例如,若p = 0.9,那么就选择概率累加起来达到0.9的那些token,再从中采样。
作用:Top - p采样能动态地根据概率分布来选择采样范围,相比Top - k采样更加灵活。它可以根据模型输出的概率分布自适应地确定采样集合,对于一些概率分布较为集中的情况,能在保证生成质量的同时,有效提升多样性。
优势:它既考虑了概率较高的token,又不会像Top - k那样固定选择数量,能更好地适应不同的概率分布情况,在生成自然流畅的文本方面表现较好,能减少生成不合理或重复内容的概率。
- 与注意力图进行交互,以查看模型如何关注输入序列中的不同词元。将鼠标悬停在词元上以突出显示它们的注意力权重,并探索模型如何捕捉上下文和词与词之间的关系。
Transformer解释器是如何实现的?
Transformer解释器的特点是在浏览器中直接运行一个实时的GPT - 2(小模型)。这个模型源自Andrej Karpathy的 nanoGPT项目 中的PyTorch实现,并已转换为 ONNX Runtime,以便在浏览器中无缝执行。界面使用JavaScript构建,前端框架采用 Svelte,并使用 D3.js 来创建动态可视化效果。数值会根据用户输入实时更新。
谁开发了Transformer解释器?
Transformer解释器由以下人员在佐治亚理工学院开发: Aeree Cho、 Grace C. Kim、 Alexander Karpekov、 Alec Helbling、 Jay Wang、 Seongmin Lee、 Benjamin Hoover 和 Polo Chau。