@antoniolupetti: 《理解Transformer与注意力机制》是一篇非常有趣的论文,它从应用数学的角度介绍了Transformer架构…

X AI KOLs Timeline 论文

摘要

一条推文重点介绍了一篇由Michel Fabrice Serret撰写的arXiv论文,该论文从应用数学的角度介绍了Transformer和注意力机制,涵盖了向量化、多头注意力以及降低注意力成本的方法,如KV缓存和Latent Attention。

《理解Transformer与注意力机制》是一篇非常有趣的论文,它从应用数学的角度介绍了Transformer架构。 论文首先将文本表示为向量,并从数学上解释注意力机制如何处理这些向量以编码上下文信息。随后,论文深入探讨了多头注意力,并展示了Transformer架构的主要组件是如何构建的。 论文还讨论了近年来为降低注意力的计算和内存成本而设计的更先进方法,包括KV缓存、分组查询注意力和潜在注意力。我认为对于任何希望超越高层架构去理解Transformer,并希望看清现代语言模型背后的线性代数的人来说,这是一份有用的参考。 https://arxiv.org/pdf/2604.00965
查看原文
查看缓存全文

缓存时间: 2026/08/03 01:37

The document continues. Let me translate the full document.Received. Continue translating the full document.


“Understanding Transformers and Attention Mechanisms” 是一篇非常有趣的论文,它从应用数学的视角介绍了 Transformer 架构。

论文首先展示了如何将文本表示为向量,并从数学上解释了注意力机制如何处理这些向量以编码上下文信息。随后,论文进一步阐述了多头注意力(Multi-Head Attention),并展示了 Transformer 架构的主要组件是如何构建的。

论文还讨论了近年来为降低注意力的计算和内存成本而设计的一些方法,包括 KV 缓存(KV caching)、分组查询注意力(Grouped Query Attention)和潜在注意力(Latent Attention)。我认为,对于任何希望不仅停留在高层架构层面、还想深入了解现代语言模型背后线性代数的读者来说,这是一份非常有用的参考资料。

https://arxiv.org/pdf/2604.00965


理解 Transformer 与注意力机制:面向应用数学家的入门介绍

来源:https://arxiv.org/html/2604.00965 Michel Fabrice Serret

摘要

本文档简要介绍了基于 Transformer 架构的现代语言模型中所使用的注意力机制。我们首先阐述文本如何被编码为向量,以及注意力机制如何处理这些向量以编码语义信息。然后,我们描述了多头注意力(Multi-Head Attention),考察了 Transformer 架构的构建方式,并探讨了它的一些变体。最后,我们简要介绍了降低注意力计算和内存成本的现代方法,即 KV 缓存(KV caching)、分组查询注意力(Grouped Query Attention)和潜在注意力(Latent Attention)。本材料面向应用数学界,是在 IPAM 研究合作研讨会“随机数值线性代数”(RNLA)背景下为“Transformer 模型中的随机化”项目撰写的入门介绍。

1 引言

参见图注 图 1:最多两个字符的字符级分词示例。

基于注意力机制的现代自然语言处理(NLP)方法并非以字符字符串的形式处理文本信息,而是将其作为向量序列进行处理。为了创建这些序列,文本被划分为连续的子字符串,称为词元(token),图 1(https://arxiv.org/html/2604.00965#S1.F1)中给出了一个示例。模型所使用的完整词元集合(称为词表)的选择至关重要。实际上,词表需要能够编码文本中包含的足够语义信息,以便针对特定模型实现其设计所要完成的自然语言处理任务。例如,预测文本中下一个词元的任务可能需要比将完整句子分类为两个类别的任务更精细的分词方式。然而,词表也应尽可能小,以避免稀释句子中包含的信息,并避免不必要地增加内存和计算成本。分词过程因语言而异,通常基于语言本身的结构。理想情况下,它会编码具有固有含义的最小字符串集合,即语言学中所定义的语素集合。其次,一旦文本被分解为词元序列,就需要进行向量化处理。在下文中,不失一般性地,可以将词元视为单词。

现在,给定一个有序集合 T=(T_i)_{1\leq i\leq N_T},其中包含 N_T 个可能的不同词元(我们称之为词表),我们可以通过词元的索引将文本表示为 T 中元素的序列。与文本关联的索引序列被称为分词结果。

给定词表后,嵌入步骤允许通过一个经过训练的线性映射将其表示为更低维空间中的向量。这也被称为向量化,因为每个词元由此被表示为一个向量。通常,这种嵌入以矩阵 E\in\mathbb{R}^{N_T\times d} 的形式给出,使得给定嵌入维度 d\in\mathbb{N}^*,词表中第 i 个词元 T_id 维向量化由 E 的第 i 行向量 E_i 给出,如图 2(https://arxiv.org/html/2604.00965#S1.F2)所示。这些嵌入矩阵可以是预训练好的,也可以通过专门的方法获得,并针对语言模型的用例进行微调;或者,在大多数现代大语言模型(LLMs)中,嵌入矩阵可以作为模型权重从头开始训练。为了解所涉及的矩阵规模,Llama 3 70b 的词表大小约为 \sim128k,嵌入维度为 8192;而 Gemma 3 27b 的词表大小约为 \sim262k,嵌入维度为 5376。请注意,这些是相对较小的开源模型。

参见图注 图 2:对于短语“the lazy dog”,基于词的分词器的句子嵌入示例。

此外,位置嵌入或特征嵌入(例如词元所属句子的嵌入)可以应用于词元嵌入向量序列,以丰富其中包含的语义信息。在某些模型中,例如 DeBERTa [He+21(https://arxiv.org/html/2604.00965#bib.bibx8)] 或 DeepSeek V2 [Dee+24(https://arxiv.org/html/2604.00965#bib.bibx4)],位置编码和词元嵌入被分开处理,要么通过拼接,要么通过设计实现。

2 注意力机制

参见图注 图 3:对于从图 2(https://arxiv.org/html/2604.00965#S1.F2)中的分词示例获得的嵌入,一个注意力层的示例。请注意,在此示例中,为简单起见,我们采用线性核,即对于任意 x\in\mathbb{R},我们设 f_\kappa(x)=x

注意力机制是 Transformer 架构 [Vas+17(https://arxiv.org/html/2604.00965#bib.bibx20)] 的构建模块,它通过类似数据库的结构允许对词元之间的语义信息进行编码 [Zha+24(https://arxiv.org/html/2604.00965#bib.bibx24)]。实际上,数据库可以被视为一组(键,值)元组 (k,v),这样当我们向数据库提交查询 q 时,数据库返回与键等于该查询(q=k)的元组相关联的值 v。类似地,设 X\in\mathbb{R}^{N_{KV}\times d_{\text{in}}}N_{KV} 个嵌入词元的集合,其维度为 d_{\text{in}},例如从图 2(https://arxiv.org/html/2604.00965#S1.F2)中获得的那些。如图 3(https://arxiv.org/html/2604.00965#S2.F3)所示,给定一个与其中一个词元关联的输入向量 x\in X,其输出由数据库中与每个词元 x'\in X 关联的“值”嵌入的线性组合给出,加权系数由与 x 的查询嵌入 qx' 的“键”嵌入 k' 相关联的相似性度量决定。正如我们将在下一节中看到的,在现代语言模型中,注意力机制被用作模块(文献中称为层),并与其他类型的层顺序交织以构建语言模型。现在,让我们更正式地描述单个注意力“层”的基本机制。

2.1 通用的注意力机制

考虑给定的矩阵 X^Q\in\mathbb{R}^{N_Q\times d_{\text{in}}^Q},它包含 N_Q\in\mathbb{N}^* 个输入查询向量,以及矩阵 X^K\in\mathbb{R}^{N_{KV}\times d_{\text{in}}^K}X^V\in\mathbb{R}^{N_{KV}\times d_{\text{in}}^V},它们分别包含 N_{KV}\in\mathbb{N}^* 个输入键向量和值向量,其中 d_{\text{in}}^Q,d_{\text{in}}^K,d_{\text{in}}^V\in\mathbb{N}^* 分别是这些向量的维度。在下文中,为简单起见,由于查询、键和值输入在大多数情况下来自相同的嵌入,我们取 d_{\text{in}}^Q=d_{\text{in}}^K=d_{\text{in}}^V=d_{\text{in}}

示例:在与 chatGPT 的对话中,由 Q 的行给出的 N_Q 个查询向量将对应于用户向模型提出的最后一个问题中的 N_Q 个词元,而由 K 的行编码的 N_{KV} 个键向量和由 V 的行编码的值向量,将对应于整个对话中的每个词元。虽然在一般情况下,对于同一词元,键向量和值向量可以从不同的来源嵌入,但在聊天场景中,它们对应于相同的输入向量,即如图 2(https://arxiv.org/html/2604.00965#S1.F2)中所示的相关词元的嵌入 X

此外,需要注意的是,在一般情况下,键和值输入将被共享,因为它们通常对应于同一个“对象”的两种嵌入,而查询键可以对应于另一个对象。正如我们将在原始 Transformer 解码器的交叉注意力模块中看到的,键和值向量对应一种语言中句子的词元,而查询向量对应于该句子在另一种语言中的翻译的预测词元。对于 GPT 模型(如 chatGPT),注意力机制的输入都来自同一个来源。查询和键/值向量的唯一区别在于,当向模型提出一个新问题时,如果讨论中的键/值向量已经被存储,则只需要计算来自该问题的新查询向量;这被称为流式注意力 [Han+25(https://arxiv.org/html/2604.00965#bib.bibx7)]。

注意力机制的第一步是通过对查询、键和值输入向量应用线性变换来构建嵌入。我们将相关的模型权重表示为 W^Q\in\mathbb{R}^{d_{\text{in}}^Q\times d_{QK}}W^K\in\mathbb{R}^{d_{\text{in}}^K\times d_{QK}}W^V\in\mathbb{R}^{d_{\text{in}}^V\times d_{\text{out}}},其中 d_{QK}d_V 分别是查询与键嵌入的共享维度以及值嵌入维度。虽然理论上这些维度可以不同,但在实践中它们通常彼此相等。我们将相关的查询、键和值矩阵表示为

Q=X^QW^Q\in\mathbb{R}^{N_Q\times d_{QK}},\quad K=X^KW^K\in\mathbb{R}^{N_{KV}\times d_{QK}},\quad V=X^VW^V\in\mathbb{R}^{N_{KV}\times d_V}.

相似性度量通常以核 \kappa:\mathbb{R}^{d_{QK}}\times\mathbb{R}^{d_{QK}}\to\mathbb{R} 的形式给出,它允许为 N_Q 个查询索引和 N_{KV} 个键/值索引的每个元组 (i,j)\in\llbracket 1,N_Q\rrbracket\times\llbracket 1,N_{KV}\rrbracket 获得注意力分数,

A=\Big(\kappa(Q[i,:],K[j,:])\Big)_{\begin{subarray}{c}1\leq i\leq N_Q\\ 1\leq j\leq N_{KV}\end{subarray}}\in\mathbb{R}^{N_Q\times N_{KV}},

其中我们用 B[i,:] 表示矩阵 B 的第 i 行向量。请注意,核通常具有以下形式

\kappa(v,w)=f_\kappa\left(\langle v,w\rangle\right),

对于给定的函数 f_\kappa:\mathbb{R}\to\mathbb{R},我们将在本文档中使用此记号以简化某些方程。此外,将 f_\kappa 逐元素应用于矩阵 M 将表示为 f_\kappa(M)。由于我们希望模拟在给定查询下键/值输入集合上的概率分布,因此需要归一化步骤;归一化系数通过对角矩阵 Z\in\mathbb{R}^{N_Q\times N_Q} 的逆获得,该对角矩阵的非零元素是 A 的各行之和,即

Z[i,i]=\sum\limits_{1\leq j\leq N_{KV}}\kappa\left(Q[i,:],K[j,:]\right),\quad\forall i\in\{1,\dots,N_Q\}.

归一化的注意力分数,即乘积 Z^{-1}A,在文献中被称为注意力权重。注意力机制的最终输出为

Y=Z^{-1}AV\in\mathbb{R}^{N_Q\times d_{\text{out}}}.

请注意,注意力机制的输出维度由值维度给出,即 d_{\text{out}}=d_V

最常用的核是原始 Transformer [Vas+17(https://arxiv.org/html/2604.00965#bib.bibx20)] 中使用的缩放指数核,对于任意 v,w\in\mathbb{R}^{d_{QK}},其定义为 \kappa(v,w)=\exp\left(\frac{\langle v,w\rangle}{\sqrt{d_{QK}}}\right).

它源于这样的事实:如果 vw 的元素来自均值为零、方差为 1 的独立同分布,那么 \langle v,w\rangle 的方差为 d_{QK}。因此,分母重新缩放内积,使其方差为 1。给定矩阵 QK,注意力分数可以通过 A=\exp\left(\frac{QK^{\mathsf{T}}}{\sqrt{d_{QK}}}\right) 获得,其中指数是逐元素应用的。在这种情况下,注意力权重等于 softmax 函数 \sigma:\mathbb{R}^N\to\mathbb{R}^N 应用于查询-键内积的结果。softmax 函数定义为 \sigma:x\in\mathbb{R}^N\mapsto\frac{1}{\sum\limits_{\ell=1}^N e^{x_\ell}}\begin{pmatrix}e^{x_1}&\dots&e^{x_N}\end{pmatrix}^{\mathsf{T}},因此,对于任意 i\in\{1,\dots,N_Q\}(Z^{-1}A)[i,:]=\sigma\left(\frac{Q[i,:]K^{\mathsf{T}}}{\sqrt{d_{QK}}}\right)

2.2 多头注意力

为了使注意力机制能够关注更多类型的语义信息,可以在相同的输入向量上使用多个并行的注意力头。最简单的方法是考虑堆叠的单注意力头,并限制它们必须具有相同的输出维度 d_{\mathrm{head}},即对于任意 h\in\llbracket 1,N_{\mathrm{heads}}\rrbracketW^V_h\in\mathbb{R}^{d_{\text{in}}^V\times d_{\mathrm{head}}}。设 N_{\mathrm{heads}}\in\mathbb{N}^* 为注意力头的数量,对于任意 h\in\llbracket 1,N_{\mathrm{heads}}\rrbracket,我们用 W^Q_h,W_h^KW_h^V 表示与第 h 个头相关联的查询、键和值嵌入矩阵。对于每个头 h\in\llbracket 1,N_{\mathrm{heads}}\rrbracket,注意力分数可以通过

A_h=\Big(\kappa\left(Q_h[i,:],K_h[j,:]\right)\Big)_{\begin{subarray}{c}1\leq i\leq N_Q\\ 1\leq j\leq N_{KV}\end{subarray}}=f_\kappa(Q_hK_h^{\mathsf{T}})

获得,其中 Q_h=X^QW^Q_h\in\mathbb{R}^{N_Q\times d_{QK}}K_h={X^K}{W_h^K}\in\mathbb{R}^{N_{KV}\times d_{QK}},并且 \kappa 被逐元素应用。我们注意到,在一般情况下,对于每个头 hd_{QK}=d_{\mathrm{head}}。类似地,我们设

V_h=X^VW^V_h,\quad Z_h=\operatorname{diag}\left(\sum_{1\leq j\leq N_{KV}}\kappa\left(Q_h[i,:],K_h[j,:]\right)\right)_{1\leq i\leq N_Q}.

每个头 h\in\llbracket 1,N_{\mathrm{heads}}\rrbracket 的输出由 Y_h = Z_h^{-1} A_h V_h \in \mathbb{R}^{N_Q \times d_{\mathrm{head}}} 给出。多头注意力的输出是将各头的输出沿特征维度拼接后,再通过一个线性映射得到,即

Y = \left[\,Y_1 \;\; Y_2 \;\; \cdots \;\; Y_{N_{\mathrm{heads}}}\,\right] W^O \in \mathbb{R}^{N_Q \times d_{\text{out}}},

其中 W^O \in \mathbb{R}^{(N_{\mathrm{heads}} \cdot d_{\mathrm{head}}) \times d_{\text{out}}} 是输出投影矩阵。这种设计允许模型在不同子空间中并行地关注信息。

相似文章

@currying: 非常棒的13页讲解!

X AI KOLs Timeline

一条推文重点介绍了《理解Transformer与注意力机制》,这是一篇13页的论文,从应用数学的角度解释了Transformer架构和注意力机制。