系列:VLA 解码手记

VLA 解码手记(八):Dreamer V3 —— 一套超参横扫 50+ 域的世界模型 RL

0. 一句话定位

Dreamer V3 = 用大模型在「脑子里做梦」的方式学策略,一套固定超参数横扫 Atari、DMLab、Crafter、Minecraft、机械臂控制等 150+ 任务。

它是世界模型(World Model)路线从「调参艺术」走向「工程系统」的关键节点,也是后来 Genie、Cosmos、GR00T-Dreams 等物理世界模型的技术源头之一。

1. 为什么需要世界模型?

传统 RL 的问题:

真实环境交互 → 成本高、样本效率低、真机试错危险

世界模型的思路:

先学一个环境的内部模型 → 在 imagination 里 rollout → 只在必要时用真实交互验证

对机器人来说,这相当于让模型在「梦境」里摔无数次跤,而不是在真实产线上摔。

2. RSSM:把世界建模成循环状态空间

Dreamer V3 的核心是世界模型 RSSM(Recurrent State-Space Model),状态拆成两部分:

状态含义更新方式
h_t确定性循环状态GRU 递归更新
z_t离散随机状态分类分布(Categorical)
h_t = GRU(h_{t-1}, a_{t-1}, z_{t-1})           # 确定性路径
z_t ~ p(z_t | h_t) = Categorical(NN_prior(h_t)) # 先验:不用观测,纯预测
z_t ~ q(z_t | h_t, o_t) = Categorical(NN_post(h_t, o_t)) # 后验:用观测修正

训练时,后验 q 用来更新模型;想象 rollout 时,只用先验 p(因为看不到未来观测)。

3. 训练目标:重建 + 奖励 + 终止 + KL

世界模型同时预测三件事:

o_hat = Decoder(h_t, z_t)       # 重建观测
r_hat = RewardHead(h_t, z_t)    # 预测奖励
c_hat = ContinueHead(h_t, z_t)  # 预测是否终止
L_WM = L_recon + L_reward + L_continue + beta * KL(q || p)

4. symlog:让一套超参跨域通用的关键

不同任务的奖励尺度天差地别:

Dreamer V3 用 symlog 变换统一尺度:

symlog(x) = sign(x) * ln(1 + |x|)
symexp(x) = sign(x) * (exp(|x|) - 1)   # 反变换

这样 reward head 和 value head 都预测压缩后的值,Critic 训练更稳定,同一套损失权重能适应所有域。

5. Imagination Rollout:在梦里训练 Actor-Critic

Dreamer V3 训练循环 真实交互轨迹 o_t, a_t, r_t RSSM 世界模型 学 h_t, z_t, ô, r̂, ĉ Imagination h,z 想象 rollout Actor + Critic 在 imagination 中优化策略 1. 从真实轨迹最后一步 (h_T, z_T) 出发,用 Actor 生成动作 a_T; 2. RSSM 先验预测下一步 (h_{T+1}, z_{T+1}) 和奖励 r̂_{T+1}; 3. 重复 H 步,得到 imagined trajectory; 4. Critic 估计 lambda-return,Actor 最大化 return + entropy 正则。 损失:L_actor = -E[ symlog(V_λ) ] + λ_entropy * H(a);L_critic = MSE(symlog(v̂), symlog(V_λ))

图:Dreamer V3 在真实数据上训练世界模型,再在想象轨迹上训练 Actor-Critic。

6. 关键超参为什么能固定?

Dreamer V3 之前,每个域都需要单独调:学习率、折扣因子、奖励缩放、KL 权重等。V3 能固定超参,主要靠四点:

  1. symlog/symexp:统一奖励与 value 尺度;
  2. 离散分类状态:32 类 × 32 组,比连续高斯更稳定;
  3. KL 平衡:动态调整先验/后验权重,防止模型崩塌;
  4. 归一化与初始化:观测、奖励、梯度都做了归一化,降低对任务统计量的敏感。

7. 与具身智能的关系

Dreamer V3 直接启发了:

核心逻辑:

世界模型生成 synthetic rollout → 低成本扩大训练数据 → VLA 在真机上更稳

这是解决具身智能「数据饥渴」的关键路径之一。

8. 简化版 PyTorch 训练循环

for batch in dataloader:
    # 1. 真实轨迹编码
    h, z = rssm.observe(batch.obs, batch.act)

    # 2. 世界模型损失
    recon = mse(decoder(h, z), batch.obs)
    reward = mse(reward_head(h, z), symlog(batch.reward))
    cont = bce(continue_head(h, z), batch.cont)
    kl = kl_divergence(rssm.posterior(h, batch.obs), rssm.prior(h))
    loss_wm = recon + reward + cont + 0.1 * kl

    # 3. 想象 rollout
    h_imag, z_imag, a_imag, r_imag = rssm.imagine(h[-1], z[-1], actor, horizon=15)

    # 4. Actor-Critic
    values = critic(h_imag, z_imag)
    returns = lambda_return(r_imag, values, gamma=0.997, lambda_=0.95)
    loss_actor = -symlog(returns).mean() + 1e-4 * entropy(a_imag)
    loss_critic = mse(symlog(values.detach()), symlog(returns))

    (loss_wm + loss_actor + loss_critic).backward()
    optimizer.step()

9. 总结

维度Dreamer V3 的突破
样本效率在 imagination 中 rollout,减少真实交互
跨域泛化固定超参适配 150+ 不同任务
状态表示离散分类 + GRU 循环,稳定可扩展
奖励处理symlog 统一尺度,解决多域差异
具身影响成为 VLA + World Model 融合路线的底座

一句话记住:Dreamer V3 让模型学会「做梦」,再用梦里的经验指导现实行动。 对机器人来说,这等于先在虚拟世界里摔够跤,再上真机。

觉得有用?欢迎点赞、收藏,或请作者喝咖啡 ☕️

支付宝收款码

支付宝

微信收款码

微信

💬 留言

评论由 Giscus 驱动(基于 GitHub Discussions)。 当前仓库 NaphJohn/LLM-blog 尚未启用 Discussions:请在 GitHub 仓库 Settings → General → Features 勾选 Discussions 后刷新本页,评论区即自动显示。