注:仅供自己记录学习所用
先把 KV cache 和 memory KV cache 分开理解。它没有神秘的新"memory 模块",核心就是:
把过去视频 chunk 在 Transformer Self-Attention 中产生的 K、V 保存下来,让后续生成的 chunk 可以直接 attention 到过去。
ReMind更进一步,把这个普通 KV cache 训练成可以主动检索较早历史状态的 dynamic memory。论文自己也明确说:每个生成 chunk 把自己的 keys/values 写进 KV cache,后续 chunk 再读取。
1. 先理解:视频里的 KV cache 到底是什么?
假设 autoregressive video 一次生成一个 chunk:
Chunk 0 → Chunk 1 → Chunk 2 → Chunk 3 → Chunk 4 → ...
每个 DiT Block 都有 Self-Attention:
正常 attention 是:
问题来了:生成 Chunk 4 时,需要利用 Chunk 0~3。
最笨的方法是把:
Chunk 0
Chunk 1
Chunk 2
Chunk 3
Chunk 4
全部重新送进 DiT,再把前面的 K/V 全算一遍。
但前面 Chunk 0~3 的 K/V 之前已经算过了。
所以直接缓存:
KV Cache
┌──────────────────────────────┐
│ Chunk 0 : K0, V0 │
│ Chunk 1 : K1, V1 │
│ Chunk 2 : K2, V2 │
│ Chunk 3 : K3, V3 │
└──────────────────────────────┘
↑
│ attention
│
Current Chunk 4 → Q4
于是 Chunk 4:
这就是 KV cache。
注意一个很重要的地方:
KV cache 不是保存 RGB 视频帧 ,而是保存过去视频 token 经过各层 attention projection 后得到的 Key / Value hidden representations。
而且通常是每个 DiT Block 都有自己的 KV cache:
DiT Block 1 → KV cache 1
DiT Block 2 → KV cache 2
DiT Block 3 → KV cache 3
...
DiT Block N → KV cache N
所以说"每个 DiT block 都微调吗",和这里正好联系起来了:memory retrieval 本质上发生在各个 DiT block 的 self-attention 中。
2. 那为什么 KV cache 又被叫作 "memory"?
因为对于当前 Chunk 来说:
当前 Chunk
│
│ Q
↓
Attention
↙ ↓ ↓ ↘
C0 C1 C2 C3
↑
过去的信息
过去 chunk 的 K/V 实际就构成了它的历史记忆。
比如:
C0 C1 C2 C3 C4
杯子空 → 开始倒水 → 灯关闭 → 黑暗 → 灯重新打开
到了 C4:
Q4
↓
查询历史 KV cache
↓
[K0,V0] [K1,V1] [K2,V2] [K3,V3]
理论上它可以重新找到:
C1 里面"杯子正在加水"的状态。
所以作者说,预训练 diffusion transformer 其实已经有保存历史的能力,问题不在"没有 memory",而在:
模型没有被训练好:什么时候应该访问哪个历史 K/V。
这就是 ReMind 的核心 motivation。 Xu 等 - 2026 - Teaching Video Ge...
3. 推理时 KV cache 是最容易理解的
假设每次生成 3 个 latent frames,也就是一个 chunk。
第一步:生成 C0
C0
↓ DiT
K0,V0
↓
写入 Cache
现在:
Cache = [K0,V0]
第二步:生成 C1
C1 的 Query 可以看:
Q1
↓
[K0,V0] + [K1,V1]
生成完以后:
Cache =
C0 : K0,V0
C1 : K1,V1
第三步:生成 C2
Q2
↓
[K0,V0]
[K1,V1]
[K2,V2]
继续:
Cache =
C0
C1
C2
...
论文说的 streaming KV cache 基本就是这个过程:generated chunk 把自己的 K/V 写入 cache,later chunks 再读取。 Xu 等 - 2026 - Teaching Video Ge...
所以推理阶段 KV cache 是真的"存起来再读取"。
4. 那训练的时候 KV cache 怎么回事?
这里最容易混乱。
训练时你已经有完整 GT video:
GT:
C0 → C1 → C2 → C3 → C4 → C5
作者把训练改成 chunk-causal attention:
C0 只能看 C0
C1 可以看
C0 C1
C2 可以看
C0 C1 C2
C3 可以看
C0 C1 C2 C3
也就是说:
论文明确说:
"We partition the latent video into chunks and train with chunk-causal attention."
而 all-history training 就是每个 chunk attend 所有 previous chunks,用来匹配 streaming inference 的路径。 Xu 等 - 2026 - Teaching Video Ge...
这里你可以先把训练理解成:
GT C0
↓
得到 K0,V0
↓
GT C1 用它
↓
得到 K1,V1
↓
GT C2 用 K0,V0,K1,V1
↓
...
虽然工程实现上训练不一定真的像推理一样逐 chunk 一个一个慢慢跑 ,可以用 causal mask 并行实现,但逻辑效果是一样的:
当前 chunk 只能访问历史 chunk 的 K/V,不能偷看未来。
5. ReMind 真正特殊的地方来了
普通 KV cache 的问题是:
虽然 C0 一直存在 cache 里,但模型未必会去看 C0。
例如:
C0 C1 C2 C3 C4 C5
杯子 → 倒水 → 黑暗 → 黑暗 → 黑暗 → 重新亮
↑ ↑
重要历史 当前
普通模型可能:
Q5 attention:
C0 C1 C2 C3 C4
↓ ↓ ↓ ↓ ↓
0.05 0.08 0.15 0.25 0.47
↑
最近帧最大
这就是 recency bias。
所以虽然:
C0/C1 的 KV 还在
但:
模型不去 retrieve
≈
有记忆但不会回忆
ReMind Fig.5 正是在验证这个问题:Base model attention 主要集中在对角线附近,也就是偏向最近历史;ReMind 在 occlusion 后会明显重新 attention 到更早的 clean anchor。 Xu 等 - 2026 - Teaching Video Ge...
6. 所以 ReMind 训练时故意"逼它使用旧 KV"
例如原始视频:
C0 → C1 → C2 → C3 → C4 → C5
作者故意把:
C2 C3 C4
变成 interruption/noise:
C0 → C1 → Noise → Noise → Noise → C5
↑ ↑
reliable anchor recovery
现在预测 C5:
最近历史:
C4 = noise
C3 = noise
C2 = noise
但是:
C1 = reliable state
模型如果继续只看最近 K/V:
Q5 → K4/K3
就预测不好。
训练 loss 就会逼着 attention 学成:
┌─────────────┐
Q5 ─────────→│ K1,V1 │
└─────────────┘
↑
old anchor
这就是为什么论文说 node-drop / noisy-memory 会保留至少一个 event anchor,同时破坏中间历史,迫使模型从 surviving historical evidence 恢复。 Xu 等 - 2026 - Teaching Video Ge...
7. 这也是"KV cache"和"Memory KV cache"的本质区别
其实从数据结构上看,它们未必是两个东西:
普通 Video AR:
过去 K/V
↓
KV Cache
↓
主要为了 causal generation + 避免重复计算
ReMind:
过去 K/V
↓
同一个 Streaming KV Cache
↓
不仅当上下文
而且训练模型:
"哪个历史状态可靠,就回去 retrieve 哪个"
↓
Dynamic Memory
所以论文那句话非常重要:
"reconceptualizes the KV cache as dynamic memory"。 Xu 等 - 2026 - Teaching Video Ge...
不是:
Wan KV Cache
+
额外 Memory Bank
而更接近:
Wan KV Cache
↓
通过特殊训练
↓
Dynamic Memory KV Cache
最后你可以用一句非常简单的话记住
推理:
前面 chunk 生成过的 K/V 留下来,后面 chunk 直接查询它们。
训练:
用 causal/chunk-causal 训练模拟这种"当前 chunk 只能读历史 K/V"的关系,并通过特殊的数据破坏方式,训练模型学会应该查询哪一段历史 KV。
ReMind 的创新点:
不是"发明 KV cache",而是把已有 KV cache 从一个偏向最近上下文的缓存 ,训练成一个能够检索远处可靠历史状态的动态记忆。
所以你可以把它类比成:KV cache 是硬盘里已经存着历史;ReMind 主要解决的是"检索策略"------什么时候不要看最近几帧,而应该翻回很久以前的可靠状态。 这个理解基本就抓住这篇论文了。