Data visualization empowers users to
create
Temperature

1

什么是Transformer?

Transformer 是一种神经网络架构,它从根本上改变了人工智能的方法。Transformer 首次出现于 2017 年的开创性论文 《Attention is All You Need》 中,此后成为深度学习模型的首选架构,为 OpenAI 的 GPT、Meta 的 Llama 和 Google 的Gemini 等文本生成模型提供支持。除了文本之外,Transformer 还被应用于 音频生成, 图像识别, 蛋白质结构预测, 甚至 游戏, 证明了其在众多领域的广泛适用性。

从根本上说,文本生成 Transformer 模型基于下一个词预测的原则运作:给定用户的文本提示,最有可能出现在该输入之后的下一个词是什么? Transformer 的核心创新和强大之处在于其对自注意力机制的使用,这使得它们能够比以前的架构更有效地处理整个序列并捕获远程依赖关系。

GPT-2模型系列是文本生成 Transformer 的杰出代表。Transformer 解释器 由具有 1.24 亿个参数的 GPT-2(小型)模型提供支持。 虽然它不是最新或最强大的 Transformer 模型,但它与当前最强大的大语音模型共享许多相同的架构组件和原理,使其成为理解基础知识的理想起点。

Transformer 架构

每一个文本生成式 Transformer 包含如下 三个关键部分:

  1. Embedding: 文本输入被分成称为“token”的更小的单元, 可以是单词或子词。这些标记被转换为称为“Embedding”的数字向量,它们捕捉单词的语义。
  2. Transformer 块是模型的基本构建块,用于处理和转换输入数据。每个块包括:
    • 注意力机制是 Transformer 块的核心组件。它允许Token与其他Token进行通信,捕获上下文信息和词语之间的关系。
    • MLP(多层感知机)层是一个前馈神经网络,独立地对每个Token进行操作。注意力层的目标是在Token之间路由信息,而 MLP 的目标是完善每个Token的表示。
  3. 输出概率:最终的线性层和 softmax 层将处理后的嵌入转换为概率,使模型能够对序列中的下一个Token进行预测。

Embedding

假设你想使用 Transformer 模型生成文本。 你添加了像这样的提示:“Data visualization empowers users to”。 此输入需要转换为模型可以理解和处理的格式。 这就是嵌入的用武之地:它将文本转换为模型可以处理的数字表示。 要将提示转换为嵌入,我们需要 1) 对输入进行Token化,2) 获取Token Embedding,3) 添加位置信息,最后 4) 将Token和位置编码相加得到最终嵌入。 让我们看看这些步骤是如何完成的。

embedding
1。 展开“嵌入”层视图,显示输入提示如何转换为向量表示。 该过程涉及 (1) Token化、(2) Token嵌入、(3) 位置编码和 (4) 最终嵌入。

步骤 1:Token化

Token化是将输入文本分解成更小、更易于管理的部分(称为Token)的过程。 这些Token可以是一个词或一个子词。 单词 "Data""vizualization" 对应于唯一的Token,而单词 "empowers" 被拆分为两个Token。 词元的完整词汇表是在训练模型之前决定的:GPT-2 的词汇表有 50,257 个唯一的Token。 现在我们已经将输入文本拆分为具有不同 ID 的Token,我们可以从Embedding中获取它们的向量表示。

步骤 2. Token Embedding

GPT-2 Small 模型将词汇表中的每个Token表示为一个 768 维的向量;向量的维度取决于模型。 这些嵌入向量存储在一个形状为 (50,257, 768) 的矩阵中,包含大约 3900 万个参数! 这个庞大的矩阵允许模型为每个Token分配语义。

步骤 3. 位置编码

Embedding层还对每个Token在输入提示中的位置信息进行编码。 不同的模型使用不同的位置编码方法。 GPT-2 从头开始训练自己的位置编码矩阵,并将其直接集成到训练过程中。

步骤 4. 最终嵌入

最后,我们将Token编码和位置编码相加,得到最终的Embedding表示。 这种组合表示既捕获了Token的语义,也捕获了它们在输入序列中的位置。

Transformer Block

Transformer 处理的核心在于 Transformer 块,它由多头自注意力机制和多层感知机层组成。 大多数模型由多个这样的块组成,这些块按顺序依次堆叠。 Token表示从第一个块到第十二个块逐层演化,使模型能够对每个Token建立起复杂的理解。 这种分层方法导致了对输入的更高阶表示。

多头自注意力机制 Multi-Head Self-Attention

自注意力机制使模型能够专注于输入序列的相关部分,从而使其能够捕获数据中的复杂关系和依赖关系。 让我们逐步了解如何计算这种自注意力。

第一步: Query, Key, and Value Matrices

QKV
2. 从原始嵌入计算查询、键和值矩阵。

每个词符的嵌入向量都被转换为三个向量:Query(Q) Key(K)Value(V)。 这些向量是通过将输入嵌入矩阵与 Q KV 的学习权重矩阵相乘得到的。 下面是一个网络搜索的例子,可以帮助我们建立对这些矩阵的一些直观认识:

  • Query (Q)是你在搜索引擎栏中输入的搜索文本。
  • Key (K) 是搜索结果窗口中每个网页的标题。 它代表了Query可以关注的可能的token。
  • Value (V) 是显示的网页的实际内容。 一旦我们将适当的搜索词(Query)与相关结果(Key)匹配, 我们希望获得最相关页面的内容(Value)。

通过使用这些 QKV 值,模型可以计算注意力分数,该分数决定了每个词符在生成预测时应该获得多少关注。

第二步: 掩码自注意力

掩码自注意力机制通过专注于输入的相关部分,同时阻止访问未来的Token,从而使模型能够生成序列。

attention
3. 使用Q、K和V矩阵计算掩码自注意力
  • 注意力分数 Attention ScoreQueryKey 矩阵的点积决定了每个Query与每个Key的对齐,生成一个反映所有输入词元之间关系的方阵。
  • 掩码:对注意力矩阵的上三角应用掩码,以防止模型访问未来的Token,将这些值设置为负无穷大。 模型需要学习如何在不“窥视”未来的情况下预测下一个Token。
  • Softmax:掩码后,注意力分数通过 softmax 操作转换为概率,该操作取每个注意力分数的指数。 矩阵的每一行总和为 1,表示该行Token左侧所有其他Token的相关性。

第三步: 输出

模型使用掩码自注意力分数并将其与 Value 矩阵相乘,得到自注意力机制的 最终输出。 GPT-2 有 `12` 个自注意力头,每个头捕捉Token之间不同的关系。 这些头的输出被连接起来,并穿过一个线性投影。

多层感知机 (MLP)

mlp
4. 使用 MLP 层将自注意力表示投影到更高维度,以增强模型的表示能力

在多头自注意力机制捕获了输入Token之间的各种关系之后,连接后的输出会传递给多层感知机 (MLP) 层,以增强模型的表示能力。 MLP 块由两个线性变换组成,中间有一个 GELU 激活函数。第一个线性变换将输入的维度增加了四倍, 从 768 增加到 3072。第二个线性变换将维度减少回原来的大小 768,确保后续层接收维度一致的输入。与自注意力机制不同,MLP 独立处理Token, 只是简单地将它们从一种表示映射到另一种表示。

输出概率

在输入经过所有 Transformer 块处理之后,输出会被传递到最终的线性层,以便为Token预测做好准备。 该层将最终表示投影到一个 50,257 维的空间中,词汇表中的每个词元在这个空间中都有一个对应的值,称为 logit。 任何词元都可以是下一个词,因此此过程允许我们简单地根据词元成为下一个词的可能性对它们进行排序。 然后,我们应用 softmax 函数将 logits 转换为总和为 1 的概率分布。 这将允许我们根据词元的可能性对下一个词元进行采样。

softmax
5。 词汇表中的每个词元都会根据模型的输出 logits 被分配一个概率。 这些概率决定了每个词元成为序列中下一个词的可能性。

最后一步是通过从这个分布中采样来生成下一个Token。temperature 超参数在这个过程中起着至关重要的作用。 从数学上讲,这是一个非常简单的操作:模型输出 logits 只是简单地除以 temperature

  • temperature = 1:将 logits 除以 1 对 softmax 输出没有影响。
  • temperature < 1:较低的temperature通过锐化概率分布使模型更加自信和确定性,从而导致更可预测的输出。
  • temperature > 1:较高的temperature会创建更柔和的概率分布,从而在生成的文本中允许更多的随机性——有些人将其称为模型的“创造力”。

调整temperature,看看您如何在确定性和多样化输出之间取得平衡!

高级架构特性

有几种高级的架构特性可以增强 Transformer 模型的性能。 虽然这些特性对模型的整体性能很重要,但对于理解架构的核心概念来说并不那么重要。 层归一化、Dropout 和残差连接是 Transformer 模型中的关键组件,特别是在训练阶段。 层归一化可以稳定训练并帮助模型更快地收敛。 Dropout 通过随机停用神经元来防止过拟合。 残差连接允许梯度直接流经网络,并有助于防止梯度消失问题。

Layer Normalization

层归一化有助于稳定训练过程并改善收敛性。 它通过跨特征归一化输入来工作,确保激活值的均值和方差一致。 这种归一化有助于缓解与内部协变量偏移相关的问题,使模型能够更有效地学习并降低对初始权重的敏感性。 在每个 Transformer 块中应用两次层归一化,一次在自注意力机制之前,一次在 MLP 层之前。

Dropout

Dropout 是一种正则化技术,用于通过在训练期间将一部分模型权重随机设置为零来防止神经网络过拟合。 这鼓励模型学习更鲁棒的特征,并减少对特定神经元的依赖,帮助网络更好地泛化到新的、未见过的数据。 在模型推理期间,Dropout 被停用。这实质上意味着我们正在使用训练好的子网络的集合,这会带来更好的模型性能。

残差连接 Residual connections

残差连接最初是在 2015 年的 ResNet 模型中引入的。这种架构创新通过实现对非常深层的神经网络的训练, 彻底改变了深度学习。本质上,残差连接是绕过一层或多层的捷径,将一层的输入添加到其输出中。 这有助于缓解梯度消失问题,使得更容易训练具有多个 Transformer 块彼此堆叠的深度网络。 在 GPT-2 中,每个 Transformer 块中使用两次残差连接:一次在 MLP 之前,一次在 MLP 之后, 确保梯度更容易流动,并且早期层在反向传播期间接收到足够的更新。

交互功能

Transformer Explainer 旨在实现交互性,并允许您探索 Transformer 的内部工作原理。 以下是一些您可以使用的交互功能:

  • 输入您自己的文本序列,以查看模型如何处理它并预测下一个词。 探索注意力权重、中间计算结果,并查看如何计算最终输出概率。
  • 使用温度滑块来控制模型预测的随机性。 探索如何通过更改温度值来使模型输出更具确定性或更具创造性。
  • 与注意力图互动,以查看模型如何关注输入序列中的不同词元。 将鼠标悬停在词元上以突出显示其注意力权重,并探索模型如何捕获上下文和词语之间的关系。

Transformer Explainer 如何实现?

Transformer Explainer 的特色在于直接在浏览器中运行的 GPT-2(小型)实时模型。 该模型源自 Andrej Karpathy 的 nanoGPT 项目 中的 PyTorch GPT 实现,并已转换为 ONNX Runtime ,以实现无缝的浏览器内执行。 该界面使用 JavaScript 构建, Svelte 作为前端框架, D3.js 用于创建动态可视化。 数值会根据用户输入实时更新。

谁开发了本项目?

Aeree Cho, Grace C. Kim, Alexander Karpekov, Alec Helbling, Jay Wang, Seongmin Lee, Benjamin Hoover, and Polo Chau 中文翻译:Lewis Zhang