File size: 2,924 Bytes
791e7c1 e77f2db 2e25538 791e7c1 2e25538 e77f2db 791e7c1 e77f2db 2e25538 791e7c1 e77f2db 791e7c1 e77f2db 791e7c1 e77f2db 791e7c1 e77f2db 791e7c1 e77f2db 791e7c1 e77f2db 791e7c1 2e25538 791e7c1 e77f2db 2e25538 791e7c1 e77f2db 791e7c1 e77f2db 2e25538 e77f2db | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | ---
license: apache-2.0
tags:
- masked-diffusion
- discrete-diffusion
- llada
- educational
- experiment
language:
- en
library_name: pytorch
---
# KB-Diffusion Model B — word-level masked diffusion
Masked diffusion language models trained on English words. The
"generalization companion" experiment from
[KB-Diffusion](https://github.com/PastelRuntime/KB-Diffusion-Optimized)
(an educational masked-diffusion project by Bijan Bowen / OminousIndustries):
swap the repo's four keyboard layouts for thousands of words and see if the
same recipe still works. It does — and iterating on decoding strategy turned
out to matter as much as architecture, with sequence length flipping which
sampler wins.
Three checkpoints, same LLaDA-style recipe (t ~ U(0.05, 1) masking, 1/t-weighted
CE, bidirectional transformer, no causal mask):
| | v2 (N=5) | v3 (N=5) | N=10 |
|---|---|---|---|
| Params | 4.75M (6 layers) | 6.33M (8 layers) | 6.34M (8 layers) |
| Steps | 8,000 | 12,000 + cosine LR | 12,000 + cosine LR |
| Best valid English | 95.5% (T=0.5) | **98.4%** (T=0.5) | 74.2% (revision + T=0.5) |
| Unique words / 512 | 409 | **428** | 200 |
| Unigram TV vs exact Bayes | 0.0374 | **0.0135** | 0.019 |
## The headline findings
**1. Temperature is the free win** (v2, frozen weights): ancestral sampling
at T=1.0 gives 68.8% valid English; T=0.5 gives 95.5%. Same weights, same
5 forward passes, +27 points.
**2. Decoding strategy > extra parameters**: v2 read well (95.5%) beats v3
read poorly (82.6% at T=1.0).
**3. Sequence length flips the sampler winner.** At N=5, revision-capable
sampling (un-commit weak letters, re-mask, retry) *loses* to plain
low-temperature sampling (77.1% vs 95.5%). At N=10 it *wins* (74.2% vs
63.3%) — early mistakes poison enough downstream positions that
un-committing them pays for its 4x compute. The "diffusion can revise"
capability has a measured regime where it wins.
**4. The parallel/iterative gap explodes with length**: one-shot sampling
falls 2.0% (N=5) → 0.0% of 512 samples (N=10). This is why real diffusion
LMs commit few tokens at a time.
Full methodology, negative results, and per-sampler tables: `docs/model-b.md`
in the GitHub repo.
## Usage
```python
import torch
from model_b_word_diffusion_v3 import Net, CH, MASK, N # from the GitHub repo
model = Net(layers=8) # v3; use model_b_word_diffusion_n10.py for N=10
sd = torch.load("modelb_v3.pt", map_location="cpu", weights_only=True)
model.load_state_dict(sd)
model.eval()
# ancestral confidence-commit sampler, temperature 0.5 — see repo scripts
```
## Intended use & limitations
Educational artifact, not a production model: 27-token vocab, 5/10-position
sequences. It exists to make the masked-diffusion mechanism (parallel
prediction, confidence commits, re-masking, revision, posterior sharpening)
measurable — and to map how decoding strategy and sequence length interact
on frozen weights.
|