H-JEPA - 分层世界模型与自顶向下的视觉规划

论文标题: H-JEPA: End-to-End Learning of Hierarchical World Models for Visual Planning 论文链接: https://arxiv.org/abs/2610.06805 开源代码: https://github.com/kevinghst/H-JEPA 主题: Joint Embedding Predictive Architecture(JEPA)、分层世界模型、潜在空间预测、基于梯度的动作规划 核心问题: 如何让一个世界模型同时理解短期与长期的环境变化,并利用学到的模型,从当前观测出发规划出能够抵达目标的动作序列?


1. 一句话理解 H-JEPA

H-JEPA 是一种分层潜在世界模型。它不试图逐像素生成未来画面,而是学习环境在不同时间尺度下的潜在状态如何随动作变化;规划时先由高层决定长期目标,再由低层逐步细化成环境可以执行的动作。

可以把它理解成一个具有多层时间尺度的规划系统:

  • 高层: 决定较长时间之后应该到达什么状态。
  • 中层: 将长期目标细化成一系列较短期的子目标。
  • 底层: 优化细粒度的原始动作,并交给环境执行。

它的关键并不只是把一个模型堆成多层,而是让每一层都拥有自己的潜在空间、动作表示和世界模型,并让这些层级协同完成规划。

2. 背景知识:什么是 JEPA,什么是世界模型?

2.1 什么是世界模型?

世界模型(World Model)可以理解为一个学习环境动力学的模型。

假设自动驾驶车辆当前处于状态 $s_t$,执行动作 $a_t$ 后,环境转移到新状态:

$$s_{t+1}=f(s_t,a_t)$$

这里的 $f$ 是真实环境的状态转移规律。现实中我们通常无法直接得到这个函数,因此让神经网络学习一个近似模型:

$$\hat s_{t+1}=F_\theta(s_t,a_t)$$

训练完成后,我们就能在不实际执行每一个候选动作的情况下,利用模型预测不同动作可能带来的结果。

例如,车辆接近路口时,可以让世界模型分别预测:

  • 继续直行,未来会到达什么状态;
  • 向左转,未来会到达什么状态;
  • 减速后再转弯,未来会到达什么状态。

规划器再根据预测结果选择合适的动作。

世界模型的价值在于:把一部分试错和规划过程搬到模型内部完成。

2.2 为什么不直接预测未来图像?

一种直接的做法是预测未来图像:

$$\hat o_{t+1}=F_\theta(o_t,a_t)$$

但这意味着模型需要预测大量像素,包括天空纹理、路面细节、阴影和光照变化等。

对于规划而言,这些细节并不都重要。

例如,车辆需要判断未来是否能顺利通过路口。预测车辆与道路的相对关系、障碍物位置以及场景的关键结构,可能比准确生成每个像素更有价值。

因此,JEPA 采用另一种思路:预测未来的潜在表示,而不是直接重建未来观测。

2.3 JEPA 的基本思想

JEPA,即 Joint Embedding Predictive Architecture,核心思想是把观测编码到潜在空间中,在这个空间里进行预测。

定义:

  • $o_t$:时刻 $t$ 的观测;
  • $E_\theta$:状态编码器;
  • $z_t$:观测对应的潜在表示;
  • $F_\phi$:潜在状态预测器。

编码过程:

$$z_t=E_\theta(o_t)$$

预测过程:

$$\hat z_{t+1}=F_\phi(z_t,a_t)$$

训练时,将预测出的潜在状态与真实未来观测编码得到的目标潜在状态比较:

$$z_{t+1}=E_\theta(o_{t+1})$$

概念上的预测损失可以写成:

$$ \mathcal L_{\mathrm{pred}} = \left|\hat z_{t+1}-z_{t+1}\right|^2 $$

上式是帮助理解的简化形式,不代表论文采用的全部损失细节。

这种训练方式有两个重要特点:

  1. 不需要逐像素生成未来图像。
  2. 学到的潜在表示必须包含预测未来状态所需要的信息。

但只靠潜在预测损失还不够。模型可能把所有输入都映射成几乎相同的向量,导致预测损失很小,却失去区分不同状态的能力。这就是潜在表示坍塌(representation collapse)的问题。

H-JEPA 采用 SIGReg 等表示正则化机制,帮助潜在空间保持有用的统计结构。

3. 为什么需要分层世界模型?

3.1 单层模型面临的时间尺度问题

假设一个规划任务需要考虑未来 20 个环境步。

如果模型每次只预测一步,就需要反复进行长距离 rollout:

$$z_1\rightarrow z_2\rightarrow \cdots \rightarrow z_{20}$$

随着预测不断向未来延伸,误差可能逐渐积累。规划器也必须处理较长的动作序列,优化难度随之增加。

另一种方法是直接预测 20 步之后的状态,但这又要求模型同时掌握短期运动细节和长期行为结构。

H-JEPA 的解决思路是:把不同时间尺度的预测任务分配给不同层级。

3.2 各层拥有自己的潜在空间

H-JEPA 为不同层级分别设置状态编码器、动作编码器和预测器。

以三层模型为例:

模块 主要作用
$E_1$ 将观测编码成最低层潜在状态
$E_2$ 将低层状态序列进一步编码成更高层状态
$E_3$ 将中层状态序列编码成最高层状态
$B_2,B_3$ 将较低层的动作块编码成更高层的宏动作
$F_1,F_2,F_3$ 分别预测各层自己的未来潜在状态

这里的符号是统一后的记号,用来说明架构关系。

重要的是:不同层的潜在状态不必处于同一个空间,也不能默认直接相减。

例如,$z^{(1)}$ 与 $z^{(3)}$ 的语义抽象程度、时间尺度和向量分布都可能不同。因此,比较低层预测结果与高层目标时,需要通过相应编码器或投影路径将其映射到一致的潜在空间。

3.3 各层的时间尺度不同

可以把层级想象成不同倍率的时间观察窗口:

  • 低层关注较短时间跨度内的状态变化;
  • 中层关注一段动作执行后的结果;
  • 高层关注更长时间跨度内的状态变化。

论文中的模拟实验采用三层时间尺度,覆盖约 5、10、20 个环境步的跨度。具体实现还涉及层级的步长、时间窗口和状态对齐,不能把所有配置都简单理解成每层固定只预测一个时间点。

这种设计类似于视频中的不同帧率:低层保留较细的变化,高层以更稀疏的时间采样描述长期趋势。

需要注意的是,高层状态并不只是低层状态的简单平均值。它由可学习的编码器生成,模型需要从低层序列中学习对较长时间尺度预测有用的信息。

4. 世界模型训练:模型如何学会预测未来?

4.1 训练数据是什么?

训练数据主要由真实交互轨迹构成,包括:

$$(o_0,a_0,o_1,a_1,\ldots,o_T)$$

其中:

  • $o_t$ 是环境观测;
  • $a_t$ 是真实执行的动作;
  • $o_{t+1}$ 是执行动作后的观测。

训练时,模型可以利用完整的观测序列生成各层的目标潜在表示,并利用真实动作构造相应层级的动作表示。

4.2 状态如何逐层编码?

最低层首先处理原始观测:

$$z_t^{(1)}=E_1(o_t)$$

更高层则进一步处理较低层的潜在状态序列:

$$z_t^{(2)}=E_2(z_{\mathrm{window}}^{(1)})$$$$z_t^{(3)}=E_3(z_{\mathrm{window}}^{(2)})$$

这里的 window 表示相应层级所使用的时间窗口。以上公式是结构示意;真实实现会按照层级的时间采样与窗口配置进行对齐。

这种逐层编码使高层能够学习更长时间尺度的状态表示。

4.3 动作如何逐层编码?

最低层使用环境定义的原始动作空间。

例如,在模拟机器人任务中,原始动作可能是关节控制量或环境规定的控制向量。

高层的宏动作则不是直接从环境读取的控制指令,而是由动作编码器从低层动作块中学习得到:

$$A_t^{(2)}=B_2(a_{t:t+K-1}^{(1)})$$

其中 $K$ 表示这一宏动作所覆盖的低层动作块长度,具体取决于时间尺度配置。

继续向上,可以将中层动作块编码成更高层的宏动作:

$$A_t^{(3)}=B_3(A_{\mathrm{window}}^{(2)})$$

这样,每一层都拥有与自身时间尺度匹配的动作表示。

4.4 各层分别预测未来潜在状态

对于第 $l$ 层,可以抽象地写成:

$$ \hat z_{t+1}^{(l)} = F_l(z_t^{(l)},A_t^{(l)}) $$

其中:

  • $z_t^{(l)}$ 是当前层级状态;
  • $A_t^{(l)}$ 是该层级的动作或宏动作;
  • $F_l$ 是该层级的世界模型;
  • $\hat z_{t+1}^{(l)}$ 是预测结果。

训练时,预测结果与真实未来观测对应的目标潜在状态进行比较。

4.5 预测损失与 SIGReg

H-JEPA 的训练目标包含潜在预测损失和表示正则化。

概念上:

$$ \mathcal L = \sum_l \mathcal L_{\mathrm{pred}}^{(l)} + \lambda_{\mathrm{reg}} \sum_l \mathcal L_{\mathrm{SIGReg}}^{(l)} $$

第一部分要求模型能够预测未来潜在状态;第二部分帮助防止潜在表示坍塌,并维持有用的表示统计结构。

SIGReg 可以理解为一种约束潜在表示分布的正则化机制。它不是直接要求模型预测某个物体或动作,而是让表示空间保持适合学习和预测的结构。

这与直接重建图像的训练目标不同:模型主要通过潜在预测任务学习环境动力学,而不是被要求还原所有像素细节。

4.6 训练过程的伪代码

以下伪代码只表达数据流,不是源码的逐行复刻。

def train_step(obs, actions):
    # 1. 编码各层的状态序列
    z1 = E1(obs)
    z2 = E2(temporal_window(z1))
    z3 = E3(temporal_window(z2))

    # 2. 将低层动作块编码成高层宏动作
    a2 = B2(action_blocks(actions))
    a3 = B3(temporal_window(a2))

    # 3. 各层预测自己的未来潜在状态
    pred1 = F1(z1, actions)
    pred2 = F2(z2, a2)
    pred3 = F3(z3, a3)

    # 4. 与真实未来观测的潜在目标对齐
    loss_pred = (
        latent_prediction_loss(pred1, z1)
        + latent_prediction_loss(pred2, z2)
        + latent_prediction_loss(pred3, z3)
    )

    # 5. 防止表示坍塌
    loss_reg = (
        SIGReg(z1) + SIGReg(z2) + SIGReg(z3)
    )

    loss = loss_pred + lambda_reg * loss_reg

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

真实实现还需要处理预测时间与目标时间的错位、不同层级的采样步长、损失计算范围等问题。代码中的 temporal_window、action_blocks 和 latent_prediction_loss 是示意函数。

训练完成后,模型获得了三类能力:

  1. 将观测转换成各层潜在状态。
  2. 将动作块转换成高层宏动作。
  3. 根据当前潜在状态和相应动作预测未来潜在状态。

这些能力构成后续梯度规划的基础。

5. 动作规划:如何从目标观测得到动作序列?

训练阶段学习模型;规划阶段则使用模型寻找动作。

规划时通常固定已训练好的编码器、动作编码器和世界模型参数,优化的是候选动作序列本身。

5.1 当前观测与目标观测如何编码?

假设已知:

  • 当前观测 $o_0$;
  • 目标观测 $o_g$。

首先,将两者分别编码到各层潜在空间。

当前状态:

$$z_0^{(1)}=E_1(o_0)$$$$z_0^{(2)}=E_2(z_{\mathrm{window}}^{(1)})$$$$z_0^{(3)}=E_3(z_{\mathrm{window}}^{(2)})$$

目标状态也采用相应的编码路径,得到:

$$g^{(1)},g^{(2)},g^{(3)}$$

其中,目标观测可能只提供目标视觉状态;编码器负责把它转换成规划器能够使用的潜在目标。

在具体实验中,初始观测、历史状态和时间窗口的处理需要符合模型定义。上述写法是对分层编码流程的简化表达。

5.2 最高层优化宏动作序列

最高层先初始化一个待优化的宏动作序列:

$$ A^{(3)} = (A_0^{(3)},A_1^{(3)},\ldots,A_{H-1}^{(3)}) $$

其中 $H$ 是规划时域内宏动作的数量。

将当前最高层状态和候选宏动作序列输入世界模型,进行可微 rollout:

$$ \hat z_{t+1}^{(3)} = F_3(\hat z_t^{(3)},A_t^{(3)}) $$

重复执行,得到整段预测状态序列。

最基本的终点代价可以抽象为:

$$ \mathcal L_{\mathrm{goal}} = \left| \hat z_H^{(3)}-g^{(3)} \right|^2 $$

规划器通过梯度下降更新宏动作:

$$ A^{(3)} \leftarrow A^{(3)} - \eta \nabla_{A^{(3)}}\mathcal L $$

这里的 $\eta$ 表示优化步长。实际实现采用具体的梯度优化器,并可能包含额外的规划代价。

关键是:梯度不是用来更新世界模型参数,而是用来更新候选动作变量。

5.3 动作序列如何初始化?

根据对开源实现的代码分析,规划器的动作初始化不是完全无约束的随机采样。

实现中会维护最近约 4,000 个训练中出现过的宏动作样本,并根据这些样本拟合高斯分布,再从该分布采样初始化候选动作。

其目的在于使初始动作尽量接近训练数据中出现过的动作分布,而不是在整个实数空间中任意抽取向量。

优化时还会对动作施加范围约束:每次更新后,将动作裁剪到对应训练动作分布的第 2 至第 98 百分位范围内,降低优化器跑到明显超出训练分布区域的风险。

实现分析还指出,规划使用 AdamW,最多进行约 90 轮更新,并在最优代价长期没有改善时提前停止;最终保留代价最低的候选方案。

需要区分:

  • 规划时域 $H$: 一条候选序列包含多少个宏动作。
  • 候选数量 $N$: 同时考虑多少条候选序列。
  • 优化迭代次数 $I$: 每条候选序列或优化变量进行多少轮更新。

三者不是同一个参数。不能根据"最多优化 90 轮"就推断规划器只生成一条序列,也不能仅凭架构图推断固定的候选数量。具体预算需要以相应实验配置为准。

5.4 为什么可以用梯度优化动作?

这是 H-JEPA 规划机制中最重要的技术点之一。

因为世界模型是可微的,所以预测状态误差能够沿计算图反向传播到动作输入。

候选动作序列 A
       │
       ▼
可微世界模型 F
       │
       ▼
预测未来状态 z_hat
       │
       ▼
与目标潜在状态 g 计算代价
       │
       ▼
      Loss
       │
       ▼
反向传播到 A
       │
       ▼
更新动作序列

换句话说,规划器可以回答这样一个问题:

如果我把这个动作向量稍微调整一下,未来预测状态会更接近目标,还是更远离目标?

梯度提供了调整方向,优化器据此迭代更新动作。

这不同于传统的离散搜索:它不是简单地枚举直行、左转、右转等动作,而是在模型允许的连续动作表示空间中寻找较优解。

当然,梯度规划只能在已学习模型所描述的动力学范围内工作。预测模型的偏差、动作分布外输入以及潜在空间中的局部优化问题,都可能影响规划质量。

6. 分层规划的关键:上层如何把计划交给下层?

这是 H-JEPA 架构中最值得深入理解的部分。

6.1 宏动作不等于子目标

最高层优化得到的是一串宏动作:

$$ A^{(3)} = (A_0^{(3)},A_1^{(3)},\ldots) $$

这些宏动作经过最高层世界模型 rollout 后,会产生一串预测的高层潜在状态:

$$ \hat Z^{(3)} = (\hat z_1^{(3)},\hat z_2^{(3)},\ldots) $$

规划器从这些预测状态中选择适当的状态,作为传递给下一层的子目标。

因此,要区分三个概念:

  • 宏动作: 高层优化的动作表示。
  • 预测状态: 执行这些宏动作后,世界模型预测会到达的状态。
  • 子目标: 从预测状态中选出的、用于指导下一层规划的目标。

高层不是把宏动作简单切片成多个低层动作,而是先通过世界模型预测状态,再让下一层围绕这些状态目标重新规划。

6.2 次高层如何细化?

假设次高层当前状态是 $z_0^{(2)}$,上层传下来的子目标为:

$$ G^{(2)} = (g_1^{(2)},g_2^{(2)},\ldots) $$

次高层初始化自己的动作序列:

$$ A^{(2)} = (A_0^{(2)},A_1^{(2)},\ldots) $$

然后利用自己的世界模型进行 rollout,预测下一段时间的潜在状态。

它的优化目标不再只是直接抵达整个任务的最终目标,而是让预测状态按照时间对齐,接近上层给出的子目标。

这里有一个重要细节:不同层级的潜在空间可能不同。低层预测状态不能不经处理就与高层子目标相减。实现会利用相应的高层编码路径,将低层预测的状态序列映射到高层空间,再计算子目标代价。

概念上可以写成:

$$ \mathcal L_{\mathrm{subgoal}} = \sum_j \left| E_{\mathrm{upper}} \left(\hat z_{t_j}^{(\mathrm{lower})}\right) - g_j^{(\mathrm{upper})} \right|^2 $$

其中 $E_{\mathrm{upper}}$ 表示相应的上层编码路径,$t_j$ 表示与子目标对齐的时间位置。

该公式用于表达核心机制,真实实现还涉及窗口、步长和时间索引的对齐。

6.3 宏动作一致性约束

除了要求低层预测状态接近上层子目标,分层规划还可以通过宏动作一致性代价,使一段低层动作经动作编码器聚合后的表示接近上层选择的宏动作。

这有助于让低层细化出来的动作与上层的行为意图保持一致。

但需要注意:根据此前对开源实现的分析,配置项 action_cost_weight 的默认值是 0.0。因此,该约束默认关闭,不能把它理解成所有规划运行时必然生效的组成部分。

6.4 最低层如何输出可执行动作?

最低层使用原始动作空间,而不是继续输出抽象宏动作。

在模拟机器人环境中,原始动作可以是环境定义的控制向量。最低层规划器优化这些动作,使其预测的未来状态能够抵达中层传下来的子目标。

最终,最低层产生的动作序列可以交给环境执行。

这里的"可执行"是相对于论文使用的实验环境而言:如果把这套架构迁移到真实车辆,最低层动作的定义、控制接口、动力学约束和安全机制都需要与实际系统相匹配。

6.5 为什么最后一个子目标可以直接使用真实目标?

如果最高层预测的终点状态存在误差,而所有更低层都严格追随这个错误终点,误差就可能沿层级传递。

开源实现还包含一种处理方式:在适用的规划路径中,可以将最后一个子目标替换为真实目标的潜在表示,而不是完全依赖最高层的最终预测状态。

其直觉是:前面的子目标帮助分解规划过程,但最终目标本身已知,没有必要再额外引入一层预测误差。

具体是否使用以及怎样对齐,仍需以对应实现和配置为准。

7. 动作规划伪代码:完整的数据传递

下面将上面的机制串起来。为便于阅读,代码中的若干函数是概念性辅助函数,并非保证与仓库函数名一致。

def plan(obs_now, obs_goal):
    # 1. 当前观测和目标观测分别编码到各层潜在空间
    z_now = encode_all_levels(obs_now)
    z_goal = encode_all_levels(obs_goal)

    # 2. 最高层初始化宏动作序列
    A3 = initialize_actions_from_training_prior(level=3)

    # 3. 优化最高层动作,让预测终点接近目标
    A3 = gradient_optimize(
        A3,
        objective=lambda A:
            goal_cost(
                rollout(F3, z_now[3], A)[-1],
                z_goal[3]
            )
    )

    # 4. 最高层宏动作 -> 最高层预测状态 -> 中层子目标
    Z3_pred = rollout(F3, z_now[3], A3)
    G2 = extract_subgoals(Z3_pred)

    # 5. 中层优化自己的宏动作序列
    A2 = initialize_actions_from_training_prior(level=2)

    A2 = gradient_optimize(
        A2,
        objective=lambda A:
            subgoal_cost(
                project_to_level3(
                    rollout(F2, z_now[2], A)
                ),
                G2
            )
    )

    # 6. 中层预测状态 -> 低层子目标
    Z2_pred = rollout(F2, z_now[2], A2)
    G1 = extract_subgoals(Z2_pred)

    # 7. 最低层优化原始动作
    A1 = initialize_primitive_actions()

    A1 = gradient_optimize(
        A1,
        objective=lambda A:
            subgoal_cost(
                project_to_level2(
                    rollout(F1, z_now[1], A)
                ),
                G1
            )
    )

    # 8. 执行最低层动作的一小段
    execute(A1[:action_chunk])

    # 9. 获取新观测后重新规划

需要注意,示例中的 project_to_level3、extract_subgoals 和 subgoal_cost 仅用于展示数据流。真实代码会根据各层的预测时域、窗口和目标对齐规则实现相应操作。

7.1 开环规划与闭环执行

规划器通常不会把整条长序列一次性执行到底,而是只执行最低层动作的一小段,然后重新获取观测并规划。

获取当前观测
    ↓
最高层规划长期目标
    ↓
中层细化子目标
    ↓
最低层生成原始动作
    ↓
执行一小段动作
    ↓
获取新观测
    ↓
重新规划

这种闭环方式可以降低长期预测误差的影响。

例如,模拟环境中出现了未预料到的状态变化,下一次规划可以基于新的真实观测重新调整,而不必继续执行最初计划中的全部动作。

8. 训练与规划:最核心的区别

维度 世界模型训练 动作规划
输入 真实观测序列与真实动作 当前观测、目标观测
模型参数 通过反向传播更新 通常固定
被优化的变量 编码器、动作编码器、预测器等参数 候选动作序列
监督或目标 真实未来观测对应的潜在状态、表示正则化 目标潜在状态与中间子目标
核心能力 学会环境动力学 利用动力学寻找动作
输出 训练后的分层世界模型 最低层可执行动作

可以把二者理解为:

  • 训练阶段回答:给定状态和动作,未来会怎样?
  • 规划阶段回答:为了到达目标,我应该采取什么动作?

同样使用梯度反传,但被求导的变量不同。这是理解基于可微世界模型进行规划的关键。

9. 实验结果与论文结论

9.1 Visual AntMaze

此前阅读中讨论的结果显示,在 Visual AntMaze 的相应实验预算下,三层 H-JEPA 的成功率为 73.3%,而平坦的 LeWM 基线为 18%。

这一结果说明,在该任务和实验设置下,分层潜在世界模型能够明显改善长期视觉规划的表现。

不过,不能将这个结果直接推广成"分层架构在所有任务中都更好"。不同任务的状态结构、动作空间、目标难度和模型预算都会影响结果。

9.2 Push-T 的表现提醒

论文讨论中的 Push-T 结果是一个重要提醒:分层规划并非在所有任务中都必然占优。

这说明分层结构的价值与任务特点有关。对于某些任务,长期抽象和子目标分解能够显著降低规划难度;对于另一些任务,细粒度的接触动力学、精确动作控制或其他任务特性可能使收益减小。

9.3 DROID 评估应如何理解?

论文还涉及 DROID 相关的离线规划评估。需要将这类结果与真实机器人闭环部署区分开来。

离线规划评估可以检验模型在已有数据和指定目标下的预测或规划能力,但它本身不能证明系统已经在真实机器人上实现了可靠的闭环自主控制。

因此,阅读论文时要区分:

  1. 离线数据上的预测或规划表现;
  2. 模拟环境中的任务成功率;
  3. 真实物理机器人上的闭环部署表现。

它们验证的是不同层面的能力。

10. 与端到端自动驾驶的联系

从自动驾驶算法工程的角度,H-JEPA 值得关注的地方是:它把世界模型学习和动作规划联系起来,并通过时间尺度分解处理长时域规划问题。

10.1 与 BEV + Trajectory Head 的区别

一种常见的端到端自动驾驶架构是:

多相机图像
    ↓
图像特征提取
    ↓
BEV 特征
    ↓
目标点 / Score Map
    ↓
轨迹头
    ↓
预测轨迹

这种架构通常直接从当前场景特征预测目标点、轨迹或其他规划输出。

H-JEPA 的核心思路则是:

当前观测 + 目标观测
    ↓
多层潜在状态
    ↓
最高层优化宏动作
    ↓
世界模型预测未来潜在状态
    ↓
中层优化子目标
    ↓
最低层优化原始动作

二者并非简单的同类替代关系:

  • 直接轨迹预测模型学习从输入到轨迹的映射;
  • H-JEPA 学习可用于 rollout 的环境潜在动力学,再利用该模型进行规划。

当然,二者也可以在更大的系统中组合。例如,视觉编码器、BEV 表示或其他感知模块可以为世界模型提供输入;但具体如何组合,需要另外设计和验证。

10.2 与 Score Map 的区别

如果一个自动驾驶模型通过 Score Map 为 BEV 网格打分,再选择高分网格作为目标点,随后由轨迹头生成单模态轨迹,那么它通常是在学习目标点或轨迹的直接预测机制。

H-JEPA 则不是简单地对 BEV 网格做一次分类并回归轨迹。它通过可微世界模型,直接在动作变量上进行优化。

二者的主要区别是:

  • Score Map 路线:根据当前场景预测哪些目标点更合适,再生成轨迹。
  • H-JEPA 路线:在学到的动力学模型中优化动作,使预测的未来状态接近目标。

这并不意味着 H-JEPA 必然优于直接预测架构。它的优势更依赖于世界模型的准确性、规划目标的设计,以及任务是否确实受益于分层时间尺度。

10.3 对自动驾驶系统的启发

H-JEPA 的分层思想可以启发以下研究方向:

  1. 长时域规划: 将较长期的目标和短期动作分开建模,减少单个规划器必须直接处理的时间跨度。
  2. 潜在动力学建模: 预测与规划相关的潜在状态,而不必重建所有图像细节。
  3. 可微规划: 在固定的可微模型中优化动作,而不是只依赖一次前向推理输出轨迹。
  4. 闭环重规划: 只执行计划的一小段,根据新观测继续调整。
  5. 多层动作表示: 将长期行为表示与底层控制动作区分开来。

但要把这些思想迁移到自动驾驶,还需要面对真实车辆动力学、交通参与者交互、碰撞安全约束、模型预测误差以及在线计算预算等问题。

11. 论文阅读时需要谨慎区分的事项

为了避免将概念示意与实际实现混淆,需要记住以下几点:

  • 各层潜在空间并不相同。 跨层比较状态时,需要经过适当的编码或投影。
  • 宏动作不是原始动作的简单切片。 它由动作编码器从动作块中学习得到。
  • 宏动作不直接交给环境执行。 最终由最低层产生原始动作。
  • 梯度规划优化的是动作变量。 世界模型参数在规划时通常固定。
  • 子目标来自上层预测状态。 它们与上层宏动作相关,但并不是同一个对象。
  • 规划目标不一定只有最终状态距离。 实际实现可以包含子目标、动作一致性等其他代价;部分代价项可能默认关闭。
  • 初始化并非完全无约束随机。 开源实现分析显示,其宏动作初始化利用训练动作分布,并对更新后的动作施加分位数范围约束。
  • 优化迭代数不等于候选序列数。 规划时域、候选数量和优化迭代预算是不同概念。
  • 实验结果不能无限外推。 模拟成功率、离线规划表现与真实机器人部署是不同的证据。

12. 最终总结

H-JEPA 的核心贡献可以从三个层面理解。

第一,表示层面: 它不直接生成未来像素,而是在潜在空间中学习环境状态的变化,并利用正则化维持有用的表示结构。

第二,模型层面: 它为不同时间尺度建立分层世界模型,通过状态编码器、动作编码器和预测器,让不同层级学习各自的潜在状态与动作表示。

第三,规划层面: 它从最高层开始优化宏动作序列,将预测的未来状态转化为下层子目标,再逐层优化更细粒度的动作,最终由最低层输出环境可执行的原始动作,并通过闭环重规划适应新观测。

整个架构最值得记住的一条数据流是:

$$ \boxed{ \text{观测} \rightarrow \text{多层潜在状态} \rightarrow \text{高层宏动作规划} \rightarrow \text{预测状态子目标} \rightarrow \text{低层动作优化} \rightarrow \text{执行与重规划} } $$

一句话概括:H-JEPA 先学习不同时间尺度下的环境动力学,再借助可微世界模型从长时域目标出发,逐层求解能够抵达目标的动作。


相关阅读

  • LeWorldModel - 同为 JEPA 架构的潜在世界模型,单时间尺度规划,H-JEPA 将其扩展为分层多时间尺度
  • Fast-WAM - 世界动作模型,探讨视频生成在训练与推理中的角色差异
  • DreamerV3 - 通用世界模型,用 RSSM 架构和想象训练征服 Minecraft

参考链接

阅读说明:本文综合了论文阅读与后续技术讨论。公式和伪代码以解释架构与数据流为目的,进行了适度简化;涉及初始化策略、优化器设置、代价项默认值等实现细节时,应以对应版本的源码和实验配置为准。