LLM:Transformer 架构中Q/K/V计算步骤示例

用假的小数字(比如 2 维向量)手算一遍 \(QK^\top\) → softmax → 乘 V,把矩阵乘法也摊开。

假数字、2 维向量、3 个词手算一遍。句子缩成:

「小猫 / 吃 / 它」

(只为把矩阵算清楚;真实模型是几百~几千维、上万词表。)


设定

维度 \(d_k = 2\),缩放因子 \(\sqrt{d_k} = \sqrt{2} \approx 1.414\)。

假造的 Q、K、V(每个词一行):

Query \(Q\)

\(Q\)
小猫 \([1.0,\ 0.0]\)
\([0.0,\ 1.0]\)
\([0.9,\ 0.1]\)

Key \(K\)

\(K\)
小猫 \([1.0,\ 0.2]\)
\([0.1,\ 1.0]\)
\([0.8,\ 0.3]\)

Value \(V\)

\(V\)(想象成「语义内容」)
小猫 \([10,\ 0]\) ← 主体信息
\([0,\ 10]\) ← 动作信息
\([1,\ 1]\) ← 代词本身很空

写成矩阵(行 = 词):

\[ Q=\begin{bmatrix}1.0&0.0\\0.0&1.0\\0.9&0.1\end{bmatrix},\; K=\begin{bmatrix}1.0&0.2\\0.1&1.0\\0.8&0.3\end{bmatrix},\; V=\begin{bmatrix}10&0\\0&10\\1&1\end{bmatrix} \]


步骤 1:算 \(QK^\top\)(每个 Q 和每个 K 的点积)

\(K^\top\) 是 \(K\) 的转置:

\[ K^\top=\begin{bmatrix}1.0&0.1&0.8\\0.2&1.0&0.3\end{bmatrix} \]

「它」那一行(第 3 行)先手算:
\[ \begin{aligned} Q_{\text{它}}\cdot K_{\text{小猫}} &= 0.9\times1.0 + 0.1\times0.2 = 0.92 \\ Q_{\text{它}}\cdot K_{\text{吃}} &= 0.9\times0.1 + 0.1\times1.0 = 0.19 \\ Q_{\text{它}}\cdot K_{\text{它}} &= 0.9\times0.8 + 0.1\times0.3 = 0.75 \end{aligned} \]

完整分数矩阵 \(S = QK^\top\):

\[ S=\begin{bmatrix} 1.00 & 0.10 & 0.80 \\ 0.20 & 1.00 & 0.30 \\ 0.92 & 0.19 & 0.75 \end{bmatrix} \begin{matrix} \leftarrow\text{小猫看三人}\\ \leftarrow\text{吃看三人}\\ \leftarrow\text{它看三人} \end{matrix} \]

行 = 谁在问(Query),列 = 被看谁(Key)。


步骤 2:缩放 \(S / \sqrt{d_k}\)

\[ \frac{S}{\sqrt{2}}\approx\begin{bmatrix} 0.707 & 0.071 & 0.566 \\ 0.141 & 0.707 & 0.212 \\ 0.650 & 0.134 & 0.530 \end{bmatrix} \]

只盯 「它」 那一行:\([0.650,\ 0.134,\ 0.530]\)


步骤 3:对该行做 Softmax(变成权重)

Softmax:

\[ \alpha_j = \frac{e^{z_j}}{\sum_k e^{z_k}} \]

对「它」:

\[ \begin{aligned} e^{0.650} &\approx 1.916 \\ e^{0.134} &\approx 1.143 \\ e^{0.530} &\approx 1.699 \\ \text{和} &\approx 4.758 \end{aligned} \]

\[ \alpha_{\text{它}} \approx \begin{bmatrix} \frac{1.916}{4.758} & \frac{1.143}{4.758} & \frac{1.699}{4.758} \end{bmatrix} \approx \begin{bmatrix}0.403 & 0.240 & 0.357\end{bmatrix} \]

被看的词 小猫
注意力权重 40.3% 24.0% 35.7%

「它」最关注「小猫」,也看一点自己和「吃」——和前面指代故事一致(数字是假的,方向对就行)。


步骤 4:权重 × Value,得到「它」的新向量

\[ \begin{aligned} \text{输出}_{\text{它}} &= 0.403\cdot[10,\ 0] + 0.240\cdot[0,\ 10] + 0.357\cdot[1,\ 1] \\ &= [4.03,\ 0] + [0,\ 2.40] + [0.357,\ 0.357] \\ &= [4.387,\ 2.757] \end{aligned} \]

对比更新前后:

向量 含义
原来的 \(V_{\text{它}}\) \([1,\ 1]\) 几乎没信息
注意力后的输出 \([4.39,\ 2.76]\) 大量掺进了「小猫」的 10,也带一点「吃」

也就是说:代词位置的表示,被「小猫」的 Value 填实了。


步骤 5:整句一次算完(矩阵形式)

对每一行 Softmax 后,假设得到权重矩阵 \(A\)(示意,前两行我也算完):

\[ A\approx\begin{bmatrix} 0.40 & 0.21 & 0.39 \\ 0.24 & 0.43 & 0.33 \\ 0.40 & 0.24 & 0.36 \end{bmatrix} \]

然后:

\[ \text{Output} = A V \]

每一行都是「该词看完全句后」的新表示。这就是公式

\[ \mathrm{Attention}(Q,K,V)=\mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V \]

的全部内容——没有别的魔法。


对照记忆(对着刚才的数字)

  1. \(QK^\top\):它·小猫 = 0.92 最高 →「问得对」
  2. \(\sqrt{d_k}\):只是降温,防止分数太大
  3. softmax:0.92 变成约 40% 权重
  4. ×V:40% × \([10,0]\) → 输出里出现「小猫」的语义成分

和真实 Transformer 差在哪(心里有数即可)

玩具例子 真实模型
手写 Q/K/V 由 \(XW_Q, XW_K, XW_V\) 学出来
2 维、3 个词 常是 64~128 维/头,序列很长
1 个头 多头并行再拼接
一层 堆很多层,层层 refined

LLM:Transformer 架构中Q/K/V计算步骤示例

http://blog.gxitsky.com/2026/08/17/AI-LLM-05-QKV-Sample/

作者

光星

发布于

2026-08-17

更新于

2026-08-17

许可协议

评论