Related
In following contests:
先用 Wq,Wk,Wv 把每个位置的隐藏状态投影成 Q,K,V,再按连续下标切成 H 个头。位置 i 只对满足 0≤i−j<w 的键计算
s=dQ(h)⋅K(h)减去该行最大值后做 softmax,对 V 加权得到该头的上下文。各头按原下标拼回,左乘 Wo 后再加上 X。
投影按 (Wx)r=∑cWr,cxc 做。窗口用严格小于 w 的下标差,分数要除以正的 d,指数前先减最大值。输出时每个分量四舍五入保留 4 位小数,一半远离 0,并固定写成 4 位。Python 的矩阵投影使用 numpy。
某词元推理服务保存了 n 个位置的隐藏状态,要按多头缩放点积注意力更新每个位置。注意力只使用因果窗口内的键,窗口结果经输出投影后与原隐藏状态相加。
头数为 H,每头维度为 d,模型宽度 D=H⋅d。位置从 0 编号到 n−1。第 i 个位置的隐藏状态 Xi 是长度为 D 的整数向量。另有四个 D×D 整数矩阵 Wq,Wk,Wv,Wo。矩阵乘向量规定为 (Wx)r=∑c=0D−1Wr,cxc。
对每个位置先做线性投影
Qi=WqXi,Ki=WkXi,Vi=WvXi第 h 头(h=0,1,…,H−1)取上述向量中下标落在 [hd,(h+1)d) 的连续一段,记为 Qi(h),Ki(h),Vi(h)。
位置 i 能注意到位置 j,当且仅当 0≤i−j<w。对每个头、每个位置,只在可见的 j 上计算
sh,i,j=dQi(h)⋅Kj(h)d 为正平方根,点积为对应分量乘积之和。记该行可见分数的最大值为 mh,i。可见位置的权重为
ah,i,j=∑j′exp(sh,i,j′−mh,i)exp(sh,i,j−mh,i)权重与 Ci(h) 的求和都只含可见位置。该头上下文为
Ci(h)=j∑ah,i,jVj(h)把 Ci(0),…,Ci(H−1) 按头序首尾相接得到 Ui,再计算
Zi=WoUi,Yi=Xi+Zi指数、除法与求和使用双精度浮点。Yi 的每个分量按四舍五入保留 4 位小数,一半远离 0,输出固定 4 位小数。
第一行四个整数 n,H,d,w。
接下来 n 行,每行 D 个整数,依次是 X0,…,Xn−1。
接下来 D 行,每行 D 个整数,按行优先给出 Wq。其后用同样的格式依次给出 Wk,Wv,Wo。
1≤n≤100,1≤H≤4,1≤d≤6,1≤w≤n,且 D=H⋅d≤16。
Xi 与 Wq,Wk,Wv,Wo 的每个元素都是整数,绝对值不超过 4。
输出 n 行。第 i 行为 Yi 的 D 个分量,同一行内用一个空格分隔。
输入
2 2 1 2
1 0
0 1
1 0
0 1
1 0
0 1
1 0
0 1
1 0
0 1
输出
2.0000 0.0000
0.5000 1.7311
说明
四个矩阵都是单位阵,因此 Q=K=V=X,输出投影不改变 Ui。d=1,分数就是对应分量的乘积。头 0 取第 0 分量,头 1 取第 1 分量。w=2 时位置 0 只看到自己,位置 1 看到 0 和 1。
位置 0 两头的上下文是 1 和 0,与 X0 相加得 2.0000 0.0000。
位置 1 头 0 的两个分数都是 0,上下文是 0.5。头 1 的分数是 0 和 1,减去 1 后上下文是 1/(1+e−1)。与 X1=(0,1) 相加后为 0.5000 1.7311。
输入
3 1 1 2
1
2
3
2
-1
3
1
输出
4.0000
5.0540
9.0074
说明
Wq,Wk,Wv,Wo 分别是 2,−1,3,1,因此 Q=(2,4,6),K=(−1,−2,−3),V=(3,6,9)。w=2。
位置 0 只看到自己,分数 2×(−1)=−2,上下文 3,与 1 相加得 4.0000。
位置 1 看到 0 和 1,分数为 −4,−8。减去 −4 后两项是 1 与 e−4,上下文约为 3.0539586,与 2 相加后保留 4 位得 5.0540。
位置 2 与位置 0 的下标差为 2,不满足 i−j<w,看不到位置 0,只看到 1 和 2。分数为 −12,−18,上下文约为 6.0074179,与 3 相加后为 9.0074。
In following contests:
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册