ViT × MEM Attention Playground

从数字出发,看懂
ViT 注意力与 MEM 视频编码器

这页把“传统 ViT 的空间注意力”和“MEM 的时间注意力”拆成最小可计算例子。 你可以直接改 token 数值,观察相似度、softmax 权重、最终输出向量如何变化。

Q / K / V Scaled Dot-Product Attention Spatial Attention Temporal Attention Memory-aware Token
Attention 公式
Attention(Q,K,V) = softmax(QKᵀ / √d) V
在本页的玩具例子里: Wq = Wk = Wv = I 因此 Q = K = V = X
最后你会看到: 当前 token → 融合同帧空间信息 当前 token → 融合历史时间信息

1. 先把核心概念压缩成一句话

普通 ViT

同一张图里,patch 互相看

当前帧 patch a 会关注当前帧里的 a、b、c...,得到带有空间上下文的表示。

MEM 时间注意力

同一个 patch 位置,跨时间看

当前帧的 aₜ 会关注过去的 aₜ₋₂、aₜ₋₁、aₜ,得到带有短期记忆的表示。

最后输出

只保留当前帧 token

历史帧 token 被压缩掉,但当前帧 token 已经吸收了过去视觉信息。

2. Attention 到底在算什么?

每个 token 都会变成三种角色:

Query

Q:我在找什么?

当前 token 发出的问题。例如:当前 patch aₜ 想知道应该从哪些 token 读取信息。

Key

K:我能被怎样匹配?

每个候选 token 提供“检索标签”,用来和 Query 做相似度比较。

Value

V:真正被汇总的内容

softmax 权重最终乘在 Value 上,产生新的 token 表示。

Score = Q · K / √d Weights = softmax(Score) Output = Σ(weightᵢ × Vᵢ)

3. 传统 ViT:单帧 Spatial Attention 的具体数字

我们只看当前帧的两个 patch:

输入 token

当前帧 t

aₜ = [1, 0]bₜ = [0, 1]

10 01

把它们排成矩阵 X,且令 Q = K = V = X。

计算过程
QKᵀ = [[1, 0], [0, 1]] QKᵀ / √2 ≈ [[0.707, 0], [0, 0.707]]

对第一行 softmax,得到 aₜ 的注意力权重:

softmax([0.707, 0]) ≈ [0.67, 0.33]
最终: aₜ' = 0.67·[1,0] + 0.33·[0,1] = [0.67, 0.33]
这说明 patch a 不再只保留自己,而是融合了一点同帧 patch b 的信息。

4. MEM:Temporal Attention 的具体数字

现在我们固定同一个空间位置 a,看它在 3 个时间点上的 token:

t - 2
aₜ₋₂[1, 0]
bₜ₋₂
t - 1
aₜ₋₁[0.8, 0.2]
bₜ₋₁
t
aₜ[0.2, 0.8]
bₜ
Query

当前 patch aₜ 发问

q = aₜ = [0.2, 0.8]

它会去看过去和现在的同位置 patch:aₜ₋₂、aₜ₋₁、aₜ。

分数
q·aₜ₋₂ = 0.2 q·aₜ₋₁ = 0.32 q·aₜ = 0.68 / √2 后: [0.141, 0.226, 0.481]
Softmax 权重
softmax([0.141, 0.226, 0.481]) ≈ [0.29, 0.31, 0.40]

当前 aₜ 最关注自己,但也读取了前两帧的视觉记忆。

输出 token
aₜ' = 0.29·[1,0] + 0.31·[0.8,0.2] + 0.40·[0.2,0.8] ≈ [0.618, 0.382]

当前帧 token 变成了带历史记忆的视觉 token。

5. 交互实验:自己改数字,看 attention 如何变化

下面可以直接改三个时间点的 patch a 向量,然后查看当前 aₜ 对历史的注意力权重与输出。

A. 点积相似度
B. Softmax 权重
C. 最终输出

6. 三种 attention 的区别,一张表收住

方法 当前 token 看谁 表达能力 计算代价 最终输出
普通单帧 ViT 当前帧的所有 patch 理解图像内部空间关系 O(n²) 当前帧空间 token
Full Spatiotemporal Attention 所有帧、所有 patch 最强,但非常贵 O(K²n²) 完整时空上下文 token
MEM Video Encoder 先看同帧 patch,再看同位置历史 patch 保留短期视觉记忆,同时控制成本 O(Kn² + nK²) 只保留当前帧 token,但已吸收历史

7. 最后把 MEM 视频编码器的流程串起来

多帧输入

输入最近 K 帧图像,而不是单帧。

每帧 patchify

每张图像切成 patch token,和 ViT 一样。

Spatial Attention

每一帧内部 patch 互相看,提取空间关系。

Temporal Attention

同一 patch 位置沿时间方向看过去帧,融合短期视觉记忆。

丢弃过去帧 token

只保留当前帧 token;它们已经被注入历史信息。

送进 VLA Backbone

后续大模型看到的 token 数与单帧近似,但获得了短期 memory。