跳转至

规划、控制与评估

世界模型真正有用的地方,不是“能预测未来”,而是“能帮助智能体选择动作”。这一页关注世界模型如何接到规划、控制和评估闭环里。


1. 从预测到决策

世界模型给出未来预测:

\[ \hat{s}_{t+1:t+H}, \hat{r}_{t:t+H} \]

规划器要选动作:

\[ a_t^* = \arg\max_{a_{t:t+H}} \sum_{k=0}^{H} \gamma^k \hat{r}_{t+k} \]

直觉上就是:在脑内试很多种动作序列,选未来回报最大的那条。

1.1 一个具体例子

假设机器人末端在一条线上移动,状态是位置 \(x_t\),动作是速度 \(a_t\)

\[ x_{t+1}=x_t+a_t\Delta t \]

目标是移动到 \(x_{\text{goal}}\),奖励可以设计为:

\[ r_t=-\|x_t-x_{\text{goal}}\|^2 \]

规划器会尝试多条动作序列:

序列 A:左、左、上 -> 最终离目标 10cm
序列 B:右、上、上 -> 最终离目标 2cm
序列 C:下、下、右 -> 最终离目标 20cm

它会选择预测回报最高的序列 B,并只执行第一个动作。下一步重新观察,再重新规划。


2. MPC:每次只执行第一步

MPC(Model Predictive Control)的流程:

1. 观察当前状态
2. 在世界模型中规划未来 H 步
3. 选出最好的动作序列
4. 只执行第一个动作
5. 重新观察,重新规划

好处:

  • 可以随时修正模型误差。
  • 对扰动更鲁棒。
  • 不需要一次规划完整任务。

缺点:

  • 每一步都要搜索,计算量大。
  • 搜索 horizon 太短会短视,太长又会被模型误差污染。

2.1 MPC 伪代码

for t in range(max_steps):
    state = observe()
    best_return = -float("inf")
    best_sequence = None

    for sequence in sample_action_sequences(num_candidates, horizon):
        imagined_state = state
        total_return = 0.0

        for k, action in enumerate(sequence):
            imagined_state, reward = world_model(imagined_state, action)
            total_return += (gamma ** k) * reward

        if total_return > best_return:
            best_return = total_return
            best_sequence = sequence

    execute(best_sequence[0])

这就是随机 shooting MPC。CEM 是它的升级版:不是一直随机采样,而是不断把采样分布往好动作附近收缩。

2.2 Horizon 怎么选?

Horizon 结果
太短 看不到远期收益,动作短视
太长 模型误差累积,规划结果不可信
中等 + 频繁重规划 实践中最稳

机器人里常用短 horizon,因为真实环境每一步都能重新观察,没必要一次预测太远。


3. CEM:采样式动作搜索

CEM(Cross-Entropy Method)是 PlaNet 常用的动作搜索方法。

流程:

  1. 初始化动作序列分布,例如高斯分布。
  2. 采样很多条候选动作序列。
  3. 用世界模型 rollout 每条序列。
  4. 计算预测回报。
  5. 选 top-k 精英样本。
  6. 用精英样本更新分布均值和方差。
  7. 重复几轮,执行最好序列的第一个动作。
graph LR
    A[采样动作序列] --> B[模型 rollout]
    B --> C[计算回报]
    C --> D[保留精英样本]
    D --> E[更新采样分布]
    E --> A

适合连续动作控制,但高维动作或长 horizon 时会变贵。

3.1 CEM 的数学形式

假设动作序列长度是 \(H\),动作维度是 \(d\)。维护一个高斯分布:

\[ a_{1:H}\sim\mathcal{N}(\mu,\sigma^2) \]

每轮采样 \(N\) 条候选序列,计算回报,选 top \(K\) 条精英样本:

\[ \mathcal{E}=\text{TopK}(a_{1:H}^{(i)},R^{(i)}) \]

更新采样分布:

\[ \mu\leftarrow \text{mean}(\mathcal{E}),\quad \sigma\leftarrow \text{std}(\mathcal{E}) \]

重复几轮后,分布会集中到高回报动作附近。

3.2 CEM 伪代码

mu = zeros(horizon, action_dim)
std = ones(horizon, action_dim)

for iteration in range(num_iterations):
    candidates = sample_normal(mu, std, num_candidates)
    returns = []

    for sequence in candidates:
        returns.append(rollout_return(world_model, state, sequence))

    elites = top_k(candidates, returns, k=num_elites)
    mu = mean(elites)
    std = stddev(elites)

execute(mu[0])

3.3 CEM 常见参数

参数 含义 调大后
horizon 规划步数 看得远,但误差更大
num_candidates 候选序列数 搜索更充分,但更慢
num_elites 精英样本数 太小容易早熟,太大收敛慢
num_iterations CEM 迭代轮数 更精细,但耗时
action_std 初始探索范围 太小探索不够,太大动作乱

4. MCTS:树搜索

MCTS(Monte Carlo Tree Search)适合离散动作、规则清晰或可模拟环境,例如棋类、游戏和部分离散控制任务。

它会反复:

  • 选择有潜力的节点。
  • 扩展新动作。
  • 模拟未来。
  • 回传价值。

如果世界模型能快速模拟环境,就可以把 MCTS 用在学来的模型上。

4.1 UCB 选择公式

MCTS 常用 UCB 在“利用”和“探索”之间平衡:

\[ \text{score}(s,a)=Q(s,a)+c\sqrt{\frac{\log N(s)}{N(s,a)+1}} \]

其中:

  • \(Q(s,a)\):这个动作过去平均表现多好。
  • \(N(s)\):状态被访问多少次。
  • \(N(s,a)\):这个动作被试过多少次。
  • \(c\):探索系数。

访问少但可能有潜力的动作会被继续探索。

4.2 什么时候选 MCTS?

场景 适合程度
棋类、离散游戏 很适合
离散动作机器人任务 可以尝试
高维连续控制 通常不如 CEM/MPC
有 policy/value prior 可以像 AlphaZero 那样增强搜索

5. 想象 rollout 训练策略

Dreamer 类方法不一定每一步都做在线搜索,而是在世界模型中生成 imagined rollout:

真实 latent state -> 模型想象未来 -> 训练 actor/critic -> 真实环境执行 actor

优点:

  • 执行时快。
  • 可以从少量真实数据中获得大量训练信号。
  • 适合高维连续控制。

风险:

  • 如果世界模型错误,actor 会学会利用模型漏洞。
  • 需要不断用真实数据校正模型。

6. 价值函数如何帮规划?

纯 rollout 只能看有限 horizon。如果 horizon 太短,智能体可能看不到远期收益。

解决办法:在 rollout 末端加价值函数:

\[ G_t = \sum_{k=0}^{H-1}\gamma^k r_{t+k} + \gamma^H V(s_{t+H}) \]

这样即使只模拟 15 步,也能估计更远未来。

TD-MPC 这类方法就强调用价值函数指导 latent planning。


7. 不确定性与保守规划

世界模型会错。规划器必须避免“钻模型漏洞”:

模型以为某个动作能穿墙拿奖励
策略就会反复选择这个动作
真实世界执行时直接失败

常见方法:

  • ensemble:多个模型投票,分歧大说明不确定。
  • 惩罚不确定性:高不确定动作降低分数。
  • 短 horizon + 频繁重规划。
  • 用真实数据不断校正。
  • 加入安全约束和动作限幅。

7.1 Ensemble 不确定性

训练 \(M\) 个世界模型:

\[ \hat{s}_{t+1}^{(i)}=f_{\theta_i}(s_t,a_t) \]

如果它们预测差异很大:

\[ u(s_t,a_t)=\text{Var}\left(\{\hat{s}_{t+1}^{(i)}\}_{i=1}^{M}\right) \]

说明这个状态-动作组合不确定。

规划时可以惩罚不确定性:

\[ R_{\text{safe}}=R_{\text{pred}}-\lambda u \]

这样模型会更倾向选择自己有把握的动作。

7.2 Model Exploitation

model exploitation 指策略利用模型错误获得虚假高奖励:

世界模型错误认为高速撞墙能穿过去
规划器发现这条路径奖励高
真实执行时直接撞墙失败

解决思路:

  • 不让规划器使用过大的动作。
  • 惩罚不确定状态。
  • 缩短 horizon。
  • 用真实环境数据修正模型。
  • 对危险区域加硬约束,而不是只靠奖励。

8. 世界模型评估

8.1 预测指标

指标 说明
MSE/MAE 状态或像素误差
NLL 概率预测质量
FVD/LPIPS 视频生成质量
latent consistency 表征预测是否稳定

这些指标有用,但不能单独说明控制效果。

预测指标的陷阱

像素 MSE 低可能只是背景预测准;真正影响控制的小物体、接触点、速度可能仍然错。世界模型必须同时看预测指标和控制指标。

8.2 控制指标

指标 说明
episode return RL 任务总回报
success rate 任务成功率
sample efficiency 需要多少真实交互
safety violation 碰撞、越界、危险动作
robustness 干扰和分布外场景下表现

8.3 交互式模拟指标

指标 说明
controllability 动作是否能控制未来
consistency 场景是否长期一致
counterfactual validity 反事实未来是否合理
closed-loop usefulness 训练出的 agent 能否迁移到真实/目标环境

8.4 推荐评估流程

  1. One-step prediction:先看单步预测是否合理。
  2. Open-loop rollout:从真实初始状态出发,连续预测多步,但不纠正。
  3. Closed-loop MPC:每步真实观测后重新规划。
  4. Disturbance test:中途扰动物体或状态,看模型能否恢复。
  5. OOD test:换初始位置、物体、光照或动力学参数。

这能区分三种能力:

能力 测什么
短期动力学 one-step
长期一致性 open-loop rollout
实际决策可用性 closed-loop control

9. 什么时候用世界模型?

适合:

  • 真实交互成本高。
  • 需要规划多步后果。
  • 需要生成危险或稀有场景。
  • 观测高维,但任务有明确动态结构。
  • 想做数据效率高的机器人/RL。

不适合一上来就用:

  • 状态低维且环境很简单,model-free 已足够。
  • 奖励很容易直接优化。
  • 模型误差代价极高且无法安全约束。
  • 没有足够数据学习动力学。

10. 实机/真实系统安全

如果世界模型用于机器人或自动驾驶,一定要有外层安全:

  • 动作限幅。
  • 速度/加速度限制。
  • 碰撞检测。
  • 不确定性阈值。
  • 人工接管。
  • 仿真和离线评估。
  • 小步执行,频繁重规划。

世界模型可以帮智能体想象未来,但不应该成为唯一安全边界。