Transformer 网络结构详解(一):注意力机制与 QKV

[!abstract] 摘要
用通俗案例讲清 Transformer 注意力机制:从人类视觉的两种注意力(非自主 / 自主)出发,解释 QKV 三大向量的含义与注意力公式,并通过查询表中张姓平均年龄的实例演示完整计算流程。

在 Transformer 机制中,注意力机制到底是什么?QKV 三个向量又是怎么工作的?

我们先来看这句句子:

“我昨天在图书馆读了一本很有趣的书。”

假设你是个语言模型,正处理最后一个词“书”。你怎么知道这个“书”是“有趣的”,还是“图书馆的”?它和句子中哪个词关系最密切?

这就需要模型具备:

1. 人类视觉中的注意力机制

人类的注意力,主要由两种机制驱动:

1.1. 非自主性提示:被动地被吸引

假设你面前有这些物品:

📰 报纸、📄 论文、📒 笔记本、📚 一本书,☕ 还有一个红色的咖啡杯

除了咖啡杯,其它全是黑白印刷。结果你自然会第一眼就盯向咖啡杯

这就是一种“非自主”的视觉注意力行为:

颜色/形状/位置等显著特征 → 引发下意识的注意力聚焦

图片

图 1:由于突出性的非自主性提示,注意力不自主地指向了咖啡杯(图片引自 [1])

1.2. 自主性提示:目标驱动的注意

喝完咖啡后,你决定读书,于是把注意力从咖啡转向书本。这就是你根据目标意图,主动调整注意力焦点

我现在有读书的任务 → 我的注意力就应该去“找书”

图片

图 2:目光从咖啡杯转向了书本(图片引自 [1])

1.3. 回到神经网络中的注意力机制

Transformer 模型的注意力操作,其实就是在模拟这两种选择行为:

  • 模型自动识别哪些词在上下文中显著(非自主)
  • 同时结合当前任务目标,关注相关词(自主)

2. Q、K、V:工程实现的三大核心向量

为了实现“选择性关注”,Transformer 使用三组向量来操作:

符号 含义 类比于人类
Q(Query) 查询向量 当前的注意目标
K(Key) 键向量 上下文中各位置的信息标签
V(Value) 值向量 上下文中各位置实际携带的内容

注意力机制的工作流程:

  1. 当前词(Query)对所有词(Key)做相似度计算(谁最相关?)
  2. 用 softmax 得到权重分布(非均匀注意)
  3. 用权重加权所有 Value,得到新的表示(重点整合信息)

数学公式如下:

$$
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
$$

注意力机制的最终输出结果可以理解为“查询(Query)得到的值(Value)”。

再回到最初那句话

“我昨天在图书馆读了一本很有趣的书。”

当模型处理“书”这个词时:

  • Q 是“书”的查询向量表示,代表含义是“我想看谁”
  • K/V 是整个句子中所有词的 Key(键)/Value(值)向量表示

通过计算注意力权重,模型会更关注“读”、“有趣”、“图书馆”这些词,从而理解“书”与它们的关系。

📌举一个更具体案例,来辅助理解 QKV 作用以及注意力机制。

假设存在一个数据表,其中**“键”为数据表中的人名,“值”为他们各自的年龄**,如下所示:

张三 张三-2 李四 张麻子
18 20 22 19

如果我需要做一次查询,获取姓张的所有人的平均年龄,那么在这次查询(Query)中,注意力机制计算的是查询获得的值(平均年龄)

在这个案例中,注意力可以理解为对全局信息的一次查询(Query),获得相应的查询值(Value)

在计算机实际计算时,“键”通常会被建模为嵌入表示(向量),如上例中:

张三→[1, 2, 0]; 李四→[0, 0, 2]; 张麻子→[1, 4, 0]

那么数据表变成了:

[1, 2, 0] [1, 2, 0] [0, 0, 2] [1, 4, 0]
18 20 22 19

在上表中,查询键和值为:

K = [[1, 2, 0], [1, 2, 0], [0, 0, 2], [1, 4, 0]]  →  dk = 3 = dq
V = [[18], [20], [22], [19]]  →  dv = 1

一次查询 Query 为查找表中张姓的平均年龄,那么查询向量可以看作为 q = [1, 0, 0](注:Attention 中查询 Q 为多次查询构成的矩阵),那么查询值(张姓平均年龄)为:

$$
\text{张姓平均年龄} = \text{softmax}\left(\frac{qK^T}{\sqrt{d_k}}\right)V
$$

其中softmax是一种归一化函数,常用于将一组实数转换为概率分布。它会放大数值之间的差异,使较大的输入对应更高的权重,常用于注意力机制中对不同信息的重要性进行加权:

$$
\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}}
$$

其输出总和为 1,便于作为“注意力权重”使用。

3. 图像引用

[1] https://zh-v2.d2l.ai/chapter_attention-mechanisms/attention-cues.html