Transformer · 注意力机制

注意力与自注意力,一眼看懂

不堆术语。用"图书馆找书"的类比、可点击的"词与词之间的注意力连线"、分步计算器和多头切换,把 Attention 从名词变成你脑子里的画面。

01一句话答案

注意力机制(Attention)就是"动态加权平均":处理某个词时,先算它和所有词(含自己)的相关度,变成一组权重,再按权重把大家的信息揉成一团作为这个新表示。

人读句子会"跳读"——看到"它",马上回去看"谁"。注意力就是让模型每个词都能转头看全场,自己决定"该重点看谁、看多少"。

而"自注意力(Self-Attention)"只是注意力的一种用法:Query、Key、Value 全部来自同一句话。于是每个词都和句子里"所有的词(包括自己)"算一遍关系——这正是 Transformer 理解上下文的核心。

02为什么需要它(旧方法的痛)

🔗RNN:记不住远处

像"逐字读信",看到后面忘了前面;且必须串行,不能并行训练。

📏定长窗口:信息丢

早期模型把整句压成一个固定向量,句子一长就"装不下"。

🎯注意力:任意距离直连

任意两个词一步直达,距离不再是障碍,还能并行——这是 Transformer 起飞的关键。

RNN:A→B→C→D 串行越远越忘 定长向量:压扁整句长句丢信息 注意力:词词直连任意距离·可并行 痛点 → 解法:让每个词"直接看到"所有词

03形象类比:图书馆找书

把"算注意力"想成去图书馆借书:

Query(Q)· 你的问题

"我想找一本讲的书。"——这是你带着的"需求向量"。

🏷️Key(K)· 书的标签

每本书脊上的标签(主题词)。用 Q 和每本书的 K 比对,越匹配分越高

📚Value(V)· 书的内容

真正被"借走"的信息。按匹配分数加权,把最相关的书内容混在一起带回家。

一句话:注意力 = 用"需求(Q)"去翻每本书的"标签(K)"打分,再按分数把"内容(V)"加权搬回来。分数高的书,贡献大;分数低的,几乎不沾边。

04Q / K / V 三角色(图解)

❓ Query我要找啥 🏷️ Key标签 📚 Value内容 ⚖️ 打分加权softmax 权重×V 🎯 输出融合后的表示 Q 与每个 K 比相关度 → 权重 → 加权汇总 V

自注意力里,一句话的每个词都会同时生成自己的 Q、K、V:用"我自己的 Q"去和"所有人的 K"比对,再汇总"所有人的 V"。于是每个词都得到了"融合了全场上下文"的新表示。

05公式逐项拆解

Attention(Q, K, V) = softmax( Q·Kᵀ ⁄ √d ) · V

🔢Q·Kᵀ:算相关度

Query 和每个 Key 做点积,得到"我有多关心你"的原始分数(一行 n 个)。

÷√d:缩放

维度 d 越大,点积越容易爆大,softmax 会"饱和"梯度消失。除以 √d 把数值拉回温和区间。

🎚️softmax:变权重

把分数变成"加起来=1"的概率分布——这就是每个词该被"看多少"的权重。

✖️×V:加权求和

用权重去乘每个 Value 再相加,得到"融合全场"的新的词表示。

关键直觉:整条公式干的事,就是"按相关度,把大家的信息按比例搅在一起"。softmax 保证"注意力总量守恒"(总权重=1),不会凭空创造或丢失信息。

06自注意力直观演示(可交互)

看这句话:「猫 坐在 垫子 上 , 因为 它 很 舒服」。在自注意力里,每个词都要决定"我最该看谁"。

👉 点下面的任意,看它把"注意力"分给了谁(线条越粗 = 越关注;右侧条形是具体权重):

注意力热力图(行→列:谁看谁)
」把注意力分给谁
重点看「它」这个词:它把约 58% 的注意力给了「猫」——模型自己学会了"它"指代"猫"这件事,完全靠自注意力从数据里涌现,没人手写规则。这就是自注意力的魔力:词与词的关系,自己算出来。

07注意力到底怎么算出来(分步)

用一个迷你例子走一遍。假设维度 d=2:Query q=[1,0],三个候选的 Key 与 Value:

Key: k₁=[1, 0.1] k₂=[0, 1] k₃=[-1, 0.5]
Value: v₁=[2, 1] v₂=[0, 3] v₃=[-1, 0]

08多头注意力(Multi-Head)

一个头只能从一个角度看关系。多头 = 把 Q/K/V 分成好几组,各自独立算一遍注意力(不同头学到不同偏好),最后拼起来——相当于"一群人从不同角度同时读这句话"。

👉 切换下面的"视角",回到上面的热力图看不同头关注什么(注意「它」的行变化):

📐头① 局部/语法

更关注相邻词("猫—坐在—垫子"连成动作链),捕捉词序与局部结构。

🔭头② 全局/指代

更关注跨越距离的核心实体("它→猫"),捕捉语义与指代关系。

一句话:多头让模型"既看局部语法,又看全局语义",表达能力远强于单头。这也是 Transformer 用多头而非单头的原因。

09位置编码:注意力本身"不分先后"

注意力的打分只看"内容相关度",不管词在句首还是句尾——把"猫 追 狗"换成"狗 追 猫",自注意力算出的关系强度几乎一样,但意思完全相反!所以必须额外告诉模型"词的位置"。

词向量内容 位置向量第几个 相加内容+位置 自注意力此时懂顺序 给每个词加一个"位置编号信号",模型才知道"谁在前谁在后"
所以:原始自注意力是"排列不变"的(打乱词序关系不变),靠位置编码(正弦波或学习得到)补上顺序信息,模型才分得清"猫追狗"和"狗追猫"。

10自注意力 vs RNN vs CNN

维度自注意力RNNCNN
长距离依赖一步直达(O(1)路径)需逐步传递(易忘)靠层叠扩大感受野
并行能力可全并行必须串行可并行
计算复杂度O(n²·d)(n=序列长)O(n·d)O(k·n·d)(k=核)
擅长全局上下文、长句流式/短时局部特征
代价提示:自注意力对长序列是 O(n²),所以超长文本要用"稀疏注意力 / 滑动窗口 / KV Cache"等优化——这也是大模型处理长上下文的工程难点。

11一句话记住

一句话(词向量)+ 位置编码 自注意力(多头)词词算关系 融合表示懂上下文 🧠 LLM

注意力 = 动态加权平均自注意力 = QKV 都来自同一句,让每个词"看全场、定权重、揉信息",从而理解上下文。这就是 Transformer 的心脏。