| Reproduction & verification · repro-verify · 10 claims |
| The Qwen3-0.6B reproduction is verified bit-exact against HF weights (max |Δlogits| = 0.0, argmax agreement). | "max_abs_error": 0.0, "relative_error": 0.0, "argmax_match": true, "passed": true (dtype float32, tolerance 0.001, prompt "The capital of France is", hf_next_token_id 12095 = our_next_token_id 12095, token " Paris") | Qwen3-0.6B/builds/2026-06-08_reproduce-faithful_qwen3-0.6b/results/verify.json | found |
| The reproduction's parameter count is 596,049,920. | 596,049,920 (architecture_plan.md forward-calc table row '| **Total** | **596,049,920** |', line 60; test_model.py line 79 'expected = 596_049_920' asserted within 1%) | Qwen3-0.6B/builds/2026-06-08_reproduce-faithful_qwen3-0.6b/architecture_plan.md | found |
| The faithful base was trained on ~1.19B FineWeb-Edu tokens at sequence length 4096. | token_budget=1,189,478,400; args seq_len: 4096, micro_batch: 4, grad_accum: 4, steps: 18150, tok/step=65,536, peak_lr 0.0024, dtype bfloat16, seed 0; data line: 'Streaming FineWeb-Edu sample-10BT...' then 'streamed 1,191,478,748 train + 300,012 val tokens' | Qwen3-0.6B/builds/2026-06-08_reproduce-faithful_qwen3-0.6b/results/qwen3_baseline2tpp_train.log | found |
| The faithful base lands within 2.14x of the original Qwen3-0.6B PPL using ~275,000x less data. | 2.14x half IS file-backed: 28.65 (qwen3_baseline2tpp_after.txt line 2 'val PPL: 185810.49 -> 28.65') / 13.400 (original_vs_repro.txt line 2 'ORIGINAL Qwen3-0.6B-Base (36T tok) val PPL = 13.400') = 2.138; build README line 165 '| Gap vs original (13.40) | **2.14×** |'. BUT ~275,000x belongs to a DIFFERENT run: original_vs_repro.txt line 7 pairs '~275,000x less data (36T vs 131M)' with the 131M-token Phase A best repro (lr24 46.310, gap 3.5x), and the build README line 189 says of the 2.14x run: 'The token budget is ~30,000× smaller than the real run; a 2.14× PPL gap at 1.19B tokens is the expected, honest outcome.' | Qwen3-0.6B/builds/2026-06-08_reproduce-faithful_qwen3-0.6b/results/original_vs_repro.txt | contradicted |
| Baseline training throughput is ~7,300 tok/s on the GB10. | 'Current Qwen3 PyTorch build: **~7,300 tok/s** with `torch.compile`, micro_batch=4 @ seq 4096 (measured).' (jax_vs_pytorch_tradeoffs.md line 43). Underlying artifacts: throughput_probe.json compiled pass tokens_per_second = 7167.4 (uncompiled 3787.5, speedup 1.89, peak_mem_gb 52.4); Phase B train log sustained 7,444-7,482 tok/s (final line: 'step 18150/18150 ... tok/s 7,444'); Phase A lr30 log ~7,272-7,316 tok/s; build README line 167 quotes '~7,480 tok/s' | jax_vs_pytorch_tradeoffs.md | found |
| Faithful-baseline eval numbers with suite_version: final FineWeb-Edu val PPL 28.65; eval-harness suite PPLs wikitext2 37.01 and code 438.67 under text-lm-v2. | In-loop final val PPL: 'val PPL: 185810.49 -> 28.65' (qwen3_baseline2tpp_after.txt line 2 — NO suite_version; train-loop eval on FineWeb-Edu val, 204,800 tok). Suite-stamped numbers: suite_version 'text-lm-v2', date 2026-06-16 22:26:53, target_ckpt checkpoint_qwen3_baseline2tpp.pt — ppl.wikitext2_val.target = 37.010055463333096 (corpus wikitext2_raw_v1_val, n_tokens 204600); ppl.code_py.target = 438.67295146042875 (corpus codeparrot_clean_valid, n_tokens 204600); noise_floor.wikitext2_val.floor_abs = 1.3039039020038814 (floor_pct 3.7305), noise_floor.code_py.floor_abs = 280.56392586197546 (floor_pct 68.2455) | Qwen3-0.6B/experiments/2026-06-16_qwen3-0.6b_eval-faithful/eval/suite_results.json | found |
| The SmolLM2 reproduction has exactly 134,515,008 parameters. | 'params: 134,515,008 (target 134,515,008)' + 'tied: True' (param_count.log lines 1-2); summary.json: "Param count (unique)": "134,515,008 (target 134,515,008 ✓)" | SmolLM2-134(base)/results/param_count.log | found |
| The SmolLM2 reproduction is verified bit-exact vs HuggingFaceTB/SmolLM2-135M (max |Δlogits| = 0.0). | 'max |Δlogits| = 0.000e+00' / 'relative = 0.000e+00' / HF next token ' the' = ours / '✓ Architecture parity verified.' (parity.log lines 6-11); comparison_with_hf.md: final-logits parity CPU max|Δ| = 0.00e+00, per-layer (30 layers) CPU max|Δ| = 0.00e+00 everywhere, greedy generation 5/5 exact; summary.json "max |Δlogits| vs HF": "0.000e+00" | SmolLM2-134(base)/results/parity.log | found |
| (Adjacent) Original Qwen3-0.6B-Base scores val PPL 13.400 on the identical 300k-token FineWeb-Edu val slice; best 131M-token Phase A repro (lr24) = 46.310, a 3.5x gap. | 'ORIGINAL Qwen3-0.6B-Base (36T tok) val PPL = 13.400 (204,800 tok, 21s)'; 'REPRO lr24 (131M tok, from scratch) val PPL = 46.310 gap x 3.5' (also lr17 46.892 x3.5, lr30 49.276 x3.7) | Qwen3-0.6B/builds/2026-06-08_reproduce-faithful_qwen3-0.6b/results/original_vs_repro.txt | found |
| (Adjacent) Mid-training PPL descent and run stats of the faithful 2 TPP run. | eval @ 18000: val PPL=28.66; final AFTER val PPL=28.65 (BEFORE 185810.49); 'Training complete in 2663.1 min.'; mem 52.4GB flat throughout; build README line 167 gives the full descent 60.10 (@2k) -> ... -> 28.65 (final) | Qwen3-0.6B/builds/2026-06-08_reproduce-faithful_qwen3-0.6b/results/qwen3_baseline2tpp_train.log | found |
| IMU-1 de-confound (pre-training) · imu1-deconfound · 9 claims |
| The modernized IMU-1 bundle beats the faithful baseline by 17.9% at matched compute (final val PPL 23.52 vs 28.65, both 18,150 steps / ~1.19B tokens / 2 tokens-per-param on FineWeb-Edu with an identical held-out val set). | faithful 28.65 (final) · modernized (IMU-1 NorMuon) 23.52 (final); 17.9% stated as 'IMU-1 bundle beat the faithful baseline by 17.9%' and arithmetically (28.65-23.52)/28.65 = 17.91% | Qwen3-0.6B/builds/comparison/README.md | found |
| The exploratory partial-RoPE 0.25 build lost to the faithful baseline (final val PPL 29.54 vs 28.65). | 29.54 ('DONE final val PPL=29.54'); README table: 'exploratory partial-RoPE 0.25 | 29.54 | final'; ranking modernized < faithful < partial-RoPE 0.25 < partial-RoPE 0.10 (50.71, died incomplete at step 5450/18150) | Qwen3-0.6B/builds/2026-06-08_reproduce-exploratory_qwen3-0.6b/results/qwen3_prope25_2tpp_train.log | found |
| NorMuon-vs-AdamW single-variable iso-FLOP ablation (42M tokens, 3 seeds/arm): NorMuon on the 2D hidden weights improves BPB by +0.4743 on wikitext-2 (95% CI [+0.4435, +0.5052]) and +0.5016 on code (95% CI [+0.4560, +0.5471]), significant; verdict WIN (scoped as an early-training optimization-speed signal, not a scale claim). | wikitext2_val: adamw_mean 2.1098171365956357 vs normuon_mean 1.6354916346714725, improvement_bpb 0.47432550192416323, ci95 [0.4434844613250229, 0.5051665425233036], significant true, df 3.8610499345338067, n [3,3]; code_py: adamw_mean 3.3846985755955523 vs normuon_mean 2.8831399238053073, improvement_bpb 0.5015586517902451, ci95 [0.4559911731303807, 0.5471261304501094], significant true, df 3.988970056422409, n [3,3]; verdict "win" | Qwen3-0.6B/experiments/2026-06-16_qwen3_normuon-vs-adamw/results/verdict.json | found |
| The matched-config AdamW LR sweep shows AdamW is flat within seed noise across 1.7e-3–3.5e-3 and no AdamW LR comes within ~10x of closing the NorMuon gap (full LR spread ~0.047 bpb vs the +0.474 gap), so the result is 'NorMuon vs AdamW-anywhere-in-a-reasonable-LR-range', not an undertuned baseline. | lr_sweep_bpb.json: 1.7e-3 wikitext_bpb 2.124645242917025 / code_bpb 3.36670692543473; 3.5e-3 wikitext_bpb 2.1223452336564987 / code_bpb 3.484039905578447; 4.8e-3 wikitext_bpb 2.156916637970004 / code_bpb 3.457733614887074; 2.4e-3 point = the 3-seed cohort mean 2.1098 (verdict.json). RESULT.md §4.1: '1.7e-3 → 2.1246, 2.4e-3 → 2.1098, 3.5e-3 → 2.1223, 4.8e-3 → 2.1569 ... full AdamW LR spread is ~0.047 bpb, ~10× smaller than NorMuon's +0.474 advantage' | Qwen3-0.6B/experiments/2026-06-16_qwen3_normuon-vs-adamw/results/lr_sweep_bpb.json | found |
| De-confound Phase 1 (axes wsd/zloss/arch vs the faithful AdamW baseline, 3 seeds/arm, 2000-step proxy): only 'arch' is a significant driver — wikitext BPB +0.1179 CI[+0.1005, +0.1354] and code +0.3049 CI[+0.2588, +0.3511] — while wsd and zloss are not significant on either corpus; overall_verdict 'attributed' with drivers=[arch]. | arch: wikitext2_val improvement_bpb 0.11792615800601025 ci95 [0.10045055390862463, 0.13540176210339586] significant=true; code_py improvement_bpb 0.3049240450045283 ci95 [0.2587722809820044, 0.3510758090270522] significant=true. wsd: wikitext +0.02445100663943567 ci95 [-0.017262911764197773, +0.06616492504306912] significant=false; code +0.03613565282082609 ci95 [-0.06492886457337839, +0.13720017021503056] significant=false. zloss: wikitext -0.003374986704193006 ci95 [-0.017536542115922118, +0.010786568707536106] significant=false; code -0.0007094693010314401 ci95 [-0.052240000161460506, +0.050821061559397626] significant=false. drivers ["arch"]; overall_verdict "attributed" | Qwen3-0.6B/experiments/2026-06-18_qwen3-0.6b_imu1-deconfound-p1/verdict.json | found |
| Phase 2 arch sub-drill: each of the three IMU-1 arch flags — value-residual (vr), layernorm-scaling (ln), head-gating (hg) — is individually significant on BPB on BOTH corpora vs the reused Phase-1 baseline; drivers=[vr,ln,hg], overall_verdict 'attributed'. | vr: wikitext improvement_bpb 0.035502910568182555 ci95 [0.011595720478729928, 0.05941010065763518] sig=true; code 0.10715460338422833 ci95 [0.0492464984813345, 0.16506270828712216] sig=true. ln: wikitext 0.03367590105393914 ci95 [0.017509206440970627, 0.04984259566690765] sig=true; code 0.06055088208493942 ci95 [0.01983113346350228, 0.10127063070637655] sig=true. hg: wikitext 0.025562479271331817 ci95 [0.01251982603769344, 0.03860513250497019] sig=true; code 0.04215309989332772 ci95 [0.00805499069515924, 0.07625120909149619] sig=true. drivers ["vr","ln","hg"]; overall_verdict "attributed" | Qwen3-0.6B/experiments/2026-06-21_qwen3-0.6b_arch-subdrill-p2/verdict.json | found |
| All cross-run comparable numbers in this cluster carry the eval-harness suite_version stamp 'text-lm-v2' and n=3 seeds per arm. | suite_version = "text-lm-v2" stamped in: normuon results/verdict.json (+ n:[3,3] per corpus) and results/cohort_bpb.json; p1 verdict.json + cohort_bpb.json; p2 verdict.json + cohort_bpb.json; and the three build-checkpoint suite_results.json files (eval-faithful/-modernized/-prope25). Seeds: 3 per arm everywhere (3-element seed BPB arrays; c5_evidence arm_plan.seeds=[0,1,2]; verdict.json n=[3,3]) | Qwen3-0.6B/experiments/2026-06-18_qwen3-0.6b_imu1-deconfound-p1/verdict.json | found |
| Independent eval-harness (text-lm-v2) scoring of the three build checkpoints confirms the ordering on wikitext-2: modernized 27.80 < faithful 37.01 < partial-RoPE-0.25 38.08 PPL (and code_py 129.42 < 438.67 < 447.30). | faithful: ppl.wikitext2_val.target 37.010055463333096, ppl.code_py.target 438.67295146042875 (noise floor wikitext floor_abs 1.3039039020038814); modernized (checkpoint_imu1_2tpp_step18000.pt): 27.79954726958199 / 129.422726138489 (wikitext floor_abs 1.0663419728457697); prope25: 38.079604272040854 / 447.30146774857917 (wikitext floor_abs 1.7040052364117315); all n_tokens 204600, suite_version text-lm-v2, dated 2026-06-16 | Qwen3-0.6B/experiments/2026-06-16_qwen3-0.6b_eval-modernized/eval/suite_results.json | found |
| RESULT.md's stated link between the two studies: the bundled IMU-1 result (−17.9% PPL at 1.19B tokens) could not attribute the gain, and the 42M-token single-variable run isolates the optimizer axis; the faithful 1.19B baseline's wikitext BPB anchor is 1.2256. | 'The project's IMU-1 matched-compute result (NorMuon bundled with ~5 other changes ... at 1.19B tokens, −17.9% PPL) had to mark optimizer attribution as an explicit limitation' (§3); 'faithful baseline Qwen3-0.6B/builds/2026-06-08_reproduce-faithful_qwen3-0.6b/ (wikitext BPB 1.2256 @ 1.19B tok)' (§6); '$the same NorMuon inside the full IMU-1 bundle at 1.19B gave only −17.9% PPL' (§4.3) | Qwen3-0.6B/experiments/2026-06-16_qwen3_normuon-vs-adamw/RESULT.md | found |
| Data composition · data-mix · 8 claims |
| dclm-edu vs FineWeb-Edu head-to-head: on code_py, dclm-edu improves BPB by +0.7034 (95% CI [+0.6639, +0.7430]), significant, n=3 seeds paired vs reused FineWeb-Edu controls. | improvement_bpb = 0.7034377813053776; ci95 = [0.6639233630446848, 0.7429521995660704]; significant = true; baseline_mean = 2.638538404285876; treatment_mean = 1.9351006229804983; 3 seeds per arm | Qwen3-0.6B/experiments/2026-06-24_qwen3-0.6b_data-dclm-vs-fineweb/verdict.json | found |
| dclm-edu vs FineWeb-Edu head-to-head: on wikitext2_val (English), dclm-edu is directionally worse by -0.0097 BPB (95% CI [-0.0255, +0.0061]), NOT significant. | improvement_bpb = -0.0097280316070818; ci95 = [-0.025549693563240664, 0.006093630349077065]; significant = false; baseline_mean = 1.515714765474178; treatment_mean = 1.5254427970812598 | Qwen3-0.6B/experiments/2026-06-24_qwen3-0.6b_data-dclm-vs-fineweb/verdict.json | found |
| The 50/50 mix captures ~84% of the pure-dclm code win: mix code improvement 0.5904307914737172 / dclm code improvement 0.7034377813053776 = 0.8394 (83.94%). | 0.5904307914737172 / 0.7034377813053776 = 0.8393504118844001 -> 83.94% ~ '~84%' | Qwen3-0.6B/experiments/2026-06-26_qwen3-0.6b_data-mix-composition/verdict.json | found |
| 50/50 mix arm on code_py: BPB improvement +0.5904, 95% CI [+0.5532, +0.6277], significant, n=3. | improvement_bpb = 0.5904307914737172; ci95 = [0.5531974784151051, 0.6276641045323293]; significant = true; treatment_bpb has 3 seed entries [2.0498830273156794, 2.050014838147228, 2.0444249729735695]; treatment_mean = 2.0481076128121587 | Qwen3-0.6B/experiments/2026-06-26_qwen3-0.6b_data-mix-composition/verdict.json | found |
| 50/50 mix arm on wikitext2_val: BPB improvement +0.0161, 95% CI [-0.0005, +0.0327], NOT significant (English is preserved, no regression). | improvement_bpb = 0.016087033990631383; ci95 = [-0.0005010071851609399, 0.032675075166423706]; significant = false; treatment_mean = 1.4996277314835467 vs baseline_mean = 1.515714765474178 | Qwen3-0.6B/experiments/2026-06-26_qwen3-0.6b_data-mix-composition/verdict.json | found |
| The first mix run was invalid due to a token-level shuffle that destroyed sequence structure; the fix makes the mix sequence-preserving (coherent halves concatenated, DataLoader shuffles at the packed-sequence level). | Fix commit a576baa94afde60b7212c78778a0bb18d2968bbe ('Fix mix-arm data bug: token-level shuffle destroyed sequence structure (caught by implausible verdict)') removes the line 'np.random.default_rng(args.seed).shuffle(tr) # interleave the two sources' and adds the comment: 'concatenate the two COHERENT halves; the mix happens at the SEQUENCE level — PackedTextDataset packs seq_len windows (each from one source, coherent) and DataLoader(shuffle=True) randomizes their order. Do NOT shuffle tokens here: that destroys all sequence structure → token soup → garbage. (Verified bug, fixed.)' | Qwen3-0.6B/experiments/2026-06-26_qwen3-0.6b_data-mix-composition/train_dataarm.py | found |
| Iso-token/iso-FLOP budget: every arm (FineWeb control, dclm treatment, 50/50 mix) trains 2000 steps at 65,536 tokens/step (seq_len 4096 x micro_batch 4 x grad_accum 4) = 131,072,000 tokens per cell, 3 seeds per arm, only the data variable differs. | run_arms.sh (both dirs): STEPS=2000; WARMUP=100; c5_evidence.json: budget.steps_per_cell = 2000, budget.tokens_per_cell = 131072000, budget.new_cells = 3; confound_check = {n_vars: 1, iso_flop: true, detail: 'identical model (596M) + identical token budget; only DATA differs -> train_flops identical, ratio 1.000'}; train_dataarm.py defaults: --seq_len 4096, --micro_batch 4, --grad_accum 4 (4096*4*4=65,536; 2000*65,536=131,072,000) | Qwen3-0.6B/experiments/2026-06-24_qwen3-0.6b_data-dclm-vs-fineweb/c5_evidence.json | found |
| Both experiments' results are stamped with the versioned eval suite and use control-arm reuse per §C13 (FineWeb baseline = 2026-06-18 imu1-deconfound-p1 baseline checkpoints; mix experiment also reuses the dclm arm from 2026-06-24). | suite_version = 'text-lm-v2' in verdict.json AND cohort_bpb.json of both experiments; control checkpoints are symlinks: checkpoint_control_seed{0,1,2}.pt -> ../2026-06-18_qwen3-0.6b_imu1-deconfound-p1/checkpoint_baseline_seed{0,1,2}.pt (dclm exp) and checkpoint_dclm_seed{0,1,2}.pt -> ../2026-06-24_qwen3-0.6b_data-dclm-vs-fineweb/checkpoint_treatment_seed{0,1,2}.pt (mix exp) | Qwen3-0.6B/experiments/2026-06-26_qwen3-0.6b_data-mix-composition/verdict.json | found |
| Mid-training anneal & context gate · midtrain · 10 claims |
| The premium-mix anneal beats the iso-token control on code_py by +0.2716 BPB, 95% CI [+0.2641, +0.2792], significant, n=3 seeds per arm. | improvement_bpb 0.27160749360360237, ci95 [0.2640563484201071, 0.2791586387870976], significant: true; treatment_mean 1.851990939811249 vs control_mean 2.1235984334148514; 3 per-seed values per arm | Qwen3-0.6B/experiments/2026-06-30_qwen3-0.6b_midtrain-anneal/verdict.json | found |
| wikitext2 improves +0.0157 BPB, CI [+0.0140, +0.0174], significant — violating the pre-registered expected honest null on English. | improvement_bpb 0.01573805476049084, ci95 [0.014040993622104418, 0.01743511589887726], significant: true; pre-registration in c5_evidence.json: "Expected: small code-BPB win only; null on English/downstream (pre-registered honest null, §C25)" | Qwen3-0.6B/experiments/2026-06-30_qwen3-0.6b_midtrain-anneal/verdict.json | found |
| The iso-token control barely moved off the un-annealed base: +0.0050 code_py BPB and +0.0036 wikitext2 BPB — i.e. the LR-decay + 150M extra FineWeb tokens alone did ~nothing (the confound eaten). | fineweb/code_py delta_vs_base 0.004996952805949473; fineweb/wikitext2_val delta_vs_base 0.0036343205041389215; both regressed: false; base BPB code_py 2.128595386220801, wikitext2 1.2256204566076285 | Qwen3-0.6B/experiments/2026-06-30_qwen3-0.6b_midtrain-anneal/verdict.json | found |
| Recipe: 1-sqrt cooldown from peak LR 2.5e-4 to end LR 2.5e-5 (10% floor), 2300 steps x 65,536 tok = 150.7M tokens/cell, ~13% of the 1.19B-token pretrain. | "1-sqrt cooldown peak_lr 2.5e-4 -> end_lr 2.5e-5 (10% floor), warmup 46, 2300 steps x 65,536 tok = 150.7M tok/cell (~13% of 1.19B pretrain), mb4 x ga4, AdamW(0.9,0.95) wd 0.01, bf16 seq 4096, chunked fp32 CE, compile on" | Qwen3-0.6B/experiments/2026-06-30_qwen3-0.6b_midtrain-anneal/c5_evidence.json | found |
| ECL passkey ladder: the base's anomalous 4096-rung accuracy (0.025, i.e. ~0.03) is fixed to 0.40 by both arms; mix pooled 512-rung 0.8167 (~0.82) vs base 0.20; no arm regresses vs base at any rung; n=40/rung/cell with Wilson 95% CIs. | base per_rung_accuracy[4096]=0.025 (Wilson95 [0.0044268315026814095, 0.1288136896347409]); mix pooled 4096 acc=0.4 and fineweb pooled 4096 acc=0.4; mix pooled 512 acc=0.8166666666666667 (Wilson95 [0.7379908648282967, 0.8756969964398578]) vs base 512=0.2; n_per_rung_per_cell=40; ladder_regressed_cells=[] | Qwen3-0.6B/experiments/2026-06-30_qwen3-0.6b_midtrain-anneal/verdict.json | found |
| Step-0 context-extension gate FAILED: the base scores passkey 0.083 at its own 4096 trained window vs threshold 0.5, so context extension stays propose-only. | accuracy_at_trained_len 0.08333333333333333, trained_len 4096, threshold 0.5, gate "FAIL", verdict "context-extension MOOT — base collapses before its trained window; propose-only" | Qwen3-0.6B/experiments/2026-06-27_qwen3-0.6b_midtraining/step0_diagnostic.json | found |
| Robustness: excluding the twice-killed-and-resumed mix_seed0 cell entirely, the headline holds — code_py +0.2717, CI [+0.2333, +0.3100], significant. | "Robustness: excluding mix_seed0 entirely, the headline holds: code_py +0.2717, CI [+0.2333, +0.3100], significant (n=2 treatment, wide-CI warning)." | research/ledger/runs/2026-06-30_qwen3-0.6b_midtrain-anneal.md | found |
| The §C18 confound_check (n_vars=1, iso_flop=true) is recorded in the ledger.json runs[] entry for this run. | confound_check: {"n_vars": 1, "iso_flop": true, "evidence": "single variable = DATA (mix vs fineweb), identical base ckpt + cooldown schedule + 2300 steps x 65,536 tok = 150.7M consumed tokens per cell (iso-FLOP exact by construction); §C5 evidence in c5_evidence.json"} | research/ledger/ledger.json | found |
| (Adjacent) The constant-LR full continued-train sibling gave +0.5904 code_py BPB (CI [+0.5532, +0.6277]); the anneal retains ~46% of that effect. | constant_lr_anchor.code_py_improvement_bpb 0.5904307914737172, code_py_ci95 [0.5531974784151051, 0.6276641045323293], regime "full continued-train at normal LR (NOT an anneal) — upper-bound reference only" | Qwen3-0.6B/experiments/2026-06-30_qwen3-0.6b_midtrain-anneal/verdict.json | found |
| (Adjacent) §C25 gate: mid-training stage HARD-complete (all 3 required items present) → final_verdict win. | c25_gate: verdict "win"; completeness: stage "mid-training", complete true, required=[effective_context_length_ruler, short_ctx_non_regression, anneal_gain_vs_iso_token_control], missing_hard=[], report_missing=["figure"], registry_version "v1", researched_on "2026-06-22"; why "HARD-complete and significant (§C25.3.5)"; final_verdict "win" | Qwen3-0.6B/experiments/2026-06-30_qwen3-0.6b_midtrain-anneal/verdict.json | found |
| SFT & the eval-token confound · sft-confound · 7 claims |
| On the fixed held-out response-masked reasoning set, PPL improves from base 14.127 to 11.573 (SFT) and 11.582 (iso-FLOP control), i.e. −18.1% / −18.0% vs base. | base reasoning_ppl_masked = 14.1267; SFT seeds = 11.5732 / 11.5722 / 11.5723 (mean 11.573); ctrl seeds = 11.5835 / 11.5819 / 11.5799 (mean 11.582); ledger table: SFT −2.554 (−18.1%), control −2.545 (−18.0%) vs base 14.127 | Qwen3-0.6B/experiments/2026-06-27_qwen3-0.6b_sft-3seed/reasoning_verdict.json | found |
| SFT−control separation: masked comparison +0.009 PPL CI95 [0.0045, 0.0139] significant, but the full-sequence cross-check gives −0.006 CI95 [−0.011, −0.0015] not significant — the two disagree, so the verdict is directional. | sft_vs_control.improvement_ppl = 0.009199999999999875, ci95 = [0.004514755051701214, 0.013885244948298535], significant = true; sft_vs_control_fullseq.improvement_ppl = -0.006366666666670184, ci95 = [-0.011243400000003543, -0.0014899333333368266], significant = false; overall_verdict = "directional — masked and full-sequence comparisons disagree on significance; treat as not-yet-separable" | Qwen3-0.6B/experiments/2026-06-27_qwen3-0.6b_sft-3seed/reasoning_verdict.json | found |
| The in-loop (advisory) verdict showed SFT beating the control by 0.68 PPL 'significant', but this was an eval-token confound (SFT scored on response tokens only, control on all tokens); re-scored on one fixed response-masked held-out set the gap collapses to ~0.01 PPL. | verdict.json: sft_vs_control.improvement_ppl = 0.6786666666666665, ci95 [0.6760494287672351, 0.681283904566098], significant = true, with CONFOUND key: "in-loop control PPL is over ALL tokens, SFT PPL over RESPONSE tokens only — NOT directly comparable... Advisory, not the verdict."; ledger md: "the gap collapses 0.68 → ~0.01. The corrected verdict is the one of record." | Qwen3-0.6B/experiments/2026-06-27_qwen3-0.6b_sft-3seed/verdict.json | found |
| Catastrophic-forgetting probe: held-out FineWeb-Edu PPL base 21.495 vs SFT 21.652 vs control 21.660, and wikitext2/code retention within noise (retained). | reasoning_verdict.json forgetting: base_ppl = 21.4954, sft_mean = 21.6519, ctrl_mean = 21.6604; suite_results.json (sft_seed0) forgetting: wikitext2_val base 37.010055463333096 → target 37.08215923564533 (Δ +0.0721037723122322, floor_abs 1.3039039020038814, label "retained"), code_py 438.67295146042875 → 425.6893140677225 (Δ −12.983637392706271, floor_abs 280.56392586197546, label "retained"), summary "retained" | Qwen3-0.6B/experiments/2026-06-27_qwen3-0.6b_sft-3seed/reasoning_verdict.json | found |
| Config: ~125M in-domain math (OpenR1-Math) tokens, 3 seeds per arm, peak_lr 5e-5 with cosine decay to 8e-8 (5% warmup), and an iso-FLOP --no_mask continued-pretrain control differing only in masking. | c5_evidence.json recipe: "faithful base; response-masked CE via posttrain_losses.masked_sft_nll; peak_lr 5e-5 cosine->8e-8, warmup 5%, mb4 x ga32 (global 128), AdamW(0.9,0.95) wd 0.01, ~125M tok, compile on"; arm_plan: arms ["sft (response-masked)", "ctrl (--no_mask continued-pretrain)"], seeds [0,1,2], new_cells 6; single_variable: "masking only" | Qwen3-0.6B/experiments/2026-06-27_qwen3-0.6b_sft-3seed/c5_evidence.json | found |
| Across-seed spread of the held-out masked reasoning PPL is ~0.001 within each arm (n=3). | Ledger md line 38: "Seed spread within each arm ≈ 0.001 PPL (n=3)"; raw seeds — SFT: 11.5732/11.5722/11.5723 (max−min = 0.0010), ctrl: 11.5835/11.5819/11.5799 (max−min = 0.0036) | research/ledger/runs/2026-06-27_qwen3-0.6b_sft-3seed.md | found |
| Standard-suite general-domain evals: SFT ≈ control ≈ base on wikitext2 and code, both within the noise floor (comparable numbers from eval-harness, suite text-lm-v2). | wikitext2_val: base 37.010055463333096, SFT seed0 37.08215923564533, ctrl seed0 37.084243181550235, floor_abs 1.3039039020038814, label "not significant"; code_py (codeparrot_clean_valid): base 438.67295146042875, SFT 425.6893140677225, ctrl 425.59445853983783, floor_abs 280.56392586197546, label "not significant"; suite_version "text-lm-v2", date "2026-06-30" | Qwen3-0.6B/experiments/2026-06-27_qwen3-0.6b_sft-3seed/eval/sft_seed0/suite_results.json | found |
| RLVR pre-registered null · rlvr · 17 claims |
| Phase-1 go/no-go: the SFT checkpoint scores GSM8K pass@1 1.1% (Wilson CI [0.6%, 2.1%]) and pass@8 7%. | acc 0.01125, ci_low 0.0059297687461997645, ci_high 0.021241582744848563; passk_chen2021 {"1": 0.01125, "8": 0.07}; solved_items 7 of n_items 100, n_samples 8, temp 0.8, max_new_tokens 256, band_seed 20260701 | Qwen3-0.6B/experiments/2026-07-01_qwen3-0.6b_rlvr-phase1-passk/phase1_passk.json | found |
| Phase-1: the SFT checkpoint scores MATH-500 L1-3 pass@1 1.5% / pass@8 10%. | acc 0.015, ci [0.006892291919440893, 0.03233463358482672]; passk {"1": 0.015, "8": 0.1}; solved_items 5 of n_items 50 | Qwen3-0.6B/experiments/2026-07-01_qwen3-0.6b_rlvr-phase1-passk/phase1_passk.json | found |
| Phase-1: the pretrain base scores GSM8K 0.6% pass@1 / 5% pass@8. | acc 0.00625, ci [0.0026724940266688486, 0.014546646226436234]; passk {"1": 0.00625, "8": 0.05}; solved_items 5/100 | Qwen3-0.6B/experiments/2026-07-01_qwen3-0.6b_rlvr-phase1-passk/phase1_passk.json | found |
| Phase-1: the pretrain base scores MATH-500 L1-3 2.25% pass@1 / 14% pass@8. | acc 0.0225, ci [0.011881583530495034, 0.04220265755875813]; passk {"1": 0.0225, "8": 0.14}; solved_items 7/50 | Qwen3-0.6B/experiments/2026-07-01_qwen3-0.6b_rlvr-phase1-passk/phase1_passk.json | found |
| Phase-1 pre-registered GO rule was 'SFT solved_items >= 3 across the band'; 12 items solved -> decision GO. | "go_rule": "GO iff SFT solved_items >= 3 across the band (pre-registered)"; "decision": "GO"; "solved_total_sft": 12 | Qwen3-0.6B/experiments/2026-07-01_qwen3-0.6b_rlvr-phase1-passk/phase1_passk.json | found |
| Phase-2 GRPO trained for 300 steps (16 prompts x G=8 rollouts @ T=0.8, cap 256). | health_grpo_seed0.jsonl has exactly 300 step records (step 1..300); train_grpo.py --steps default=300; c5_evidence recipe: '300 steps x 16 prompts x G=8 @ T=0.8 cap 256' | Qwen3-0.6B/experiments/2026-07-02_qwen3-0.6b_grpo-phase2/health_grpo_seed0.jsonl | found |
| Phase-2 GRPO mean training reward stayed flat at ~0.9% verifier-correct over all 300 steps with no learning trend. | overall mean of mean_reward = 0.009231 (min 0.0, max 0.0391); first-50 mean 0.00905, last-50 mean 0.007956; thirds 0.008737/0.009986/0.008970; OLS slope +5.8e-7/step (+0.0002 over 300 steps); kept_groups (DAPO) mean 13.49/16 | Qwen3-0.6B/experiments/2026-07-02_qwen3-0.6b_grpo-phase2/health_grpo_seed0.jsonl | found |
| Phase-2 GRPO per-token k3 KL vs the frozen SFT reference stayed at ~1.7e-4 magnitude throughout. | kl field: mean 1.709e-4, min 0.0 (step 1, policy==ref), max 2.03e-4, final step 300 = 1.74e-4 | Qwen3-0.6B/experiments/2026-07-02_qwen3-0.6b_grpo-phase2/health_grpo_seed0.jsonl | found |
| The iso-generation-compute RFT control collected 0 verifier-correct completions (README wording). | CONTRADICTED: train_rft_seed0.log final lines read '[14:52:11] RFT: 352 verifier-correct completions collected; masked-SFT pass' then '[14:52:31] RFT sft-pass 200/352' and '[14:52:51] DONE'. 352/38,400 rollouts = 0.917% — matching health_rft_seed0.jsonl overall mean_reward 0.009153 and the ~1% rollout-correct rate seen in supervision. | Qwen3-0.6B/experiments/2026-07-02_qwen3-0.6b_grpo-phase2/train_rft_seed0.log | contradicted |
| The random-reward (Spurious-Rewards) gate arm trained at reward ~0.5, proving the update pipeline works. | health_random_seed0.jsonl mean_reward: overall mean 0.501406, min 0.375, max 0.5938, final step 0.5234; kept_groups mean 15.88/16; loss mean +0.0281 | Qwen3-0.6B/experiments/2026-07-02_qwen3-0.6b_grpo-phase2/health_random_seed0.jsonl | found |
| Final paired eval, GSM8K: pass@1/pass@8 = SFT 1.12%/7%, GRPO 1.0%/7%, random 1.0%/6%, RFT 1.5%/11%; GRPO beats neither the SFT floor nor the random gate. | verdict.json comparison[0]: sft_pass1 0.0112, grpo_pass1 0.01, random_pass1 0.01, rft_pass1 0.015; sft_pass8 0.07, grpo_pass8 0.07, random_pass8 0.06, rft_pass8 0.11; grpo_pass1_ci [0.0051, 0.0196], sft_pass1_ci [0.0059, 0.0212]; grpo_beats_sft_floor false, grpo_beats_random_gate false | Qwen3-0.6B/experiments/2026-07-02_qwen3-0.6b_grpo-phase2/verdict.json | found |
| Final paired eval, MATH-500 L1-3: pass@1/pass@8 = SFT 1.5%/10%, GRPO 2.25%/16%, random 1.5%/10%, RFT 1.75%/12%; both gates fail (CIs overlap). | verdict.json comparison[1]: sft_pass1 0.015, grpo_pass1 0.0225, random_pass1 0.015, rft_pass1 0.0175; sft_pass8 0.1, grpo_pass8 0.16, random_pass8 0.1, rft_pass8 0.12; grpo_pass1_ci [0.0119, 0.0422], sft_pass1_ci [0.0069, 0.0323]; grpo_beats_sft_floor false, grpo_beats_random_gate false | Qwen3-0.6B/experiments/2026-07-02_qwen3-0.6b_grpo-phase2/verdict.json | found |
| Phase-2 verdict: directional (capped by design at n=1 seed per §C25), proceed_to_phase3 = false, pre-registered null confirmed. | "verdict": "directional"; "verdict_capped_reason": "n=1 seed; §C25 rlvr requires seed_ci (>=3 paired seeds) for a non-directional call"; "seeds": 1; "proceed_to_phase3": false; conclusion: "PREDICTED NULL CONFIRMED: GRPO does not beat the SFT floor; GRPO does not beat the random-reward gate. ... Do NOT spend the multi-seed cohort; the reasoning gain lives in SFT/distillation, not RL at this scale." | Qwen3-0.6B/experiments/2026-07-02_qwen3-0.6b_grpo-phase2/verdict.json | found |
| The null was pre-registered before the run: plan.md §1 predicts RLVR at 0.6B is a methodology/negative-result artifact whose most likely true outcome is a null-to-tiny delta the control battery should refuse to call a win. | §1 'HONEST verdict up front': 'At 0.6B on our ~10x-undertrained FineWeb-Edu→SFT base, RLVR is a methodology/negative-result artifact, not a reasoning win.' ... 'The most likely *true* outcome is a null-or-tiny attributable Dr.GRPO gain that the control battery should correctly **refuse to call a win**'. Header: 'researched_on 2026-07-01'. | research/rlvr/plan.md | found |
| Decontamination: both eval sets are 0-flagged against the 35,924 OpenR1 SFT problems (13-gram index). | "decontam_target": "35924 OpenR1 SFT problems (of 35231 used uuids)"; gsm8k_test {n 1319, contaminated 0, clean 1319}; math500 {n 500, contaminated 0, clean 500}; ngram_n 13, flag_threshold 0.5, index_13grams 1138279; max_overlap_gsm8k 0.0, max_overlap_math500 0.0588 | research/datasets/math-eval-v1/decontam_report.json | found |
| Decontamination: 14 eval-overlapping prompts were dropped from the GRPO training prompt set. | gsm8k_train {n 7473, eval_dropped 2, clean 7471, sft_flagged 0}; math_l13_train {n 3502, eval_dropped 12, clean 3490, sft_flagged 7} — total eval_dropped = 2 + 12 = 14 | research/datasets/grpo-math-prompts-v1/decontam_report.json | found |
| The answer extractor/verifier is pinned and version-stamped as math-acc-v1 in every result. | research/eval_math_acc.py line 37: EXTRACTOR_VERSION = "math-acc-v1"; stamped as "extractor_version": "math-acc-v1" in every per-set block of phase1_passk.json and passk_{grpo,random,rft}.json, as "extractor": "math-acc-v1" at top level of all four + verdict.json, and in both ledger run metrics + both decontam reports | research/eval_math_acc.py | found |