目标实验目标
把论文里那一行 Attention(Q,K,V) = softmax(QKᵀ/√d_k)V 拆成可运行的代码。改黄色数字,看权重表和输出向量怎么变。
重点把 scale 从 √d_k 改成 1(不降温),观察 softmax 后的分布是不是变得「非黑即白」。
代码可编辑源码
虚线处可直接点击修改。
attention.js — 点击黄色数字可编辑
输入查询向量
K / V 固定为:小猫 k=[1.2,0.0] v=[1.0,0.0];累 k=[0.0,1.0] v=[0.0,1.0];它 k=[0.1,0.0] v=[0.5,0.5]
结果注意力权重与输出
等待运行…
监视变量监视
q·k(小猫) = -
q·k(累) = -
q·k(它) = -
缩放因子 = -
权重(小猫) = -
输出向量 = -
日志执行日志
点击「运行代码」开始执行…
挑战实验课挑战
挑战 1 · 关掉降温
把 scale 改成 1,权重(小猫) 从 70% 变成多少?分布为什么更极端?
把 scale 改成 1,权重(小猫) 从 70% 变成多少?分布为什么更极端?
挑战 2 · 反向查询
把 q 改成 [0.2, 1.5](像「累」的查询),权重最大项会变成谁?
把 q 改成 [0.2, 1.5](像「累」的查询),权重最大项会变成谁?
挑战 3 · 输出落在哪
q=[2.0,0.2] 时输出是 [0.78, 0.22],说明「它」更像什么?改成 q=[0.2,1.5] 呢?
q=[2.0,0.2] 时输出是 [0.78, 0.22],说明「它」更像什么?改成 q=[0.2,1.5] 呢?
挑战 4 · 加一个新词
想让「马路」也参与注意力,代码里 K、V 两张表各要加一行什么?
想让「马路」也参与注意力,代码里 K、V 两张表各要加一行什么?