课程进度 课程大纲 已发布 34/34 课
第 0 部分——先拿到地图
第 1 部分——为什么简单目标会学会看视频
第 2 部分——把一段视频送进单编码器
第 3 部分——会读实验,才算读懂论文
第 4 部分——从官方仓库到自己的实验
第 5 部分——把表征接回世界模型路线
附录——随用随查的技术背包
留下足够脚印,别人才能再走一遍
- 身份论文版本 + 代码哈希
- 数据来源 + 切分 + 指纹
- 训练配置 + 预算 + 随机种子
- 评估协议 + 基线 + 失败样本
- 收据日志 + 权重 + 限定语句
两个人都说自己做了“番茄汤”。一个用了罐头、慢火两小时;另一个用了鲜番茄、微波炉五分钟。菜名相同,配方、成本与结果都不同。
“训练了 LeVJEPA”也不够精确。你可能运行官方 Walking Tours 默认配置、论文中的 20% K710 受控比较、notebook 的千步教学实验,或只加载公开权重。它们都合法,但支持的主张完全不同。
下面这张清单从下载一路走到写结论。暂时没测的格子就留空;一个看得见的 TODO,比填进去的猜测更有用。
A. 身份与版本
- 记录论文标题、arXiv ID、版本与下载日期:
2608.27395v1,而不是只写“最新版”。 - 记录项目页与代码仓库 URL。
- 固定完整 40 位 Git commit;本系列审阅快照是
3ea0dda16030bc0fd6472bf809fc0a0ad836a812(2026-09-02)。 - 保存
git status --short;有本地补丁时导出 diff,并给实验起不同名字。 - 记录公开 checkpoint 的仓库、revision 与文件哈希。
- 分别确认仓库 MIT 许可和由 V-JEPA 改编的
module.py/ 权重 CC BY-NC 4.0 限制;商业用途应另请合适的许可审查,而非只凭教程判断。
最小版本收据:
git rev-parse HEAD
git status --short
uv --version
uv run python - <<'PY'
import platform, torch
print(platform.platform())
print(torch.__version__, torch.version.cuda)
print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else "no CUDA")
PY
B. 环境与硬件
- 保存操作系统、Python、PyTorch、CUDA、驱动和
uv.lock哈希。 - 记录 GPU 型号、数量、显存、CPU 核数、RAM 与存储介质。
- 记录精度模式(例如
bf16-mixed)和分布式策略。 - 记录实际峰值显存、平均 step 时间、数据等待时间与总墙钟时间。
- 若比较 FLOPs,同时报告 FLOPs 的计算工具、输入形状和是否计入 target/predictor/探针。
作者在 RTX 5080 上报告的 12 小时结果不能直接预测另一张 16 GB 卡的时间。芯片、软件栈和数据 I/O 都会改变墙钟速度。
C. 数据收据
- 记录数据集名称、版本、许可、原始 URL 清单与下载日期。
- 对原始视频或清单计算哈希;若远程视频后来被替换或删除,要能发现。
- 记录解码分辨率、帧率、JPEG 质量、episode 长度和 Lance 构建命令。
- 记录有效 episode 数、每个 episode 帧数、被过滤的短片段数和总字节数。
- 明确
T=16、存储 15 fps、frame_stride=2,所以训练采样约 7.5 fps、覆盖约 2.1 秒。 - 按原始视频、人物或场景等独立 source group 划分训练/验证/测试,不能先切 clip 再随机分;只有 episode 本身独立且不存在同源近邻时,才可把 episode 当切分单位。
- 保存全局与局部视图的第一批 contact sheet,人工检查它们确实共享同一时间窗口。
- 记录颜色空间、归一化均值/标准差、随机裁剪范围和光度增强。
推荐为处理后的数据写一张摘要:
source videos: 10
stored fps: 15
episodes: ...
frames: ...
train/val/test split unit: source-video
Lance bytes: ...
manifest sha256: ...
省略号表示尚未测量,不是默认值。
D. 模型与目标
- 写明 ViT 大小、
patch_size=16、tubelet_size=1、num_frames=16。 - 写明全局
224、局部96、局部视图数量V和各裁剪尺度。 - 写明
token_drop_rate=0.95与attn_mode=block_causal。 - 写明 projector
D→2048→256、BatchNorm 和 GELU。 - 写明
L = L_inv + 0.02·L_SIGReg、17 个节点、1024 个随机方向,以及固定版本的默认值normalize_by_n=false。 - 确认全局与局部分支均有梯度;若实验加入
detach,将它明确记录为方法改动。 - 确认没有训练用 target encoder 或 predictor。
- 若保存 Polyak/EMA 权重,记录 decay、更新间隔与评估时使用 raw 还是 EMA;明确它不参与 loss。
E. 优化与预算
- 记录每设备 batch、设备数、节点数、梯度累积与实际有效 batch。
- 记录 optimizer、学习率、betas、weight decay、bias/norm 排除规则。
- 记录 warmup 的 optimizer-step 数与之后是 flat 还是 decay。
- 同时报告 epoch、optimizer steps、看过的 clip 数、每步 token 数、估计总 FLOPs 与墙钟时间。
- 固定并报告数据采样、视图增强、token dropping、模型初始化和 probe 的随机种子。
- 至少运行三个训练种子,或明确标记为单次运行;一次最好结果本身不足以说明稳定性。
- 保存完整解析后的 Hydra 配置,而不是只保存命令行覆盖项。
仓库默认注释中的 3072 来自:
2 nodes × 8 GPUs × 96 clips/device × 2 gradient accumulation = 3072
若本地只用一张 GPU、batch 8、无累积,有效 batch 就是 8。这是冒烟测试,不是论文配方复现。
F. 训练过程的最低仪表盘
每个 run 至少保存:
-
pred_loss、未加权及乘以0.02后的sigreg_loss,以及最终total loss; - CLS 每维均值、标准差、协方差谱、最小/最大特征方差与有效秩;
- 全局—局部正配对距离,以及打乱 batch 后的负对照距离;
- raw encoder 与 EMA checkpoint 的相同验证探针;
- 梯度范数、学习率、weight decay、吞吐与峰值显存;
- 至少一批随机保留 token 的时空分布图;
- block-causal 泄漏单元测试:改变未来帧不得改变较早 patch token;
- NaN/Inf、全零梯度、重复样本和数据等待警报。
仅看 total loss 会隐藏“预测项下降、SIGReg 爆炸”或相反情况。损失必须拆开记。
G. 逐级验证:先修好脚下这一级
- **接口级:**一段假输入能完成前向;shape 与 dtype 全部断言。
- **目标级:**常量嵌入使 invariance 低但 SIGReg 高;打乱配对会抬高 invariance。
- **因果级:**只修改未来帧,过去 patch 输出保持不变;CLS 可以改变。
- **小数据级:**在极小数据上观察可解释的过拟合,同时监控坍塌。
- **教学级:**运行官方 workshop,并保存图像、曲线与配置。
- **单卡级:**按资源缩小模型或 batch,明确这不是论文复现。
- **配方级:**只有数据、预算、有效 batch、模型和评估协议对齐后,才比较论文数字。
每一级失败时停下修复。大规模训练不会自动治好轴顺序错误或未来泄漏。
H. 评估时让对手站在同一起跑线
- 冻结 encoder;只训练预先声明的 linear 或 attentive probe。
- 对所有方法使用同一数据切分、输入帧/时间槽、probe 容量、优化预算和视图采样。
- 分开报告 ImageNet-1K、K400、SSv2,因为它们偏重不同信息。
- 报告均值、标准差、种子数、置信区间或原始每种子结果。
- 报告 epoch-matched 与 FLOP-matched 时分别固定了什么;两类比较应分开下结论。
- 若用自己的数据,至少加入随机初始化、监督预训练或同预算替代方法之一作为基线。
- 保存预测、检索或特征图的成功和失败案例;只展示最好看的 PCA 会遗漏方法边界。
- 探针可解码性只证明信息可由该探针取出,不证明世界模型会使用它。
I. 给准备发表的每句话定级
发表前逐句贴标签:
[方法事实] 论文或固定代码直接定义
[作者报告] 原论文在指定协议下报告
[本次观察] 本 run 的日志或产物直接显示
[受假设理论] 只在列出的假设内成立
[推断] 多项证据支持但未直接测试
[假设] 等待实验推翻或支持
例如:
[方法事实]公开实现训练时均匀随机丢弃 95% patch token。[作者报告]在其 ImageNet 消融中,丢弃率从 0 提至 0.95 时准确率从 33.9 提至 47.6。[假设]在高速细粒度动作数据上,保留跨帧对应的采样会优于完全随机丢弃。
这三句话的证据强度完全不同。
把这张实验收据和日志放在一起
experiment: levjepa-walkingtours-smoke-001
paper: arxiv:2608.27395v1
code_commit: 3ea0dda16030bc0fd6472bf809fc0a0ad836a812
local_diff_sha256: null
data:
name: walking_tours
manifest_sha256: TODO
split_unit: source_video
model:
name: vit_tiny
frames: 16
patch: 16
tubelet: 1
token_drop: 0.95
attention: block_causal
objective:
sigreg_weight: 0.02
projections: 1024
knots: 17
budget:
devices: 1
batch_per_device: 8
accumulation: 1
optimizer_steps: 100
seeds: [0]
status: smoke_test_not_paper_reproduction
artifacts:
resolved_config: TODO
metrics_log: TODO
checkpoint_sha256: TODO
TODO 留在收据中,正好告诉下一位读者还有什么尚未测量。
最后一道门:这个结果可以叫“复现”吗
只有全部回答“是”,才把结果称作复现:
- 方法版本和代码哈希是否精确?
- 数据与切分是否可追踪且无泄漏?
- 模型、目标、有效 batch、steps 与预算是否对齐?
- probe 与基线协议是否公平?
- 多种子和原始产物是否可取回?
- 数字是否在预先声明的容差内?
- 结论是否只覆盖真正重复的范围?
否则使用更窄的名称:“安装验证”“前向冒烟测试”“教学级重跑”“部分复现”或“作者 checkpoint 的下游评估”。
清单所依据的记录
官方仓库固定快照定义安装、数据、训练与许可证边界;conf/config.yaml定义公开默认配方;LeVJEPA arXiv v1定义论文实验协议;固定版本的模型卡定义公开权重接口。清单中的审计层级是本教程的复现建议,不是论文声称的认证标准。
只在收据支持的地方签名
- “跑通”“重跑作者权重”和“独立复现论文结果”不是同义词。
- 配置之外还要保存数据指纹、有效 batch、预算、日志和失败案例。
- 复现的最后一步不是得到数字,而是把结论缩到证据真正覆盖的范围。
发布前的最后三问
- 单卡 batch 8 跑 100 步可以称为论文配方复现吗?
- 为什么训练/测试应按独立 source group 切分,而不是随机 clip 或 Walking Tours 的相邻 episode?
- 公开代码和权重都存在,为什么仍不能说已有独立复现?
决定该用哪个名称
- 不能;它是很有价值的冒烟测试,但数据、有效 batch、步数和预算都没有对齐论文协议。
- 相邻 clip 可能共享几乎相同的帧;Walking Tours 的相邻 episode 也来自同一长视频和场景。两种拆分都可能把近重复内容泄漏到测试集。
- 它们都由原作者团队发布,提高了可检查性,却没有提供独立团队重复实验的证据。