Experimental Protocol
Per-metric (width, depth, steps) scaling for masked-diffusion TTS. Every threshold, gate, pivot, statistic, and calendar rule here is binding. Theory lives in motivation.html; architecture, recipe, frozen sampler, and calendar numbers live in configs/grid.json.
configs/grid.json → protocol.html → task.md → motivation.html (theory only; its figures carry illustrative placeholder values by design). A number found in none of these must not be invented: use the Defaults section of task.md, else the most conservative option, and record the gap in LOG.md.§1Objects of study
For a bidirectional masked-diffusion codec-LM of width w, depth d (fixed N = 12·d·w² per budget), decoded with T refinement steps per codebook level (NFE = 8·T), we measure on zero-shot cloning:
| Metric | Symbol | Where | Direction | Role |
|---|---|---|---|---|
| Word error rate (Whisper-large-v3) | WER | eval_zs × every T | ↓ | Primary — compositional |
| Speaker similarity vs original prompt | SIM-o | eval_zs × every T | ↑ | Primary — representational |
| Degenerate-output rate (rule §6.4) | DegenRate | eval_zs × every T | ↓ | Descriptive reliability (no runaway metric exists: nothing autoregressive can fail to stop) |
| UTMOS22-strong | UTMOS | eval_zs × every T | ↑ | Tertiary — droppable |
Error transforms for fits: err_WER = WER, err_SIM = 1 − SIM-o, err_UT = (5 − UTMOS)/4. Primary metrics are computed over all items (degenerates included; excluding them biases shape comparisons). Conditional variants (non-degenerate subset) are robustness columns only.
§2Backbone, objective, sampler
Everything is frozen in grid.json → backbone: bidirectional pre-LN transformer over Mimi tokens (12.5 Hz, 8 codebooks), SoundStorm-style coarse-to-fine masked training, MaskGIT confidence decoding with exactly T steps per level, cosine unmasking schedule, Gumbel confidence noise annealed 1→0 within each level, temperature 1.0, no CFG (guidance is a deliberate exclusion — it is its own confound axis). Phoneme prefix and 3-second prompt tokens always visible; target length fixed up front from the Phase-0 sec_per_char estimate. No speaker encoder — the backbone shape is the only identity pathway.
The decisive property exploited by this design: T is an inference-time variable. One training grid yields the full (w, d, T) response surface — 15 configs × 5 T values = 75 surface points per metric — at zero additional training cost.
§3Data
Identical policy to grid.json → data: Emilia-EN 2,000 h stratified subset (seed 1234), ≥4,000 speakers, 200 held out; fallbacks MLS-English → LibriTTS-R (activates G2-alt). Splits: val 2,000 held-in clips; eval_zs 400 held-out-speaker items, 4–15 s. No long-form set.
§4Training
Per grid.json → training: 30,000 steps, effective batch 256 sequences, AdamW(0.9, 0.95), wd 0.1, clip 1.0, cosine→10%, 600 warmup, bf16. Val loss = masked CE at fixed mask ratios {0.25, 0.5, 0.75} with a fixed val-masking RNG so values are comparable across runs. Nothing but (w, d, heads, seed) differs between runs; nothing is tuned per-shape or per-T after Phase 1.
§5LR transfer (μP)
grid.json → training.mup.base_lr_sweep, 3,000-step proxies) at (d=12, w=256) and (d=12, w=640). Pass iff argmin LRs within a factor of 2. Fail → disable μP multipliers, per-width 5-point sweeps for every distinct width in the active grid (≈15 GPU-h), log.§6Evaluation
6.1 The T sweep
Every completed (config, seed) synthesizes the full eval_zs at every T ∈ {1, 2, 4, 8, 16} steps per level, with the frozen sampler of §2 and per-item generation RNG fixed across T (same noise stream, so T is the only difference). All metrics computed at every T.
6.2 Metric models
Exactly grid.json → eval_models; fallbacks only as listed, applied uniformly, logged.
6.3 Sampler-integrity check
Before scoring: for 20 items, outputs at T=1 vs T=16 must differ on >20% of token cells under matched RNG. Identical outputs = sampler bug (T not wired through) — fix before any metric is computed. This check separates "steps genuinely don't help" (a finding) from "steps aren't happening" (a bug).
6.4 Degenerate-output rule (frozen)
An item is degenerate iff its normalized ASR transcript is empty, OR has < 30% of the target character count, OR contains any 4-gram repeated ≥ 6 times consecutively. DegenRate is reported per (config, T); primary fits never exclude degenerates.
6.5 Latency measurement
Measure c_layer(width) (ms per layer per step, batch 1) once per distinct width on the eval GPU. The design-rule table in results.html uses latency = 8·T·d·c_layer(w) with measured values only (grid.json → latency_model).
§7Statistical analysis plan (pre-registered)
7.1 Part A — anisotropy at fixed T = 16 (links to the ASPECT program)
Fit on the 15 config means at T=16 (weights 1/SE² over seeds; pooled SE where a config has one seed). Weighted NLS, 32 multi-starts, bounds E∈[0,1], A,B,C∈[0,10], exponents ∈(0,3]. Shape matters for metric m ⇔ ΔAICc(Mfull−MN) ≤ −4. Width-dominance ρm = αm/βm.
7.2 Part B — the step axis (primary for this paper)
Fit on all 75 surface points (config × T means). Correlation structure: the 5 T-points of one run share a trained model; all bootstraps therefore resample at the run level (seeds within configs), never at the surface-point level, then recompute every T point. 2,000 replicates, percentile CIs, RNG seed 7331.
7.3 Decision statistics & hypotheses
- H-D1 (anisotropy, secondary): Δρ = ρSIM − ρWER > 0 at T=16; 95% CI excludes 0 and Mfull beats MN (ΔAICc ≤ −4) for ≥1 of {WER, SIM}.
- H-D2 (metric-selective test-time scaling, PRIMARY): Δτ = τWER − τSIM > 0 under Msep; 95% CI excludes 0.
- H-D3 (depth–step exchange rate, PRIMARY): under Msub for WER: κWER > 0 with CI excluding 0, AICc(Msub) ≤ AICc(Msep) + 4, and κWER > κSIM. κWER would be the quotable number: how many step-doublings buy one depth-doubling of intelligibility. Outcome (v1.0): H-D3 not supported — ΔAICc(Msub − Msep) = +69.3 (WER) and +71.3 (SIM-o) against a ≤ +4 bar, with κ pinned at its +3 bound in all 2,000 bootstrap replicates, so no κ is quoted anywhere.
- H-D4 (extrapolation): Mfull fit on the two smaller budgets at T=16 predicts the largest budget with MAPE ≤ 15% and ≤ MN's MAPE.
- Descriptive (no hypothesis): saturation step T*m = smallest T reaching 95% of that metric's own total T=1→Tmax gain (affine-invariant). Amendment (v1.1): the earlier raw-scale definition (95% of the T=16 value) is not invariant under err → a+b·err — the 5% band is 0.67% of WER's range but 11.96% of SIM's, a 17.9× difference in strictness — so a raw-scale T* must never be compared across metrics; on the invariant definition T* = 16 for both WER and SIM. T=16 is the grid boundary, not an asymptote: on the extended grid T*WER = 32. DegenRate(T) curves.
7.4 Outcome classes (exactly one declared in DECISION.md)
| Class | Condition | 4-page framing |
|---|---|---|
| S1 | H-D2 supported (Δτ > 0, CI excludes 0) | "Test-time scaling is metric-selective: steps rent depth, not width." [The "steps rent depth" gloss is under review — see the open Δτ-wording issue; the outcome-class declaration itself is unaffected.] Headline number (v1.0): Δτ = +0.1102, CI [0.0921, 0.1312]. H-D3's κ was not supported, so no κ is quoted. |
| S2 | CI excludes 0 with Δτ < 0 | Reverse selectivity — equally reportable; mechanism section revised. |
| F1 | CI includes 0, power gate G4 passed | "Refinement lifts all metrics equally" — a clean negative for metric-targeted test-time scaling in masked TTS; still a workshop paper. |
| F2 | G4 failed | Noise-floor measurement + power analysis + released 30–45-run suite. |
§8Gates, pivots, stop-losses
G2-alt (LibriTTS-R fallback): SIM-o threshold ≥ 0.22 and ≥ baseline + 0.10.
Step-flatness flag (not a failure): if WER(C3, T=1) − WER(C3, T=16) < 3 points absolute while §6.3 integrity passes, set flag
T-FLAT in state.json and proceed — flat step curves are a genuine finding routed to F1, not a bug.
Failure routing: only A3 fails → Pivot P2. C3 fails → one retry at 0.5× LR → still fails → Pivot P1-D. Both exhausted + still failing → STOP-PILOT, classify F2, report on pilots.
grid.json → compute.priority_cut_list in order, one cut at a time, logged. Cap reached → freeze training, complete Phases 4–7 on finished runs.grid.json → calendar. At every milestone: if the projection for the next milestone misses its date, apply the calendar cut list in order until the projection fits, logging each cut. Writing floor: Phase 7 (paper) begins no later than M6 − 1 day regardless of experiment state — a submitted 4-page abstract with partial results and honest limitations strictly dominates an unsubmitted complete grid. The hard wall overrides everything except scientific integrity: numbers in the paper must come from fits.json/runs.csv as they stand.§9Compute & calendar budget
| Item | GPU-h (B200-eq) | Calendar |
|---|---|---|
| Phase 0 env + data + harness | 8 | → M1 (Aug 12) |
| Phase 1 μP sweeps | 20 | |
| Phase 2 pilots (3 runs + T∈{1,16} evals) | 25 | → M2 (Aug 14) |
| Phase 3 grid, mandatory 2 seeds (30 runs) | 120–180 | → M3 (Aug 21) |
| Phase 3+ stretch seed 2 (15 runs, only if G5+G6 allow) | 60–90 | within M3 |
| Phase 4 synthesis ×5 T + scoring (≈90k utterances at full stretch) | 60–90 | → M4 (Aug 24) |
| Phases 5–6 fits + figures + results.html | 5 | → M5 (Aug 25) |
| Phase 7 paper draft + polish | — | → M6 (Aug 27); wall Aug 29 AoE |
| Projected / hard cap | ≈240–420 / 500 |
§10Deliverables (definition of done)
results/artifacts/runs.csv— one row per (config, seed, T): dims, actual N, NFE, measured c_layer latency, val loss, all metrics ± item-level SE, DegenRate, wall-clock, GPU-h.results/artifacts/fits.json— Part-A and Part-B fits: all model forms × metrics, parameters, CIs, AICc, bootstrap Δρ/Δτ/κ distributions.results/artifacts/figures/—aniso_contours_T16.svg,step_curves.svg(err vs T per metric, normalized; no per-metric raw-scale T* markers — annotate only the affine-invariant T*, which is 16 for both metrics),substitution_plane.svg(iso-WER in (log T, log d), slope −κ — descriptive only: Msub/H-D3 was not supported, so the plotted slope is not a measured exchange rate, and the (log T, log d) ordering it displays is a T ≤ 16 boundary artifact),extrapolation.svg. SVG + PDF.results.html— house style, real numbers only, populated design-rule table (latency budget → optimal (d, T, w) split per metric), gate/cut history.samples/— 4 fixed items × {widest, squarest, deepest} of each active budget × T ∈ {1, 16}. Later annotation: built locally bysrc/samples.pyintobuild/samples/; the clips are not published.aspect-d-paper/main.tex— populated 4-page DiffuLM extended abstract peraspect-d-paper/OUTLINE.md, compiled tomain.pdfif a LaTeX toolchain is available (otherwise tex complete + figure files staged).DECISION.md— declared outcome class, Δτ and κ CIs, Δρ, gate/cut/calendar history, and submission-readiness statement.LOG.md— append-only decision trail: every gate with measured values, every pivot/cut, every fallback, every deviation.
File paths above follow the current repository layout: in v1.0 the measured outputs sat at the repository root; they now live under results/, and the research logs under archive/research-log/.
ASPECT-D protocol v1.0 · frozen before any training run · amendments require a version bump and a LOG.md entry demonstrating the change cannot bias H-D2/H-D3.