>
> 假设用户输入:“苹果是什么颜色”
> 模型需要预测下一个词:“红”。
>
> 为了达到向量级别的直观理解,我们假设模型内部的隐藏层维度是 4维(实际中通常是4096维或更高),并且为了简化,我们假设模型只有 1个注意力头(Head) 和 1层网络。
>
> 以下是完整的计算全流程:
### 第一阶段:文本变向量(Embedding)
模型无法直接理解汉字,所以首先要把输入的三个词(Token)变成向量:
* Token 1 (“苹果”) → 变成 4维向量 $X_1$
* Token 2 (“是”) → 变成 4维向量 $X_2$
* Token 3 (“什么”) → 变成 4维向量 $X_3$
### 第二阶段:Q、K、V 是怎么算出来的?
模型内部有三套固定的“滤镜”(也就是训练好的权重矩阵):$W_Q$、$W_K$、$W_V$。它们的作用是把输入的向量“投影”成三个不同角色的向量。
以 Token 1 (“苹果”) 为例,它的向量 $X_1$ 会分别乘以这三个权重矩阵:
* **Q (Query)** = $X_1 \times W_Q$
* *物理含义*:“我是谁?我想找什么信息?”(相当于搜索引擎里的**搜索词**)
* **K (Key)** = $X_1 \times W_K$
* *物理含义*:“我是什么特征?别人能怎么搜到我?”(相当于网页的**标签/索引**)
* **V (Value)** = $X_1 \times W_V$
* *物理含义*:“我具体携带了什么内容?”(相当于网页的**正文内容**)
同样的过程也会发生在“是”和“什么”身上。此时,每个词都有了自己的 Q、K、V 向量。
### 第三阶段:KV Cache 登场(避免重复劳动)
在实际推理中,为了避免每次预测新词都把前面的词重算一遍,模型会把前面算好的 K 和 V 存进显存,这就是 **KV Cache**。
* 存入缓存:Token 1 的 $K_1, V_1$;Token 2 的 $K_2, V_2$;Token 3 的 $K_3, V_3$。
### 第四阶段:预测下一个词(核心注意力计算)
现在,模型要根据前面的话,预测下一个词。此时,只有最后一个词(Token 3 “什么”)需要充当“提问者”。
**Step 1:生成新的 Query**
模型只计算 Token 3 的 Q:
* $Q_3 = X_3 \times W_Q$
**Step 2:Q 与历史 K 算相似度(打分)**
拿 $Q_3$ 去和 KV Cache 里所有的 K 做“点积(Dot Product)”运算,看看谁跟当前的问题最匹配:
* 分数1 = $Q_3 \cdot K_1$ (“什么”和“苹果”相关吗?)
* 分数2 = $Q_3 \cdot K_2$ (“什么”和“是”相关吗?)
* 分数3 = $Q_3 \cdot K_3$ (“什么”和“什么”相关吗?)
*(注:因为因果掩码机制,Token 3 只能看它自己和前面的词,不能偷看未来的词)*
**Step 3:Softmax 归一化(分配注意力预算)**
把上面的分数通过 Softmax 函数,变成加起来等于 100% 的权重(概率)。假设算出来的结果是:
* 权重1 = 0.7 (高度关注“苹果”)
* 权重2 = 0.1 (略微关注“是”)
* 权重3 = 0.2 (关注“什么”)
**Step 4:用权重去提取 V 的内容(加权求和)**
用上面的权重,去 KV Cache 里把对应的 V 捞出来,按比例混合:
* **最终输出向量** = $(0.7 \times V_1) + (0.1 \times V_2) + (0.2 \times V_3)$
这个“最终输出向量”是一个融合了上下文信息的新向量,它现在包含了极强的“水果、颜色”的语义特征。
### 第五阶段:输出预测结果
这个融合了上下文的向量,会穿过模型最后的输出层(一个巨大的矩阵乘法),映射回整个词表(比如几万个词)。
模型会给词表里的每个词打一个分(Logits):
* “红” 的得分:9.5
* “绿” 的得分:6.2
* “苹果” 的得分:1.1
* “的” 的得分:0.5
最后,通过采样策略(比如选分数最高的,或者按概率随机抽一个),模型选出了得分最高的 **“红”**。
然后,“红”会被变成新的向量,追加到 KV Cache 中,继续去预测下一个词“色”。这就是大模型“一个字一个字往外蹦”的底层真相!
---
通过这个例子,你能直观感受到 Q、K、V 的分工以及 KV Cache 的作用了吗?如果这部分消化得差不多了,我们可以接着聊聊:当上下文长达几万字时,这个 $Q \cdot K$ 的点积计算会导致显存爆炸,业界是怎么用 **PagedAttention(分页注意力)** 像操作系统管理内存一样解决这个问题的?