Two ways home — same model, same starting noise
Each dot is a sample starting as pure Gaussian noise; the hollow circles are the 12 modes the "trained" model knows (its data lives on this ring). Both panels use the identical denoiser and identical starting noise. Left: DDPM — every step denoises a little, then injects fresh noise back, so the traced paths stagger like a drunk. Right: DDIM — zero re-noising, so the same three highlighted particles glide in near-straight lines.
The "model" here is the exact analytic denoiser for a 12-mode toy distribution — a perfectly trained network, in miniature. Both use the DDIM-family update rule; DDPM takes η=1 with the original paper's σt²=βt noise, DDIM takes η=0.
The step slider — who survives on a budget?
Here is where the two diverge hard. Drag the step budget from 200 down to 3 and watch the final clouds. DDPM's noise-injection is calibrated for tiny steps — starve it and the injected noise never gets cleaned up, leaving fuzz everywhere. DDIM degrades gracefully: fewer steps just means straighter, longer jumps along the same path.
"miss" = mean distance from each of the 120 samples to its nearest mode, computed live. Lower is sharper. Try 200, then 15, then 4.
The reproducibility test — run the same seed twice
Fix the starting noise. Run each sampler twice. DDIM is a pure function of the starting noise: run A (dots) and run B (rings) land pixel-identical, every time. DDPM rolls fresh dice at every step: same start, different endings. Click the button repeatedly — the DDIM distance never leaves zero.
Distance shown is the mean gap between run A and run B endpoints across 40 samples — computed, not asserted.
The 10× race — 20 steps against 200
The claim that made DDIM famous: 10× fewer steps, same quality. Race them live — DDPM gets its full 200 steps, DDIM gets 20. Every step costs one full network evaluation (the expensive part), so watch the NFE counters: DDIM crosses the finish line while DDPM is still 90% of the way from home. Then press the second button to see what happens if you just starve DDPM to 20 instead.
In real pipelines each step is a full U-Net/DiT forward pass — hundreds of ms of GPU. Step count ≈ latency ≈ cost.
The fine print — waxy at 4 steps, samey forever
DDIM's two honest failure modes. Left — waxiness: push its budget to 3–6 steps and giant jumps land on the average of several modes: samples get pulled inside the ring, off every real mode — the particle version of the oversmoothed, plastic-skin look of too-few-step generations. Right — sameness: launch 16 runs from ONE starting point. DDIM: sixteen identical outcomes, one mode. DDPM: the same start scatters across many modes.
"pull toward center" measures how far inside the ring (radius 1.0) the samples collapse; "distinct modes" counts unique nearest modes across the 16 runs.