JEPA4Japan · 教程

第 23 章——读懂默认配置并启动训练

1,397字 4分钟阅读 #LeVJEPA#JEPA#视频自监督学习#SIGReg

区分论文比较配方与公开仓库默认配方,逐项解释 batch、学习率、warmup、EMA 检查点和命令行覆盖。

课程进度 课程大纲 已发布 34/34 课

第 0 部分——先拿到地图

  1. 01 第 0 章——开始之前:这门课承诺什么 已发布
  2. 02 第 1 章——同一段视频,两扇不同的窗 已发布
  3. 03 第 2 章——沿着 Yann LeCun 的科研路线走一遍 已发布
  4. 04 第 3 章——别被名字绕晕:JEPA 家族树 已发布

第 1 部分——为什么简单目标会学会看视频

  1. 05 第 4 章——视频可以自己出题 已发布
  2. 06 第 5 章——保留意思,不重画每个像素 已发布
  3. 07 第 6 章——两张卡要相同,但不能全变成白纸 已发布
  4. 08 第 7 章——SIGReg:从许多影子检查一团点云 已发布
  5. 09 第 8 章——只用一行目标函数读懂 LeVJEPA 已发布

第 2 部分——把一段视频送进单编码器

  1. 10 第 9 章——全局视图与局部视图怎样配对 已发布
  2. 11 第 10 章——把视频切成时空小方块 已发布
  3. 12 第 11 章——一台编码器、一个投影头、一张摘要卡 已发布
  4. 13 第 12 章——一次完整前向传播 已发布
  5. 14 第 13 章——为什么扔掉 95% 反而更会看 已发布
  6. 15 第 14 章——块因果注意力:同一帧互看,未来不能偷看 已发布
  7. 16 第 15 章——RoPE、逐帧 token 与意外长出的密集特征 已发布

第 3 部分——会读实验,才算读懂论文

  1. 17 第 16 章——四组消融究竟回答了什么 已发布
  2. 18 第 17 章——相同轮数不等于相同花费 已发布
  3. 19 第 18 章——ImageNet、K400、SSv2 各考什么 已发布
  4. 20 第 19 章——把论文结果记成一本账 已发布
  5. 21 第 20 章——哪些结论现在还不能说 已发布

第 4 部分——从官方仓库到自己的实验

  1. 22 第 21 章——官方仓库地图 已发布
  2. 23 第 22 章——Walking Tours:十段长视频怎样变成训练数据 已发布
  3. 24 第 23 章——读懂默认配置并启动训练 当前课程
  4. 25 第 24 章——先跑一个不会骗人的冒烟测试 已发布
  5. 26 第 25 章——不用训练:加载公开权重提取特征 已发布
  6. 27 第 26 章——在自己的视频上做冻结评估 已发布

第 5 部分——把表征接回世界模型路线

  1. 28 第 27 章——重要边界:LeVJEPA 不是规划器 已发布
  2. 29 第 28 章——怎样把 LeVJEPA 接到下一代世界模型 已发布
  3. 30 第 29 章——十个从入门到论文级的研究项目 已发布

附录——随用随查的技术背包

  1. 31 附录 A——最低限度数学工具箱 已发布
  2. 32 附录 B——完整张量形状表 已发布
  3. 33 附录 C——术语表与论文时间线 已发布
  4. 34 附录 D——复现与审阅检查清单 已发布

一张配置表,五处要对账

  1. Hydra 配方所有旋钮有名字
  2. 多视图1 全局 + 10 局部
  3. ViT-B稀疏、块因果
  4. 两项损失λ 固定 0.02
  5. 检查点训练权重 + EMA 评估副本
配置是一张实验收据;改一个旋钮,就应把新配方另记一张。

3,072 份从哪几口锅里来

菜谱写着“做 3,072 份”,并不是说家里一只锅要同时装下这么多。这个数字来自两间厨房、每间八只锅、每锅 96 份,再累计两轮。单卡命令仍然很有用:它能检查锅会不会点火;只是它回答的不是“整场宴会能否复现”。

先读这张公开配方

冻结 conf/config.yaml 的默认任务是:在十段 Walking Tours 上训练 ViT-B/16,16 帧、stride 2、tubelet 1、95% 随机 token dropping、block_causal;每个 clip 产生一张 224 全局 crop 与十张 96 局部 crop。projector 是 768 → 2048 → 256,SIGReg 使用 17 个 knots、1,024 个随机投影,损失权重 0.02。

优化器这只钟怎样走

优化器是 AdamW:学习率 4e-4、weight decay 0.04、betas (0.9, 0.95);前 1,200 optimizer steps 从 1e-4 warm up 到 4e-4,随后因 end_lr == lr 保持平坦。默认 26 epochs,作者注释估算约一万 optimizer steps。

十一扇窗最后汇成什么

训练计算图要和配置一起核对。global 与十个 locals 都经过同一 encoder;局部先从加载器布局 [B,V,T,C,H,W] 合并并换轴为 [B×V,C,T,H,W],随后十一张 [CLS] 经同一 projector 得 [B,11,256]。代码直接计算 (global_emb - embeddings).pow(2).mean(),其中 global 自己与自己贡献零;SIGReg 接收换轴后的 [11,B,256]。两项 loss 均向同一 encoder 回传,计算图里没有 teacher forward。

3,072 是乘出来的

配置注释假设 2 nodes × 8 GPUs × 96 clips × accumulation 2 = 3,072。机器数、卡数或 accumulation 改变,有效 batch 也会随之改变。EMA 每 32 optimizer steps 更新、decay 0.9999,仅跟踪 encoder,并以 state_dict_ema 写入 checkpoint;在线训练权重仍在 state_dict,EMA 不参与 loss,也不是 target encoder。

先点火两批,再决定是否跑长程

有数据后,可用一张 GPU 做两批冒烟检查:

uv run python main.py \
  trainer.devices=1 trainer.num_nodes=1 trainer.strategy=auto \
  trainer.max_epochs=1 trainer.limit_train_batches=2 \
  loader.batch_size=2 loader.num_workers=0 accumulate_grad_batches=1 \
  model.name=vit_tiny augmentation.local_crops_number=2

这是 effective batch 2 的小模型管线检查。它与默认配方、论文数据和预算不同,所以得到的是“冒烟测试”这张收据。日志中的 train/pred_loss、train/sigreg_loss、train/loss 都应为有限值。

Hydra 的日志与 checkpoint 不在同一抽屉

Hydra 会在 outputs/<date>/<time>/ 留下运行配置与日志;但冻结配置的 checkpoint.dirpath=checkpoints 会按启动目录解析,通常写入仓库根部的 checkpoints/。配置注释所说的“相对 Hydra run dir”与当前 hydra.job.chdir=false 默认行为不一致;若显式设 hydra.job.chdir=true,checkpoint 才会跟随 run dir。

正式启动前先运行 uv run python main.py --cfg job,把解析后的完整 YAML 保存进实验目录,并确认 data.train 指向预期 Lance。Walking Tours 没有独立 validation split;配置让 val 指回 train,同时以 trainer.limit_val_batches=0 禁用验证。训练 loss 因此不是泛化指标,最终比较仍需冻结、独立数据的 probe。checkpoint 默认每 2,000 train steps 及结束时保存;检查其中同时有常规 state_dict 与评估用 state_dict_ema,并记录实际 world size。

同一方法有四张不同收据

论文的受控比较在相同 20% K710、240 epochs 下重训基线;公开默认是 ViT-B + Walking Tours + 26 epochs;12 小时消费卡演示是 ViT-Tiny + 八段视频;发布权重是 ViT-L + 1.8M VideoMix clips。它们共享方法,却不共享完整训练条件。

续训也有两种含义:默认 resume.weights_only=true 只载入权重并重启 schedule;设为 false 才会连 optimizer 状态与步数一起恢复。把这个选择和原配置一并保存,下一次才知道训练时钟从哪里继续。

配方、入口与工作目录的出处

收起配方前核对

  1. 公开默认的 3,072 batch 建立在 2×8 GPU、每卡 96、累积 2 的假设上。
  2. 本地两批命令检查管线;它没有使用论文的数据与预算,因此不继承论文数字。
  3. 方法相同不等于数据、模型、schedule 和预算相同。

看你拿的是哪张收据

  1. 一节点八卡若保持每卡 96,怎样保留 effective batch 3,072?
  2. state_dict_ema 是否给在线 encoder 提供目标?
  3. 默认 Walking Tours 命令能否复现 20% K710 对照表?
查看答案
  1. 将 accumulation 调为 4。
  2. 不能;它只是评估权重平均。
  3. 不能;数据与训练协议不同。