Passes N-clean

Sanskrit DoneKeep

passes_n_clean_d60m

d60m (68.9M parameters) on plus_all v2 subset + 39M fresh clean tokens, trained on RTX 3060 12GB (Home GPU). Started 10 Oct 2026, ended 10 Oct 2026.

Hypothesis

Reference for the OCR decision: 39M tokens of fresh clean text added to the same piece (about 20% of what the model reads) beat a fourth pass over it at the same compute.

What we learned

Yes: ex-Gita 0.6544, 1.03% better than a fourth pass (clean_v1 -0.90%), past the 0.52% noise bar, every held-out set better and a smaller train/val gap. Fresh text is worth more than another pass; the bar the OCR text must meet.

Scores

Bits per byte, lower is better; change against the parent run, Passes 4.

ex-Gītā (headline)
0.6544
bits per byte
−1.0%
ex-Gītā, clean_v1
0.677
bits per byte
−0.9%
Pooled, all five sets
0.6466
bits per byte
−1.0%
Validation split
0.6478
bits per byte
−0.7%
Bits per byte on each test set
Test setPasses N-cleanPasses 4 (parent)Change
DCS gold (classical)0.66550.6698−0.6%
Bhagavad-gītā (memorisation)0.44250.4451−0.6%
Out of domain0.65710.6655−1.3%
Prose0.62490.628−0.5%
Vedic (Ṛgveda)0.88620.8921−0.7%

Curves

Training loss

Cross-entropy per token, by step. The first few percent of the run, far higher, run off the top; hover or the table has every value.

Held-out bits per byte

The validation split, evaluated during training, by step. Lower is better.

Throughput

Tokens per second, by step.

Model

Preset
d60m
Parameters
68,924,160
Outside embeddings
56,636,160
Layers · heads · width
8 · 12 · 768
Tokenizer
SLP1 unigram 8k

Muon + AdamW, rope, qk_norm, relu^2, untied head, weight decay (F10 recipe)

Data

Slice
plus_all v2 subset + 39M fresh clean tokens
Words
—
Training tokens
194,578,466
Passes
3.19 passes
Tokens seen
621,084,672

Compute

GPU
RTX 3060 12GB
Where
Home GPU
Steps
12,636 / 12,636
GPU hours
3.85
Cost
—
Spot restarts
—

Lineage

homed60m