Transformer 自注意力机制演示
通过矩阵可视化、逐步讲解和动态高亮,拆解自注意力里的 Q、K、V、打分矩阵、Softmax 和最终上下文向量,让抽象公式变成可观察的计算过程。
这个页面现已纳入 SimLabs LLM 可视化 系列,也可以先回到路线图按顺序学习。
我们有 3 个单词(例如 "The", "cat", "sat"),每个词用 4 维向量表示。输入矩阵 $X \in \mathbb{R}^{3 \times 4}$,其中行数代表词的数量,列数代表词向量的维度。
将输入矩阵 $X$ 分别与三个可学习的权重矩阵 $W^Q, W^K, W^V$ 相乘,生成 Query(查询)、Key(键)、Value(值)矩阵。关键不是“重复算三次”,而是让同一个词分别承担三种不同职责。
我现在想找什么?
Q 决定当前词发出的“问题”。它告诉模型:我应该重点寻找哪一类信息。
- 更像“检索条件”
- 决定我要关注谁
我身上有哪些标签?
K 决定这个词如何被别人找到。其他词会拿自己的 Q 来和我的 K 做匹配。
- 更像“索引标签”
- 决定我是否值得被看
如果关注我,我提供什么内容?
V 是真正会被拿去加权汇总的信息本体。注意力高的词,会贡献更多自己的 V。
- 更像“正文内容”
- 决定最后输出里留下什么
同一个词,为什么要变成三种向量?
选中一个词,看看它如何从原始输入 $X$,分别投影成 Q、K、V。这样更容易看出:同一个词在注意力里同时扮演“提问者”“被检索者”“信息提供者”三种身份。
原始输入 X
这是词的基础语义表示,还没有区分“查找”“匹配”“提供内容”这三种用途。
变成 Q
把它改写成“我现在想找什么特征”的向量,用来主动提问。
变成 K
把它改写成“我身上带着哪些标签”的向量,等别人来匹配。
变成 V
把它改写成“如果被关注,我该贡献什么信息”的向量。
提前把后续流程串起来看: 当前观察的是 {{ selectedTokenDetails.label }}。它会先拿自己的 Q 去和全句每个词的 K 做点积打分,再把得到的注意力权重分配到各个词的 V 上,最后形成输出向量 Z = {{ formatVector(selectedTokenDetails.z) }}。
用 Query 矩阵 $Q$ 乘以 Key 矩阵的转置 $K^T$,得到原始的注意力打分矩阵。矩阵中的每个元素 $\text{Scores}_{ij}$ 表示第 $i$ 个词对第 $j$ 个词的关注程度(相关性)。
逐格看 Q × KT 是怎么乘出来的
当前高亮的是 {{ activeScoreDemo.queryLabel }} 的 Query 行,以及 {{ activeScoreDemo.keyLabel }} 在转置后对应的 Key 列。它们做点积之后,结果会落在 Scores 的目标单元格里。
{{ activeScoreDemo.queryLabel }} 的 Q 向量是 {{ formatVector(activeScoreDemo.qVector) }},{{ activeScoreDemo.keyLabel }} 的 K 向量是 {{ formatVector(activeScoreDemo.kVector) }}。
首先将打分矩阵除以 $\sqrt{d_k}$(本例中 $d_k = 3$,所以除以 $\sqrt{3} \approx 1.732$)进行缩放,防止梯度消失。然后对每一行应用 Softmax 函数,将打分转化为概率分布(每行和为 1),得到最终的注意力权重矩阵。
用注意力权重矩阵乘以值矩阵 $V$,进行加权求和。最终得到的输出矩阵 $Z$ 就是融合了整个句子上下文信息的新词向量表示。每个词的新表示都包含了它对其他词的关注信息。
Transformer 核心:自注意力机制 (Self-Attention) 原理解析
引言:从词到向量 (Word to Vector)
计算机无法直接理解文字,只能处理数字。因此,我们需要将每个单词转换为一个数字向量(Embedding)。例如,句子 "The cat sat" 中的三个词,每个词被表示为一个 4 维向量,形成输入矩阵 $X \in \mathbb{R}^{3 \times 4}$(3 个词,每个词 4 维)。
一、核心魔法:自注意力机制 (Self-Attention)
在传统的序列模型(如 RNN/LSTM)中,文字是按顺序一个一个处理的。而 Transformer 的颠覆性在于它打破了时间顺序,让句子中的所有词在同一时间相互审视,这就是自注意力机制。
1.1 核心角色:Q, K, V
自注意力机制的核心是将输入矩阵 $X$ 分别乘以三个可学习的权重矩阵,得到三个新矩阵:
- Q (Query, 查询): 当前词想寻找什么特征?(比如 "bank" 作为主体去询问其他词,想搞清楚自己是"银行"还是"河岸")
- K (Key, 键): 句子中的每个词身上带有什么特征标签?用于与 Query 进行匹配。
- V (Value, 值): 如果匹配上了,这个词实际能提供的具体信息内容是什么。
生成 Q, K, V 的公式:
$$ Q = XW^Q, \quad K = XW^K, \quad V = XW^V $$其中 $W^Q, W^K, W^V \in \mathbb{R}^{d_{model} \times d_k}$ 是可学习的权重矩阵。
可以这样快速记忆 Q / K / V:
Q 像搜索词,K 像每个词贴出来的标签,V 像标签背后的正文内容。
当前词先拿自己的 Q 去扫描全句的 K,决定“该看谁”;然后按权重把这些词的 V 汇总起来,形成新的上下文表示。
1.2 数学推导公式
整个自注意力的计算可以浓缩为一个优雅的矩阵公式:
$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$1.3 公式步骤拆解
- 步骤 1:计算相关性打分 $QK^T$
用 Query 矩阵 $Q$ 去点乘所有词的 Key 矩阵 $K$ 的转置。点积越大,说明两个词的特征越匹配,关联度越高。结果是一个 $3 \times 3$ 的打分矩阵,其中 $\text{Scores}_{ij}$ 表示第 $i$ 个词对第 $j$ 个词的关注程度。 - 步骤 2:缩放 (Scale)
除以 $\sqrt{d_k}$(在本演示中 $d_k = 3$,所以除以 $\sqrt{3} \approx 1.732$)。这是为了防止维度较高时,点积的结果过大,导致后续的 Softmax 函数梯度消失。 - 步骤 3:Softmax 归一化
将缩放后的打分矩阵的每一行进行 Softmax 操作,转化为概率分布(每行的和为 1)。这代表了当前词分配给句子中所有词的注意力权重。 - 步骤 4:加权求和
用刚才计算出的注意力权重矩阵乘以值矩阵 $V$,进行加权求和。最终得到的输出 $Z$,就是融合了整个句子上下文语境的全新词向量表示。
二、多头注意力 (Multi-Head Attention)
在实际的 Transformer 中,会使用多个注意力头(Multi-Head)。每个头使用不同的 $W^Q, W^K, W^V$ 权重矩阵,从不同的子空间(视角)去理解句子:
- 有的头可能关注语法结构(主谓宾关系)
- 有的头可能关注语义相似性(同义词、近义词)
- 有的头可能关注时态和情态
三、位置编码 (Positional Encoding)
自注意力机制本身是无序的(类似词袋模型),它无法区分 "猫咬狗" 和 "狗咬猫"。因此,Transformer 必须通过位置编码来注入位置信息。常用的方法是使用正弦和余弦函数:
位置编码会被加到词嵌入向量上,形成最终的输入表示。
四、前馈网络与残差连接 (FFN & Residual Connection)
在自注意力层之后,Transformer 还会经过一个前馈神经网络(Feed-Forward Network):
同时,为了防止梯度消失和加速训练,Transformer 使用了残差连接(Residual Connection)和层归一化(Layer Normalization):
五、总结
Transformer 的核心创新在于自注意力机制,它让模型能够并行处理整个序列,并动态地关注序列中的不同部分。通过 Q、K、V 三个矩阵的巧妙设计,Transformer 实现了高效的上下文建模,成为了现代 NLP(如 GPT、BERT)和多模态模型(如 CLIP、Stable Diffusion)的基石。
自注意力机制:为什么有效
自注意力机制之所以强大,是因为它从根本上解决了传统神经网络(如RNN、LSTM)处理序列数据时的两大核心缺陷:长距离依赖难题与并行计算瓶颈。以下从五个维度拆解其有效性的根源。
1. 解决“忘事”问题:长距离依赖
在RNN或LSTM中,信息按顺序传递,句子越长,开头的信息越容易衰减(梯度消失),导致模型“忘了开头”。
- 自注意力优势:每个词可以直接与序列中的所有词(包括最开头的词)进行交互计算。
- 物理意义:无论两个词相隔多远,自注意力都能建立“短路连接”,直接衡量它们的相关性。
例如句子:“那个在公园里遛狗的人,穿了一件红色的衣服。” 自注意力可让“人”和“红色的衣服”直接关联,不受中间长句的干扰。
2. 并行计算与“上帝视角”
RNN必须按时间步依次计算(处理完第1个字才能处理第2个),限制了GPU并行能力。
- 自注意力优势:可一次性接收整个句子,通过矩阵运算同时计算所有词之间的相关性。
- 物理意义:相当于在第一步就拥有“上帝视角”,看到句子全貌,而非逐步爬行。这充分利用了现代硬件的并行能力,大幅提升训练速度。
3. 动态权重分配:关注重点
卷积神经网络(CNN)的卷积核参数是静态的,无论输入内容如何变化,提取特征的方式固定。
- 自注意力优势:注意力权重是动态生成的,完全依赖于当前的输入内容。
- 物理意义:模型可根据上下文实时调整关注点。例如处理代词“它”时,自注意力会给前文的名词(如“苹果”或“汽车”)分配更高权重,帮助消歧。这种动态性赋予了模型极强的灵活性。
4. 多重表示:构建丰富的语义地图
Transformer使用多头注意力(Multi-Head Attention),即并行执行多组自注意力计算。
- 自注意力优势:不同的“头”可以学习不同层面的依赖关系。
- 物理意义:
- 有的头关注语法关系(如主语与谓语);
- 有的头关注指代关系(如“小明”和“他”);
- 有的头关注临近词修饰(如形容词与名词)。
5. 数学本质:特征向量的加权求和
自注意力核心公式:
Attention(Q, K, V) = softmax( QKT / √dk ) V
- QKT:计算相似度矩阵,衡量每个元素与其他所有元素的匹配程度。
- Softmax:将匹配度转换为概率分布(权重),使所有权重之和为1。
- 乘以V:根据计算出的权重,对所有Value向量进行加权求和——权重越大,该位置对最终输出的贡献越大。
总结
自注意力机制通过全局感知、动态加权、并行计算,突破了传统模型在长序列建模和语义捕捉上的瓶颈。它不仅让模型“看见”每个词,更深刻地理解了词与词之间的相互作用——这正是它有效的根本原因。