File size: 4,641 Bytes
ffced82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
---
license: mit
library_name: pytorch
pipeline_tag: reinforcement-learning
tags:
- reinforcement-learning
- planning
- discrete-diffusion
- remdm
- minihack
- nethack
- pytorch
---

# ReMDM Planner — MiniHack checkpoints

Trained weights accompanying *The Double Intractability of Reinforcement Learning for Discrete Diffusion Planners*: a remasking discrete diffusion model
(ReMDM) used as an action-sequence planner in
[MiniHack](https://github.com/facebookresearch/minihack).

Code, configs and evaluation harness: https://github.com/mathisweil/minihack-ReMDM-planner

## Contents

| Path | Role | Architecture | Params | Trained to | Full state |
|---|---|---|---|---|---|
| `checkpoints/offline/Minihack-OfflineDiffusion-BC-82M` | Diffusion planner (offline BC) | 4L, d_model 256, 4 heads, horizon 64 | 5.2M | 40,000 gradient steps, 81,920,000 sample-equivalents | 80 MB |
| `checkpoints/online/Minihack-OnlineDiffusion-DAgger-123M` | Diffusion planner (online DAgger) | 4L, d_model 256, 4 heads, horizon 64 | 5.2M | DAgger iteration 600 | 80 MB |

Each directory holds three things: the original `.pth` training state (weights,
EMA shadow, optimiser, scheduler, and for the DAgger run the curriculum and RNG
state, so training can be resumed exactly), a `model.safetensors` export of the
EMA weights for inference, and the YAML config snapshot the run was trained
under. Paths mirror the source repository, so a snapshot can be dropped
straight into a working copy.

Both files are best-checkpoint selections rather than final-step dumps: each
trainer evaluates every periodic checkpoint on 50 episodes per environment
using EMA weights, and the highest-scoring one is published (the metric behind that selection is not recorded in this release).
Each directory's `selection.json` records the selected step, the candidate
cadence and the eval protocol. Directory suffixes
are the sample-equivalents the published model consumed (gradient steps x batch
size, rounded); file names carry each trainer's own counter, DAgger iterations
online and gradient steps offline. The offline run was given the
DAgger-matched budget of 60,000 gradient steps and its best checkpoint fell at
40,000, so the two published models sit at different points on a matched
budget.

`results/` holds the evaluation and ablation tables reported in the paper, as
produced by `experiments/rl_finetuning`. Figures and raw logs stay in the code
repository.

## Download

```python
from huggingface_hub import snapshot_download

# everything
snapshot_download(repo_id="MathisW78/remdm-minihack-checkpoints", local_dir=".")

# inference weights only
snapshot_download(
    repo_id="MathisW78/remdm-minihack-checkpoints",
    local_dir=".",
    allow_patterns=["**/model.safetensors", "**/config*.yaml"],
)
```

## Use

From a clone of the code repository, after downloading into it:

```bash
DIR=checkpoints/online/Minihack-OnlineDiffusion-DAgger-123M
uv run python main.py --mode inference \
    --config $DIR/config_iter600.yaml --checkpoint $DIR/iter600.pth
```

Programmatic loading, using the safetensors export:

```python
from safetensors.torch import load_file
from src.config import load_config
from src.models.denoiser import make_model

cfg = load_config(f"{DIR}/config_iter600.yaml")
model = make_model(cfg)
model.load_state_dict(load_file(f"{DIR}/model.safetensors"))
model.eval()
```

Architecture arguments must come from the checkpoint's own config snapshot
rather than from `configs/defaults.yaml`, which tracks the current code.

## Training

The planners are bidirectional transformers that denoise a masked action plan
conditioned on a cropped MiniHack glyph observation, trained either by offline
behaviour cloning on oracle rollouts or by online DAgger against the oracle
with a dynamic environment curriculum. In-distribution and out-of-distribution
environment sets, remasking strategy, sampling settings and every
hyperparameter are recorded in the per-checkpoint config snapshots, which are
the authoritative record.

## Limitations

These are research artefacts tied to specific MiniHack environment versions and
to the cropped-glyph observation encoding; they are not general-purpose agents
and will not transfer to other environments or to pixel observations.
Evaluation results and their variance are reported in the paper.

## Citation

```bibtex
@inproceedings{remdm-minihack-planner,
  title  = {The Double Intractability of Reinforcement Learning for Discrete Diffusion Planners},
  author = {Weil, Mathis},
  year   = {2026},
  note   = {NeurIPS 2026 Workshop: Beyond Next-Token Prediction}
}
```

## License

MIT, see `LICENSE`.