Dreaming Smoothly and Sample Efficiently with Gradient Penalized Latent Dynamics
Paper: arXiv:2605.23089 Code: romils9/gpld-mbrl Code reference:
main@f899e925(2026-05-21)
1. Motivation(研究动机)
现有 latent world model(论文主要以 DreamerV3 为代表)的核心优势是 sample efficiency:它先从交互数据中学习一个可想象未来的 latent dynamics,再在 latent space 里做 policy learning。问题是,这类模型通常只通过 reconstruction / reward / continuation prediction 与 KL regularization 约束 latent transition,并没有显式要求“相邻状态的 transition law 也应该相近”。在 DeepMind Control 这类平滑连续控制环境里,短时间内的身体姿态、速度和接触状态通常不会发生离散跳变;如果模型没有利用这个 inductive bias,world model 可能在数据稀缺阶段学出局部不平滑的 posterior map,导致 imagination rollout 对小扰动过敏,进而降低早期策略学习效率。
这篇论文要解决的具体问题是:在不改变 DreamerV3 主体结构、不过度增加模型复杂度的前提下,如何给 latent dynamics 加一个可微、可实现、可随训练衰减的 local smoothness regularizer。作者提出 GPLD(Gradient Penalized Latent Dynamics),把“邻近状态应该有相似转移分布”的离散 MDP 直觉转成 continuous latent model 中的 row-wise Jacobian penalty,并把它施加到 DreamerV3 的 posterior latent probability map 上。
这个问题值得做的原因有两层。第一,model-based RL 的瓶颈经常不是 policy optimizer 本身,而是早期 world model 的数据效率和稳定性;如果一个简单正则项能让 latent posterior 更平滑,就能在同样 environment steps 下得到更可靠的 imagination。第二,GPLD 不是任务特定 reward shaping,也不需要额外专家数据;它利用的是连续控制本身的局部平滑性,因此理论上可以作为 DreamerV3 风格 latent dynamics 的 plug-in regularizer。
Figure 1 解读:图中给出 DMC 的 Cheetah run 与 Walker walk 连续帧。作者用它说明这类 locomotion 任务在短时间尺度上具有平滑身体运动:相邻状态并非任意跳变,而是沿着物理动力学连续演化。因此,对 latent transition/posterior map 施加局部 Jacobian 平滑约束是合理的 inductive bias。
2. Idea(核心思想)
核心 insight 是:离散 MDP 中“邻居状态的 transition distribution 不应差太远”的 finite-difference smoothing,在连续 latent representation 中自然对应为 transition/probability map 的 Jacobian Frobenius norm penalty。也就是说,GPLD 不是额外预测任务,而是直接惩罚 posterior probability map 对 latent input 的局部敏感度。
关键创新可以概括为三点:第一,作者给出从 tabular finite-difference regularizer 到 continuous Jacobian penalty 的推导;第二,在 DreamerV3 中选择 posterior latent probability map 作为正则对象,而不是泛泛地惩罚 policy、value 或 action smoothness;第三,用 Hutchinson-style output-space probes 估计 row-wise Frobenius norm,使得不显式构造完整 Jacobian 也能训练。
与原始 DreamerV3 相比,GPLD 的本质差异在于 world-model loss 中多了一个局部平滑项。DreamerV3 依靠 prediction loss 与 dynamics/representation KL 让 prior 与 posterior 对齐;GPLD 进一步要求 posterior map 对小输入扰动不要过敏。与常见的 control smoothness 正则不同,它不是直接平滑 action trajectory 或 policy output,而是平滑 latent world model 的 probability map。
3. Method(方法)
3.1 整体框架:从离散邻域平滑到 DreamerV3 posterior regularization
论文没有提供单独的 architecture diagram;方法结构主要由理论推导、Algorithm 1/2 和实验图组成。整体流程是:先在 finite embedded-state MDP 中定义邻居状态 transition law 的 finite-difference regularizer;再取 continuous-state limit,得到 directional derivative 和 Frobenius Jacobian penalty;最后在 DreamerV3 的 RSSM posterior probability table 上实现 row-wise Jacobian penalty,并把该项加入 world-model objective。
直觉上,GPLD 认为 world model 早期最容易犯的错误不是“整体表达能力不足”,而是“局部几何太粗糙”:相近的 latent input 可能输出差异很大的 categorical posterior,从而让 imagined trajectory 对微小误差放大。Jacobian penalty 会压低这种局部敏感度,等价于告诉模型:除非数据明确支持突变,否则相邻 latent input 应产生相近的 latent distribution。由于 DreamerV3 的 prior 通过 dynamics KL 去追 posterior,平滑 posterior 也会间接影响 prior 学到的 transition target。
3.2 离散 MDP 中的 finite-difference smoothness prior
作者先考虑有限状态/动作 MDP,状态嵌入为 。给定邻域 标准 MLE transition estimator 最小化: $ \mathcal{L}_{\mathrm{MLE}}(P;\mathcal{D})
-\sum_{s,a,s’} N(s,a,s’) \log P(s’ \mid s,a). \mathcal{L}_{\mathrm{FD}}(P)
\sum_a\sum_s\sum_{k\in\mathcal{N}\varepsilon(s)}\sum{s’} \left( \frac{P(s’\mid k,a)-P(s’\mid s,a)}{|e(k)-e(s)|2} \right)^2. \min_P;\mathcal{L}{\mathrm{MLE}}(P;\mathcal{D})+ \lambda\mathcal{L}_{\mathrm{FD}}(P). ksa$ 下二者的 next-state distribution 也应该接近;距离归一化让惩罚更像局部斜率,而不是绝对差值。
3.3 Continuous limit:finite difference 变成 Jacobian penalty
令邻居位移为 其中 , 是单位方向。把离散 transition law 换成 differentiable continuous transition model 后,差分项对应为: 当 ,该项收敛到 directional Jacobian norm: $ \lim_{h\to 0} \left| \frac{f_\theta(x+hu)-f_\theta(x)}{h} \right|_2^2
|J_{f_\theta}(x)u|2^2. u \mathbb{E}{u}!\left[|J_{f_\theta}(x)u|_2^2\right]
\frac{1}{d}|J_{f_\theta}(x)|F^2. f\theta$ 做这个惩罚,而是在 DreamerV3 的 latent posterior probability map 上实例化它。
3.4 DreamerV3 posterior latent probability map 上的 GPLD
DreamerV3 的 RSSM 包含 deterministic latent state 、stochastic latent state 、encoder output 和 action 。其 world-model objective 可以写为: 其中 与 是带 free-nats 下界的 KL 项: 令 posterior input 为 。经过 row-wise softmax 后,posterior distribution 表示为 probability table: 其中 是 categorical variables 数量, 是每个变量的 classes 数量。GPLD 对每一行 categorical distribution 的 Jacobian 做平均惩罚: $ \mathcal{R}_{\mathrm{GPLD}}(u_t)
\frac{1}{K} \sum_{i=1}^{K} \left|J_{q_\phi^{(i)}}(u_t)\right|F^2. \mathcal{L}{\mathrm{GPLD}} := \mathbb{E}{q\phi} \left[ \sum_{t=1}^{T} \left( \beta_{\mathrm{pred}}\mathcal{L}{\mathrm{pred},t} + \beta{\mathrm{dyn}}\mathcal{L}{\mathrm{dyn},t} + \beta{\mathrm{rep}}\mathcal{L}_{\mathrm{rep},t} + \lambda^{\mathrm{post}}t\mathcal{R}{\mathrm{GPLD}}(u_t) \right) \right]. $
3.5 Hutchinson-style row-wise estimator
显式构造 成本很高,所以作者用 Hutchinson-style output-space probe。对每个 posterior row ,采样 ,计算 vector-Jacobian product: 因为 ,所以: $ \mathbb{E}{\epsilon_i}\left[ \left|J{q_\phi^{(i)}}(u_t)^\top\epsilon_i\right|_2^2 \right]
\left|J_{q_\phi^{(i)}}(u_t)\right|F^2. \widehat{\mathcal{R}}{\mathrm{GPLD}}(u_t)
\frac{1}{K}\sum_{i=1}^{K} \left|J_{q_\phi^{(i)}}(u_t)^\top\epsilon_i\right|_2^2. $
import torch
import torch.nn.functional as F
def posterior_gpld_penalty(rssm, h, e, sample_frac=0.5, rows=32):
"""PyTorch-style pseudocode of dreamerv3/rssm.py::_gradient_penalty.
h: [B, T, deter_dim]
e: [B, T, embed_dim]
Returns per-state posterior smoothness penalty before lambda scaling.
"""
b, t = h.shape[:2]
total = b * t
h_flat = h.reshape(total, -1)
e_flat = e.reshape(total, -1)
n = max(1, int(total * sample_frac))
idx = torch.randperm(total, device=h.device)[:n]
h_s = h_flat[idx].detach().requires_grad_(True)
e_s = e_flat[idx].detach().requires_grad_(True)
# released code computes categorical probabilities after unimix/Categorical,
# not raw logits.
probs = rssm.posterior_probs(h_s, e_s) # [n, K, C]
k = min(rows, probs.shape[1])
penalties = []
for row in range(k):
eps = torch.empty_like(probs[:, row, :]).bernoulli_(0.5).mul_(2).sub_(1)
scalar = (probs[:, row, :] * eps).sum()
grad_h, grad_e = torch.autograd.grad(scalar, [h_s, e_s], create_graph=True)
penalties.append((grad_h.square().sum(-1) + grad_e.square().sum(-1)))
return torch.stack(penalties, dim=0).mean(dim=0) # [n]3.6 为什么默认只 regularize posterior?
论文默认惩罚 posterior,而不是 prior+posterior 一起惩罚。理由是 posterior 直接依赖真实轨迹的 encoded observation ,它是从环境数据推断 latent state 的入口;平滑这个 map 能直接约束 observation-conditioned latent representation。prior 虽然没有被 GPLD 直接惩罚,但会通过 dynamics KL 去拟合 posterior,因此 posterior smoothing 会间接影响 prior 的学习目标。Figure 5 的 ablation 支持这个选择:posterior-only 在性能/计算成本之间优于 prior-only 或 joint regularization。
3.7 时间衰减的 penalty coefficient
固定平滑惩罚在训练早期有用,因为 world model 数据少、估计噪声大;但训练后期如果仍然过强,可能限制模型表达真实复杂 dynamics。GPLD 使用 square-root decay: $ \lambda^{\mathrm{post}}_T
\max\left( \frac{\lambda^{\mathrm{post}}0}{\sqrt{1+T{\mathrm{updates}}/c}}, \lambda_{\min} \right). $
def compute_decayed_lambda(lambda0, optimizer_step, gp_config, env_to_opt_ratio=1.0):
# Mirrors dreamerv3/agent.py: start_step is specified in env steps and
# converted to optimizer steps before applying the decay schedule.
start_opt = gp_config.get("start_step", 0) * env_to_opt_ratio
if optimizer_step < start_opt or lambda0 <= 0:
return 0.0
step = optimizer_step - start_opt
if gp_config.get("decay") == "sqrt_time":
# released code hard-codes the sqrt-time divisor as 1000.
value = lambda0 / ((step / 1000.0 + 1.0) ** 0.5)
return max(value, gp_config.get("min_lam", 0.0))
return lambda03.8 训练集成伪代码
def dreamerv3_world_model_loss_with_gpld(agent, batch):
tokens = agent.encoder(batch.obs)
posterior, prior, features = agent.rssm.observe(tokens, batch.action, batch.reset)
pred_loss = agent.prediction_losses(features, batch.obs, batch.reward)
dyn_loss = torch.clamp_min(kl_div(stopgrad(posterior), prior), 1.0)
rep_loss = torch.clamp_min(kl_div(posterior, stopgrad(prior)), 1.0)
gp = posterior_gpld_penalty(
agent.rssm,
h=features["deter"],
e=tokens,
sample_frac=agent.config.gp.sample_frac,
rows=agent.config.gp.gp_rows,
)
env_to_opt_ratio = agent.config.train_ratio / (
agent.config.batch_size * agent.config.batch_length
)
lam_t = compute_decayed_lambda(
agent.config.gp.post_lam,
agent.optimizer_step,
agent.config.gp,
env_to_opt_ratio=env_to_opt_ratio,
)
return pred_loss + dyn_loss + 0.1 * rep_loss + lam_t * gp.mean()3.9 论文公式与 released code 实现差异
- 论文 Algorithm 1 写成从 batch size 中采样 ,并返回按 平均后的 ;released code 在
dreamerv3/rssm.py中先 flatten batch/time,采样int(B*T*sample_frac)个 state-time 点,然后把未采样位置填零,最终在dreamerv3/agent.py中对完整[B,T]tensor 做 mean。这会让实现中的有效平均带有一个额外的 sampling-fraction 稀释效应,除非把 当作已包含该缩放的经验系数来理解。 - 论文与 README 的默认设置是 posterior-only:
POST_LAM=0.5, PRIOR_LAM=0.0, SAMPLE_FRAC=0.5;但当前 commit 的run_dmc_lipschitz_seeds.shproprio 脚本裸默认值是PRIOR_LAM=0.5, POST_LAM=0.0,与论文默认不一致。README 的 reproduction command 用环境变量显式覆盖为 posterior-only;因此复现实验时应使用 README/论文的 override,而不能直接依赖该脚本裸默认值。 - Table 2 写 ,README 的 configuration table 也把
MIN_LAM典型值列为0.001,但 README example command 没有显式传MIN_LAM;released scripts 的裸默认值分别是 proprioMIN_LAM=0.1、pixelMIN_LAM=0.01。若要复现论文 Table 2,应显式传MIN_LAM=0.001,否则实际 launch config 与论文配置不一致。 - 代码中
gp.use_logits出现在 config surface,但dreamerv3/rssm.py::_gradient_penalty实际对embodied.jax.outs.Categorical(logits, unimix)后的 probability 做softmax,与论文“posterior latent probability map”一致,而不是对 raw logits 惩罚。
Code reference:
main@f899e925(2026-05-21) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| RSSM prior/posterior 与 DreamerV3 KL losses | dreamerv3/rssm.py | RSSM.loss, _prior, _dist |
| GPLD row-wise posterior/prior Jacobian penalty | dreamerv3/rssm.py | RSSM._gradient_penalty |
| Hutchinson Rademacher probes 与 per-row VJP | dreamerv3/rssm.py | jax.vjp, jax.vmap, jax.random.rademacher inside _gradient_penalty |
| Dynamic penalty scaling / square-root decay | dreamerv3/agent.py | _apply_decay, compute_decayed_lambda, Agent.loss |
| 12M DreamerV3 configuration and DMC overrides | dreamerv3/configs.yaml | size12m, dmc_proprio, dmc_vision, agent.dyn.rssm.gp |
| Launch-time GPLD hyperparameters | run_dmc_lipschitz_seeds.sh, run_dmc_pixel_lipschitz_seeds.sh, README.md | env vars POST_LAM, PRIOR_LAM, SAMPLE_FRAC, DECAY_TYPE, TRAIN_RATIO |
| Evaluation/plot processing | run_eval_proprio_ckpts.sh, process_evals.py, plot_grid_individuals.py, plot_grid_xmax.py | checkpoint evaluation and aggregate plot generation |
| Local sensitivity diagnostics | analyze_smoothness_2.py, compare_lipschitz.py | perturbation-based posterior/prior sensitivity analysis |
4. Experimental Setup(实验设置)
4.1 Benchmark / 数据规模
- DeepMind Control proprioceptive setting:主要 1M-step benchmark 覆盖 18 个 proprioceptive tasks:Acrobot Swingup / Swingup Sparse,Cartpole Balance / Balance Sparse / Swingup / Swingup Sparse,Cheetah Run,Finger Spin / Turn Easy / Turn Hard,Hopper Hop / Stand,Pendulum Swingup,Reacher Easy / Hard,Walker Run / Stand / Walk。另有 Quadruped Run 与 Quadruped Walk 用 4M environment steps 做 long-horizon 曲线。
- DeepMind Control pixel setting:使用 image-frame observations,appendix grid 显示 20 个 pixel-observation tasks:上面 18 个任务加 Quadruped Run / Quadruped Walk。主文重点展示 normalized aggregate、Walker Run、Quadruped Run、Hopper Hop;warm-start diagnostic 展示 Hopper Hop 与 Quadruped Walk。
- 交互预算与评估:主结果使用 environment steps;quadruped long-horizon 使用 environment steps;训练中每 5000 env steps 评估 3 episodes;appendix 的 checkpoint evaluation 使用每 seed 20 episodes。除特别说明外,learning curves 报告 5 seeds 均值与 1 std 阴影。
4.2 Baselines
主要 baseline 是 DreamerV3,方法为 GPLD-DreamerV3。Ablation 中还比较了 posterior-only、prior-only、joint prior-posterior regularization,不同 sampling fraction ,不同 ,以及 constant vs square-root decay schedule。
4.3 Metrics
- Episodic return:DMC task 的 raw return,按 environment steps 绘制 learning curve。
- Raw aggregate mean score:多个任务 raw return 直接平均,更容易被高分任务主导。
- Normalized aggregate mean score:每个任务先除以 DreamerV3 baseline final score 再平均,让不同 scale 的任务对 aggregate 贡献更均衡。
- Relative gain:表格中报告 GPLD 相对 DreamerV3 的百分比提升。
- Local sensitivity:对 posterior/prior input 加扰动,计算 ,越低表示 latent distribution 对小扰动越不敏感。
- Wall-clock overhead:相对 vanilla DreamerV3 的 runtime ratio。
4.4 Training config
论文 Table 2 与 README reproduction command 给出的主配置如下;注意这些数字来自论文表格和 repo 的 reproduction/launch surface,而不是 configs.yaml 的全局默认值。
- Model:12M-parameter DreamerV3;RSSM deterministic size 2048,stochastic variables 32,每个 variable 16 classes,hidden size 256;network depth 16,units 256。
- World-model losses:;imagination horizon 。
- Optimization / replay:batch size 16,batch length 64,replay capacity ,optimizer LR ,,epsilon ,weight decay 0,AGC 0.3。
- Environment:16 parallel envs,action repeat 2;pixel input resolution 。
- GPLD paper default:,,,square-root decay,,,GP rows 32。这里的 对应 released code 中
sqrt_time分支的 hard-codedstep / 1000 + 1,不是一个单独的decay_scaleconfig key。 - Launch reference:README shows
POST_LAM=0.5 PRIOR_LAM=0.0 MIN_LAM=0.001 ENV_NAME=dmc_walker_walk SAMPLE_FRAC=0.5 STEPS=1000000 TRAIN_RATIO=512 ./run_dmc_lipschitz_seeds.shand analogous pixel command; the underlying scripts pass these into--agent.dyn.rssm.gp.post_lam,--agent.dyn.rssm.gp.prior_lam,--agent.dyn.rssm.gp.min_lam,--agent.dyn.rssm.gp.sample_frac,--run.steps, and--run.train_ratio.MIN_LAM=0.001is added here as a required paper-config override because the script’s naked defaults do not match Table 2.
5. Experimental Results(实验结果)
5.1 Proprioceptive DMC:主要收益最强
Figure 2 解读:左图是 raw aggregate mean,右图是 normalized aggregate mean。GPLD-DreamerV3 在 proprioceptive DMC 上整体更快上升,说明提升不是来自单个高分任务,而是在归一化后仍有更好的 sample efficiency。作者强调该结果使用单一 GPLD 配置,没有逐任务 tuning。
高复杂度 proprioceptive locomotion 子集在 1M environment steps 的 exact raw returns 如下;文本报告 normalized aggregate score 提升 。
| Task | DreamerV3 | GPLD-DreamerV3 | Relative gain |
|---|---|---|---|
| cheetah-run | 672.6 | 762.8 | |
| hopper-hop | 81.8 | 197.4 | |
| hopper-stand | 683.6 | 730.5 | |
| walker-run | 458.5 | 627.1 | |
| walker-stand | 942.8 | 957.8 | |
| walker-walk | 878.3 | 946.2 |
完整 18-task proprioceptive 1M-step checkpoint evaluation 中,GPLD-DreamerV3 的 normalized aggregate mean 提升 。其中提升最大的任务包括 Hopper Hop(,)、Walker Run(,)、Acrobot Swingup Sparse(,)与 Acrobot Swingup(,)。也有少数负例,例如 Finger Turn Easy 从 降到 ()。
Figure 6 解读:appendix 的 2M-step individual curves 显示,早期 GPLD 收益在多数 proprioceptive tasks 上能延续或保持竞争力。它也说明 GPLD 不是只改善 aggregate 曲线;很多单任务曲线在中后期仍保持优势,但某些接近饱和的任务提升较小。
5.2 Quadruped long-horizon:难任务上体现长期稳定性
Figure 3 解读:Quadruped Run 与 Quadruped Walk 在早期对两种方法都比较 noisy,说明这些任务需要更多 interaction 才能学到可靠 latent dynamics。拉长到 4M env steps 后,GPLD 更早进入高回报区域,并且 late-stage mean return 更稳。这支持作者的第二个结论:GPLD 不只改善 1M-step 的早期 sample efficiency,在更难的 locomotion 上也能改善长 horizon 学习质量。
5.3 Pixel-observation:有效但结论更谨慎
Figure 4 解读:pixel setting 要同时学习 visual representation 与 latent dynamics,因此 GPLD 的直接作用被视觉表征学习问题部分掩盖。Normalized aggregate 中 GPLD 仍然有竞争力,但提升小于 proprioceptive setting;单任务曲线中 Walker Run 与 Quadruped Run 的 late-stage 更清楚,Hopper Hop 则早期更慢、后期才追上。
Figure 7 解读:appendix 的 pixel grid 给出 20 个 DMC vision tasks 的 individual curves。整体看,pixel setting 的任务间差异更大,说明在 image observations 下,encoder/decoder 表征质量会和 latent dynamics regularization 纠缠在一起;因此作者没有把 pixel aggregate 作为最强主张。
Figure 8 解读:warm-start diagnostic 把 encoder/decoder 初始化为已训练 DreamerV3 baseline,但不冻结它们;除视觉初始化相同外,其余组件重新训练。在 Hopper Hop 与 Quadruped Walk 上,GPLD 优于 DreamerV3,支持作者的解释:fully end-to-end pixel setting 中,视觉表征学习可能遮蔽了 latent-dynamics smoothing 的效果。
5.4 Ablation:posterior-only + 适中 sampling + decay 最稳
Figure 5 解读:四个 ablation panel 分别考察 sampling fraction 、prior/posterior regularization、joint regularization 与 decay schedule。主要结论是:GPLD 最适合作为 targeted posterior regularizer,而不是对所有 latent distributions 做宽泛平滑约束; 增大意味着更多 state-time 点被计算 GP,但性能不是单调提升;constant penalty 不如 square-root decay,说明后期保持过强平滑会限制模型拟合。
5.5 Local sensitivity 与计算成本
Figure 9 解读:作者对 posterior input 和 prior input 加扰动,测量输出 distribution 的 KL change / perturbation norm。GPLD 在 Walker Walk 与 Hopper Stand 上降低 posterior sensitivity,说明 Jacobian penalty 确实把 posterior map 推向更平滑;prior sensitivity 在若干情形下也下降,即使 GPLD 默认不直接惩罚 prior,这与 prior 通过 dynamics KL 追随 posterior 的机制一致。
计算成本方面,GPLD 需要额外 vector-Jacobian products,主要成本驱动是 sampling fraction 。论文报告 vanilla DreamerV3 500k env steps 平均每 seed 为 2:01:29;默认 的 runtime ratio 是 ,diff 3712.10s。作者提醒这个值可能偏保守:相同 、 的 posterior-only run 是 ,diff 1668.00s;因此更典型的 overhead 可能接近 —,但依赖硬件利用率和系统波动。
5.6 Limitations / caveats
作者没有把 GPLD 描述为通用提升所有设置的万能正则。主要 caveats 是:pixel-observation 下收益小于 proprioceptive setting,因为视觉表征学习与 dynamics smoothing 同时发生;计算上 GPLD 明确增加 VJP overhead;在某些接近饱和或本身已经高分的任务上提升很小,甚至如 Finger Turn Easy 有负增益;released code 的 proprio launch script 裸默认值与论文/README 的 posterior-only 设置不一致,复现时必须显式传入 POST_LAM=0.5 PRIOR_LAM=0.0 等参数。
总体结论:GPLD 是一个小而明确的 world-model regularizer。它把连续控制中的局部平滑先验落实到 DreamerV3 posterior probability map 的 row-wise Jacobian penalty 上,在 proprioceptive DMC 上带来显著 sample-efficiency 改善,并通过 ablation 与 sensitivity analysis 证明“posterior-only、moderate sampling、time-decayed smoothness”是关键设计。