视频生成领域的进步很容易让人产生一个误解:模型把下一帧画得足够逼真,就意味着它“看懂”了世界。但一张从斜坡滑下的小球画面,可以由两种完全不同的方式产生——一种是记住了像素之间的连续性,另一种是在内部状态中模拟了重力、摩擦、碰撞这些物理过程。前者是“画面在动”,后者才是“世界在演化”。
这两者之间的差距,恰恰暴露出当前视频模型的一个关键问题:它是在预测像素,还是在理解状态?越来越多的前沿工作开始把答案指向同一个方向:潜态推理(latent state reasoning)。也就是说,不要在原始像素空间里硬推未来,而是先把视频压缩成低维的潜态,再在这个潜态空间中学习世界的演化规律,最后把推演结果映射回画面。视频世界模型(Video World Model)正是这种思路最典型的实验场。
这篇文章想讲清楚三件事:第一,潜态推理为什么是视频世界模型学习世界演化的关键机制;第二,视频世界模型到底能从数据中学到什么层次的演化规律;第三,作为开发者,怎样用最小工程成本验证这套思想,以及当前技术路线的真实边界在哪里。
1. 视频生成与视频理解之间,缺的正是“潜态推理”
在很长一段时间里,“视频生成”和“视频理解”是两条几乎平行的技术路线。视频生成关注的是画面质量,追求生成结果在肉眼上足够真实;视频理解关注的是语义判断,比如识别动作、分割物体、理解场景。这两条路线的目标不同,评价指标也不同,以至于很少有人会把“生成视频的模型”和“理解世界的模型”直接画等号。
但世界模型(World Model)这个概念改变了这种分工。世界模型的核心不是生成一段好看的视频,而是让模型建立对外部世界的内部表征,然后用这个表征去预测“接下来会发生什么”。换句话说,世界模型的重点在“预测未来”,而生成画面只是把预测结果渲染出来的一种方式。
为什么必须引入潜态推理?因为直接在像素空间做预测,本质上是在做一个极其困难的回归问题。每一帧画面的像素之间高度相关,物体边缘、光照变化、纹理细节占据大量信息量,但这些信息对“判断小球是否会撞到墙”这件事几乎没有贡献。模型如果把精力花在猜对每一块阴影的位置上,就很难抽取出真正决定世界演化的那些变量:物体在哪里、速度是多少、谁和谁要发生交互。
潜态推理的做法是:先通过编码器把一帧视频压缩成一个低维向量,这个向量编码的是画面背后的“状态”,再在当前状态的基础上预测下一个状态,最后通过解码器把状态还原成画面。在这个闭环里,模型学习的不再是“像素到像素”的映射,而是“状态到状态”的迁移。这个状态迁移函数,就是世界模型的灵魂。
从表达上看,可以这样理解:像素预测是“看画面猜画面”,潜态推理是“在棋盘上想三步棋”。前者只模仿了表象,后者才触及了演化。这也是为什么近两年头部研究团队发布的世界模型类系统,几乎都强调在表征空间做预测,而不是靠堆像素生成帧来模拟世界。
2. 为什么世界模型必须“潜态”,不能直接在像素上硬推
很多初学者会有一个本能疑问:既然最终要输出视频帧,为什么不直接让模型在像素空间里做预测?这个问题问得很自然,但从工程和理论上都很难成立。
2.1 像素空间的维度太高,预测难度指数级上升
一帧 64x64 的 RGB 图像,展开后有 12288 个维度。一秒钟 30 帧,就接近 37 万个维度。如果模型要在这样一个超高维空间里逐点预测未来,需要拟合的不仅是物体的运动,还包括每一块纹理的细微变化、光照的连续迁移、传感器的噪声。这些信息绝大部分是冗余的,对预测“世界是否演化到下一个状态”没有直接帮助。潜态空间通常只有几十到几百个维度,模型可以专注于真正影响演化的变量。
2.2 像素预测容易被“表面相似性”欺骗
像素级的损失函数有一个非常隐蔽的问题:相邻两帧之间,像素值往往高度相似。一个最简单的 baseline——直接把上一帧复制过来——就能在 MSE 指标上获得不错的表现。模型很容易走向“复制粘贴”这条捷径,而不是真正理解场景的动力学。这不是模型笨,而是优化目标天然倾向于这种偷懒策略。潜态空间的表征经过压缩和抽象,迫使模型必须保留真正有预测价值的信息,丢掉那些不重要的细节。
2.3 因果信息在像素空间里被淹没了
假设场景中有一个杯子在桌面上滑动,即将掉下桌沿。像素空间描述的是“哪些像素的颜色在变化”,而潜态空间描述的是“杯子处于什么位置、移动速度是多少、和桌沿还有多远”。后者才是因果预测需要的信息。像素级预测即使做到了高保真,也很难保证模型内部真的对这些因果变量建立了表征;而显式的潜态推理,天然就把这些变量放到了模型需要处理的位置上。
2.4 误差累积的性质不同
在像素空间做多步预测时,每一帧预测产生的微小误差都会在下一步被放大,最终导致画面出现鬼影、扭曲甚至完全崩坏。潜态推理的每一步预测发生在低维空间,误差以“状态偏差”的形式累积,它不会立刻破坏画面的结构。更重要的是,模型可以通过闭环观测来纠正偏差:每预测几步就重新编码一次真实观测,把状态拉回正轨。这种“观测-预测-纠正”的模式,在像素级方法里很难做到。
所以,“潜态”不是一种可有可无的设计选择,而是让世界模型真正可训练、可泛化的必然路径。
3. 视频世界模型如何从数据中学习“世界演化”
理解了为什么要用潜态,下一个问题就是:模型到底怎么从一堆视频里学到世界演化规律?这里需要把“学习演化”拆开来看,它不是一个单一能力,而是一层一层叠加起来的。
3.1 第一层:表观的运动规律
最基础的一层,是学会画面的连续性。比如一个物体从左边移动到右边,它的边缘、纹理、遮挡关系会如何变化。这一层潜态编码的主要是空间位置和时间动态,模型通过学习大量视频,能够预测出“如果上一帧物体在位置 A,下一帧大概率在位置 A+Δ”。这种能力类似于光流估计,但发生在潜空间中。
3.2 第二层:物体层面的物理规律
当模型看过的视频足够多,它开始从潜态中抽象出物体的概念:这个物体有质量、有速度、有形状,碰到另一个物体会反弹,会停下来,会跌倒。这一层不再只是画面连续性的记忆,而是真正与物理常识发生了关联。比如抛出的球会沿抛物线运动,撞到障碍物会减速,这些规律没有人为标注,而是模型从海量的视觉序列中自动归纳出来的。
3.3 第三层:因果结构与场景规则
更高层的演化规律,是场景中的因果依赖。比如“推倒一个多米诺骨牌,它撞倒下一块,再撞倒下一块”,模型需要学会的不只是单块牌的运动,而是事件之间的级联传导。这一层学习到的是场景的结构化因果关系:物体 A 作用于物体 B,导致 B 发生状态变化,B 又作用于 C。潜态表征在这一层需要把“交互关系”也编码进去,而不仅仅是编码单个物体的状态。
这三个层次不是研究者用标注分好的,而是模型在潜空间中自然涌现的分层结构。对工程师来说,理解这一点价值很大:评价一个世界模型有没有真正理解演化,要看它在哪个层次上表现出预测能力。如果只在第一层,说明模型只是在“续写画面”;如果能到第二层、第三层,才谈得上它建立了关于世界的内部模型。
| 学习层次 | 潜态编码的信息 | 典型表现 | 判断标准 |
|---|---|---|---|
| 表观运动 | 位置、姿态、时序变化 | 短程画面连续 | 短程预测清晰 |
| 物理规律 | 速度、质量、碰撞约束 | 预测轨迹符合直觉 | 干预后仍符合物理 |
| 因果结构 | 物体间交互、事件级联 | 多物体场景推演 | 反事实测试正确 |
4. 当前视频世界模型的四条主流技术路线
潜态推理作为核心思想,在不同的实现框架下有不同的落地方式。从公开工作和研究趋势看,目前可以整理出四条主要的路线。
4.1 向量量化 + 自回归预测
这条路线先把视频帧编码为离散的 token 序列(类似图像领域的 VQ-VAE 思路),然后用 Transformer 之类的自回归模型在 token 序列上做预测。模型看到前面的 token,预测下一个 token,从而生成未来的视频内容。优点是可以直接复用成熟的文本生成技术栈,工程实现相对稳定;缺点是离散化会损失部分连续运动的细节,而且自回归逐帧预测的推理速度较慢。
4.2 联合嵌入预测架构(JEPA 式)
这条路线的核心思想是“预测表征,而不是预测像素”。模型学习的是两个不同时刻潜态表征之间的关系,让预测目标落在潜空间中,而不是重建原始画面。它的优势是表征更抽象、语义更强,天生适合学习世界演化;难点在于训练稳定性要求高,如果处理不好,表征很容易退化成一个常数映射,也就是所谓的“表征坍塌”。
4.3 扩散模型作为世界模型
把扩散模型作为生成器,在潜空间或像素空间中逐步去噪生成未来帧。这类方法在生成质量和多样性上有明显优势,画面细节还原度通常更高。但扩散模型每一步生成都需要多次迭代采样,计算成本偏高,而且它的生成过程本质上是“采样”而非严格的“推演”,在需要精确控制的多步规划场景中,如何保证演化过程的一致性,仍然是需要解决的问题。
4.4 强化学习中的动力学世界模型
在强化学习领域,世界模型被用来做“想象 rollout”:智能体在潜空间中推演行动后果,然后用推演结果辅助策略学习。Dreamer 系列的工作是这类方向的代表性思路。它的特点是直接服务决策,不追求生成逼真的视频画面,而是追求潜态预测对策略优化的有效性。缺点是训练往往依赖环境的交互数据,通用性相对受限。
| 技术路线 | 核心思想 | 优点 | 限制 |
|---|---|---|---|
| 向量量化+自回归 | 离散 token 序列预测 | 复用 NLP 基建,稳定 | 细节损失,推理慢 |
| JEPA 式 | 潜空间表征预测 | 语义强,适合演化 | 训练易坍塌 |
| 扩散世界模型 | 生成式采样 | 画面质量高 | 计算昂贵,精确性弱 |
| RL 动力学模型 | 潜态 rollout | 直接服务决策 | 依赖交互数据 |
5. 最小实现:一个潜态推理示例,跑通“编码-预测-解码”闭环
理论讲再多,不如亲手跑通一个最小示例。下面我用 PyTorch 实现一个简化版的潜态推理视频世界模型。需要提前说明:这是一个教学用的最小实现,省略了向量量化、对比学习等加固表征的模块,但核心链路是完整的,逻辑与工业级实现一致。
5.1 环境与依赖
建议使用 Python 3.8 及以上版本,安装 PyTorch。示例代码在 CPU 上可以运行视频编码和解码部分,但训练潜态预测模型时,GPU 会快很多。
pip install torch torchvision numpy5.2 阶段一:把视频帧编码为潜态序列
首先定义一个卷积自编码器,用来把视频帧压缩成潜态向量,再从潜态向量还原画面。这个模块就是世界模型的“眼睛”和“手”。
# latent_encoder.py import torch import torch.nn as nn class Encoder(nn.Module): """ 将视频帧压缩到潜态空间。 输入: [B, T, C, H, W] 的视频片段 输出: [B, T, D, H/8, W/8] 的潜态特征图 """ def __init__(self, in_channels=3, latent_dim=64): super().__init__() self.conv = nn.Sequential( nn.Conv2d(in_channels, 32, kernel_size=4, stride=2, padding=1), nn.SiLU(), nn.Conv2d(32, 64, kernel_size=4, stride=2, padding=1), nn.SiLU(), nn.Conv2d(64, latent_dim, kernel_size=4, stride=2, padding=1), nn.SiLU(), ) def forward(self, x): # x: [B, T, C, H, W] B, T, C, H, W = x.shape z = self.conv(x.reshape(B * T, C, H, W)) _, D, h, w = z.shape return z.reshape(B, T, D, h, w) class Decoder(nn.Module): """ 将潜态特征图还原为视频帧。 输入: [B, T, D, H/8, W/8] 输出: [B, T, C, H, W] """ def __init__(self, latent_dim=64, out_channels=3): super().__init__() self.deconv = nn.Sequential( nn.ConvTranspose2d(latent_dim, 64, kernel_size=4, stride=2, padding=1), nn.SiLU(), nn.ConvTranspose2d(64, 32, kernel_size=4, stride=2, padding=1), nn.SiLU(), nn.ConvTranspose2d(32, out_channels, kernel_size=4, stride=2, padding=1), nn.Tanh(), ) def forward(self, z): # z: [B, T, D, h, w] B, T, D, h, w = z.shape z = z.reshape(B * T, D, h, w) x = self.deconv(z) return x.reshape(B, T, *x.shape[1:])编码器通过三层步长为 2 的卷积,把 64x64 的帧压缩成 8x8 的潜态特征图。解码器再做对称的上采样。这个自编码器训练好之后,一帧画面就可以被表示成一个 64x8x8 的潜态张量,模型后续的预测都发生在这个低维空间里。
这里真正容易踩坑的地方是,自编码器的重建质量会影响整个世界模型的上限。如果潜态空间丢掉的信息太多,后面的预测模型学得再好,解码出来的画面也会是模糊的。所以实际项目中,会在这个自编码器上花很多精力,甚至加入感知损失来提升重建效果。
5.3 阶段二:在潜空间做自回归演化预测
接下来定义潜态空间的动力学模型。它的任务是:给定最近 K 帧的潜态,预测下一帧的潜态。这里用 GRU 来实现时序建模,你也可以替换成 Transformer。
# latent_dynamics.py import torch import torch.nn as nn class LatentDynamics(nn.Module): """ 在潜态空间做自回归预测。 输入: [B, T, D] 的潜态序列(T 为历史帧数) 输出: [B, T-1, D] 的潜态预测序列 """ def __init__(self, latent_dim=64, hidden_dim=256): super().__init__() self.gru = nn.GRU(latent_dim, hidden_dim, batch_first=True) self.head = nn.Linear(hidden_dim, latent_dim) def forward(self, z_seq): # z_seq: [B, T, D] outputs = [] hidden = None for t in range(z_seq.size(1) - 1): out, hidden = self.gru(z_seq[:, t:t+1], hidden) pred = self.head(out) outputs.append(pred) return torch.stack(outputs, dim=1)这段代码做的事很直观:输入连续 4 帧的潜态,让 GRU 逐步消化历史信息,每一步输出下一帧潜态的预测值。预测的目标就是真实潜态序列中下一帧的潜态特征。训练损失建议用 L2 损失,但要注意,如果只是追求 loss 下降,模型会倾向于预测“平均状态”,反而丢失运动信息。一种缓解方法是在潜态空间中施加对比约束,让不同状态的潜态向量相互远离。
训练循环很直接:
# train_dynamics.py import torch import torch.nn.functional as F def train_one_epoch(encoder, dynamics, dataloader, optimizer): encoder.eval() # 固定编码器,只训动力学 dynamics.train() total_loss = 0.0 for batch in dataloader: # batch: [B, T, C, H, W],T 是序列长度 with torch.no_grad(): z = encoder(batch) # [B, T, D, h, w] B, T, D, h, w = z.shape z = z.permute(0, 1, 3, 4, 2).reshape(B, T, -1) # 摊平空间位置 pred = dynamics(z) # [B, T-1, D] target = z[:, 1:, :] # 下一帧潜态 loss = F.mse_loss(pred, target) optimizer.zero_grad() loss.backward() optimizer.step() total_loss += loss.item() return total_loss / len(dataloader)这段训练的哲学是:编码器负责把观测变成状态,动力学模型负责学会状态之间的迁移函数。训练好之后,动力学模型就是一个“世界演化的模拟器”——它在潜态空间中模拟未来。
5.4 阶段三:从潜态解码回视频帧
训练完动力学模型之后,完整推理过程就是标准的“编码-预测-解码”闭环:
# infer_future.py import torch @torch.no_grad() def predict_future(frames, encoder, decoder, dynamics, steps=5, context=4): """ 输入历史视频帧,预测未来 steps 帧。 frames: [T, C, H, W] """ encoder.eval() decoder.eval() dynamics.eval() # 1. 编码历史帧 z = encoder(frames.unsqueeze(0)) # [1, T, D, h, w] B, T, D, h, w = z.shape z = z.permute(0, 1, 3, 4, 2).reshape(B, T, -1) future_frames = [] for _ in range(steps): # 2. 用最近 context 帧潜态预测下一帧 z_input = z[:, -context:, :] pred = dynamics(z_input) # [B, context-1, D] 或 [B, context, D] z_next = pred[:, -1:, :] # 取最后一个预测结果 # 3. 拼接下一帧潜态到历史序列 z = torch.cat([z, z_next], dim=1) # 4. 解码回像素空间 z_img = z_next.reshape(B, h, w, D).permute(0, 3, 1, 2) frame = decoder(z_img.unsqueeze(1)).squeeze(1) # [B, C, H, W] future_frames.append(frame.squeeze(0)) return torch.stack(future_frames)5.5 如何验证模型真的在“学习演化”
运行之后,建议从三个层面验证模型学到的能力。
第一,短程预测是否清晰。预测未来 2 到 3 帧,画面结构是否保持完整,物体轮廓是否模糊,位置是否基本合理。
第二,多步预测是否有物理感。预测未来 10 帧以上,物体运动轨迹是否符合直觉。比如一个下落的球,是否持续加速而不是匀速或乱跳。如果轨迹出现了漂移或者画面崩坏,大概率是潜态空间的表征质量不够,或者训练序列太短。
第三,潜态空间是否具备一致性。把编码器输出的潜态向量做线性插值,再送到解码器,观察画面变化是否平滑。如果插值产生不真实的中间画面,说明潜态空间没有对真实状态形成好的流形结构。
6. 潜态推理在真实场景中的落地价值与边界
潜态推理的工程价值,不在于“替代视频生成模型”,而在于给预测和规划类任务提供了一个更合理的中间层。
在具身智能方向,机器人看到当前画面,编码成潜态,在潜态中推演“如果我向前移动一步,世界会变成什么样”。这种推演可以直接服务于路径规划和动作选择,而且潜态推演的计算成本比渲染完整视频低很多。在自动驾驶场景,潜态推理可以用于预测其他交通参与者的未来轨迹,它关注的是“车会不会变道”“行人会不会横穿”这类状态级预测,而不是像素级的渲染。在工业仿真中,潜态推理可以用来构建轻量级数字孪生,预测设备的退化规律。
但必须清醒认识到当前技术的边界。首先是长期预测的误差累积问题。即使潜态空间的预测误差较小,在连续预测几百步之后,状态偏差仍然会不可忽视。工业应用通常需要闭环纠正机制,不能指望开环预测走太远。其次是分布外泛化问题。如果训练数据里没有出现过“直升机卷起强风吹飞桌子上的纸张”这种场景,模型很难在潜态中模拟出这种突发事件。世界模型的泛化,说到底取决于训练数据覆盖的真实世界状态分布。
还有一个容易被忽视的边界:潜态推理擅长的是“可预测的物理过程”,而不是“充满随机性的社会过程”。如果世界演化本身受不可观测因素主导,任何基于历史观测的潜态模型都会遇到本质性的预测瓶颈。
7. 常见误区与技术陷阱
在接触潜态推理和视频世界模型时,有几个误区特别常见,值得单独拿出来讲。
| 误区 | 表面表现 | 更合理的做法 |
|---|---|---|
| 视频生成逼真 = 理解世界 | FVD 指标很漂亮,但干预测试一塌糊涂 | 同时设计反事实评测,检查潜态是否编码了因果变量 |
| 预测下一帧准确 = 学会了物理 | 短程预测近乎完美,长程预测却完全偏离 | 增加长程预测和轨迹物理合理性检查 |
| 潜态空间越大越好 | 潜态编码了过多噪声,训练难以收敛 | 设置瓶颈结构,配合稀疏或对比约束 |
| 只看重建损失 | 画面重建好,但动力学模型只是死记硬背 | 对潜态向量做插值、线性探测等诊断实验 |
第一个误区是最普遍的。很多团队看到视频生成的效果很好,就把模型当成世界模型来用,结果在需要精确推演的规划任务中完全失灵。原因很简单:生成模型的目标是“像”,而不是“对”。它可以生成一个看起来合理的未来,但内部并没有针对物理法则做精确约束。
第二个误区涉及到评测方式。只用短程预测误差来评估世界模型,几乎一定会高估模型能力。一个更好的做法是把评测拉长,设定事件级指标,比如“球是否在预期帧数内到达预定位置”“碰撞后速度变化是否符合还原系数”,这类指标更能反映潜态模型是否学到了物理规律。
第三个误区也很现实。潜态维度过高,不仅增加计算量,还会让动力学模型更难学。表征不是越丰富越好,而是越精炼越好。真正有信息量的潜态,应该保留对预测未来有用的变量,丢掉其余的细节。
第四个误区提醒我们,潜态空间的可解释性很关键。如果潜态的每一个维度都高度耦合,你几乎无法判断模型学到了什么。做线性探测——训练一个简单的分类器,看能否从潜态中恢复出物体的位置、速度等信息——是非常有效的诊断手段。
8. 工程落地建议与评测思路
8.1 不要把 MSE 当作唯一指标
在潜态推理的工程落地中,像素级 MSE 只能反映“画面没崩”,不能反映“演化推对了”。建议构建多层评测体系:
- 短程帧预测:预测未来 2 到 5 帧,检查画面清晰度和结构完整性。
- 长程事件预测:预测未来 10 到 30 帧,检查关键事件是否按预期发生。
- 反事实测试:人为修改初始条件,比如改变物体初速度、改变碰撞对象,看潜态预测结果是否随之合理变化。
- 分布外测试:准备一组训练分布中很少出现的场景数据,验证模型的泛化能力。
反事实测试尤其重要。它直接检验模型是否真正建立的因果表征。如果模型只是记住了训练数据中的统计模式,在反事实条件下会产生荒谬的预测。
8.2 数据策略:真实视频与仿真数据混合
真实视频的优点是丰富自然,缺点是缺少 ground truth 物理量。仿真视频的优点是物理量可控、有精确标注,缺点是存在 sim-to-real 的差异。更稳妥的思路是两者混合:用仿真数据验证潜态是否真的编码了位置、速度、质量等物理量,用真实数据验证模型在实际场景中的可用性。仿真环境还能很方便地生成“违反直觉但理论上正确”的反事实样本,这对评估世界模型的因果推断能力很有价值。
8.3 训练策略:从短序列到长序列的课程学习
直接让模型预测 30 帧,训练很难收敛。推荐的做法是从 3 到 5 帧的短序列开始,等动力学模型稳定后,再逐步增加预测步数。每一步增加时,可以加入少量“预测-纠正”的训练样本:让模型连续预测几步后,用真实观测的潜态对状态进行纠正。这种闭环训练能显著提升长期预测的稳定性。
8.4 架构选择建议
如果任务是做高质量视频预测,向量量化+自回归路线更成熟;如果任务是做智能体规划,RL 世界模型路线更对口;如果任务更强调语义级别的演化推演,可以重点研究 JEPA 式的联合嵌入预测思路。不同的路线对应不同的评价标准和工程复杂度,不要强求用一种方案解决所有问题。
8.5 长期规划中的工程安全
潜态推理模型如果在生产环境中直接参与决策,必须设置预测置信度的监控。当模型连续多步预测的潜态向量出现高不确定性时,应该切换到保守策略,回退到基于规则的方法或者请求更高级别的决策模块介入。任何预测模型进入生产系统,都要走完整的灰度发布、回滚和监控流程,这一点对于世界模型类系统尤其重要,因为它的误差传导方式比传统感知模型更隐蔽。
9. 总结与后续学习方向
这篇文章想说明白的一个核心判断是:世界模型的智能,不在于把下一帧画出来,而在于在潜态空间中推理出世界会如何演化。视频只是观测,潜态才是状态,预测状态之间的迁移,才是真正意义上的世界建模。工程上,你可以用“编码-预测-解码”的最小闭环快速验证这套思想;学术上,你可以沿着向量量化、联合嵌入预测、扩散世界模型、RL 动力学模型这几条路线继续深入。
对于想进一步动手实践的开发者,建议按这样的顺序推进:先在一个小规模仿真数据集上训练自编码器,确保潜态重建质量;再训练潜态动力学模型,观察它能否学会正确的物理轨迹;然后加入反事实评测,检验模型的因果泛化能力;最后尝试把潜态推理接入简单的决策流程中,体会它和传统视频生成在应用方式上的本质差异。整个过程不需要很大的算力,一台带 GPU 的机器就足够跑通。
潜态推理距离真正理解世界还有很长的路要走,但它指明了一个正确的方向:判断一个模型是否理解世界,不要看它画得有多像,而要看它在内部状态中推演得有多准。这个判断标准,值得在设计和评测下一代视频模型时反复拿出来对照。建议收藏这篇文章,在你准备设计和训练自己的世界模型时,再回来翻一翻这些容易踩坑的地方。