缩放点积注意力:从匹配分数到值向量加权和
注意力不是简单“挑一个最重要的词”,而是把匹配分数变成权重,再混合对应的值向量。查询、键和值承担不同角色。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
Attention in transformers, visually explained
结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
注意力不是简单“挑一个最重要的词”,而是把匹配分数变成权重,再混合对应的值向量。查询、键和值承担不同角色。
理解核心机制
单个查询 q 与各键求点积,除以键维度平方根,再通过 softmax 获得权重。输出是值向量的加权和;下面省去投影层,只观察这一计算核心。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
import math
q = [1.0, 0.0]
keys = [[1.0, 0.0], [0.0, 1.0]]
values = [[10.0, 0.0], [0.0, 10.0]]
scores = [sum(a*b for a, b in zip(q, key)) / math.sqrt(len(q)) for key in keys]
weights = [math.exp(s-max(scores)) for s in scores]
weights = [w/sum(weights) for w in weights]
output = [sum(w*v[d] for w, v in zip(weights, values)) for d in range(2)]
assert weights[0] > weights[1]
assert abs(sum(weights)-1) < 1e-12
print(weights, output)适用边界与常见误区
完整 Transformer 还包含投影、多头、掩码、残差和归一化等。注意力权重不等价于可靠的因果解释,也不保证某个引用支持最终答案。
继续练习
保持键不变只修改值,观察权重与输出分别发生什么变化;再加入一个被掩码的候选,确认其权重应为零。