返回课堂

读 A 时,为什么 B 也出来了?

本页问题

二维A/B装置把串扰变成可手算的结果:k_A=v_A=(1,0),k_B=(0.6,0.8),v_B=(0,1)。外积写入W=Σvᵢkᵢᵀ得到[[1,0],[0.6,0.8]]。查询A时,Wk_A=(1,0.6)=v_A+0.6v_B;B的key与查询内积不为零,因此B的value也参与输出。A的key与value恰好相同只是选数巧合,B清楚显示二者的不同职责。

AR02/b0 · 认清同一组 key 与 value

Akey (1, 0)value (1, 0)Bkey (0.6, 0.8)value (0, 1)同一组二维关联 · 两个 key 都是单位向量初始 W0000key 是线索;value 是要读回的内容value 为列、key 为行 · W 的尺寸为 dv × dk = 2 × 2
认清同一组 key 与 value

刚才的八乘八图样来自六十四维向量;现在换成能手算的二维例子,线索与内容的角色保持不变。A的key是(1,0),value也是(1,0),这只是选数巧合。B的key是(0.6,0.8),value却是(0,1),可见查询线索不必长得像要取回的内容。两个key长度都是一,方向并不垂直。先把这两对关联放在固定位置,W从零矩阵开始。

教师备课:指图与模拟问答

指图与推进 · 不朗读指上方两组 key/value,最后指零矩阵;区分线索与内容。

AR02/b1 · 把 A 写入同一个 W

Akey (1, 0)value (1, 0)Bkey (0.6, 0.8)value (0, 1)同一组二维关联 · 两个 key 都是单位向量累加后的 W1000vA kAᵀ1000写入 AW = Σᵢ vᵢ kᵢᵀvalue 为列、key 为行 · W 的尺寸为 dv × dk = 2 × 2
把 A 写入同一个 W

先把A的value排成一列,把它的key排成一行,相乘形成一个两行两列的矩阵,这叫外积。得到的矩阵只有左上角是一,其余为零。把它加进W,以后遇到A这样的线索,就会沿A的内容方向输出。这里请看清尺寸:写入的是一块和W同样大的矩阵,不是把一个标签塞进某个独立格子。

进一步解释

$v_i\in\mathbb R^{d_v}$、$k_i\in\mathbb R^{d_k}$均为列向量,故$v_i k_i^\top\in\mathbb R^{d_v\times d_k}$。

教师备课:指图与模拟问答

指图与推进 · 不朗读沿 value 列 × key 行到外积,再指 W 的左上角变化。

AR02/b2 · 再把 B 加进去

Akey (1, 0)value (1, 0)Bkey (0.6, 0.8)value (0, 1)同一组二维关联 · 两个 key 都是单位向量累加后的 W100.60.8vA kAᵀ1000+vB kBᵀ000.60.8W = Σᵢ vᵢ kᵢᵀvalue 为列、key 为行 · W 的尺寸为 dv × dk = 2 × 2
再把 B 加进去

B也产生一块外积矩阵,这次非零项在第二行,是零点六和零点八。我们没有给B另开一个抽屉,而是把两块矩阵相加。W现在的第一行是一、零,第二行是零点六、零点八。继续累加非常容易;但这只能说明两条都参与了写入,是否能单独读出,需要下一步检查。

教师备课:指图与模拟问答

指图与推进 · 不朗读沿两个外积的加号到合计 W,逐行核对四个元素。

AR02/b3 · 输入 A,却读出 A 加 0.6B

Akey (1, 0)value (1, 0)Bkey (0.6, 0.8)value (0, 1)查询 Ax = (1, 0)同一个 W100.60.8实际读出(1, 0.6)目标 (1, 0)1 · vA+0.6 · vB
输入 A,却读出 A 加 0.6B

现在把A的线索(1,0)交给W。第一行与它相乘得到一,第二行得到零点六,所以输出是(1,0.6),而不是目标(1,0)。A的一份内容还在,但B也跟着贡献了零点六份。请注意,我们没有在读出之后加入噪声;这个混合是刚才那次矩阵乘法本身产生的。

教师备课:指图与模拟问答

指图与推进 · 不朗读指输入 k_A,手算两行乘法,再对照实际读出与目标。

AR02/b4 · 展开成匹配分数,再汇总 value

Akey (1, 0)value (1, 0)Bkey (0.6, 0.8)value (0, 1)查询 Ax = (1, 0)同一个 W100.60.8实际读出(1, 0.6)目标 (1, 0)1 · vA+0.6 · vBkAᵀx = 1kBᵀx = 0.6先比较 key 与查询,再按分数加权 value
展开成匹配分数,再汇总 value

把同一计算展开:先算查询和每个key的内积,再用这些分数加权value。A和自己匹配得一,B与A匹配得零点六,因此答案就是一份A加零点六份B。这里的系数可以带符号,也不必加起来等于一,所以还不是概率。两条时已经能看到串扰;接下来问条目继续增加、或线索维度变大时,干扰会怎样积累。

进一步解释

A/B例与开场随机64维图样是不同实验。此处保留职责与读取规则,不保留维度或随机样本。查询A时B产生0.6的交叉项,正是两条key内积为0.6。

可展开检查查询B:$Wk_B=(0.6,1)^\top=0.6v_A+v_B$。这与查询A的串扰对称,完整画面见AM04/b2。

教师备课:指图与模拟问答

指图与推进 · 不朗读沿查询→两个匹配分数→两项value贡献;保持查询 A 不变。

接下来

条目数与线索维度分别怎样影响同一种干扰?

补充推导、边界与来源

本段始终使用两条目、列向量约定。两个外积的和为 W=[[1,0],[0.6,0.8]];读取是先匹配再汇总。旧三条目行向量算例仍在完整阅读中,但不混入此处计算。

与本页直接相关的完整材料

条件、推导与来源

AM03 · 先写入两组“线索—内容”

目标仍被保存,读出却可能夹杂别的内容;现在用两组向量把装置拆到能手算。

W=Σᵢvᵢkᵢᵀ,W∈R^(d_v×d_k)。本例两个外积分别是[[1,0],[0,0]]、[[0,0],[0.6,0.8]]。

来源与继续阅读

Alex Wang:对应原文小节。

I02 原阅读材料。旧阅读材料保留自身的算例与记号;不要将旧三条目行向量例与本节两条目列向量例混算。

完整推导与实验口径 · 原文配套源码入口。

AM04 · 读A时,为什么B也会出来?

两次外积已经加到同一个W,接下来检查能否只读回目标。

Wx=Σᵢvᵢ(kᵢᵀx);对单位key查询k_j,Wk_j=v_j+Σ_(i≠j)vᵢ(kᵢᵀk_j)。

来源与继续阅读

Alex Wang:对应原文小节。

I03 原阅读材料 · M02 原阅读材料。旧阅读材料保留自身的算例与记号;不要将旧三条目行向量例与本节两条目列向量例混算。

完整推导与实验口径 · 原文配套源码入口。

本页证据与条件

两条关联的教学构造;线性代数按列向量约定

进入主题正文