ΒΆPaper Feed

Issue 26 Β· Project 01 GitHub Robotics βœ“ read

nicklashansen/mmbench2

Official code repository for the paper "Hallucination in World Models is Predictable and Preventable".

TL;DR: Hansen and Wang (UCSD) release the full stack behind a paper arguing that world-model hallucination β€” the drift into physically implausible futures that makes learned simulators untrustworthy for planning β€” can be flagged at inference time by cheap runtime signals, and largely trained away by using those same signals to steer data collection. The release is unusually complete: 350M-parameter Dreamer-4-style checkpoints, a new 210-task / 427-hour multi-domain dataset (MMBench2), the predictor and mitigation code, and a browser demo you can poke at directly.

What it is and why it matters

The central practical objection to model-based control with generative world models is that rollouts hallucinate: objects teleport, dynamics dissolve, and a planner optimizing against the model exploits exactly those errors. This work makes two claims. First, hallucination is predictable β€” three inference-time uncertainty signals correlate with it well enough to overlay live in an interactive session. Second, it is preventable β€” using those signals as a curiosity reward for closed-loop data collection, plus coverage-aware resampling during training, produces finetuned models that hallucinate less. If both hold up, it changes the calculus on whether world-model planning can be trusted, since it gives you both a runtime abort signal and a recipe for closing coverage gaps.

How it works

The world model itself is a faithful PyTorch reimplementation of Dreamer 4, adapted to multi-task continuous control: a ~100M causal video tokenizer (masked auto-encoding of 224Γ—224 RGB into 64-dim tanh latents) plus a 250M block-causal Transformer dynamics model trained on frozen tokens with a shortcut flow-matching objective, action-conditioned, with reward and BC heads bolted on post-pretraining.

The novel machinery sits on top:

  • Three hallucination predictors (src/uncertainty.py), each motion-normalized so fast scenes aren't automatically flagged: tokenizer round-trip residual u_r (does encoding/decoding the generated frame lose information β€” i.e., is the model off the tokenizer's manifold?), flow instability u_f (does the shortcut flow-matching sampler disagree with itself across step sizes?), and inter-seed denoising variance u_s (do independent denoising seeds diverge?).
  • Coverage-aware training: resampling that upweights under-represented regions of state-action space during both tokenizer and dynamics training.
  • Targeted data collection: the predictors become a curiosity reward driving closed-loop online collection in the live simulators (collect_data.py, curiosity.py), so new data lands exactly where the model is unreliable.
Dreamer-4-style WM tokenizer + dynamics, 350M u_r round-trip residual u_f flow instability u_s inter-seed variance curiosity reward β†’ targeted data collection coverage-aware finetuning upweight under-covered states new data closes the loop Predictors run live at inference; the same signals steer where to collect more data.
Runtime uncertainty signals double as an abort criterion and as a curiosity reward that directs finetuning data toward hallucination-prone regions.

The dataset is a contribution on its own

MMBench2: 210 tasks across 10 domains (DMControl, Meta-World, ManiSkill3, MuJoCo, RoboDesk, OGBench, continuous Atari, and more), 65,600 mixed-quality trajectories, ~23M frames at 224Γ—224/15fps, with actions, rewards, language instructions, and β€” crucially β€” live simulators for every task, enabling the closed-loop collection story. 200 tasks for pretraining, 10 held out for transfer. Actions are 1–16-dim, zero-padded with validity masks.

What's actually released, and what's missing

Everything is public under MIT: training/eval code, three checkpoint variants (base, coverage_aware, combined), the full dataset on HF, and a hosted live demo. The README, however, contains no quantitative results β€” no hallucination-detection AUCs, no before/after mitigation numbers, no closed-loop control performance. All evidence lives in the paper/interactive page, so you'll need to read those before trusting the headline. Two other caveats: 350M parameters is small by current world-model standards, so whether the predictors and the mitigation scale is open (the round-trip and inter-seed signals should transfer; coverage-aware resampling may matter less at scale); and the README doesn't say whether "preventable" is demonstrated in closed-loop control or only open-loop rollout quality β€” that's the key thing to check.

Practicalities: inference needs any CUDA GPU (β‰₯4 GB for the interactive UI); training needs ~8Γ—H100 and ~8 TB of preprocessed shards. A minor gymnasium/ale-py version conflict affects continuous Atari only. 94 stars and active updates through August 2026.

Try it

The interactive interface seeds from live simulators, so no dataset download needed:

conda env create -f environment.yaml && conda activate mmbench2
cd src
./run_interactive.sh combined   # serves at http://localhost:7860

Or skip local setup entirely: the hosted demo with live hallucination-signal overlays is at https://www.nicklashansen.com/mmbench2/#live-demo β€” driving the model into an under-covered state and watching the predictors spike is the fastest way to judge whether the claim is real.