Downloads · 30 days
0
Joyjeetsingh/rwm-reproduction
rwm-reproduction is a robotics model from Joyjeetsingh. Use it for the robotics task on the model card, and read the license before you ship it in a product. It is set up for pytorch. The card lists the license as apache-2.0.
Independent reproduction of the proprioceptive dynamics model of Li, Krause & Hutter, Robotic World Model (arXiv:2501.10100) and Uncertainty-Aware RWM (arXiv:2504.16680). Not affiliated with, endorsed by, or reviewed…
Downloads · 30 days
0
Access
Public
Updated Nov 3, 2026
Repo size
2.2 GB
Likes
0
Public
Click a slice to open those files.
.safetensors2.1 GB · 96%
From the Hugging Face model README
Independent reproduction of the proprioceptive dynamics model of Li, Krause & Hutter, Robotic World Model (arXiv:2501.10100) and Uncertainty-Aware RWM (arXiv:2504.16680). Not affiliated with, endorsed by, or reviewed by the original authors.
Code, evidence and the full claim record: https://github.com/joyjeet-singh/rwm
Paper: Right Ranking, Wrong Scale: Reproducing the Robotic World Model's Dynamics Model and Testing the Uncertainty of Its Follow-up, arXiv:2611.02699.
These models' predicted standard deviation is not a usable uncertainty estimate. It is not a matter of degree. Measured against realised error on held-out episodes:
| checkpoint | mean |error| / mean σ [95% CI] | coverage at ±1σ [95% CI] | a calibrated model |
|---|---|---|---|
| autoregressive (mse) | 52× [40, 70] | 11.67% [7.96, 15.19] | 68.27% |
| corrected objective (nll) | 11× [8, 15] | 42.78% [24.44, 62.04] | 68.27% |
| teacher-forced | 315× [177, 509] | 12.96% [7.04, 20.93] | 68.27% |
| released reference checkpoint, for comparison | 7,878× [5,410, 9,934] | 0.56% [0.00, 1.67] | 68.27% |
Those are the ALEATORIC term, at one forecast step. The quantity the follow-up's method actually penalises rewards with is the EPISTEMIC one, and on the released 5-member checkpoint it is 33.4× [28.7, 39.0] out at h = 100 — the horizon the method's own imagination rollouts run to — with 4.61% coverage at ±1σ. Our ensemble-5 arms reach 10.5× [9.0, 11.5] on the same measurement. Better, and not calibrated.
The cause is structural, not a training accident: the state loss is squared error on a
reparameterised sample with no log-σ term, so its optimum is σ = 0, and the bound term that
should oppose it cancels algebraically. The corrected-objective-2500 checkpoint uses the
reference's unused gaussian_nll branch, which reverses the mechanism and still does not
produce a usable estimate (10.9× overconfident). It is released as the
corrected-objective artifact, not as a calibrated one.
If you need to rank which predictions will be worse, the σ output carries some signal — but treat that as directional, not established. Converting per-dimension sign counts to P-values against an independent-trials null overstates the evidence badly: the 45 state dimensions are physically coupled and share a forecast-depth trend, so a σ that grows with depth correlates with any trajectory's error. Under a permutation test over whole trajectories, no such count in our paper survives multiplicity correction.
If you need an interval, the raw σ will not give you one. Do not use it for risk-gating, safety margins, or anything that treats σ as a scale.
There is a candidate remedy, and on these checkpoints the evidence is mixed. A single multiplier does not work, because the miscalibration grows with forecast horizon. One multiplier per horizon, fitted on one episode and scored on the other, restored ±1σ coverage on the released reference checkpoint to within 10 points of nominal on 12 of 12 epistemic cells, though at two episodes no single cell is resolvable, where a single global multiplier managed 2; but that checkpoint trained on both episodes. On these ensemble-5 checkpoints, which never saw them, their own multipliers manage 17 of 36 epistemic cells, on two episodes only. Refit it on your own data and check it rather than copying our constants.
Ten of the thirteen checkpoints here run at ensemble size 1, where the epistemic term -- the disagreement across ensemble members -- is identically zero by construction. Nothing about ensemble disagreement can be reproduced from one of them alone; the block above says what to do with five of them.
The three autoregressive-ens5-* checkpoints carry it directly. On them:
The pre-registered rule governing this replication returned DOES NOT GENERALISE, on its second condition: the paired difference against the index excludes zero at 1 of 4 horizons, not a majority. The direction replicated everywhere; the separation did not, on the four independent trajectories our held-out arena has. Treat the ranking property as supported on these checkpoints and established only on the released reference one.
If you download the ensemble-size-1 autoregressive checkpoints, score them as an ensemble. The paper's §5.3 takes seeds 0-4 of Arm A -- five separately initialised, separately trained models, sharing no parameters and no recurrent state -- and scores their disagreement the way the method scores its own. That is the contrast the released five-member checkpoint cannot provide, because its five members share one GRU trunk and one hidden state: 89.15% of each member's state-pathway parameters are numerically identical to every other member's.
autoregressive-ens5-* arms at h=100, against a pre-registered
minimum detectable effect of 1.45x. Coverage is +7.12
points higher, against an MDE of 2.26 points. The rule (M-44, committed
before the runs) returns MECHANISM SUPPORTED.autoregressive-10k-seed0Autoregressive training — the arm the base paper's claim is about. Seed 0 of three at 10,000 iterations; scores 0.3894 normalised error at a 368-step horizon on held-out episodes (arm mean 0.3582 ± 0.0283 over three seeds).
runs/armA_seed0_10k/weights_10000.pt4dbb6871f69e6b7a3e7014fb0ae7effb8366860f6bd0c84af717c10ea64c6625autoregressive-10k-seed1Autoregressive training — the arm the base paper's claim is about. Seed 1 of three at 10,000 iterations; scores 0.3509 normalised error at a 368-step horizon on held-out episodes (arm mean 0.3582 ± 0.0283 over three seeds).
runs/armA_seed1_10k/weights_10000.ptc88b20a136c7364475e1bf74b3919b33de1ebad9293de521cfe259ed8474ee6eautoregressive-10k-seed2Autoregressive training — the arm the base paper's claim is about. Seed 2 of three at 10,000 iterations; scores 0.3341 normalised error at a 368-step horizon on held-out episodes (arm mean 0.3582 ± 0.0283 over three seeds).
runs/armA_seed2_10k/weights_10000.ptd8e3f43edf8a6f76c25e34d814a7a7c4c35779bbb7ec90e76c5f49a9ec2a192cteacher-forced-10k-seed0Teacher forcing — the comparison arm. Released so the central claim can be checked rather than taken on trust. Seed 0 of three at 10,000 iterations; scores 1.9710 normalised error at a 368-step horizon on held-out episodes (arm mean 1.6497 ± 0.2858 over three seeds).
runs/armB_seed0_10k/weights_10000.pta8e20cf9ef3f0ed0380ba031559fdd497f9e2a0a3a681ce0de39820b4e66f0c1teacher-forced-10k-seed1Teacher forcing — the comparison arm. Released so the central claim can be checked rather than taken on trust. Seed 1 of three at 10,000 iterations; scores 1.5540 normalised error at a 368-step horizon on held-out episodes (arm mean 1.6497 ± 0.2858 over three seeds).
runs/armB_seed1_10k/weights_10000.ptb473bd70d5afdcbb1065e7ef49e32e85d4941719ec1bf290e4a91a09b8165754teacher-forced-10k-seed2Teacher forcing — the comparison arm. Released so the central claim can be checked rather than taken on trust. Seed 2 of three at 10,000 iterations; scores 1.4241 normalised error at a 368-step horizon on held-out episodes (arm mean 1.6497 ± 0.2858 over three seeds).
runs/armB_seed2_10k/weights_10000.pt2431bc1ba09229d305d364abb53d422ef79d39a7299f8c3692f1fb743c8240a2autoregressive-2500Arm A at the paper's stated iteration count, for comparison with the released checkpoint.
runs/armA_seed0/weights_2500.ptbc4e0dfbcff28b994e3acabbae2d6f1d833331dc5bfad5cc9aa8f410385bd4b0corrected-objective-2500Trained with the reference's unused gaussian_nll branch. This is the CORRECTED-OBJECTIVE artifact, not a calibrated one — see the limitation above.
runs/armA_seed0_nll/weights_2500.pta1a339b27b077712b0a87b4df4718437933db3e6a370b8b08f941fab30129367autoregressive-ens5-seed0Ensemble size 5. The only checkpoints here with a non-zero epistemic term; the others have exactly zero by construction. See the ensemble-5 block below.
runs/armA_seed0_ens5/weights_2500.pt923e3a0b935cff3cb611cf6b35eea83701df4a78f02a22e3f10a6a2e945b9496autoregressive-ens5-seed1Ensemble size 5, seed 1.
runs/armA_seed1_ens5/weights_2500.pte756ca16fe2cd4e1615ca27b47d9bb519dd0d4da6dfe263758b1d5bbdaabeaaaautoregressive-ens5-seed2Ensemble size 5, seed 2.
runs/armA_seed2_ens5/weights_2500.pt2688b16030a57b4b4201bc844a9e1b3607df8734e7b62b1f7b7efb11ed5d9652autoregressive-ens1-seed3Arm A at ensemble size 1, seed 3. Trained for the independent-ensemble test: seeds 0-4 of this arm are scored together as a five-model ensemble that shares nothing (§5.3). Not part of the three-seed headline. No per-arm σ calibration is quoted below: task1_calibration.py measures seed 0 only, and pasting seed 0's figure onto this checkpoint is exactly the mis-attribution this card was corrected for elsewhere. What was measured on this checkpoint is its contribution to the ensemble above.
runs/armA_seed3/weights_2500.pte44e15f5fc31556c7d16647c96edf91bb0d5a4b8b8ad72078ad841a3e60ad260autoregressive-ens1-seed4Arm A at ensemble size 1, seed 4. The second of the two seeds added for the independent-ensemble test, and the same caveat applies: no individually measured σ calibration exists for it, only its contribution to the five-model ensemble above.
runs/armA_seed4/weights_2500.ptb5e0fa1123cb4ae935a3b925fb0801e765cfd3ac25f8f1cf0b653582eb69d24aRelative-L1 error, the reference's own metric, at a 368-step horizon on held-out episodes, over three training seeds (standard deviation with ddof=1). That is the horizon the paper's pre-registered rule names; at h=100, the method's own rollout length, the same comparison gives 2.58×.
| arm | seed 0 | seed 1 | seed 2 | mean ± sd |
|---|---|---|---|---|
| autoregressive | 0.3894 | 0.3509 | 0.3341 | 0.3582 ± 0.0283 |
| teacher forcing | 1.9710 | 1.5540 | 1.4241 | 1.6497 ± 0.2858 |
Autoregressive training is better by a factor of 4.61×. For reference the hold-last floor — predicting that nothing changes — scores 0.9930 in the same cell, so teacher forcing is worse than making no prediction at all.
Every 10,000-iteration checkpoint was cross-checked against the 2,500-iteration run at the same seed: 90,000 logged values compared, 0 differing.
autoregressive-10k checkpoints' error by +124.6% [+75.8, +201.9] at 1 step and +209.3% [+167.3, +257.6] at 100 steps (three-seed mean, relative-L1). On the two held-out episodes' 4 trajectories the change is smaller and, at 1 step, not resolved: -1.0% [-6.1, +27.7], and +16.6% [+1.9, +72.6] at 100 steps (results/n5_stale_armA_ci.json). The forecasts depend on the action (rule X2, pre-registered: RESPONDS TO THE ACTION; results/action_sensitivity.json), but every action in the training data comes from one policy, so their accuracy under actions that policy would not take is untested.Reproduction, verification and further study of the claims in the two papers above. These are CPU-trained research artifacts on one dataset, one gait and one terrain. They are not intended for deployment on hardware.
ens5 arms and the five-seed independent ensemble cover the epistemic term.Apache 2.0. Upstream: robotic_world_model_lite (Apache 2.0) and rsl_rl_rwm (BSD 3-Clause, ETH Zurich and NVIDIA); neither is redistributed here.
Cite the paper, arXiv:2611.02699. CITATION.cff in the repository has the entry.
Every saved model checkpoint of this reproduction is also here in safetensors format: 272 files from 127 training runs, 1,550 MB, under safetensors/<run>/weights_<iteration>.safetensors, a layout that mirrors runs/ in the code repository. The .pt files in checkpoints/ above are unchanged. Each run keeps every checkpoint it saved: the 500- and 2,500-iteration weights, and the intermediate ones of the 10,000-iteration runs.
| what | runs | files |
|---|---|---|
| The reproduction's own arms (autoregressive, teacher-forced, corrected objective, ensemble-5, independent, capacity-matched, contamination and duplication controls, 10,000-iteration runs) | 33 | 84 |
| The history/forecast (M, N) sweep, pre-registered as rule M-74 | 24 | 48 |
| Architecture baselines (MLP, RSSM, transformer at the original's Table S7 sizes), teacher-forced, rule M-75 | 9 | 18 |
| The same baselines trained autoregressively, rule M-76 | 9 | 18 |
| The teacher-forced RSSM retrained with PlaNet's KL settings and with DreamerV2's layer-normalised recurrent cell, seed 0: Part C of rule X1, pre-registered as M-80 and read in M-83 | 2 | 4 |
| X3's fold replication: Arms A and B, seeds 0-2, retrained with each of four further episode pairs held out ({0, 2}, {3, 4}, {5, 6}, {7, 9}), rule M-86 | 24 | 48 |
| X11's ensemble runs on the same four folds: Arm A at ensemble size 5 (seeds 0-2) and size 1 (seeds 3-4), rules M-97 to M-100 and M-103 | 20 | 40 |
| Architecture baselines matched to RWM's parameter count (MLP, transformer), trained autoregressively, rule M-87 | 6 | 12 |
safetensors_manifest.json lists, for every file, its sha256, the source .pt and that file's sha256, the iteration, seed and labels (arm, or architecture, regime and spec, and for the fold runs the held-out episode pair), the parameter count, and the results artifact in the code repository that reports its run. A copy is results/hf_safetensors_manifest.json. Each file was read back after conversion and every tensor compared bitwise with the original.
from safetensors import safe_open
from safetensors.torch import load_file
path = "safetensors/armA_seed0/weights_2500.safetensors"
state_dict = load_file(path) # the model's state dict, as saved
with safe_open(path, "pt") as f:
labels = f.metadata() # iter, arm or arch/regime/spec, seed, source .pt
# model.load_state_dict(state_dict) # with the model built as in the code repository
Not included: the rolling_* resume snapshots, which are training state rather than evaluated models, and the upstream released checkpoint, which belongs to its authors and is not redistributed. The architecture baselines are this reproduction's own implementations.
Two later studies started from this reproduction's models: one compressing them, one fine-tuning their magnitude-pruned copies. Their saved checkpoints are on the Hub too: 165 files from 105 training runs, 560 MB, under the same layout.
| what | study | runs | files |
|---|---|---|---|
| Magnitude-pruned copies fine-tuned 500 iterations with the pruning mask held | pruning fine-tune | 30 | 30 |
| Hidden-unit removal to width 192 or 128, fine-tuned 500 iterations, and width-256 controls fine-tuned the same way | compression | 45 | 45 |
| Models of width 192 or 128 trained from scratch | compression | 30 | 90 |
ft_u*): 30% or 50% of the weights in the GRU and linear layers set to zero by global magnitude, then fine-tuned for 500 iterations with those weights held at zero. Metadata level is the fraction removed, and source_run names the run it started from.e3ft_*_w<width>): hidden units removed down to width 192 or 128, chosen by an L2-norm importance score, then fine-tuned for 500 iterations. The width-256 runs are controls, fine-tuned the same way with nothing removed. The kept units are listed in each file's kept_units metadata.scratch_w<width>_ho<ab>_seed<s>): models of width 192 or 128 trained from scratch with episodes a and b held out. Their checkpoints are at 500, 2,500 and 3,000 iterations.fold (metadata) is the pair of held-out episodes. These runs' manifest entries carry a study field. Their source_pt and results_artifact paths are relative to that study's own folder, which is not part of this repository. Each file was converted, read back and compared tensor by tensor with its .pt, as above. The rolling_* resume snapshots are again not included.