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:

  • CS229 学习笔记:从线性回归到广义线性模型