课程进度 课程大纲 已发布 34/34 课
第 0 部分——先拿到地图
第 1 部分——为什么简单目标会学会看视频
第 2 部分——把一段视频送进单编码器
第 3 部分——会读实验,才算读懂论文
第 4 部分——从官方仓库到自己的实验
第 5 部分——把表征接回世界模型路线
附录——随用随查的技术背包
把翻页书切成带地址的硬币
- 16 帧一小段视频
- 16×16每帧切格子
- 变 token每格一枚
- 记位置时间、高、宽
- 加 `[CLS]`整段摘要卡
把 16 页翻页书铺开,在每页画上同样大小的方格。每格内容换成一枚数字硬币,再刻上“第几页、第几行、第几列”。袋口另放一枚特殊的 [CLS] 硬币,用来汇总整本翻页书。Transformer 接下来处理的,就是这串带时空地址的 token,而非逐个原始像素。
先数清楚,再谈注意力
先忽略 batch(一次并行处理的样本组)与 RGB 通道,只数位置。patch 是一帧里的小方块,LeVJEPA 默认大小为 16 × 16;tubelet 是 patch 沿时间延伸的长度,默认 τ = 1。因此三维卷积每次只跨 1 帧:每帧独立产生一张 patch 网格,输入层还没有把相邻两帧揉成一枚 token。
全局视图是 16 帧、224 × 224:
每帧网格 = (224 / 16) × (224 / 16) = 14 × 14 = 196
整段 patch token = 16 × 196 = 3136
局部视图是 16 帧、96 × 96:
每帧网格 = (96 / 16) × (96 / 16) = 6 × 6 = 36
整段 patch token = 16 × 36 = 576
**patch embedding(小块嵌入)**把每个小块映射到模型宽度 d,每个视图由此得到形如 [T × Hpatch × Wpatch, d] 的序列。官方大模型配方使用分解的三维 **RoPE(旋转位置编码)**写入相对时间、高度和宽度信息,因此同一 encoder 能处理 224 与 96 两种网格,无需给固定绝对位置表做插值。RoPE 只描述位置;过去能否看见未来,仍由后面要学的 attention mask(注意力遮罩)决定。
训练时,patch embedding 之后会从整个时空网格均匀随机丢掉 95% patch token。按固定代码的四舍五入,3136 枚约保留 157 枚,576 枚约保留 29 枚。随后才在序列前加入一枚始终保留的可学习 [CLS] token。损失只读取 [CLS] 经 projector 后的嵌入;patch token 不接受直接监督,丢掉的内容也没有 decoder 负责恢复。评估与推理关闭 token dropping,因而读取完整 token 集。
τ = 1 是论文默认和公开大模型的选择,不是所有视频 Transformer 的自然定律。若 τ = 2,16 帧会变成 8 个时间槽,token 数减半,但两帧在输入处已经聚合;比较两者时必须同时核对保留率和评估序列长度。
自己数一次
计算 8 帧、128 × 128、patch 16 × 16、τ = 1 时的 token 数:每帧 8 × 8 = 64,总计 8 × 64 = 512 个 patch token;再加 [CLS] 才是 513。不要把 [CLS] 算进 95% 随机丢弃对象。
数字从哪里来
- LeVJEPA 论文 v1:逐帧 tokenization、token 数与架构
- 固定代码快照
module.py:PatchEmbed3D、随机保留与[CLS] - 固定默认配置:patch 16、tubelet 1、16 帧与 95% dropping
留下三个数字锚点
- 默认
τ = 1:每枚 patch token 只来自一帧中的16 × 16小块。 - 16 帧全局视图有 3136 个 patch token,局部视图有 576 个,另加
[CLS]。 - 训练随机丢 95% patch token 但不重建它们;评估时使用完整 token。
Token 计数题
τ = 1表示什么?- 为什么全局视图是 3136 个 patch token?
[CLS]会不会和 patch token 一起被随机丢掉?
展开算式
- 每个 token 的时间跨度为一帧。
16 × 14 × 14 = 3136。- 不会,它始终保留并承担 clip 级摘要。