SPB Git

spb/wp31_uqo

Public
2.7 KB

# DECISIONS.md — design decisions (dated)

id date decision rationale
D1 2026-10-29 Repository lives at Recherche-UQO/ia/prisme-slm (new ia/ category of the UQO series); Python 3.12 venv via uv, PyTorch 2.15 (CPU/MPS), fp32 training. Series convention; bf16 autocast gave no speed-up on MPS (15.3k vs 15.0k tok/s on M3 Ultra).
D2 2026-10-29 A dedicated bank_norm RMSNorm precedes the bank/z projections. The pre-final-norm residual stream has growing norm; projecting it raw would couple editor dynamics to residual scale. Costs d parameters.
D3 2026-10-29 Workspace/controller parameter counts are NOT forced to the brief's figures. The brief's figures are reproduced exactly by a closed form (4dw+Mw+17w²+6wf_w+15.5w+4); the implemented design needs 7 fewer w×w projections per config (bank is read directly; readout uses raw slot values; controller shares one state MLP across the 24 actions so that scoring costs O(A·w²) not O(A·w·f_w)). Reconciliation reported in results/tables/param_counts.json.
D4 2026-10-29 STOP is absorbing in forced-action training too. Needed for incremental/full-prefix equivalence (test revealed the mismatch).
D5 2026-10-29 Cost proxy c(a) in the controller's Q is the analytic ops ratio of the action (not a learned ĉ); the ĉ head is kept as a diagnostic regressor. Per-action cost is deterministic given k(a) and T; learning it adds noise without information.
D6 2026-10-29 Synthetic splits are deduplicated by exact text across splits (train written first); eval items colliding with train are dropped and counted. Low-depth cells have few distinct items; 995 train dups, 256 dev_iid dups removed.
D7 2026-10-29 Phase 4 uses a character-level tokenizer and a 2.1M-parameter backbone trained from scratch on the synthetic train split. Self-contained learnability test independent of the web corpus/tokenizer.
D8 2026-10-29 103M pilot backbone: 196.6M tokens (12k steps × 32 × 512) of FineWeb-Edu, one seed; parameter-matched plain decoder baseline (ffn 2144, 102.16M) trained with the identical recipe on a second node. ~3.7 h per run at 14.8k tok/s on an M3 Ultra; seeds are varied at the editor/controller stage where the pilot's decisive comparison lives.
D9 2026-10-29 readout_scale: Δ = readout_scale · U(r(S_f) − r(S0)), with readout_scale a fixed constant set once at bootstrap to the measured rms of the backbone residual stream (5.6 for the tiny backbone). Scale mismatch blocked the U = 0 bootstrap (see FAILURES). The final RMSNorm makes logits invariant to the joint scale of h and Δ, so this is a reparametrisation of U's learning rate; identity properties are unchanged (tests pass).
Files · 33298d96b392989c74c1afd5b22872070667a40c
Menu

Theme