注意力与自注意力,一眼看懂
不堆术语。用"图书馆找书"的类比、可点击的"词与词之间的注意力连线"、分步计算器和多头切换,把 Attention 从名词变成你脑子里的画面。
01一句话答案
注意力机制(Attention)就是"动态加权平均":处理某个词时,先算它和所有词(含自己)的相关度,变成一组权重,再按权重把大家的信息揉成一团作为这个新表示。
人读句子会"跳读"——看到"它",马上回去看"谁"。注意力就是让模型每个词都能转头看全场,自己决定"该重点看谁、看多少"。
02为什么需要它(旧方法的痛)
🔗RNN:记不住远处
像"逐字读信",看到后面忘了前面;且必须串行,不能并行训练。
📏定长窗口:信息丢
早期模型把整句压成一个固定向量,句子一长就"装不下"。
🎯注意力:任意距离直连
任意两个词一步直达,距离不再是障碍,还能并行——这是 Transformer 起飞的关键。
03形象类比:图书馆找书
把"算注意力"想成去图书馆借书:
❓Query(Q)· 你的问题
"我想找一本讲猫的书。"——这是你带着的"需求向量"。
🏷️Key(K)· 书的标签
每本书脊上的标签(主题词)。用 Q 和每本书的 K 比对,越匹配分越高。
📚Value(V)· 书的内容
真正被"借走"的信息。按匹配分数加权,把最相关的书内容混在一起带回家。
04Q / K / V 三角色(图解)
在自注意力里,一句话的每个词都会同时生成自己的 Q、K、V:用"我自己的 Q"去和"所有人的 K"比对,再汇总"所有人的 V"。于是每个词都得到了"融合了全场上下文"的新表示。
05公式逐项拆解
🔢Q·Kᵀ:算相关度
Query 和每个 Key 做点积,得到"我有多关心你"的原始分数(一行 n 个)。
➗÷√d:缩放
维度 d 越大,点积越容易爆大,softmax 会"饱和"梯度消失。除以 √d 把数值拉回温和区间。
🎚️softmax:变权重
把分数变成"加起来=1"的概率分布——这就是每个词该被"看多少"的权重。
✖️×V:加权求和
用权重去乘每个 Value 再相加,得到"融合全场"的新的词表示。
06自注意力直观演示(可交互)
看这句话:「猫 坐在 垫子 上 , 因为 它 很 舒服」。在自注意力里,每个词都要决定"我最该看谁"。
👉 点下面的任意词,看它把"注意力"分给了谁(线条越粗 = 越关注;右侧条形是具体权重):
07注意力到底怎么算出来(分步)
用一个迷你例子走一遍。假设维度 d=2:Query q=[1,0],三个候选的 Key 与 Value:
Value: v₁=[2, 1] v₂=[0, 3] v₃=[-1, 0]
08多头注意力(Multi-Head)
一个头只能从一个角度看关系。多头 = 把 Q/K/V 分成好几组,各自独立算一遍注意力(不同头学到不同偏好),最后拼起来——相当于"一群人从不同角度同时读这句话"。
👉 切换下面的"视角",回到上面的热力图看不同头关注什么(注意「它」的行变化):
📐头① 局部/语法
更关注相邻词("猫—坐在—垫子"连成动作链),捕捉词序与局部结构。
🔭头② 全局/指代
更关注跨越距离的核心实体("它→猫"),捕捉语义与指代关系。
09位置编码:注意力本身"不分先后"
注意力的打分只看"内容相关度",不管词在句首还是句尾——把"猫 追 狗"换成"狗 追 猫",自注意力算出的关系强度几乎一样,但意思完全相反!所以必须额外告诉模型"词的位置"。
10自注意力 vs RNN vs CNN
| 维度 | 自注意力 | RNN | CNN |
|---|---|---|---|
| 长距离依赖 | 一步直达(O(1)路径) | 需逐步传递(易忘) | 靠层叠扩大感受野 |
| 并行能力 | 可全并行 | 必须串行 | 可并行 |
| 计算复杂度 | O(n²·d)(n=序列长) | O(n·d) | O(k·n·d)(k=核) |
| 擅长 | 全局上下文、长句 | 流式/短时 | 局部特征 |
11一句话记住
注意力 = 动态加权平均;自注意力 = QKV 都来自同一句,让每个词"看全场、定权重、揉信息",从而理解上下文。这就是 Transformer 的心脏。