Retract input-injection claim; correct batch-size pooling error
Browse files
REPORT.md
ADDED
|
@@ -0,0 +1,1319 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Recursive Masked Diffusion on Sudoku: Benchmark Saturation, Classical Baselines, and a Negative Result on Input Injection
|
| 2 |
+
|
| 3 |
+
**Recursive Masked Diffusion Models (R-MDMs) — a weight-shared block applied
|
| 4 |
+
repeatedly inside each denoising step, trained with loss at every loop — are an
|
| 5 |
+
established architecture ([arXiv:2606.18022](https://arxiv.org/html/2606.18022v1)).
|
| 6 |
+
This work reproduces their central finding independently, shows that the standard
|
| 7 |
+
Sudoku benchmark is **saturated** and replaces it, measures **classical solvers**
|
| 8 |
+
that prior work omits, and reports a **negative result**: the one architectural
|
| 9 |
+
component we added does not help once R-MDM's own conditioning is present.**
|
| 10 |
+
|
| 11 |
+
Trained from scratch. No pretrained weights, no pretrained tokenizer.
|
| 12 |
+
|
| 13 |
+
> ### Relation to prior work — read this first
|
| 14 |
+
>
|
| 15 |
+
> We arrived at the recursive architecture independently and only afterwards
|
| 16 |
+
> identified [arXiv:2606.18022](https://arxiv.org/html/2606.18022v1), which
|
| 17 |
+
> establishes it. **The core mechanism is theirs, not ours.** Specifically, they
|
| 18 |
+
> already introduce: the weight-shared block applied recurrently within a
|
| 19 |
+
> denoising step; deep supervision via an all-steps loss; recursion as a
|
| 20 |
+
> substitute for parameter count; evaluation on Sudoku and text8; and
|
| 21 |
+
> extrapolation to more loops at inference than training.
|
| 22 |
+
>
|
| 23 |
+
> **What this work adds, and nothing more:**
|
| 24 |
+
>
|
| 25 |
+
> | contribution | status |
|
| 26 |
+
> |---|---|
|
| 27 |
+
> | **The standard split is saturated.** Plain constraint propagation solves **1000/1000** of the SATNet test set, so published accuracies on it (SATNet 98.3%) sit *below* a trivial non-learned baseline. | Checkable in seconds; invalidates the benchmark, not the models |
|
| 28 |
+
> | **A hard replacement benchmark**, 100k/1k, 21–28 clues, uniqueness re-verified after every cell removal, train/test leakage checked up to digit relabelling | Propagation solves 3.0% of it |
|
| 29 |
+
> | **Classical solver baselines** measured on our own test set | R-MDM compares only against neural baselines |
|
| 30 |
+
> | **Independent reproduction** that recursion substitutes for parameters, at two separate training budgets | Confirms R-MDM |
|
| 31 |
+
> | ~~**Input injection** — re-adding the token embedding at every recursion~~ | **Retracted.** Worth **+0.05** in a matched test (§2b). The +5.60 previously claimed here was a batch-size artefact. |
|
| 32 |
+
>
|
| 33 |
+
> **We do not claim to beat R-MDM.** Our 99.70% at 212k parameters and their 95%
|
| 34 |
+
> at 10.6M are measured on **different datasets**, and comparing them directly
|
| 35 |
+
> would be invalid. A like-for-like comparison would require running on their
|
| 36 |
+
> benchmark, which we have not done.
|
| 37 |
+
|
| 38 |
+
---
|
| 39 |
+
|
| 40 |
+
## 1. Benchmark
|
| 41 |
+
|
| 42 |
+
Generated, not downloaded, because the standard split is saturated: **plain
|
| 43 |
+
constraint propagation solves 1000/1000 of the SATNet split** (Wang et al., 2019),
|
| 44 |
+
so nothing measured there discriminates between methods.
|
| 45 |
+
|
| 46 |
+
| property | value |
|
| 47 |
+
|---|---|
|
| 48 |
+
| test puzzles | 1,000 held out |
|
| 49 |
+
| training puzzles | 100,000 |
|
| 50 |
+
| clues per puzzle | 20–30 (mean 24.4) |
|
| 51 |
+
| uniqueness | verified by exhaustive counter **after every cell removal** |
|
| 52 |
+
| train/test overlap | 0, including up to digit relabelling |
|
| 53 |
+
| metric | **board accuracy** — all 81 cells correct |
|
| 54 |
+
|
| 55 |
+
Generation: `src/gen_hard_sudoku.py`. An earlier generator applied the Sudoku
|
| 56 |
+
symmetry group to one seed grid, which confined every puzzle to a single
|
| 57 |
+
equivalence class and leaked **767/1000** test solutions into training; the
|
| 58 |
+
assertion caught it before any model trained on it. Solutions now come from a
|
| 59 |
+
randomised backtracking fill of an empty grid, reaching the full ≈6.7×10²¹ space
|
| 60 |
+
(verified: 2000/2000 distinct up to relabelling).
|
| 61 |
+
|
| 62 |
+
## 2. Main result
|
| 63 |
+
|
| 64 |
+

|
| 65 |
+
|
| 66 |
+
| method | params | 1 pass | best | n | per-seed |
|
| 67 |
+
|---|---|---|---|---|---|
|
| 68 |
+
| constraint propagation (no search) | – | – | **3.00%** | – | measured |
|
| 69 |
+
| greedy MRV, one sweep | – | – | 5.90% | – | measured |
|
| 70 |
+
| autoregressive prefix-LM ¹ | 2.4M | – | 0.15% | 2 | 0.3, 0.0 |
|
| 71 |
+
| direct recurrent classifier ¹ | 212k | 10.5% | 31.00% | 4 | 6.6, 21.4, 40.9, 55.1 |
|
| 72 |
+
| feed-forward diffusion, MDLM | 37.9M | 4.40% | 88.15% | 2 | 89.0, 87.3 |
|
| 73 |
+
| feed-forward diffusion, schedule-matched | 37.9M | 40.10% | 88.90% | 2 | 88.3, 89.5 |
|
| 74 |
+
| feed-forward, **32 distinct layers** @bs256 | 6.34M | 70.20% | 94.50% | 1 | 94.5 |
|
| 75 |
+
| feed-forward, **32 distinct layers** @bs64 ² | 6.34M | – | 83.40% | 1 | 83.4 |
|
| 76 |
+
| recurrent, **no input injection** @bs64 ² | 212k | – | 94.10% | 2 | 93.0, 95.2 |
|
| 77 |
+
| recurrent diffusion, MDLM | 212k | 87.35% | 96.55% | 2 | 97.1, 96.0 |
|
| 78 |
+
| recurrent, **no deep supervision** | 212k | 93.35% | 97.75% | 2 | 97.3, 98.2 |
|
| 79 |
+
| **recurrent diffusion, full method** | **212k** | **97.35%** | **99.70%** | 2 | 99.6, 99.8 |
|
| 80 |
+
| full backtracking search | – | – | 100% | – | 423 nodes mean |
|
| 81 |
+
|
| 82 |
+
² The `@bs64` rows are a **separate training budget** and must not be compared
|
| 83 |
+
against the `@bs256` rows. Comparing across them is exactly the error that
|
| 84 |
+
produced the retracted +5.60 (§2b) and the false "depth is worthless" claim (§4).
|
| 85 |
+
|
| 86 |
+
¹ Both are **our reimplementations of other people's methods, and both failed to
|
| 87 |
+
reproduce their published results** — the recurrent classifier reaches 31%
|
| 88 |
+
against a reported 99.5%. These are reported as our implementation failing, **not
|
| 89 |
+
as comparisons we won**, and they are excluded from the margin table below.
|
| 90 |
+
|
| 91 |
+
### Comparison against the state of the art (R-MDM)
|
| 92 |
+
|
| 93 |
+
The relevant SOTA is R-MDM ([arXiv:2606.18022](https://arxiv.org/html/2606.18022v1)).
|
| 94 |
+
Because their benchmark differs from ours, we compare **architectures on our
|
| 95 |
+
benchmark** rather than quoting their number against ours.
|
| 96 |
+
|
| 97 |
+
Dr. Ayhan's instruction was to *ensure our claims hold against a baseline and the
|
| 98 |
+
state of the art*. We ran that test. **One of our claims did not hold**, and this
|
| 99 |
+
section reports it rather than the number it replaces.
|
| 100 |
+
|
| 101 |
+
#### 2b. The matched test — and the retraction of "+5.60"
|
| 102 |
+
|
| 103 |
+
The earlier version of this section claimed input injection was worth **+5.60
|
| 104 |
+
points** over an R-MDM-style arm. That comparison was invalid on two counts:
|
| 105 |
+
|
| 106 |
+
1. the injection-ON arm trained at **batch 256 for 120k steps**, the injection-OFF
|
| 107 |
+
arm at **batch 64 for 110k steps** — a 4× difference in batch size;
|
| 108 |
+
2. neither arm had R-MDM's per-loop step embedding `f(h, ℓ, L)`, so the
|
| 109 |
+
"R-MDM-style" baseline was a **weakened** version of their architecture.
|
| 110 |
+
|
| 111 |
+
We re-ran the comparison properly: identical architecture, identical
|
| 112 |
+
hyperparameters, identical batch size, identical step count, **step embedding on
|
| 113 |
+
both sides**, one component different.
|
| 114 |
+
|
| 115 |
+
| NFE | injection OFF (n=2) | OFF seed range | injection ON (n=1) | delta | ON vs OFF range |
|
| 116 |
+
|---|---|---|---|---|---|
|
| 117 |
+
| 1 | 42.00% | [8.30, 75.70] | 89.00% | +47.00 | **outside** |
|
| 118 |
+
| 4 | 89.30% | [84.60, 94.00] | 93.10% | +3.80 | inside |
|
| 119 |
+
| 8 | 93.25% | [91.70, 94.80] | 94.00% | +0.75 | inside |
|
| 120 |
+
| 16 | 94.50% | [93.00, 96.00] | 95.90% | +1.40 | inside |
|
| 121 |
+
| 32 | 96.20% | [95.30, 97.10] | 96.40% | +0.20 | inside |
|
| 122 |
+
| 61 | **96.85%** | [96.60, 97.10] | **96.90%** | **+0.05** | inside |
|
| 123 |
+
|
| 124 |
+

|
| 125 |
+
|
| 126 |
+
**At the operating point, input injection is worth +0.05 points — nothing.** With
|
| 127 |
+
one seed on the ON side, the only defensible test is whether it lands outside the
|
| 128 |
+
range spanned by the two OFF seeds. **At five of six budgets it does not.** Two
|
| 129 |
+
seeds of the *identical* injection-OFF configuration differ by 67.4 points at
|
| 130 |
+
NFE 1 and by 0.5 at NFE 61, and the ON run sits inside that band everywhere
|
| 131 |
+
except NFE 1.
|
| 132 |
+
|
| 133 |
+
The single-pass result (89.00% against an OFF range of [8.30, 75.70]) is the one
|
| 134 |
+
place any signal appears, and one seed cannot establish it. It is plausible that
|
| 135 |
+
injection matters most when nothing else refreshes the input — at NFE 1 the clues
|
| 136 |
+
must survive all 64 recurrences unaided, whereas multi-pass decoding re-feeds
|
| 137 |
+
committed tokens each pass. **We are not claiming that**; it is a hypothesis the
|
| 138 |
+
data hints at and our compute cannot test.
|
| 139 |
+
|
| 140 |
+
The likeliest reading of the headline result is that **input injection and R-MDM's
|
| 141 |
+
step embedding are redundant**: both supply a per-loop signal anchoring the
|
| 142 |
+
recurrence to its input, and once you have one the other adds nothing. Our
|
| 143 |
+
original measurement compared injection against an arm that had *neither*, and
|
| 144 |
+
credited injection with the difference.
|
| 145 |
+
|
| 146 |
+
**Caveats, stated plainly.** All three arms stopped at **step 80,000 of 110,000**
|
| 147 |
+
(wall-clock limit), so they are matched to each other but undertrained relative to
|
| 148 |
+
the headline runs. The injection-ON side has **n=1**. We could not add seeds: the
|
| 149 |
+
class allocation had 3,030 billing-minutes left and one training run at this
|
| 150 |
+
configuration costs ~3,600. This does not rescue the +5.60 — an underpowered test
|
| 151 |
+
is a reason to withdraw a claim, not to keep it.
|
| 152 |
+
|
| 153 |
+
#### What does survive
|
| 154 |
+
|
| 155 |
+
Recursion substituting for parameters — R-MDM's central claim — reproduces
|
| 156 |
+
cleanly, at **two independent training budgets**, with the comparison matched
|
| 157 |
+
inside each:
|
| 158 |
+
|
| 159 |
+
| budget | 32-layer feed-forward, 6.34M | recurrent 1 layer × 32, 212k | gain |
|
| 160 |
+
|---|---|---|---|
|
| 161 |
+
| batch 256, 120k steps | 94.50% (n=1) | **99.70%** (n=2) | **+5.20** at 30× fewer params |
|
| 162 |
+
| batch 64, 110k steps, injection off both sides | 83.40% (n=1) | **94.10%** (n=2) | **+10.70** at 30× fewer params |
|
| 163 |
+
|
| 164 |
+
### Margin over every measured baseline
|
| 165 |
+
|
| 166 |
+
| beaten | their score | ours | margin |
|
| 167 |
+
|---|---|---|---|
|
| 168 |
+
| constraint propagation (no search) | 3.00% | 99.70% | **33×** |
|
| 169 |
+
| greedy MRV | 5.90% | 99.70% | **17×** |
|
| 170 |
+
| feed-forward diffusion, 37.9M params | 88.90% | 99.70% | **+10.80 pts, 180× fewer params** |
|
| 171 |
+
| feed-forward, 32 distinct layers, 6.34M | 94.50% | 99.70% | **+5.20 pts, 30× fewer params** |
|
| 172 |
+
|
| 173 |
+
Every baseline in this table was **measured on our own test set**, not cited, and
|
| 174 |
+
every neural row was trained at **batch 256**, the same budget as the 99.70%.
|
| 175 |
+
|
| 176 |
+
**Deliberately excluded:** our autoregressive prefix-LM (0.15%) and direct
|
| 177 |
+
recurrent classifier (31.00%). Both are **our** reimplementations of other
|
| 178 |
+
people's methods and both failed to reproduce their published results (footnote
|
| 179 |
+
¹). A "665× margin" over our own broken code would measure our implementation,
|
| 180 |
+
not our method, so it is not claimed. They remain in the results table above so
|
| 181 |
+
the failure is visible.
|
| 182 |
+
|
| 183 |
+
The only thing not beaten is full backtracking search (100%), which is exact
|
| 184 |
+
search rather than a learned model and needs 423 search nodes per puzzle on
|
| 185 |
+
average.
|
| 186 |
+
|
| 187 |
+
Against published specialised solvers the position is **comparable, not
|
| 188 |
+
superior**: 99.70% at 212k parameters against the Recurrent Transformer's 99.5%
|
| 189 |
+
at 211k — but on a clue distribution that excludes the hardest 17-clue instances
|
| 190 |
+
(§8). Same league, different test set.
|
| 191 |
+
|
| 192 |
+
## 3. Parameters against accuracy
|
| 193 |
+
|
| 194 |
+

|
| 195 |
+
|
| 196 |
+
The gap was never capacity. The 37.9M-parameter feed-forward denoiser has **180×
|
| 197 |
+
more parameters** than the recurrent model and scores **10.8 points worse**.
|
| 198 |
+
Solving a hard Sudoku takes tens of rounds of eliminate-propagate-repeat, and a
|
| 199 |
+
fixed 12-layer network cannot express thirty rounds at any width.
|
| 200 |
+
|
| 201 |
+
## 4. Ablation — what each ingredient is worth
|
| 202 |
+
|
| 203 |
+

|
| 204 |
+
|
| 205 |
+
**Compare only within a batch size.** An earlier version of this table pooled a
|
| 206 |
+
32-layer run at batch 256 (94.50%) with one at batch 64 (83.40%) into a single
|
| 207 |
+
"88.95%" that belonged to neither, and then read the ladder off that number. Two
|
| 208 |
+
published conclusions came out of that artefact and both were wrong. They are
|
| 209 |
+
corrected below.
|
| 210 |
+
|
| 211 |
+
### At batch 256 (120k–150k steps)
|
| 212 |
+
|
| 213 |
+
| step | configuration | params | board | gain |
|
| 214 |
+
|---|---|---|---|---|
|
| 215 |
+
| baseline | feed-forward, d=512, 12 layers, 150k steps | 37.9M | 88.90% (n=2) | – |
|
| 216 |
+
| + depth, − width | feed-forward, d=128, 32 layers, 120k steps | 6.34M | 94.50% (n=1) | **+5.60** |
|
| 217 |
+
| + weight sharing | recurrent, d=128, 1 layer × 32, 120k steps | **212k** | **99.70%** (n=2) | **+5.20** |
|
| 218 |
+
|
| 219 |
+
**Parameters fall monotonically and accuracy rises monotonically**: 37.9M →
|
| 220 |
+
6.34M → 212k against 88.90% → 94.50% → 99.70%. The deeper model even trained for
|
| 221 |
+
*fewer* steps than the baseline it beats. Capacity was never the bottleneck;
|
| 222 |
+
iteration count is.
|
| 223 |
+
|
| 224 |
+
### At batch 64 (110k steps), injection off on both sides
|
| 225 |
+
|
| 226 |
+
| step | configuration | params | board | gain |
|
| 227 |
+
|---|---|---|---|---|
|
| 228 |
+
| baseline | feed-forward, d=128, 32 layers | 6.34M | 83.40% (n=1) | – |
|
| 229 |
+
| + weight sharing | recurrent, d=128, 1 layer × 32 | **212k** | **94.10%** (n=2) | **+10.70** |
|
| 230 |
+
|
| 231 |
+
### Two corrections to earlier versions of this table
|
| 232 |
+
|
| 233 |
+
- ~~"Depth alone is worth nothing — 12 to 32 layers gains 0.05 points."~~
|
| 234 |
+
**Wrong, and backwards.** That 0.05 came from comparing against the pooled
|
| 235 |
+
88.95%. At matched batch size the deeper, *narrower*, 6× smaller model gains
|
| 236 |
+
**+5.60**.
|
| 237 |
+
- ~~"Input injection is worth +5.60."~~ **Retracted** — see §2b. In a matched test
|
| 238 |
+
with R-MDM's step embedding present it is worth **+0.05**.
|
| 239 |
+
|
| 240 |
+
Both errors had the same cause: treating runs at different training budgets as
|
| 241 |
+
interchangeable seeds. `cfg_label` in `src/plot_sudoku.py` now makes batch size
|
| 242 |
+
part of a configuration's identity so the two cannot be pooled again.
|
| 243 |
+
|
| 244 |
+
Two further ablations on the full method:
|
| 245 |
+
|
| 246 |
+
| ingredient removed | board | cost |
|
| 247 |
+
|---|---|---|
|
| 248 |
+
| deep supervision (supervise only the last recurrence) | 97.75% | **−1.95** |
|
| 249 |
+
| schedule matching (plain MDLM objective) | 96.55% | **−3.15** |
|
| 250 |
+
|
| 251 |
+
Note the variance: the 32-layer row is **94.5 / 83.4** (sd 5.55), by far the
|
| 252 |
+
least stable configuration tested. The full method is the most stable at
|
| 253 |
+
**99.6 / 99.8** (sd 0.10).
|
| 254 |
+
|
| 255 |
+
## 5. Recurrence extrapolates past its training depth
|
| 256 |
+
|
| 257 |
+

|
| 258 |
+
|
| 259 |
+
Trained at R = 32, evaluated elsewhere with no retraining:
|
| 260 |
+
|
| 261 |
+
| R at inference | 1 | 2 | 4 | 8 | 16 | **32** | **64** | 128 |
|
| 262 |
+
|---|---|---|---|---|---|---|---|---|
|
| 263 |
+
| board accuracy | 0.10% | 5.40% | 48.40% | 82.00% | 92.40% | **98.30%** | **99.40%** | 99.10% / 39.70% |
|
| 264 |
+
|
| 265 |
+
Accuracy **improves past the depth it was trained at**, which is what deep
|
| 266 |
+
supervision predicts: each application is a valid one-step refinement, so the map
|
| 267 |
+
is iterable beyond where it was fit. Honest limit — **2× extrapolation is
|
| 268 |
+
reliable, 4× is not**: one seed holds 99.10% at R = 128, the other collapses to
|
| 269 |
+
39.70%.
|
| 270 |
+
|
| 271 |
+
## 5b. The model solving, and why the benchmark was rebuilt
|
| 272 |
+
|
| 273 |
+

|
| 274 |
+
|
| 275 |
+
Real model output on the three hardest held-out puzzles, at 1, 4, 16 and 61
|
| 276 |
+
denoising passes. Grey cells are given clues, red cells are wrong.
|
| 277 |
+
|
| 278 |
+

|
| 279 |
+
|
| 280 |
+
The same board as the shared block is applied more times. This is the iterative
|
| 281 |
+
refinement the method is built around, made visible rather than asserted.
|
| 282 |
+
|
| 283 |
+

|
| 284 |
+
|
| 285 |
+
Accuracy against puzzle difficulty, with sample size per point. **The curve is
|
| 286 |
+
flat at 99–100% across the whole 22–27 clue range**, against 3.0% for constraint
|
| 287 |
+
propagation on the same set. Two things follow, and the second is a limitation:
|
| 288 |
+
the model is uniformly strong across the difficulty range this benchmark spans,
|
| 289 |
+
and **the benchmark does not stress it** — we would need 17–21 clue puzzles, where
|
| 290 |
+
minimal-puzzle generation gets sharply more expensive, to find where it breaks.
|
| 291 |
+
|
| 292 |
+

|
| 293 |
+
|
| 294 |
+
Why the benchmark was generated rather than downloaded: search-free constraint
|
| 295 |
+
propagation solves **100%** of the standard SATNet split and **3%** of ours.
|
| 296 |
+
|
| 297 |
+
## 6. The instructive failure: low loss, no capability
|
| 298 |
+
|
| 299 |
+
| baseline | final training loss | board accuracy |
|
| 300 |
+
|---|---|---|
|
| 301 |
+
| autoregressive prefix-LM | **0.0486** | 0.15% |
|
| 302 |
+
| direct classifier, all-cell supervision | **0.0722** | 31.00% |
|
| 303 |
+
| **recurrent diffusion (ours)** | 0.15 | **99.70%** |
|
| 304 |
+
|
| 305 |
+
Both non-diffusion baselines reach **lower training loss than our method and
|
| 306 |
+
solve almost nothing.** Autoregressive errors compound unrecoverably — it cannot
|
| 307 |
+
revise, and one wrong cell destroys the board. All-cell supervision is dominated
|
| 308 |
+
by copying the 24 given clues, so the loss looks excellent while the 57 blanks
|
| 309 |
+
stay unlearned. This is why board accuracy, not loss, is the metric.
|
| 310 |
+
|
| 311 |
+
## 7. Method
|
| 312 |
+
|
| 313 |
+
```
|
| 314 |
+
h ← E(x) token embedding
|
| 315 |
+
repeat R times:
|
| 316 |
+
h ← h + E(x) input injection
|
| 317 |
+
h ← Block(h) ONE weight-shared block
|
| 318 |
+
record logits(h) every application is supervised
|
| 319 |
+
loss = Σ_r w_r · CE(logits_r, x₀), w_r = r/R
|
| 320 |
+
```
|
| 321 |
+
|
| 322 |
+
Implementation: `RecurrentDenoiser` in `src/model.py`, `recurrent_cond_loss` in
|
| 323 |
+
`src/diffusion.py`. Configuration d=128, 1 layer, 4 heads, R=32 training / 64
|
| 324 |
+
inference, chosen to match Yang et al. so the comparison isolates the diffusion
|
| 325 |
+
framing rather than scale.
|
| 326 |
+
|
| 327 |
+
**Input injection** re-adds the token embedding at every recursion, on the
|
| 328 |
+
reasoning that the clue signal would otherwise decay through thirty applications
|
| 329 |
+
of the same block. **That reasoning is not supported by our own measurement**: in
|
| 330 |
+
a matched test it is worth +0.05 points once R-MDM's step embedding is present
|
| 331 |
+
(§2b). It is retained in the default configuration because the headline runs used
|
| 332 |
+
it, not because we can show it helps. **Deep supervision** forces each application
|
| 333 |
+
to be a valid one-step refinement rather than letting the stack learn one
|
| 334 |
+
entangled R-step function, and it is what makes R = 64 inference work after
|
| 335 |
+
R = 32 training (§5); unlike injection, it is load-bearing — removing it costs
|
| 336 |
+
1.95 points (99.70% → 97.75%, both n=2 at batch 256).
|
| 337 |
+
|
| 338 |
+
## 8. Published results and their distributions
|
| 339 |
+
|
| 340 |
+
| system | accuracy | puzzle distribution | params | reference |
|
| 341 |
+
|---|---|---|---|---|
|
| 342 |
+
| SATNet | 98.3% | SATNet split, ~36 clues | 618k | Wang et al., ICML 2019 |
|
| 343 |
+
| SATNet | 6.1% | RRN hard, 17 clues | 618k | via Yang et al. 2023 |
|
| 344 |
+
| RRN | 96.7% | RRN hard, 17 clues | 201k | Palm et al., NeurIPS 2018 |
|
| 345 |
+
| Recurrent Transformer | 99.5% | RRN, 17–34 clues | 211k | Yang et al., 2023 |
|
| 346 |
+
| Recurrent Transformer | 96.7% | RRN hardest, 17 clues | 211k | Yang et al., 2023 |
|
| 347 |
+
| **this work** | **99.70%** | **ours, 20–30 clues** | **212k** | — |
|
| 348 |
+
|
| 349 |
+
**Not directly comparable.** Our 20–30 clue range sits inside the Recurrent
|
| 350 |
+
Transformer's 17–34 range but excludes the hardest 17-clue instances. At matched
|
| 351 |
+
parameter count (212k vs 211k) the result is *competitive*. The SATNet split is
|
| 352 |
+
not used because constraint propagation alone solves 100% of it.
|
| 353 |
+
|
| 354 |
+
## 9. Limitations
|
| 355 |
+
|
| 356 |
+
- **The recursive architecture is not our contribution.** It is established in
|
| 357 |
+
[arXiv:2606.18022](https://arxiv.org/html/2606.18022v1). We reproduce it
|
| 358 |
+
independently and extend it with input injection; the framing throughout
|
| 359 |
+
reflects that.
|
| 360 |
+
- **No like-for-like comparison with R-MDM.** They evaluate on Shah et al.
|
| 361 |
+
(2024); we generate our own minimal puzzles. The two numbers are not
|
| 362 |
+
comparable and we do not compare them.
|
| 363 |
+
|
| 364 |
+
- **Distribution mismatch** with all published numbers (§8). Not a SOTA claim.
|
| 365 |
+
- ~~Input injection is not separated from weight sharing.~~ ~~**Closed**: injection
|
| 366 |
+
is worth +5.60.~~ **Reopened, then resolved against us.** The matched test (§2b)
|
| 367 |
+
puts input injection at **+0.05** once R-MDM's step embedding is present. The
|
| 368 |
+
+5.60 was an artefact of a 4× batch-size difference between the two arms. The
|
| 369 |
+
claim is withdrawn.
|
| 370 |
+
- **The direct-classifier reproduction failed** (31% vs 99.5% published). Not
|
| 371 |
+
used as evidence; reported so the gap is visible.
|
| 372 |
+
- ~~`feed-forward 32L` is n = 2 but highly unstable (94.5 / 83.4).~~ **Not a seed
|
| 373 |
+
effect at all**: 94.5 is batch 256 and 83.4 is batch 64. They are two budgets,
|
| 374 |
+
not two seeds, and pooling them produced the false "depth is worth nothing"
|
| 375 |
+
conclusion (§4). Each is n = 1 at its own budget.
|
| 376 |
+
- **Several arms are n = 1**, and the injection-ON arm of §2b is n = 1. Two seeds
|
| 377 |
+
of one configuration differ by up to 67 points at NFE 1 and 0.5 at NFE 61, so
|
| 378 |
+
low-NFE numbers in this report carry little information.
|
| 379 |
+
- **Compute exhausted.** 3,030 of 3,000,000 billing-minutes remained at the end;
|
| 380 |
+
one further training run costs ~3,600. The open questions below cannot be
|
| 381 |
+
closed with the allocation available.
|
| 382 |
+
- Sudoku only. Whether recurrence transfers to other constraint families is
|
| 383 |
+
untested here.
|
| 384 |
+
|
| 385 |
+
## Datasets
|
| 386 |
+
|
| 387 |
+
**Primary — generated, not downloaded.** The standard split is saturated, so it
|
| 388 |
+
cannot discriminate between methods.
|
| 389 |
+
|
| 390 |
+
| dataset | role | source | size |
|
| 391 |
+
|---|---|---|---|
|
| 392 |
+
| **Hard Sudoku (this work)** | train + test | generated by `src/gen_hard_sudoku.py` | 100,000 train / 1,000 test, 20–30 clues |
|
| 393 |
+
| SATNet Sudoku | rejected after measurement | `https://powei.tw/sudoku.zip` (Wang et al., ICML 2019) | 9,000 / 1,000, 31–42 clues |
|
| 394 |
+
|
| 395 |
+
The SATNet split was downloaded, verified (all labels valid Sudoku, all clues
|
| 396 |
+
consistent, zero train/test overlap) and then **rejected**: search-free
|
| 397 |
+
constraint propagation solves **1000/1000** of its test set, so every competent
|
| 398 |
+
method scores ~100% and the benchmark measures nothing. That measurement is in
|
| 399 |
+
`src/sudoku_validate.py` and is the reason the hard benchmark exists.
|
| 400 |
+
|
| 401 |
+
Hard-Sudoku generation is fully specified: solutions come from a randomised
|
| 402 |
+
backtracking fill of an empty grid (≈6.7×10²¹ space), cells are removed in random
|
| 403 |
+
order, and a removal is kept **only if an exhaustive counter confirms the solution
|
| 404 |
+
is still unique**. Train and test solutions are disjoint even up to digit
|
| 405 |
+
relabelling. Training uses digit-relabelling augmentation, a genuine Sudoku
|
| 406 |
+
symmetry that leaves the constraint structure untouched.
|
| 407 |
+
|
| 408 |
+
**Used in the earlier study** (§ below), all public and all loaded from scratch:
|
| 409 |
+
|
| 410 |
+
| dataset | source | used for |
|
| 411 |
+
|---|---|---|
|
| 412 |
+
| text8 | `http://mattmahoney.net/dc/text8.zip` | character language modelling, 90M/5M/5M split |
|
| 413 |
+
| QM9 | `https://deepchemdata.s3.us-west-1.amazonaws.com/datasets/qm9.csv` | molecular graph generation, 133,885 molecules |
|
| 414 |
+
| CoNLL-SIGMORPHON 2017 | `github.com/sigmorphon/conll2017` | morphological inflection, 6 languages |
|
| 415 |
+
| *n*-digit addition | synthetic, `src/data.py` | unique-answer, deep-dependency probe |
|
| 416 |
+
| structured graph families | enumerated, `src/graphs.py` | exact total correlation and one-pass ceiling |
|
| 417 |
+
|
| 418 |
+
No pretrained weights or tokenizers are used anywhere, including the
|
| 419 |
+
autoregressive model used to score generated text in the earlier study.
|
| 420 |
+
|
| 421 |
+
## References
|
| 422 |
+
|
| 423 |
+
- *Recursive Scaling in Masked Diffusion Models (R-MDM).*
|
| 424 |
+
[arXiv:2606.18022](https://arxiv.org/html/2606.18022v1) — **establishes the
|
| 425 |
+
recursive weight-shared architecture with all-steps loss that this work
|
| 426 |
+
reproduces.**
|
| 427 |
+
- Shah et al., 2024 — the 1.8M-board Sudoku dataset R-MDM evaluates on.
|
| 428 |
+
- Wang, Donti, Wilder, Kolter. *SATNet: Bridging deep learning and logical
|
| 429 |
+
reasoning with a differentiable satisfiability solver.* ICML 2019.
|
| 430 |
+
- Palm, Paquet, Winther. *Recurrent Relational Networks.* NeurIPS 2018.
|
| 431 |
+
- Yang, Ishay, Lee. *Learning to Solve Constraint Satisfaction Problems with
|
| 432 |
+
Recurrent Transformer.* ICLR 2023. [arXiv:2307.04895](https://arxiv.org/abs/2307.04895)
|
| 433 |
+
- Austin, Johnson, Ho, Tarlow, van den Berg. *Structured Denoising Diffusion
|
| 434 |
+
Models in Discrete State-Spaces.* NeurIPS 2021.
|
| 435 |
+
- Sahoo et al. *Simple and Effective Masked Diffusion Language Models.* NeurIPS 2024.
|
| 436 |
+
- *Conditional Total Correlation and the Serial Depth of Adaptive Parallel
|
| 437 |
+
Sampling.* [arXiv:2608.25505](https://arxiv.org/abs/2608.25505)
|
| 438 |
+
- *MDLMPE: Distribution Aware Positional Encoding for Masked Diffusion Language
|
| 439 |
+
Models.* [arXiv:2608.03769](https://arxiv.org/html/2608.03769)
|
| 440 |
+
- *MDPO: Overcoming the Training-Inference Divide of Masked Diffusion Language
|
| 441 |
+
Models.* [arXiv:2508.13148](https://arxiv.org/html/2508.13148v1)
|
| 442 |
+
|
| 443 |
+
## 10. Reproducing
|
| 444 |
+
|
| 445 |
+
```bash
|
| 446 |
+
python src/gen_hard_sudoku.py --n_train 100000 --n_test 1000 --out data/sudoku_hard
|
| 447 |
+
python src/train_sudoku.py --recurrent --R 32 --R_infer 64 --mode full \
|
| 448 |
+
--hard data/sudoku_hard --augment --d 128 --layers 1 --heads 4 \
|
| 449 |
+
--bs 256 --steps 120000 --lr 3e-4 --out runs/rec
|
| 450 |
+
python src/sudoku_compare.py --hard data/sudoku_hard --runs runs --pattern 'rec*'
|
| 451 |
+
python src/plot_sudoku.py
|
| 452 |
+
```
|
| 453 |
+
|
| 454 |
+
---
|
| 455 |
+
|
| 456 |
+
## The earlier study: two failure modes of parallel decoding
|
| 457 |
+
|
| 458 |
+
## The claim
|
| 459 |
+
|
| 460 |
+
Masked diffusion's entire value proposition is **parallel decoding**: commit many
|
| 461 |
+
tokens per forward pass instead of one. Quality collapses as parallelism rises,
|
| 462 |
+
and roughly a dozen 2026 papers attack this at inference time with better
|
| 463 |
+
unmasking schedules — confidence ranking, entropy gating, dependency-aware
|
| 464 |
+
ordering.
|
| 465 |
+
|
| 466 |
+
Those methods treat one symptom as one disease. There are two:
|
| 467 |
+
|
| 468 |
+
| | failure mode | why it happens | fixable by |
|
| 469 |
+
|---|---|---|---|
|
| 470 |
+
| **(i)** | the fully-masked state is never trained | a *K*-pass decode evaluates the model at ratios `{1, (K−1)/K, …, 1/K}` and **starts from t = 1**. Continuous `t ~ U(0,1)` assigns that state probability **zero** | **training only** |
|
| 471 |
+
| **(ii)** | committed positions carry real mutual information | parallel decoding samples the **product** of marginals; the truth is the **joint** | **inference only** |
|
| 472 |
+
|
| 473 |
+
For (ii) the discarded dependence is the total correlation of the committed set
|
| 474 |
+
*S*:
|
| 475 |
+
|
| 476 |
+
```
|
| 477 |
+
TC(S) = Σᵢ H(xᵢ | c) − H(S | c) ≤ Σᵢ H(xᵢ | c)
|
| 478 |
+
```
|
| 479 |
+
|
| 480 |
+
so **the summed conditional entropy of what you commit upper-bounds the error
|
| 481 |
+
you incur by committing it**. If every committed conditional is a point mass the
|
| 482 |
+
bound is zero and independent sampling reproduces the joint exactly. No training
|
| 483 |
+
objective removes this term without abandoning the data distribution.
|
| 484 |
+
|
| 485 |
+
Conversely, no inference-time reordering repairs a marginal that was never fit.
|
| 486 |
+
|
| 487 |
+
**Prior work applies inference-time fixes to both.** That is why it flatlines on
|
| 488 |
+
arithmetic, where (ii) is identically zero and all the loss is (i).
|
| 489 |
+
|
| 490 |
+
## What we tried, and what happened
|
| 491 |
+
|
| 492 |
+
Summarised up front, because half of it is negative and burying that would
|
| 493 |
+
misrepresent the work:
|
| 494 |
+
|
| 495 |
+
| | approach | verdict |
|
| 496 |
+
|---|---|---|
|
| 497 |
+
| **fix (i), single budget** | train at the mask ratios one known budget visits | **works, and survives its compute control** — 99.9% against 0.0% at 20-digit addition even when the baseline is given 2× the training; beats the MDLM objective at every budget on text8 *and* on bits-per-character |
|
| 498 |
+
| **architecture** | give the denoiser **absolute** position information | **works, and is the strongest result here** — at `t = 1` the input is uniform, so a relative encoding cannot express position-dependent marginals *at any training budget*. +88 points where marginals vary, −0.02 in the control, landing at 100.3% of the exact bound. Predicted 5/5 before measurement |
|
| 499 |
+
| fix (ii) | commit while summed conditional entropy stays under `B` nats | **mixed** — competitive on graphs, loses to fixed-`K` on text8 |
|
| 500 |
+
| fix (i), all budgets | sample the budget and condition on it | **fails** — worse at every budget on graphs, destroys the task on addition, worse BPC on text8 |
|
| 501 |
+
|
| 502 |
+
The two positives are independent and do not transfer alike: schedule matching
|
| 503 |
+
carries addition and text8 but does nothing on QM9, while absolute position
|
| 504 |
+
information carries QM9 and the graph families. They are reported as two findings
|
| 505 |
+
rather than merged into one combined claim.
|
| 506 |
+
|
| 507 |
+
The framework itself — deciding which mode a given failure belongs to, and
|
| 508 |
+
bounding how much of it is recoverable — is what survives all four.
|
| 509 |
+
|
| 510 |
+
## Fix (i): train the schedule you intend to decode at
|
| 511 |
+
|
| 512 |
+
A *K*-pass decode evaluates the model only at mask ratios `{1, (K−1)/K, …, 1/K}`.
|
| 513 |
+
Standard MDLM draws `t ~ U(0,1)`, which is *uniform over the same range* — so the
|
| 514 |
+
issue is not that uniform training under-weights heavy masking. It is that
|
| 515 |
+
continuous `U(0,1)` places **probability zero on t = 1**, the fully-masked state
|
| 516 |
+
every decode begins from. Drawing `t` from the discrete set instead puts an
|
| 517 |
+
**atom of mass 1/K** exactly there.
|
| 518 |
+
|
| 519 |
+
Matching a *single* `K` works, and it is what the addition results below use
|
| 520 |
+
(`K = 1`, i.e. always `t = 1`). But it is a **commitment to one decoding
|
| 521 |
+
budget**, and we measured the price: a model trained for one pass scores 99.8%
|
| 522 |
+
at one pass and **85.7% at twenty**. That is the baseline's own disease with the
|
| 523 |
+
roles reversed — intermediate partially-decoded states are off-distribution for
|
| 524 |
+
a model fitted only to `t = 1`. A method shaped like that can win one operating
|
| 525 |
+
point but cannot dominate a quality-vs-compute curve.
|
| 526 |
+
|
| 527 |
+
### The attempted generalisation, which failed
|
| 528 |
+
|
| 529 |
+
**Any-budget masked diffusion** was meant to remove that commitment: sample the
|
| 530 |
+
budget per example, draw `t` from that budget's schedule, and pass the budget to
|
| 531 |
+
the denoiser as a log₂ embedding.
|
| 532 |
+
|
| 533 |
+
```
|
| 534 |
+
K ~ {1, 2, 4, …, 256}
|
| 535 |
+
t ~ {1, (K−1)/K, …, 1/K}
|
| 536 |
+
loss = CE( model(x_t, budget=K), x₀ )
|
| 537 |
+
```
|
| 538 |
+
|
| 539 |
+
It costs one embedding lookup and no extra forward pass, so it is cheaper than
|
| 540 |
+
the fixed-`K` method — and it does not work. The result is reported here rather
|
| 541 |
+
than dropped, because the reason it fails is the same arithmetic that explains
|
| 542 |
+
why fixed-`K` succeeds.
|
| 543 |
+
|
| 544 |
+
**20-digit addition**, against fixed-`K` (`K = 1`):
|
| 545 |
+
|
| 546 |
+
| training | 1 pass | 2 | 4 | 8 | 16 | 21 (sequential) |
|
| 547 |
+
|---|---|---|---|---|---|---|
|
| 548 |
+
| MDLM baseline | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | – |
|
| 549 |
+
| **fixed-K (K=1)** | **99.9** | 99.3 | 95.6 | 87.5 | 85.8 | – |
|
| 550 |
+
| any-budget | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
|
| 551 |
+
|
| 552 |
+
It does not flatten the crossover; it destroys the capability, scoring zero at
|
| 553 |
+
every budget including a fully sequential decode. The mechanism is arithmetic: a
|
| 554 |
+
one-pass decode starts at `t = 1`, and the training mass landing there is
|
| 555 |
+
`1.000` for fixed-`K` against `(1/9) Σ_K 1/K = 0.222` for uniform any-budget — a
|
| 556 |
+
**4.5× dilution** of the only signal that matters, on a task sitting exactly at
|
| 557 |
+
the learnability edge.
|
| 558 |
+
|
| 559 |
+
**Graphs**, mean over four families and two seeds, any-budget minus baseline:
|
| 560 |
+
|
| 561 |
+
| K = 1 | K = 2 | K = 4 | K = 8 | K = 15 |
|
| 562 |
+
|---|---|---|---|---|
|
| 563 |
+
| +0.3 | −2.7 | −2.9 | **−4.2** | **−31.7** |
|
| 564 |
+
|
| 565 |
+
Worse at every budget above one, and catastrophically worse at high budgets
|
| 566 |
+
(tree −81.6, 2-regular −43.7). Spreading training across nine budgets leaves
|
| 567 |
+
each one undertrained relative to a specialist, and the conditioning embedding
|
| 568 |
+
does not recover the difference — an unconditioned control sampling the same
|
| 569 |
+
budgets does no better.
|
| 570 |
+
|
| 571 |
+
**The negative result is the finding.** "One model for every decoding budget" is
|
| 572 |
+
not free, and at this scale it does not pay for itself at any budget. What
|
| 573 |
+
survives is the narrower claim the addition results already supported: *train
|
| 574 |
+
the schedule you intend to decode at.* Matching a single known budget works
|
| 575 |
+
extremely well (99.9% against a baseline's 0.0%); trying to serve all of them at
|
| 576 |
+
once works worse than either.
|
| 577 |
+
|
| 578 |
+
**Fix (ii) — entropy-budgeted commitment.** At each pass, rank still-masked
|
| 579 |
+
positions by conditional entropy and commit the longest low-entropy prefix whose
|
| 580 |
+
cumulative entropy stays within `B` nats. By the bound above, `B` *directly caps
|
| 581 |
+
the dependence discarded at that pass*, so it is an interpretable dial rather
|
| 582 |
+
than a tuned heuristic: `B → 0` recovers sequential decoding, `B → ∞` recovers
|
| 583 |
+
one-shot parallel decoding, and the curve between them is the quality/compute
|
| 584 |
+
trade-off. The number of passes becomes data-dependent, which is the point.
|
| 585 |
+
|
| 586 |
+
Measured across four graph families it is **competitive but not dominant**: it
|
| 587 |
+
reaches points strictly better than fixed-`K` at equal or lower NFE in some
|
| 588 |
+
configurations (100% validity at 11 passes where fixed-`K` needs 15) and merely
|
| 589 |
+
ties in others. The earlier claim that it dominates fixed-`K` was based on one
|
| 590 |
+
family and does not hold across all four.
|
| 591 |
+
|
| 592 |
+
Cost of the working form of (i) — matching one known budget — is one extra
|
| 593 |
+
forward pass per training step, which is what the compute-matched control in
|
| 594 |
+
§5b exists to account for. Cost of (ii): none.
|
| 595 |
+
|
| 596 |
+
## What each regime isolates
|
| 597 |
+
|
| 598 |
+
| Regime | Example | mode (i) | mode (ii) | one pass? |
|
| 599 |
+
|---|---|---|---|---|
|
| 600 |
+
| **Non-unique answer** | groups must agree, value free | absent | **maximal** | never — information-theoretic |
|
| 601 |
+
| **Unique, shallow deps** | morphological inflection | small | small | mostly already works |
|
| 602 |
+
| **Unique, deep deps** | *n*-digit addition | **dominant** | zero | fails → schedule matching fixes it, pending a compute control |
|
| 603 |
+
| **Mixed** | natural text | present | present | where the two must compose *(running)* |
|
| 604 |
+
| **Exactly measurable** | structured graphs | present | **dominant** | **where the bound is verifiable — this is what carries the paper** |
|
| 605 |
+
|
| 606 |
+
---
|
| 607 |
+
|
| 608 |
+
## 1. Addition — mode (i) in isolation
|
| 609 |
+
|
| 610 |
+
Addition is the clean case: the answer is fully determined by the operands, so
|
| 611 |
+
every conditional is a point mass, mode (ii) is identically zero, and **all** of
|
| 612 |
+
the loss is mode (i). Digit *i* needs the carry out of digit *i−1*, so the
|
| 613 |
+
dependency is deep.
|
| 614 |
+
|
| 615 |
+
**Exact match at ONE forward pass.** Depth scaled as log₂(digits); lr 1e-4 with
|
| 616 |
+
long warmup, which matters — see §5.
|
| 617 |
+
|
| 618 |
+
| digits | MDLM baseline | matched schedule (ours) | seeds >90% (base → ours) |
|
| 619 |
+
|---|---|---|---|
|
| 620 |
+
| 8 | 100.0 | 100.0 | 4/4 → 4/4 (saturated) |
|
| 621 |
+
| **12** | **76.7** | **100.0** | 3/4 → **4/4** |
|
| 622 |
+
| **16** | **25.0** | **75.0** | 1/4 → **3/4** |
|
| 623 |
+
| **20** | **0.0** | **99.9** | 0/3 → **3/3** |
|
| 624 |
+
| 24 | 0.0 | 33.6 | 0/3 → 1/3 |
|
| 625 |
+
|
| 626 |
+
> **⚠ The 16-digit row is unsettled.** A compute-matched control — the plain
|
| 627 |
+
> baseline given **double** the training steps at the same depth — reaches 100%
|
| 628 |
+
> on **one seed of two**, and 0% on the other. So the baseline *can* solve
|
| 629 |
+
> 16-digit addition with enough training, but not reliably. The 25.0% figure
|
| 630 |
+
> below comes from a smaller configuration (10 layers, 60k steps) where both
|
| 631 |
+
> arms were undertrained, so it is not a clean method effect either. **Do not
|
| 632 |
+
> quote the 16-digit gap in any direction** until the matched-configuration
|
| 633 |
+
> comparison lands.
|
| 634 |
+
|
| 635 |
+
The 12-digit row is a parallelism gap: the baseline demonstrably learned the task
|
| 636 |
+
and simply cannot commit it in one pass. The 16-digit row is in question, per the
|
| 637 |
+
note above.
|
| 638 |
+
|
| 639 |
+
**The 20- and 24-digit rows are a different and stronger claim, and are labelled
|
| 640 |
+
as such.** The standard pass grid stops at 16, which for a 21-slot answer is not
|
| 641 |
+
a sequential decode, so `src/seq_check.py` re-decodes every run at one token per
|
| 642 |
+
pass. That settles it:
|
| 643 |
+
|
| 644 |
+
| digits | mode | @1 pass | fully sequential | reading |
|
| 645 |
+
|---|---|---|---|---|
|
| 646 |
+
| 20 | MDLM | 0.0 | **0.0** | **never learned the task** |
|
| 647 |
+
| 20 | ours | **99.8** | 85.7 | learned it |
|
| 648 |
+
| 24 | MDLM | 0.0 | **0.0** | **never learned the task** |
|
| 649 |
+
| 24 | ours | 33.7 | 33.3 | learned it |
|
| 650 |
+
|
| 651 |
+
The baseline is at zero **at every budget, on every seed**. Beyond 16 digits it
|
| 652 |
+
does not fail to *parallelise* — it fails to *learn*. Uniform-`t` training
|
| 653 |
+
touches the fully-masked state with probability zero, and a 20-long carry chain
|
| 654 |
+
never gets enough gradient where it matters. So at these lengths fix (i) is a
|
| 655 |
+
**sample-efficiency** fix, not a parallelism fix, and the 99.8-vs-0.0 gap must
|
| 656 |
+
not be quoted as the latter.
|
| 657 |
+
|
| 658 |
+
24 digits remains at the edge: one seed of three reaches 100%, the others near
|
| 659 |
+
zero. Reported as the variance it is.
|
| 660 |
+
|
| 661 |
+
### The method inverts the trade rather than closing it
|
| 662 |
+
|
| 663 |
+
At 20 digits our own model scores **99.8% at one pass but 85.7% at twenty**, and
|
| 664 |
+
one seed drops from 99.5% to 57.0%. More passes make it *worse*.
|
| 665 |
+
|
| 666 |
+
This is the mechanism running in reverse, and it is the strongest available
|
| 667 |
+
evidence for the account. A model trained with mass at `t = 1` is fitted to the
|
| 668 |
+
fully-masked state; walking it through intermediate partially-decoded states
|
| 669 |
+
visits ratios it never trained on — exactly the baseline's disease, with the
|
| 670 |
+
roles swapped. A method that simply dominated at every budget would be weaker
|
| 671 |
+
evidence, because it would be consistent with "we just trained better".
|
| 672 |
+
|
| 673 |
+
It also means the honest framing is not "we close the parallelism gap" but **"the
|
| 674 |
+
schedule you train determines the budget you can decode at"**, in both
|
| 675 |
+
directions.
|
| 676 |
+
|
| 677 |
+
### No inference-time method closes the gap
|
| 678 |
+
|
| 679 |
+
Mode (ii) is zero here, so the prediction is that **every** inference-time
|
| 680 |
+
strategy lands on the same number and extra compute buys nothing.
|
| 681 |
+
|
| 682 |
+
**12-digit addition**, the *baseline* model decoded every way:
|
| 683 |
+
|
| 684 |
+
| strategy | 1 pass | 2 | 4 | 8 | 16 |
|
| 685 |
+
|---|---|---|---|---|---|
|
| 686 |
+
| confidence | 76.7 | 76.4 | 76.4 | 76.3 | 76.2 |
|
| 687 |
+
| entropy | 76.7 | 76.4 | 76.4 | 76.3 | 76.2 |
|
| 688 |
+
| entropy-gated | 76.7 | 76.4 | 76.4 | 76.2 | 76.2 |
|
| 689 |
+
| margin | 76.7 | 76.4 | 76.4 | 76.3 | 76.2 |
|
| 690 |
+
| random | 76.7 | 77.2 | 76.9 | 76.8 | 76.4 |
|
| 691 |
+
| **ours (training-time)** | **100.0** | 100.0 | 100.0 | 99.9 | 99.9 |
|
| 692 |
+
|
| 693 |
+
**16-digit:** every inference-time strategy 25.0 at one pass and 25.0 at *any*
|
| 694 |
+
budget; ours 75.0.
|
| 695 |
+
|
| 696 |
+
Two things stand out. Every strategy family lands on the same number, and
|
| 697 |
+
**sixteen times the inference compute buys nothing** — at 12 digits it is
|
| 698 |
+
marginally worse. The random-order row is the cleanest statement of it: choosing
|
| 699 |
+
positions at random does as well as every principled ordering heuristic, because
|
| 700 |
+
ordering is not what is broken.
|
| 701 |
+
|
| 702 |
+
This is the control that makes the text8 result in §3 meaningful: the same
|
| 703 |
+
entropy-gated rule that does nothing here is genuinely useful there, because
|
| 704 |
+
there mode (ii) is nonzero.
|
| 705 |
+
|
| 706 |
+
## 2. Inflection — both modes small
|
| 707 |
+
|
| 708 |
+
Morphological inflection (CoNLL-SIGMORPHON 2017) has unique answers, but forms
|
| 709 |
+
are ~10 characters with shallow local dependencies. Six typologically diverse
|
| 710 |
+
languages, 2 seeds each:
|
| 711 |
+
|
| 712 |
+
| language | baseline @1 | ours @1 | baseline gap 1→32 | **ours gap** | gap removed |
|
| 713 |
+
|---|---|---|---|---|---|
|
| 714 |
+
| Georgian | 94.6 | 94.1 | −0.0 | −0.0 | n/a (saturated) |
|
| 715 |
+
| Russian | 71.6 | 72.3 | +2.2 | **−0.3** | 114% |
|
| 716 |
+
| German | 76.0 | 78.4 | +3.2 | **+0.2** | 94% |
|
| 717 |
+
| Turkish | 78.7 | 82.3 | +3.5 | **+0.8** | 77% |
|
| 718 |
+
| Finnish | 51.4 | 51.9 | +7.7 | **+4.9** | 36% |
|
| 719 |
+
| Navajo | 28.0 | 26.9 | +8.0 | **+4.5** | 44% |
|
| 720 |
+
| **mean** | **66.7** | **67.7** | **+4.1** | **+1.7** | **59%** |
|
| 721 |
+
|
| 722 |
+
### Which component carries it (48 runs: 6 languages × 4 modes × 2 seeds)
|
| 723 |
+
|
| 724 |
+
| mode | mean @1 pass | gap 1→32 | share of the gap removed |
|
| 725 |
+
|---|---|---|---|
|
| 726 |
+
| MDLM baseline | 66.7 | +4.1 | — |
|
| 727 |
+
| schedule matching alone | 67.7 | +3.4 | 17% |
|
| 728 |
+
| **`t = 1` term alone** | 67.5 | **+2.1** | **49%** |
|
| 729 |
+
| **both** | 67.7 | **+1.7** | **59%** |
|
| 730 |
+
|
| 731 |
+
**The `t = 1` term is the active ingredient.** On its own it removes half the
|
| 732 |
+
parallelism penalty — nearly three times what reshaping the rest of the schedule
|
| 733 |
+
achieves — and the two components are roughly additive. That is precisely what
|
| 734 |
+
the account predicts: what matters is training the *fully-masked state the
|
| 735 |
+
decoder starts from*, not redistributing mass across the schedule generally.
|
| 736 |
+
|
| 737 |
+
The honest reading: **the method removes 59% of the parallelism penalty at no
|
| 738 |
+
cost to one-pass accuracy (66.7 → 67.7), but it does not raise the ceiling** —
|
| 739 |
+
at 32 passes it is 1.4 points *below* the baseline (69.4 vs 70.8). Concentrating
|
| 740 |
+
the schedule at high mask ratios necessarily spends less on the low-ratio states
|
| 741 |
+
that sequential decoding uses.
|
| 742 |
+
|
| 743 |
+
The dose-response is the interesting part and it goes the right way: **Georgian
|
| 744 |
+
has no gap and the method changes nothing; the languages with the largest gaps
|
| 745 |
+
get the largest absolute reductions.** A method that "helped" on Georgian would
|
| 746 |
+
be evidence it was doing something other than what is claimed.
|
| 747 |
+
|
| 748 |
+
Reporting Georgian and English matters: it shows where the method has nothing to
|
| 749 |
+
add, which is what makes the gains elsewhere credible.
|
| 750 |
+
|
| 751 |
+
## 3. text8 — schedule matching wins on natural language
|
| 752 |
+
|
| 753 |
+
Standard setup: text8, the conventional 90M/5M/5M character split, 27-symbol
|
| 754 |
+
vocabulary, 256-character windows, 12-layer denoiser trained from scratch.
|
| 755 |
+
Generative perplexity is scored by a held-out autoregressive character LM, also
|
| 756 |
+
trained from scratch on text8 (test BPC 1.539), so no pretrained model appears
|
| 757 |
+
anywhere in the pipeline. Two seeds per arm.
|
| 758 |
+
|
| 759 |
+
| NFE | MDLM baseline | **matched (ours)** | any-budget |
|
| 760 |
+
|---|---|---|---|
|
| 761 |
+
| 1 | 650.21 | 651.59 | 649.95 |
|
| 762 |
+
| 4 | 169.34 | **149.59** | 141.98 |
|
| 763 |
+
| 16 | 116.88 | **92.74** | 94.94 |
|
| 764 |
+
| 64 | 85.18 | **72.68** | 77.84 |
|
| 765 |
+
| 256 | 9.22 | **8.40** | 8.59 |
|
| 766 |
+
| **validation BPC** | 1.7292 | **1.7010** | 2.5720 |
|
| 767 |
+
|
| 768 |
+
**Schedule matching beats the published MDLM objective at every budget from 4
|
| 769 |
+
passes upward — by 20.7% at 16 passes — and improves bits-per-character at the
|
| 770 |
+
same time.** That simultaneity matters: the gain is not bought by trading
|
| 771 |
+
likelihood for sample quality, which is the usual way such numbers are inflated.
|
| 772 |
+
|
| 773 |
+
At one pass all three arms are indistinguishable (~650). Unconditional
|
| 774 |
+
generation of a 256-character block from nothing is mode (ii) at its maximum —
|
| 775 |
+
the first commit has no context to condition on — so no training objective helps
|
| 776 |
+
there, exactly as the account predicts.
|
| 777 |
+
|
| 778 |
+
Degeneracy guard: real text8 scores ppl 2.86 with a distinct-4-gram rate of
|
| 779 |
+
0.177 under the same evaluator. Generated text sits at ppl 8.40 and distinct-4
|
| 780 |
+
0.238 — worse than real text and slightly *more* varied, i.e. an imperfect model
|
| 781 |
+
rather than a collapsed one. Reporting generative perplexity without this check
|
| 782 |
+
is how repetition gets mistaken for quality.
|
| 783 |
+
|
| 784 |
+
The entropy budget does **not** help here: at ~99 NFE it scores 95.01 where
|
| 785 |
+
fixed-`K` at 64 NFE scores 72.68. On text, spending passes adaptively loses to
|
| 786 |
+
spending them uniformly, unlike on graphs. Reported as measured.
|
| 787 |
+
|
| 788 |
+
## 3z. The original text8 plan *(superseded)*
|
| 789 |
+
|
| 790 |
+
Addition isolates mode (i); the free-choice probes isolate mode (ii). Natural
|
| 791 |
+
text contains both **in the same sequence**: closing a word, a suffix or a
|
| 792 |
+
function word is nearly deterministic given context, while the choice of the
|
| 793 |
+
next content word carries real entropy. So text is where the claim that the two
|
| 794 |
+
fixes *compose* is actually tested, as a 2×2:
|
| 795 |
+
|
| 796 |
+
| | fixed-*K* commit | entropy-budgeted commit |
|
| 797 |
+
|---|---|---|
|
| 798 |
+
| uniform-`t` training | (a) | (b) |
|
| 799 |
+
| matched training | (c) | (d) |
|
| 800 |
+
|
| 801 |
+
Prediction: (c) < (a) and (d) < (b) on generative perplexity at equal compute,
|
| 802 |
+
and the two gains are largely independent.
|
| 803 |
+
|
| 804 |
+
**A second prediction, registered before the runs finish.** If fix (i) works by
|
| 805 |
+
placing training mass on the ratios a decode actually visits, then matched-`K`
|
| 806 |
+
training should show a **crossover**, not a uniform win: better than uniform-`t`
|
| 807 |
+
near NFE ≈ K, and *worse* far from it. Training at K = 8 puts no mass at the
|
| 808 |
+
ratios a 256-pass decode visits, so uniform-`t` should win at high NFE. A method
|
| 809 |
+
that simply dominated everywhere would be evidence the mechanism is something
|
| 810 |
+
other than the one claimed.
|
| 811 |
+
|
| 812 |
+
By the same logic the `t = 1`-heavy variant should be the worst of the three on
|
| 813 |
+
text at moderate NFE, because at `t = 1` an unconditional model can only learn
|
| 814 |
+
character frequencies — there is no context to condition on. That variant is
|
| 815 |
+
included to be refuted, not to win.
|
| 816 |
+
|
| 817 |
+
Standard setup: text8, the conventional 90M/5M/5M character split, 27-symbol
|
| 818 |
+
vocabulary, 256-character windows. Metrics:
|
| 819 |
+
|
| 820 |
+
- **validation bits-per-character** (the MDLM bound) — the standard likelihood
|
| 821 |
+
number, and the check that sample quality is not bought by wrecking the model;
|
| 822 |
+
- **generative perplexity vs. number of function evaluations**, scored by a
|
| 823 |
+
held-out autoregressive character LM trained from scratch on text8 itself
|
| 824 |
+
(a word-piece model trained on web text would judge character-level artifacts
|
| 825 |
+
through a tokenizer that never sees them);
|
| 826 |
+
- **entropy and distinct-4-gram rate**, reported beside it, because generative
|
| 827 |
+
perplexity alone is trivially gamed by degenerate repetition.
|
| 828 |
+
|
| 829 |
+
Against the published **confidence-threshold** rule, not a top-*k* stand-in.
|
| 830 |
+
|
| 831 |
+
## 3b. Graphs — where the bound stops being an assumption *(partial)*
|
| 832 |
+
|
| 833 |
+
The weakness of everything above is that the central quantity is never measured.
|
| 834 |
+
On addition `TC = 0` by construction; on text `H(S|c)` is not computable. So the
|
| 835 |
+
entropy budget rests on a bound the experiments never check.
|
| 836 |
+
|
| 837 |
+
Structured graphs close that. A graph on *n* nodes is a binary sequence of
|
| 838 |
+
`n(n−1)/2` edge indicators — the same machinery, unchanged — but for *n* ≤ 7 the
|
| 839 |
+
**entire family enumerates**, making every quantity exact: true marginals,
|
| 840 |
+
`H(S) = log₂|F|`, `TC`, and the one-pass ceiling
|
| 841 |
+
|
| 842 |
+
```
|
| 843 |
+
V* = Σ_{g valid} ∏ᵢ pᵢ(gᵢ) (what perfect marginals achieve in one pass)
|
| 844 |
+
```
|
| 845 |
+
|
| 846 |
+
**Proposition.** For `P` uniform on a family `F`, `V* ≥ 2^(−TC)`, with equality
|
| 847 |
+
iff `∏ᵢ pᵢ` is constant on `F`. *Every bit of total correlation among jointly
|
| 848 |
+
committed variables at most halves the one-pass success probability.* Proof and
|
| 849 |
+
verification in [`THEORY.md`](THEORY.md) §5.1 — the inequality holds across all
|
| 850 |
+
nine family/size combinations, and equality holds **to five decimal places** on
|
| 851 |
+
exactly the fixed-edge-count families, failing precisely where edge counts vary,
|
| 852 |
+
as the Jensen step requires.
|
| 853 |
+
|
| 854 |
+
### Both failure modes, separated by measurement
|
| 855 |
+
|
| 856 |
+
This is what no earlier task could do. Perfect matchings on 6 nodes,
|
| 857 |
+
`TC = 6.92 bits`, `V* = 0.825%`:
|
| 858 |
+
|
| 859 |
+
Four families, two seeds each, one-pass validity against the exact ceiling:
|
| 860 |
+
|
| 861 |
+
| family | TC (bits) | V* | achieved @1 pass (95% CI) | reading |
|
| 862 |
+
|---|---|---|---|---|
|
| 863 |
+
| 2-regular | 8.43 | 0.289% | 0.317% [0.217, 0.465] | **at the ceiling** |
|
| 864 |
+
| matching | 6.92 | 0.825% | 0.769% [0.602, 0.983] | **at the ceiling** |
|
| 865 |
+
| tree | 3.43 | 9.249% | 9.204% [8.597, 9.849] | **at the ceiling** |
|
| 866 |
+
| **bipartite** | **0.11** | **93.632%** | **5.884% [5.395, 6.414]** | **16× below** |
|
| 867 |
+
|
| 868 |
+
This is the decomposition working as a measurement instrument, and it is sharper
|
| 869 |
+
than predicted.
|
| 870 |
+
|
| 871 |
+
**Where dependence is high, models land exactly on the information-theoretic
|
| 872 |
+
ceiling.** Three families, ceilings spanning 32× (0.289% to 9.249%), and in every
|
| 873 |
+
case the interval contains `V*`. The residual failure there is provably mode (ii)
|
| 874 |
+
and no training objective can recover it.
|
| 875 |
+
|
| 876 |
+
**Where dependence is nearly absent, the model fails anyway — and the reason is
|
| 877 |
+
architectural, not statistical.** Bipartite has `TC = 0.11` bits, so one-pass
|
| 878 |
+
decoding should be almost free at 93.6%, yet every model reaches only 5.9%.
|
| 879 |
+
|
| 880 |
+
That gap is **not** untrained capacity. At `t = 1` every input token is `[MASK]`,
|
| 881 |
+
so the input sequence is **constant**. With a purely relative position encoding
|
| 882 |
+
the attention score between positions *i* and *j* depends only on `(i − j)`, and
|
| 883 |
+
when every value vector is identical a layer's output is `v · Σ attn = v` — the
|
| 884 |
+
same at every position. Boundary effects aside, **a RoPE-only model cannot
|
| 885 |
+
express position-dependent marginals at the fully-masked state.** It is an
|
| 886 |
+
expressivity limit, so no amount of training removes it.
|
| 887 |
+
|
| 888 |
+
The completed families confirm this exactly, and the prediction is a dichotomy
|
| 889 |
+
rather than a trend:
|
| 890 |
+
|
| 891 |
+
| family | marginal spread across edge slots | distinct values | one pass |
|
| 892 |
+
|---|---|---|---|
|
| 893 |
+
| matching | **0.0000** | 1 (all 0.200) | ✅ at ceiling |
|
| 894 |
+
| 2-regular | **0.0000** | 1 (all 0.400) | ✅ at ceiling |
|
| 895 |
+
| tree | **0.0000** | 1 (all 0.333) | ✅ at ceiling |
|
| 896 |
+
| **bipartite** | **0.5300** | 2 (0.000, 0.530) | ❌ **16× below** |
|
| 897 |
+
|
| 898 |
+
Every vertex-transitive family has *exactly* constant marginals, which RoPE can
|
| 899 |
+
represent, and every one of them lands on its ceiling. The one family requiring
|
| 900 |
+
different marginals at different positions is the one that fails. Addition
|
| 901 |
+
escapes the problem because its prompt is visible, so the input is not constant.
|
| 902 |
+
|
| 903 |
+
### The fix, and it is one line
|
| 904 |
+
|
| 905 |
+
Swapping the relative encoding for absolute position embeddings, everything else
|
| 906 |
+
identical:
|
| 907 |
+
|
| 908 |
+
Complete grid, two seeds per cell:
|
| 909 |
+
|
| 910 |
+
| family | marginals | encoding | @1 pass | % of ceiling | per-seed |
|
| 911 |
+
|---|---|---|---|---|---|
|
| 912 |
+
| bipartite | **vary** | RoPE (relative) | 5.87% | 6.3% | 5.81, 5.93 |
|
| 913 |
+
| bipartite | **vary** | **APE (learned)** | **93.91%** | **100.3%** | 94.19, 93.63 |
|
| 914 |
+
| bipartite | **vary** | **sinusoidal (no params)** | **93.95%** | **100.3%** | 94.14, 93.75 |
|
| 915 |
+
| matching | constant | RoPE | 0.78% | 94.7% | 0.78, 0.78 |
|
| 916 |
+
| matching | constant | APE | 0.76% | 91.8% | 0.76, 0.76 |
|
| 917 |
+
| matching | constant | sinusoidal | 0.78% | 94.7% | 0.76, 0.81 |
|
| 918 |
+
|
| 919 |
+
**A 16× improvement, landing exactly on the information-theoretic ceiling.** The
|
| 920 |
+
87.7-point gap was never untrained capacity — it was inexpressible, and the model
|
| 921 |
+
reaches the bound the moment the architecture can represent the answer.
|
| 922 |
+
|
| 923 |
+
Two things make this hard to explain any other way. **Sinusoidal encodings carry
|
| 924 |
+
no learned parameters at all and perform identically to learned embeddings**, so
|
| 925 |
+
the gain is not extra capacity — it is absolute position information specifically.
|
| 926 |
+
And the seed spread is 0.12–0.56 points, with none of the bimodality that makes
|
| 927 |
+
the addition results fragile.
|
| 928 |
+
|
| 929 |
+
### The control
|
| 930 |
+
|
| 931 |
+
If absolute encodings were simply better, they would help everywhere. The
|
| 932 |
+
mechanism says they should help **only** where marginals differ across positions.
|
| 933 |
+
|
| 934 |
+
Effect of absolute position information, by condition and encoding:
|
| 935 |
+
|
| 936 |
+
| | learned (APE) | parameter-free (sinusoidal) |
|
| 937 |
+
|---|---|---|
|
| 938 |
+
| marginals **vary** | **+88.037 points** | **+88.074 points** |
|
| 939 |
+
| marginals **constant** | **−0.024 points** | **+0.000 points** |
|
| 940 |
+
|
| 941 |
+
Two independent absolute encodings agree to within **0.04 points** on the
|
| 942 |
+
treatment and both give essentially **exactly zero** on the control — a ~3,700×
|
| 943 |
+
difference in effect size between conditions. Seed variance is negligible
|
| 944 |
+
throughout (matching/RoPE is 0.78, 0.78).
|
| 945 |
+
|
| 946 |
+
That closes both alternative explanations. **Capacity** is ruled out by the
|
| 947 |
+
sinusoidal variant, which has no learned parameters and matches the learned
|
| 948 |
+
embedding exactly. **"Absolute encodings are simply better"** is ruled out by the
|
| 949 |
+
control, where they are worth nothing. What remains is the mechanism as stated:
|
| 950 |
+
a relative encoding cannot distinguish positions when the input is uniform, which
|
| 951 |
+
is precisely the state a one-pass decode begins from.
|
| 952 |
+
|
| 953 |
+
The consequence is general and goes beyond this project: **one-pass masked
|
| 954 |
+
diffusion needs absolute position information, and the field's default encoding
|
| 955 |
+
silently caps it.** Rotary encodings are near-universal in modern diffusion
|
| 956 |
+
language models, and few-pass decoding is the entire reason those models are
|
| 957 |
+
interesting.
|
| 958 |
+
|
| 959 |
+
Coverage confirms none of this is degeneracy — 100% of the matching and
|
| 960 |
+
2-regular families are recovered at K = 8.
|
| 961 |
+
|
| 962 |
+
One caution the exactness makes visible: `tree`/any-budget scores 10.06%
|
| 963 |
+
[9.43, 10.73], statistically **above** `V* = 9.25%`. `V*` bounds models whose
|
| 964 |
+
marginals match the data's, not all models — exceeding it means the marginals
|
| 965 |
+
have drifted, trading distributional fidelity for validity. See
|
| 966 |
+
[`THEORY.md`](THEORY.md) §5.1.
|
| 967 |
+
|
| 968 |
+
Coverage confirms this is not degeneracy: 100% of the 15-member family is
|
| 969 |
+
recovered at K = 8 and under the entropy budget. (Reporting "uniqueness" as
|
| 970 |
+
unique/valid would have shown 0.4% and read as collapse — with `|F| = 15`,
|
| 971 |
+
coverage is the meaningful metric.)
|
| 972 |
+
|
| 973 |
+
The entropy budget also dominates fixed-K under both training modes, reaching
|
| 974 |
+
100% validity at 11 passes where fixed-K needs 15.
|
| 975 |
+
|
| 976 |
+
**Status: 3 of 16 runs.** The remaining families span `TC` from 0.11 to 8.44
|
| 977 |
+
bits, which is where the dose-response claim — larger `TC`, lower ceiling, more
|
| 978 |
+
of the loss unfixable — is actually tested. One non-monotonicity in the baseline
|
| 979 |
+
(83.6% at K=4 falling to 76.7% at K=8) is single-seed and not yet trustworthy.
|
| 980 |
+
|
| 981 |
+
### Phase 2: QM9
|
| 982 |
+
|
| 983 |
+
The synthetic families give an exact ceiling on an artificial task. QM9 gives a
|
| 984 |
+
real benchmark whose metric is unambiguous — RDKit sanitisation enforces valency
|
| 985 |
+
at every atom at once, a genuine joint constraint, with no evaluator model in
|
| 986 |
+
the loop. A molecule is 9 node slots plus 36 edge slots = 45 tokens, so training
|
| 987 |
+
from scratch is cheap and the comparison isolates schedule and decoding rule
|
| 988 |
+
rather than scale. The axis is the one the graph-diffusion literature competes
|
| 989 |
+
on: **validity retained as denoising steps fall.**
|
| 990 |
+
|
| 991 |
+
The encoding is verified lossless first — storing aromatic bonds loses per-atom
|
| 992 |
+
aromaticity flags and put round-trip validity on *real* molecules at 92.65%,
|
| 993 |
+
which would have measured generated samples against a target the representation
|
| 994 |
+
could not reach. Kekulised and charge-filtered, round-trip is 100.00% while
|
| 995 |
+
keeping 99.1% of the dataset.
|
| 996 |
+
|
| 997 |
+
## 3c. QM9 — the finding on a standard benchmark
|
| 998 |
+
|
| 999 |
+
QM9 molecular generation, from scratch, 9 node slots + 36 edge slots = 45 tokens.
|
| 1000 |
+
Validity is RDKit sanitisation, which enforces valency at every atom at once — an
|
| 1001 |
+
unambiguous metric needing no evaluator model. Two seeds per arm; everything but
|
| 1002 |
+
the named factor held fixed.
|
| 1003 |
+
|
| 1004 |
+
QM9 was chosen because it is the strongest case for §3b's prediction: its
|
| 1005 |
+
marginals are extremely position-dependent (node slot 8 is *never* occupied,
|
| 1006 |
+
slot 7 is occupied 80% of the time, slots 0–2 always are, and edge slots run from
|
| 1007 |
+
never-bonded to always-bonded — mean total-variation distance 0.435 from the
|
| 1008 |
+
average slot). **The prediction was registered before the runs.**
|
| 1009 |
+
|
| 1010 |
+
| denoising steps | standard (uniform-`t` + relative) | **+ absolute encoding** |
|
| 1011 |
+
|---|---|---|
|
| 1012 |
+
| 1 | 0.01% | **29.92%** |
|
| 1013 |
+
| 4 | 29.33% | **55.80%** |
|
| 1014 |
+
| 8 | 72.20% | 72.11% |
|
| 1015 |
+
| 16 | 69.30% | **86.06%** |
|
| 1016 |
+
| 32 | 67.72% | **95.74%** |
|
| 1017 |
+
| 45 | 77.48% | **99.69%** |
|
| 1018 |
+
|
| 1019 |
+
**Under our flat encoding the standard formulation never exceeds 80% validity**,
|
| 1020 |
+
and its curve is non-monotonic (72.2 → 69.3 → 67.7 → 77.5). With absolute
|
| 1021 |
+
position information the curve is clean and monotonic to 99.69%.
|
| 1022 |
+
|
| 1023 |
+
> **⚠ Half of that gap was our own representation.** Our encoding uses fixed
|
| 1024 |
+
> node slots, so the model must learn slot-specific occupancy — exactly the
|
| 1025 |
+
> position-dependence a relative encoding cannot express. DiGress does not
|
| 1026 |
+
> generate this way: it samples the atom count *n* first, then builds an *n*-node
|
| 1027 |
+
> graph, so the problem never arises. Re-decoding the same checkpoints with *n*
|
| 1028 |
+
> given and unused slots observed — DiGress's setup, strictly generous to the
|
| 1029 |
+
> baseline — the relative arm rises from 77.5% to **89.1%**, while absolute stays
|
| 1030 |
+
> at 99.8%. The gap narrows from **22.2 to 10.7 points**.
|
| 1031 |
+
>
|
| 1032 |
+
> The effect is real but roughly **half** the size the flat encoding suggested,
|
| 1033 |
+
> and the "never exceeds 80%" framing does not survive a fair baseline. The
|
| 1034 |
+
> headline table below is kept because it is what the flat representation gives,
|
| 1035 |
+
> but the 10.7-point figure is the one to quote.
|
| 1036 |
+
|
| 1037 |
+
### The uniqueness collapse
|
| 1038 |
+
|
| 1039 |
+
Validity alone would understate how badly the standard setup fails:
|
| 1040 |
+
|
| 1041 |
+
| steps | standard | + absolute |
|
| 1042 |
+
|---|---|---|
|
| 1043 |
+
| 8 | **4.9%** | 99.2% |
|
| 1044 |
+
| 16 | 9.7% | 98.7% |
|
| 1045 |
+
| 45 | 41.1% | 98.1% |
|
| 1046 |
+
|
| 1047 |
+
**Its 72.2% validity at 8 steps comes from emitting the same handful of molecules
|
| 1048 |
+
repeatedly.** It is not generating a distribution, it is collapsing onto a few
|
| 1049 |
+
points; absolute encoding holds 98–99% uniqueness throughout. Reporting validity
|
| 1050 |
+
without uniqueness on this benchmark would hide the failure entirely.
|
| 1051 |
+
|
| 1052 |
+
### Steps to reach a validity target
|
| 1053 |
+
|
| 1054 |
+
| formulation | 50% | 80% | 90% | 95% |
|
| 1055 |
+
|---|---|---|---|---|
|
| 1056 |
+
| standard | 8 | **never** | **never** | **never** |
|
| 1057 |
+
| **+ absolute** | **4** | **16** | **32** | **32** |
|
| 1058 |
+
|
| 1059 |
+
### What does *not* replicate here
|
| 1060 |
+
|
| 1061 |
+
Schedule matching — §1's finding — buys essentially nothing on QM9 (99.65% against
|
| 1062 |
+
99.69% at 45 steps), and paired with a relative encoding it actively hurts (44.87%
|
| 1063 |
+
against 77.48%). On this benchmark the position encoding is the whole story. The
|
| 1064 |
+
two findings are independent, and only the second transfers here; that is reported
|
| 1065 |
+
rather than blurred into a single combined claim.
|
| 1066 |
+
|
| 1067 |
+
## 3d. Sudoku — a benchmark win, and a prediction of ours that failed
|
| 1068 |
+
|
| 1069 |
+
SATNet's 9x9 Sudoku (Wang et al., ICML 2019), the conventional 9,000/1,000 split,
|
| 1070 |
+
scored by **board accuracy** — all 81 cells correct. The published number is
|
| 1071 |
+
**98.3%**.
|
| 1072 |
+
|
| 1073 |
+
Leakage audited before use: **0/1000** test puzzles appear in training, **0/1000**
|
| 1074 |
+
solutions appear in training, and **0/1000** solutions match a training solution
|
| 1075 |
+
even up to digit relabelling — which is the vector our augmentation could
|
| 1076 |
+
otherwise have exploited. All 9,000 training and 1,000 test solutions are
|
| 1077 |
+
distinct.
|
| 1078 |
+
|
| 1079 |
+
**Un-augmented arm — like-for-like with SATNet:**
|
| 1080 |
+
|
| 1081 |
+
| denoising passes | board accuracy |
|
| 1082 |
+
|---|---|
|
| 1083 |
+
| **1** | **87.85%** |
|
| 1084 |
+
| **2** | **98.65%** |
|
| 1085 |
+
| 4 | 98.85% |
|
| 1086 |
+
| 8 | 99.70% |
|
| 1087 |
+
| 16 | 99.90% |
|
| 1088 |
+
| **32** | **100.00%** |
|
| 1089 |
+
|
| 1090 |
+
**Two forward passes already exceed the published 98.3%, and 32 passes solve all
|
| 1091 |
+
1,000 test puzzles exactly.** A single pass — the whole grid committed at once —
|
| 1092 |
+
solves 87.85% of them.
|
| 1093 |
+
|
| 1094 |
+
> **⚠ RETRACTED as a benchmark claim: this split is saturated.** Plain constraint
|
| 1095 |
+
> propagation — naked and hidden singles, no search, no backtracking, about forty
|
| 1096 |
+
> lines — solves **1000/1000 = 100.00%** of the test puzzles. So 100% is the
|
| 1097 |
+
> expected result for any competent method and demonstrates nothing, ours
|
| 1098 |
+
> included; the published 98.3% is itself *below* what a search-free classical
|
| 1099 |
+
> solver achieves. The statistics are clean (95% CI [99.62, 100.00], both seeds
|
| 1100 |
+
> 100.0, p = 3.6e-08 against 98.3%) and beside the point, because the comparison
|
| 1101 |
+
> is not informative. We report the number and withdraw the claim.
|
| 1102 |
+
>
|
| 1103 |
+
> The clue counts explain it: 32–41 per puzzle, mean 36.2, which is easy Sudoku.
|
| 1104 |
+
> §3e evaluates on instances that actually discriminate.
|
| 1105 |
+
|
| 1106 |
+
### The prediction we got wrong
|
| 1107 |
+
|
| 1108 |
+
We registered, before running, that entropy-budgeted decoding would beat fixed-`K`
|
| 1109 |
+
here "by a very large margin, larger than anywhere else in this project", because
|
| 1110 |
+
Sudoku is where commit *order* seemed to carry the information. It does not: it
|
| 1111 |
+
**loses on every arm**, by 0.35 to 1.40 points.
|
| 1112 |
+
|
| 1113 |
+
**That prediction contradicted our own framework, and the framework was right.**
|
| 1114 |
+
The entropy budget is the fix for mode (ii), the total correlation among
|
| 1115 |
+
committed positions. Sudoku has a unique answer, so `TC = 0` and there is nothing
|
| 1116 |
+
for it to fix — the bound says so directly, and we argued past it because
|
| 1117 |
+
"constraint propagation" was an appealing story. Recorded because a framework
|
| 1118 |
+
that predicts against its author's intuition and wins is worth more than one that
|
| 1119 |
+
only ever agrees with it.
|
| 1120 |
+
|
| 1121 |
+
### What the win is, and is not
|
| 1122 |
+
|
| 1123 |
+
Two separate reasons not to claim it. The 100% comes from the **plain MDLM
|
| 1124 |
+
baseline** with fixed-`K` decoding, so neither of this project's training findings
|
| 1125 |
+
contributes. And the split is saturated, so the number distinguishes nothing.
|
| 1126 |
+
|
| 1127 |
+
## 3e. Sudoku that actually discriminates
|
| 1128 |
+
|
| 1129 |
+
Harder instances are built from the same solutions by stripping clues, checking
|
| 1130 |
+
after **every** removal that the solution stays unique, so accuracy remains well
|
| 1131 |
+
defined. The result is a difficulty axis on which a search-free classical solver
|
| 1132 |
+
clearly fails:
|
| 1133 |
+
|
| 1134 |
+
| clues | constraint propagation alone |
|
| 1135 |
+
|---|---|
|
| 1136 |
+
| 36 (the SATNet split) | **100.0%** |
|
| 1137 |
+
| 30 | **27.5%** |
|
| 1138 |
+
| 26 | **4.2%** |
|
| 1139 |
+
| 22 | **3.3%** |
|
| 1140 |
+
|
| 1141 |
+
The models were trained on 31–42 clues, so all three harder sets are also out of
|
| 1142 |
+
distribution: this measures whether they learned Sudoku or learned a clue
|
| 1143 |
+
density. The decoding comparison is repeated here because this is where it should
|
| 1144 |
+
finally matter — with fewer clues the marginals are no longer near-perfect, so
|
| 1145 |
+
commit order has something to do. *(Evaluation running.)*
|
| 1146 |
+
|
| 1147 |
+
## 4. The limit that cannot be trained away
|
| 1148 |
+
|
| 1149 |
+
Where a group of positions must agree but *which* value they take is free, the
|
| 1150 |
+
likelihood-optimal marginal at each position is uniform over the valid values.
|
| 1151 |
+
Two independent draws agree with probability 1/V. This is mode (ii) at its
|
| 1152 |
+
maximum, and **no decoding schedule and no training objective can fix it**.
|
| 1153 |
+
|
| 1154 |
+
Tested rather than assumed: **66 runs** sweeping an entropy penalty designed to
|
| 1155 |
+
break the symmetry, across weights spanning two orders of magnitude. Weak
|
| 1156 |
+
settings changed nothing; strong settings destroyed the model, failing even at
|
| 1157 |
+
fully sequential decoding.
|
| 1158 |
+
|
| 1159 |
+
This boundary is part of the contribution. A method claiming to fix this regime
|
| 1160 |
+
would be claiming to beat an information-theoretic bound.
|
| 1161 |
+
|
| 1162 |
+
## 5. Why it should work — and the falsifiable prediction
|
| 1163 |
+
|
| 1164 |
+
See [`THEORY.md`](THEORY.md). Addition's carry is a **prefix scan**, computable
|
| 1165 |
+
in **O(log n)** depth by carry-lookahead, and constant-depth log-precision
|
| 1166 |
+
transformers are confined to uniform **TC⁰**, which contains addition. One-pass
|
| 1167 |
+
decoding is therefore **expressible** at depth ~log n — the obstacle is
|
| 1168 |
+
optimisation, not expressivity. Sequential decoding is best understood as
|
| 1169 |
+
**borrowing depth from the decoding loop**: a *K*-pass decode has effective
|
| 1170 |
+
depth ≈ L·K.
|
| 1171 |
+
|
| 1172 |
+
The account predicts minimum depth growing with **log n**, not n — cleanly
|
| 1173 |
+
distinguishable from a ripple-carry account (linear) or an impossibility account
|
| 1174 |
+
(no depth suffices). Measured, over {2,3,4,6,8,12} layers × 2 seeds:
|
| 1175 |
+
|
| 1176 |
+
| digits | 2 layers | 3 layers | minimum depth | ratio vs 4-digit |
|
| 1177 |
+
|---|---|---|---|---|
|
| 1178 |
+
| 4 | 100 | 100 | 2 | 1.00× |
|
| 1179 |
+
| 8 | 99 | 100 | 2 | 1.00× |
|
| 1180 |
+
| 12 | 48 | 100 | 3 | 1.50× |
|
| 1181 |
+
| **16** | **0** | **100** | **3** | **1.50×** |
|
| 1182 |
+
|
| 1183 |
+
The discriminating quantity is the ratio, not the absolute count, since a wide
|
| 1184 |
+
layer can fold several scan levels into one. At 16 digits:
|
| 1185 |
+
|
| 1186 |
+
| account | predicted ratio | consistent with 1.50×? |
|
| 1187 |
+
|---|---|---|
|
| 1188 |
+
| **prefix scan (ours)** | 2.00× | **yes** — measured growth is if anything slower |
|
| 1189 |
+
| ripple carry | 4.00× | **no** |
|
| 1190 |
+
| not expressible at any depth | — | **no**, 3 layers suffice |
|
| 1191 |
+
|
| 1192 |
+
**Ripple-carry is excluded.** Quadrupling the operand length from 4 to 16 digits
|
| 1193 |
+
costs **one extra layer**, not four times the depth.
|
| 1194 |
+
|
| 1195 |
+
The 16-digit transition is also a clean threshold rather than a gradual ramp —
|
| 1196 |
+
**0% at two layers, 100% at three** — which is the signature of a computation
|
| 1197 |
+
that is depth-limited rather than capacity-limited or data-limited. The minimum
|
| 1198 |
+
depth is now determined at every length tested.
|
| 1199 |
+
|
| 1200 |
+
## 5b. The compute-matched control
|
| 1201 |
+
|
| 1202 |
+
The method evaluates the model twice per training step, so at equal step counts
|
| 1203 |
+
it spends roughly twice the baseline's training FLOPs. Any gap is therefore
|
| 1204 |
+
confounded with compute until the baseline is given the larger budget. This
|
| 1205 |
+
control gives the baseline **300k steps against the method's 150k**, at the same
|
| 1206 |
+
depth.
|
| 1207 |
+
|
| 1208 |
+
| digits | arm | steps | @1 pass | seeds >90% |
|
| 1209 |
+
|---|---|---|---|---|
|
| 1210 |
+
| 16 | **MDLM baseline, 2× compute** | 300k | **50.0** | **1/2** |
|
| 1211 |
+
| 20 | MDLM baseline | 150k | 0.0 | 0/3 |
|
| 1212 |
+
| 20 | full method | 150k | **99.9** | 3/3 |
|
| 1213 |
+
| 24 | MDLM baseline | 150k | 0.0 | 0/3 |
|
| 1214 |
+
| 24 | full method | 150k | 33.6 | 1/3 |
|
| 1215 |
+
|
| 1216 |
+
**At 16 digits the control puts the method effect in doubt without settling it.**
|
| 1217 |
+
Given double the training the baseline reaches 100% on one seed and 0% on the
|
| 1218 |
+
other. So the baseline *can* solve 16-digit addition, but unreliably, and the
|
| 1219 |
+
25% → 75% gap from the smaller configuration is not a clean method effect.
|
| 1220 |
+
|
| 1221 |
+
The per-seed values are bimodal — 100% or 0%, nothing between, the same pattern
|
| 1222 |
+
as 24 digits (1/3 seeds). These tasks have a sharp learnability threshold and
|
| 1223 |
+
seeds land on one side or the other, which is why a mean over fewer than three
|
| 1224 |
+
seeds is close to meaningless here and why single-seed readings have misled
|
| 1225 |
+
repeatedly in this project.
|
| 1226 |
+
|
| 1227 |
+
The 20-digit row is what the claim now rests on, and the 300k baseline arm there
|
| 1228 |
+
is still running. If it also reaches ~100% on any seed, the addition result
|
| 1229 |
+
reduces to a statement about sample efficiency rather than about parallel
|
| 1230 |
+
decoding.
|
| 1231 |
+
|
| 1232 |
+
## 6. A confound that nearly produced the wrong paper
|
| 1233 |
+
|
| 1234 |
+
Earlier runs showed the method "failing" at 10+ digits. It was a **learning-rate
|
| 1235 |
+
artifact**:
|
| 1236 |
+
|
| 1237 |
+
| layers | lr | warmup | mean @1 pass | seeds >90% |
|
| 1238 |
+
|---|---|---|---|---|
|
| 1239 |
+
| 10 | 3e-4 | 500 | 47.3 | 1/4 |
|
| 1240 |
+
| 10 | **1e-4** | 500 | **100.0** | **4/4** |
|
| 1241 |
+
| 10 | 3e-4 | **4000** | **100.0** | **4/4** |
|
| 1242 |
+
|
| 1243 |
+
Deeper models need a lower learning rate and longer warmup. Without this check
|
| 1244 |
+
we would have reported that the method does not generalise, and a depth sweep
|
| 1245 |
+
run at the broken setting would have faked a clean "depth doesn't help" curve.
|
| 1246 |
+
|
| 1247 |
+
## 7. Audit
|
| 1248 |
+
|
| 1249 |
+
`src/audit.py` gates every claim and reports **0 failures**. Eight sections:
|
| 1250 |
+
arithmetic correctness; fixed-width answer regions; the prompt never masked; the
|
| 1251 |
+
metric ungameable by constant output; probe ground truth valid while degenerate
|
| 1252 |
+
output scores zero; inflection train/dev disjointness; ≥2 seeds behind every
|
| 1253 |
+
reported group; **decoder contracts** (no `[MASK]` survives, decoding always
|
| 1254 |
+
progresses, the entropy budget is monotone in `B`, context is never
|
| 1255 |
+
overwritten); and **text8 split integrity**.
|
| 1256 |
+
|
| 1257 |
+
It earns its place. The decoder section caught a live bug in this work:
|
| 1258 |
+
`torch.multinomial` was sampling over the *full* vocabulary including the
|
| 1259 |
+
absorbing state, so positions were "committed" as `[MASK]`, stayed masked, and
|
| 1260 |
+
decoding silently stalled — 15 of 32 positions unfilled at `K=1`, and the
|
| 1261 |
+
entropy budget non-monotone at `[35, 35, 37, 17, 3]` passes. The fix is the SUBS
|
| 1262 |
+
parameterisation: the denoiser places zero probability on `[MASK]`. Afterwards
|
| 1263 |
+
the budget is exactly monotone, `[32, 32, 32, 16, 1]`.
|
| 1264 |
+
|
| 1265 |
+
Two earlier projects in this line produced confident wrong numbers — an
|
| 1266 |
+
answer-length leak and the learning-rate artifact above — neither visible in the
|
| 1267 |
+
accuracy tables.
|
| 1268 |
+
|
| 1269 |
+
## 8. Layout
|
| 1270 |
+
|
| 1271 |
+
```
|
| 1272 |
+
src/
|
| 1273 |
+
data.py addition + dependency-controlled probes
|
| 1274 |
+
sigmorphon.py CoNLL-SIGMORPHON 2017 inflection loader
|
| 1275 |
+
text8.py text8 loader, standard 90M/5M/5M split
|
| 1276 |
+
model.py bidirectional transformer denoiser
|
| 1277 |
+
diffusion.py objectives (fix (i)) + decoders (fix (ii))
|
| 1278 |
+
train_add.py addition trainer
|
| 1279 |
+
train_sig.py inflection trainer
|
| 1280 |
+
train_text8.py text8 trainer + quality-vs-compute evaluation
|
| 1281 |
+
train_eval_lm.py from-scratch AR evaluator for generative perplexity
|
| 1282 |
+
train.py probe trainer (the unfixable-limit experiments)
|
| 1283 |
+
seq_check.py did the baseline fail to parallelise, or fail to learn?
|
| 1284 |
+
beat_baselines.py head-to-head vs inference-time methods
|
| 1285 |
+
audit.py the gate on every number above
|
| 1286 |
+
collect.py tables and figures
|
| 1287 |
+
slurm/ grids, plus unattended finalize and watchdog
|
| 1288 |
+
```
|
| 1289 |
+
|
| 1290 |
+
```bash
|
| 1291 |
+
python src/train_add.py --mode full --digits 12 --lr 1e-4 --warmup 4000 --out runs/demo
|
| 1292 |
+
python src/train_sig.py --lang turkish --mode full --out runs/tur
|
| 1293 |
+
python src/train_text8.py --mode full --evallm runs/evallm --out runs/t8
|
| 1294 |
+
python src/audit.py
|
| 1295 |
+
```
|
| 1296 |
+
|
| 1297 |
+
## 9. Honest limitations
|
| 1298 |
+
|
| 1299 |
+
- Addition and inflection are probes, not applications; the claim is about the
|
| 1300 |
+
model class, and text8 (§3) is the test of whether it survives real data.
|
| 1301 |
+
- On inflection the method **lowers** the 32-pass ceiling by 1.4 points while
|
| 1302 |
+
removing 59% of the one-pass penalty. That trade is inherent to
|
| 1303 |
+
reallocating the schedule and is reported, not hidden.
|
| 1304 |
+
- The 20- and 24-digit results are sample-efficiency claims, **not** parallelism
|
| 1305 |
+
claims: `seq_check.py` confirms the baseline scores 0.0% at full sequential
|
| 1306 |
+
depth too. Quoting them as parallelism gaps would misrepresent them.
|
| 1307 |
+
- Our own method loses accuracy when decoded at budgets far from the one it was
|
| 1308 |
+
trained for (99.8% at one pass, 85.7% at twenty). This is predicted by the
|
| 1309 |
+
account but it is a real limitation: the training `K` is a commitment to a
|
| 1310 |
+
decoding budget, not a free win.
|
| 1311 |
+
- The any-budget fix for that commitment **fails outright on addition** (0.0% at
|
| 1312 |
+
every budget, against 99.9% for fixed-`K`), because spreading the schedule
|
| 1313 |
+
dilutes `t = 1` training 4.5× on a task that sits at the learnability edge. It
|
| 1314 |
+
helps on graphs and is untested on text. Uniform-`K` is not a safe default.
|
| 1315 |
+
- The answer region reveals whether the sum carries out (its width is *d* or
|
| 1316 |
+
*d*+1). Both arms receive this equally, so comparisons are unaffected, but it
|
| 1317 |
+
is one bit of leakage.
|
| 1318 |
+
- The depth-scaling prediction in §5 is stated and currently being measured.
|
| 1319 |
+
- The non-unique limit is **not** solved here, and we argue it cannot be.
|