Transformer 初探:Q/K/V 到底在算什么
Transformer 是我接触语言模型后第一个”看起来不难、想深了头皮发麻”的概念。这篇先记录最核心的一层直觉:注意力机制 = 加权求和。
一句话直觉
对一个序列里的每个 token,我们都算一个”我该把注意力放在谁身上”的权重分布,然后用这个权重去加权求和所有 token 的值,得到这个 token 的新表示。就这么简单——复杂的是”权重怎么算”。
Q/K/V:一次查询的过程
把 Q/K/V 想象成一场会议:
- Query(查询):当前 token “想找什么信息”
- Key(键):每个 token “我有什么信息可以给”
- Value(值):每个 token “我真正给出的内容”
流程:当前 token 的 Query 与所有 token 的 Key 做点积,得到相似度分数;除以 $\sqrt{d_k}$(维度缩放,防止点积过大把 softmax 推入饱和区);再过 softmax 变成权重;最后用权重加权求和 Value。
\[\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\]softmax 权重的含义
softmax 把相似度分数变成和为 1 的概率分布。于是每个输出向量都是”全体 token 的凸组合”——它融合了整个上下文,这正是”自注意力”里”自”的含义:注意力分布是由序列自身的内容决定的,不是外部给定的。
多头注意力在做什么
一个注意力头只能捕捉一种”查询方式”(比如”找名词的修饰语”),多头就是并行跑多组不同的 Q/K/V 投影,让模型同时关注不同类型的依赖关系,最后拼接。类比:一个厨师只能专注一个菜,多个厨师并行,出锅后再拼成一桌。
RoPE:位置编码的初印象
自注意力本身对位置是”无感”的(交换 token 顺序,点积结果不变),所以需要位置编码。RoPE(旋转位置编码)的思路很优雅:把位置信息编码成向量旋转的角度,让两个 token 的相对位置体现在它们旋转角度的差上——旋转保持内积模长不变,所以既带了位置信息,又不破坏语义相似度的度量。
待深入
多头注意力与 RoPE 目前停在”直觉层”,下一步计划:手推一次完整的 self-attention 前向(含 batch 维度),再读一篇 RoPE 原始论文的公式部分。
Enjoy Reading This Article?
Here are some more articles you might like to read next: