ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

VDN-Minimax-H3 双向线性注意力分支:NoPE + Delta Rule 如何补全远场信息

VDN-Minimax-H3 双向线性注意力分支:NoPE + Delta Rule 如何补全远场信息

【免费下载链接】vdn-minimax-h3

VideoDeltaNet-H3: Live T2VA / I2VA / FL2VA / Ref2VA-like generation based on Minimax H3.

项目地址:https://gitcode.com/gh_mirrors/vd/vdn-minimax-h3
点击查看免费下载

VDN-Minimax-H3(简称VDN-H3)是一个把视频生成速度做到"比播放还快"的混合注意力模型。它的灵魂,是在 MiniMax H3 骨干之外并联的一条双向线性注意力分支——用NoPE(无位置编码)特征 + Delta Rule 状态更新,以近乎常数的开销,把窗口 softmax 看不见的远场信息高效补全。读完本文,你会清楚这条分支为什么快、又为何不掉画质。

为什么视频模型卡在了"注意力"上 🐢

生成十几秒的视频,latent 序列动辄超过 10 万个 token。如果每一帧都老老实实做全局 softmax 注意力,代价是 O(N²),帧数一多就指数级爆炸——这正是 VDN-H3 想根治的瓶颈。

它的思路很直接:把注意力拆成两条分工明确的分支。

分支看什么负责什么
窗口 softmax当前帧附近的几个帧局部视觉质量与一致性
双向线性分支窗口之外的全部帧全局 / 远场时序信息

两条分支共享同一份 QKV 投影,最后把结果相加:softmax 只算"近场",线性分支负责"远场",合起来恰好覆盖全序列——既保住画质,又把注意力成本压了下来。整个编排在 src/models/hybrid_attention.py 的_hybrid_forward中完成。

窗口之外的"远场"是什么?👀

所谓远场信息,就是每个 query 帧的 softmax 窗口看不见的那些帧。

VDN-H3 的窗口是分块对齐的:以 5 个 latent 帧为一个 chunk,当前块前后各扩一块(见 configs/training/stage_a1_c1_vdn_anchor.yaml 里的radius: 1, chunk: 5)。这意味着中间帧只能"看到"约 15 帧的邻居,而一条 100+ 帧的视频里,绝大多数帧都落在窗口之外。窗口几何由 src/models/softmax_attention/window.py 的window_bounds给出。

那远处的帧谁来管?答案就是双向线性分支——它专门负责窗口之外的所有帧。

双向线性分支:五步读懂核心算法 ⚙️

分支入口是 src/models/linear_attention/branch.py 里的BidirectionalLinearBranch。它把"窗口看不见的部分"逐 token 汇总,流程可拆成五步:

  1. 特征准备(NoPE):为每个视频 token 生成 q / k / v 特征
  2. 每帧统计量:把一帧的 S 个 token 压缩成两个d × d矩阵 A、B
  3. 双向扫描:沿帧轴正向、反向各扫一遍,得到状态库
  4. 边界收集:取窗口两侧"刚好在窗外"的状态,衰减回 query 帧
  5. 读出 + 门控:用 query 读出,再过 RMSNorm 和输出门

下面逐个讲。

第一步:NoPE 特征——把 RoPE 去掉

"NoPE" 即No Position Embedding(无位置编码)。softmax 分支用的是加了 RoPE 的 q/k,而线性分支直接拿加 RoPE 之前的原始 q/k/v,只做三件事:

  • 过一段可分离短卷积(仅对 k、v,q 保持原始 NoPE 特征)
  • SiLU 激活
  • 对 q、k 做 L2 归一化

为什么线性分支要去掉位置编码?因为线性注意力的"位置"是由状态递推天然承载的——信息靠一帧一帧累加进状态矩阵,而不是靠 RoPE 的相位。硬加 RoPE 反而会和递推打架。特征准备在 src/models/linear_attention/features.py 的LinearAttentionSepConv与prepare_linear_features中实现。

第二步:每帧统计量 A、B

对每一帧,把帧内所有 token 的 k、v 用 beta 加权后,压缩成两个矩阵:

  • A = Σ k·β·kᵀ
  • B = Σ v·β·kᵀ

这一步把"一帧 S 个 token"降维成"两个小矩阵",是线性注意力高效的根源。实现见 src/models/linear_attention/scan.py 的frame_statistics。

第三步:Delta Rule 状态更新 🔄

这是标题里的第二个关键词。拿到每帧的 A、B 后,状态 S 按下面的递推一帧帧更新(发布权重采用vdn_solve):

S_out = (S_in · D + B) · (I + A)⁻¹

  • D:逐通道的遗忘门 alpha(取值 0~1,由 src/models/linear_attention/layers.py 的FrameKDAAlpha算出)
  • (I + A)⁻¹:精确求逆,把新信息"干净地"写进旧状态,避免重复累加造成的误差

这正是 Delta Rule 的精髓:不是简单往记忆里加,而是带"修正项"地写——用 (I+A)⁻¹ 抵消掉重叠部分,远场状态因此能稳定累积上百帧而不发散。仓库里还备了另外两种规则,对比如下:

规则更新方式特点
sana_scaled(S·D)(I − c²A) + cB一阶截断,快但不精确
vdn_solve(S·D + B)(I + A)⁻¹精确求逆,发布权重采用
vdn_scaled(S·D + cB)(I + c²A)⁻¹带缩放的精确解

三种实现都在 src/models/linear_attention/delta_rule.py。

第四步:双向扫描 + 边界收集 🧭

分支是"双向"的:状态从开头往末尾扫一遍(prefix),再从末尾往开头扫一遍(suffix)。于是对任意 query 帧 t(窗口为 [lo, hi]),窗口之外 =prefix[lo-1](左侧全部)+suffix[hi+1](右侧全部),一个不重、一个不漏,正好是"窗口看不见的部分"。

取回来的两个状态还要乘一个由 alpha 决定的衰减,把"隔着窗口跨度"的影响修正回来(bridge 机制)。整套逻辑在 src/models/linear_attention/scan.py 的gather_linear_state里。

上图来自 FL2VA 示例(首帧 → 生成 14 秒视频)。只给一帧起点、再给一帧终点,要串出中间连贯的画面,靠的正是这条分支提供的全局时序记忆。

第五步:读出与门控

最后用当前帧的 query 去"问"收集好的远场状态,得到 readout,再过 RMSNorm 和输出门,加回到主干输出上。文本状态(见下节)也会在这里一起读出。

文本状态:让分支"记得"提示词 📝

给分支喂入 prompt 后,双向扫描不再从零状态出发,而是从半个文本状态(TEXT_STATE_SCALE = 0.5)启动。两个方向各带半份,加起来约等于一份完整 prompt——于是每一帧的状态都成了"被视频改写过的 prompt 记忆"。

这带来一个巧妙效果:当某个 query 的窗口已经碰到视频首/尾边界时,那一侧不再是"读到空气",而是读到衰减后的 prompt。分支因此从"补齐缺失输入"升级成了"带着条件跑"。相关逻辑见 src/models/linear_attention/branch.py 的_text_state。

参考图生成(Ref2VA-like)同样依赖这条分支的全局一致性:多张参考图要在整段视频里保持同一套角色与场景,靠的就是远场状态把"谁是谁"牢牢记住。

它是怎么被训练出来的 🎓

分支不是白给的,而是分阶段从稠密骨干蒸馏出来的。发布权重走了四步:

阶段训练内容步数
A1新线性分支,逐层对齐稠密模型200
A2同样的参数,端到端500
BQKV/O 投影的 LoRA + 线性分支2000
DMD8 步turboLoRA(DMD2,无 GAN)250

A1 的完整结构配置(vdn_solve、anchor_frames: both、K/V 短卷积、文本状态)见 configs/training/stage_a1_c1_vdn_anchor.yaml,训练脚本在 scripts/training/。

一句话总结

VDN-Minimax-H3 的双向线性注意力分支,本质是给 MiniMax H3 装了一套**"近场看画质、远场看全局"**的注意力分工系统:

  • NoPE让位置交给状态递推,而不是 RoPE;
  • Delta Rule用 (I+A)⁻¹ 精确写记忆,远场状态上百帧不崩;
  • 双向扫描 + 边界收集精准补齐窗口看不见的帧;
  • 文本状态让 prompt 成为贯穿全片的记忆锚点。

想动手跑起来,可参考 docs/inference.md 与 README.md 的快速开始章节。

【免费下载链接】vdn-minimax-h3

VideoDeltaNet-H3: Live T2VA / I2VA / FL2VA / Ref2VA-like generation based on Minimax H3.

项目地址:https://gitcode.com/gh_mirrors/vd/vdn-minimax-h3
点击查看免费下载

相关推荐

上一篇:给 REDox 提人生第一个 PR:子模块、xUnit 一致性测试与 ReSharper 规范全流程
下一篇:2k 星/天是实力还是光环?拆解 disktree 爆火的真实含金量

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进