让每个词「看一眼」整句话,决定该多关注谁。本篇拆 Q/K/V、打分、softmax、加权求和、因果掩码。 教学性模拟--注意力热图由确定性算法生成,用以理解原理,非真实模型输出。
注意力 = 一次「带权重的检索」。图书馆类比最好懂。
你拿着的问题:「我想找一本讲猫的书。」这是查询。
每本书的标题/标签:「猫科动物」「鱼类」「烹饪」。拿 Q 和每个 K 比对。
比对完给每本书一个分数,按分数把内容 V 加权拿出来。
每个 token 同时扮演三个角色:拿自己的 Q 去问,用自己的 K 等着被别人问,最后用自己的 V 贡献内容。分数高 = 多关注。
三个线性变换,把输入向量变出三种用途。
W_q / W_k / W_v 是三组可训练的权重矩阵。同一个输入向量 x,乘不同矩阵就得到不同用途的向量。为什么要分三份?因为「我该关注谁」和「我能提供什么内容」是两件不同的事。
点鼠标选一个 token 当 Q,看它对其他 token 的注意力分布。拖滑块调温度。
Q·K 点积会随维度 d_k 增大而变大(很多项相加)。值一大,softmax 就会「尖锐化」--某个分数略高就把概率全吃光,梯度消失、训练不动。除以 √d_k 把方差压回 1 附近,让分布温和、训练稳。这不是「魔法常数」,是统计学上的方差归一。
注意力权重 × V = 这个 token 的输出。一行话总结整条公式。
softmax 干一件事:把任意大小的分数(甚至负数)压成「0~1 且和为 1」的概率分布。分数越高权重越大,但不会是 0 或 1,是平滑的「关注多少」。最后拿这组权重把所有 token 的 V 加权求和--这就是这个位置经过注意力后的新表示。
Decoder 不能偷看未来。开/关掩码,看注意力矩阵怎么变。
the cat sat
每个词能看所有词(前后都行)。适合「理解」任务--比如 BERT 看完整句做分类。
把上三角屏蔽成 -∞,softmax 后权重变 0--只能看自己和左边。预测下一个词时不能偷看答案,这就是生成式模型(GPT)能自回归生成的前提。
注意力机制的关键术语。
| 术语 | 一句话 |
|---|---|
Q / K / V | 查询 / 键 / 值;同一输入经三个矩阵变出三种用途 |
点积 | Q·K 衡量「查询和键有多匹配」,越大越相关 |
softmax | 把分数压成 0~1 且和为 1 的概率,决定关注多少 |
√d_k 缩放 | 防分数过大导致 softmax 尖锐化、梯度消失 |
注意力矩阵 | 每行是一个 token 对全句的关注分布 |
因果掩码 | 屏蔽未来位置,让 Decoder 只看左边,可自回归 |
自注意力 | Q/K/V 都来自同一序列,序列内部互相关注 |
单头注意力太单薄。下一篇上多头、FFN、归一化、残差,把一个 Block 拼出来。