Read this paper write-up in English
ViMoD:可恢复视觉记忆与动态证据访问¶
论文信息¶
| 字段 | 内容 |
|---|---|
| 论文链接 | Look Back, Think Ahead: Visual Memory on Demand for Efficient Multimodal Reasoning |
| 一作机构/公司/学校 | Yicheng Xue;香港城市大学 / 浙江大学 |
| 首次公开日期 | 2026-10-08(arXiv v1) |
| 原作者代码 | 未找到作者公开代码 |
| Adapter | vimod |
| 本地代码 | src/auto_research/multimodal/vimod.py、vimod_checkpoint.py |
| 可运行入口 | scripts/run_vimod_checkpoint.py |
原始论文总结¶
背景与主要改动¶
一次性压缩图像可能丢掉后续推理需要的细节。DART 学习可变区域大小和成员,生成始终驻留的 Coarse KV;原始 Fine KV 仍保留。TRACE 根据已生成文本的因果隐状态决定保持或替换工作集,通过 Joint-KV 恢复原始细节。
flowchart LR
I[图像 Fine token / 原始 KV] --> D[DART 固定总量容量与变形分组]
D --> C[持久 Coarse KV]
D --> P[C2F 成员映射]
H[已观察的 decoder 隐状态] --> T[TRACE 多时间尺度 SSM]
T --> G[HOLD / UPDATE 整组替换]
P --> G --> F[原始 Fine KV 按需恢复]
C --> J[Joint-KV + 文本 KV]
F --> J --> N[冻结 decoder 下一 token]
原论文关键图¶
原论文 Figure 4(关键图):展示原论文方法的总体设计和关键组成。图片来自原论文,版权归原作者所有;点击图片可查看来源。
核心公式¶
容量 \(\tilde c_j=1+(U-1)\sigma(b_j+a_j+\mu)\),共享偏置约束 \(\sum_j\tilde c_j=N\);隐式 Jacobian 为 \(\operatorname{diag}(d)-dd^\top/\sum d\)。按置信度分配后用 Sinkhorn 的连续容量提供跨组梯度,前向仍是硬分组。
训练池化权重 \(W=W^{hard}+W^{soft}-sg(W^{soft})\),保留硬组内 softmax 梯度。TRACE 的各分支执行 \(s_t=\rho_t s_{t-1}+(1-\rho_t)f(u_t)\);UPDATE 替换而非合并原工作集。
论文离线与线上效果¶
原文在 Qwen3-VL-4B 上报告八项视觉推理评测,20% 目标视觉预算下,相对其最佳一次性压缩对照的归一化平均分提高 39.0%。原文未报告线上 A/B。归一化基准是该论文自己的 Full 配置,不能混用官方模型卡分数。
本地复现¶
已实现 DART 容量约束/隐式梯度、总量整数舍入、置信度硬分组、八轮 Sinkhorn、共享 residual Value 编码;TRACE 层融合、四尺度 SSM、区域边界、HOLD/UPDATE 与真实 Fine KV 恢复。checkpoint backend 支持 SmolVLM/Idefics3,而非声称兼容 Qwen3-VL 的多模态 RoPE。
训练入口分四个阶段:--phase dart、trace-set、trace-joint、trace-rl。后续阶段必须显式提供上一阶段权重;SFT 必须提供 evidence_by_segment 的真实 Fine-index 标注,RL 必须提供实际在线 teacher 命令。teacher 仅接收图像、问题、生成前缀,不接收参考答案/未来文本。没有标注或 teacher 时会报错,不制造替代标签。
python scripts/prepare_scienceqa_vimod.py --output-directory data/vimod-scienceqa-train
PYTHONPATH=src python scripts/run_vimod_checkpoint.py \
--checkpoint checkpoints/smolvlm2-256m \
--checkpoint-id HuggingFaceTB/SmolVLM2-256M-Video-Instruct \
--checkpoint-revision 067788b187b95ebe7b2e040b3e4299e342e5b8fd \
--train-jsonl data/vimod-scienceqa-train/train.jsonl \
--dataset-id derek-thomas/ScienceQA \
--dataset-revision f18b0a70359ebfb41f658fd564208d0355b013f4 \
--phase dart --steps 2 --seed 42 --device cuda --output runs/vimod-42.json
数据协议与结果¶
只用 ScienceQA train 的一份公开监督样本执行 runtime 验证;标签仅参与监督损失,不放入推理问题。A100 上真实 SmolVLM checkpoint 完成 DART 两步反向传播及动态 Joint-KV 解码,损失为 13.7315、13.7025。没有隔离测试能力分数,不能声称准确率提升。
scripts/validate_vimod_cuda_runtime.py 另外在同一真实 checkpoint 上执行 TRACE 三阶段 CUDA 梯度诊断。它使用明确声明的合成辅助区域标注和全失败奖励 fixture,不读取答案;VLM、因果缓存、循环 policy 和损失本身均实际执行。它仅验证训练接口和梯度,不是官方 teacher 或能力实验。
| 阶段 | 梯度范数 | 参数更新范数 |
|---|---|---|
| TRACE Set | 21.8409 | 0.02586 |
| TRACE Joint | 56.3908 | 0.02142 |
| TRACE RL | 7.8128 | 0.02586 |
代码映射与边界¶
vimod.py 实现公式算子;vimod_checkpoint.py 实现各层实际缓存分离与逐步生成、DART distillation、TRACE SFT 与 on-policy RL。固定总量梯度通过数值 gradcheck。
当前已验证 DART、动态解码和 TRACE 三阶段受控 CUDA 更新;真实上游证据标注、实际在线 teacher 的完整训练链路尚待实验。不能把梯度诊断等同于原文完整复现。原文的 Qwen3-VL、57K/80K/4.8K 训练配方、16项评测和预算校准未复刻。本地根据 SmolVLM 的实际 pixel-shuffle 配置重建每个 crop 的二维 patch 网格,以 2×2 区域初始化,不跨 crop 合并;它不是 Qwen 的多模态坐标适配。随机/fixture TRACE 结果不能作为能力证据或 Evolve 晋级依据。
