课程进度 课程大纲 已发布 48/48 课
第 0 部分——阅读指南:我们究竟要学什么?
第 1 部分——世界模型:智能体内部的沙盒
第 2 部分——把图像变成状态:LeWM 架构
第 3 部分——防止模型作弊:预测损失与 SIGReg
第 4 部分——让模型行动起来:在潜在空间中规划
第 5 部分——工程复现:从论文到可运行系统
第 6 部分——LeWM 究竟学到了什么?
第 7 部分——为什么“预测准确”仍可能“规划很差”
第 8 部分——从复现者到研究者
附录
先看全景
- 看见此刻的观测
- 执行对齐的动作块
- 再看一次观察到的后果

一个小故事
用同一次 TwoRoom 旅程制作两本相册。第一本保留每一帧的顺序,并在帧之间写下控制动作。第二本把相同图片随机打乱,还丢掉了控制记录。两本相册都能展示房间长什么样,但只有第一本能说明执行某个动作之后发生了什么。
回合边界同样重要。把一次运行的最后一帧与下一次运行的第一帧拼起来,会教给模型一次虚假的瞬移。世界模型需要的是转移,而不只是一份视觉清单。
真正规则
LeWM 的世界模型训练是离线且无奖励的。它回放记录下来的回合,基础目标中不使用任务奖励或目标。这并不意味着部署时不需要动作和目标,也不意味着模型可以无限外推。
冻结的数据配置设定 frameskip=5。一个模型转移会把连续五个底层环境动作合并为一个稠密动作块;它不是只保留最后一个动作,也不是把同一个动作重复五次。train.py 会对包括 action 在内的非像素列进行 z-score 标准化,而动作编码器宽度则由程序设为:
frameskip × environment action dimension
冻结默认值为 history_size=3 和 num_preds=1,因此一个采样窗口包含四个观测位置。前三个潜在状态构成因果上下文,向后平移一位的序列则提供三个单步目标:
z0 -> z1
z1 -> z2
z2 -> z3
num_preds=1 表示偏移量,而不是“只使用最后一对”。v3 论文报告 TwoRoom 的 history 为一,PushT/OGBench-Cube 为三;冻结的全局配置则使用三。请记录一次运行究竟遵循哪个来源。
数据覆盖不只是一张 x-y 热力图。一次转移取决于看见的内容、近期运动或接触,以及提出的动作。即使缓慢访问过每一个位置,也没有覆盖高速穿门的运动。即使看到 PushT 物体静止在某个角度,也没有覆盖碰撞期间外观相同的图像。在这些联合支持范围之外,哪怕预测十分流畅,仍然缺乏数据支持。
容易骗过我们的把戏
采集者 A 记录了数百万张漂亮图像,却始终绕着一个房间转圈。采集者 B 的帧数更少,但它接近过两扇门,发生过碰撞和停顿,从两个方向穿过门口,并且改变过速度。A 拥有更多图像;B 却可能包含好得多的跨房间动力学证据。
现在把 B 的动作日志错移一个时间索引。它的访问热力图仍然看起来非常优秀,但每个后果都与错误的控制动作配对。或者让训练窗口跨过一次重置:模型将学会瞬移。单靠形状检查可能发现不了这两种错误。
训练之前,应当回放完整回合,检查时间戳和动作块,统计完整的穿门次数,按区域和运动状态查看条件动作直方图,并列出缺失的组合。
证据凭据
LeWorldModel v3、冻结的 train.py 和冻结的 TwoRoom 数据配置,支持这里所述的轨迹接口与配置事实。论文报告了 10,000 个 TwoRoom 回合,平均每个回合 92 个环境步,数据由带噪声的穿门启发式策略收集。这是数据集描述,不是通用最低要求,也不能证明覆盖完整。
独立的 TwoRoom 复现 指出,稠密动作采集、运行时动作宽度、ImageNet 像素标准化和动作 z-score,是复现成败的关键约定,而这些约定并非都能只从 YAML 看出来。这仍然只是一个单随机种子的环境。
快速检查
- 为什么打乱相同帧的顺序后,无法再学习动作条件动力学?
- 当窗口跨过回合重置时,会出现什么虚假事件?
- 为什么完整的 x-y 访问仍不能证明转移覆盖充分?