MiTA · 从公式到一次计算

第 1 / 8 章

MiTA:让查询复用候选,
再补上一份全局摘要。

长序列里,每个查询都对所有位置逐一打分很贵。MiTA 先用少量代表查询组织候选 key/value,再让每个查询访问共享的压缩信息 + 选中的原始细节。

这份教程对应 Wen 等的 Mixture-of-Top-k Attention: Efficient Attention via Scalable Fast Weights,固定阅读 v6(2026-09-27)。先从标准 attention 的一次查询算起,再拆开论文的方法。

每次都查全库

N 个查询分别比对 N 个 key:N² 对。

摘要 + 可复用候选

用少量全局信息保留覆盖,再读一部分原始 KV。

Q、K、V 分别做什么

一个位置的 query(Q)表达“现在想找什么”;各位置的 key(K)用于匹配;value(V)是最终被加权取回的信息。这些向量通常由输入经过训练过的投影产生。这里直接给小向量,专心看 attention 本身。

scoreⱼ = q·kⱼ / √d
aⱼ = exp(scoreⱼ) / Σₗ exp(scoreₗ)
o = Σⱼ aⱼvⱼ

先比对,再把分数变成总和为 1 的权重,最后混合 value。比如两个分数都是 0 时,权重各 1/2;value 分别为 0 和 2 时,输出为 1。这是加权平均,不是一定只拿分数最高的一项。

先看一次完整查询

教学数据有 8 个 token、每个向量 2 维。切换 query,观察所有位置的权重怎样改变。

整页数值实验使用手工构造的 Q/K/V,没有训练模型;输出差距不是任务准确率,也不是论文实验结果。

序列变长一倍,所有查询与 key 的比对数变成四倍。FlashAttention 可以改善精确 attention 的显存访问与中间存储;它并不把所有点对计算改成稀疏访问。

原文定位:§3.1,标准 attention 与 fast weights。

检验一下

一个查询要给 N 个 key 打分,N 个查询一共需要多少对?