best-of-3 oracle/deployable split: realistic selector loses the overall edge (55.0/27.3 vs oracle 57.8/34.5); paper economics rewritten

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Nils
2026-07-14 17:16:00 +02:00
co-authored by Claude Fable 5
parent e5fc453005
commit 2ce646d175
6 changed files with 5212 additions and 20 deletions
+30 -20
View File
@@ -31,7 +31,8 @@ A complete attribution program then deflates the mechanism's mystique: the
loop's content is *amortizable* (plan-distillation into the same adapter, loop's content is *amortizable* (plan-distillation into the same adapter,
recurrence-free, matches it; nothing stacks; looping distilled weights recurrence-free, matches it; nothing stacks; looping distilled weights
degrades them), width rivals depth (trained pause registers reach 36.4%), degrades them), width rivals depth (trained pause registers reach 36.4%),
and compute-matched token baselines win overall accuracy outright. What and verifier-assisted (oracle) sampling wins overall accuracy at matched
compute — though the *deployable* selector loses that edge entirely. What
survives is precise: the implant owns exactly the plan-dependent slice at survives is precise: the implant owns exactly the plan-dependent slice at
zero visible tokens and zero decode cost, transfers with the substrate zero visible tokens and zero decode cost, transfers with the substrate
rather than the task, and its placement is dictated by the lens. At 12B a rather than the task, and its placement is dictated by the lens. At 12B a
@@ -88,11 +89,14 @@ not laws.)*
(parallel, prefill-shaped), zero decode overhead, bit-exact KV-cache (parallel, prefill-shaped), zero decode overhead, bit-exact KV-cache
write-in, k=0 recovers the base model exactly. Its competition at write-in, k=0 recovers the base model exactly. Its competition at
comparable compute (accounting in Appendix A — FLOPs, wall-clock, and comparable compute (accounting in Appendix A — FLOPs, wall-clock, and
token budget do not rank the arms the same way): best-of-3 sampling wins token budget do not rank the arms the same way): *oracle* best-of-3
overall accuracy outright (57.2%); a (verifier-assisted) wins overall accuracy (57.8%, paired p=0.020 vs
50-token visible plan ties the hard bucket. The value proposition is loop), but the *deployable* logprob-selected variant drops to 55.0%
*only*: no visible tokens, no decode latency, and the hard-slice overall / 27.3% hard — indistinguishable from the latent arms overall
specialization (distill's 46% > budget-CoT's 40% > best-of-3's 33%). and directionally behind on hard. A 50-token visible plan ties the hard
bucket. The value proposition without a verifier: no visible tokens, no
decode latency, and the hard-slice specialization (distill's 46% >
budget-CoT's 40% > deployable sampling's 27%).
6. **Scale transfers only with a state-dependent stability dial.** At 12B the 6. **Scale transfers only with a state-dependent stability dial.** At 12B the
2B-tuned constant α=0.3 collapses overall accuracy (72.6%→43.0%); the 2B-tuned constant α=0.3 collapses overall accuracy (72.6%→43.0%); the
@@ -228,20 +232,26 @@ distinctive value is that it finds this content *without* plan supervision
### 3.4 Compute-matched honesty ### 3.4 Compute-matched honesty
At approximately matched FLOPs (Appendix A gives the accounting, separated At approximately matched FLOPs (Appendix A gives the accounting, separated
into FLOPs, wall-clock, and token budget), token-space baselines are strong: into FLOPs, wall-clock, and token budget), the token-space comparison
best-of-3 sampling wins overall accuracy against every latent arm (57.2%, splits into two very different claims:
CI [52.8, 61.5], vs loop 53.6 [49.2, 57.9] — point estimate higher, CIs
overlap) by preserving easy items perfectly while sampling rescues some hard | best-of-3 variant | overall | hard | vs loop (paired) |
ones. A 50-token visible plan ties the loop's hard bucket. Both baselines |---|---|---|---|
are being rerun with per-item logs to enable paired tests against the latent | **oracle** (any-of-3 passes; needs a perfect verifier) | 57.8% | 34.5% | beats loop overall, p=0.020 |
arms; until those land, the overall-accuracy comparison rests on overlapping | **deployable** (highest mean logprob of 3) | 55.0% | 27.3% | n.s. overall (p=0.47); loop ahead on hard 167 (p=0.09) |
CIs and is stated as point-estimate-level. [BASELINES-PI PENDING]
The latent implant's surviving advantages are qualitative: zero visible The earlier draft's "sampling wins overall" was the **oracle** number — an
tokens (silent), zero decode overhead (prefill-parallel; sampling and CoT upper bound requiring an external verifier that MBPP's own tests provide
pay serially at bandwidth-bound decode), and the hard-slice crown under but a deployment does not. With the deployable selector (identical seeded
distillation (46% vs 40% budget-CoT vs 33% best-of-3). For deployment this samples, so the comparison is exact), best-of-3 is statistically
means: the implant is a *latency/token-budget* technology with a side indistinguishable from the latent arms overall, *behind* them
specialization in plan-dependent items — not an accuracy technology. directionally on the hard bucket, and pays ≈3× visible tokens and serial
decode for it. Budget-CoT-50 remains the strongest honest token baseline
(53.8% overall, hard 40.0%). The implant's advantages at matched compute
without a verifier: zero visible tokens, zero decode overhead, and the
hard-slice crown under distillation (46%). Where a task *does* come with a
cheap verifier, oracle-style sampling is the better overall-accuracy
spend — both halves belong in the deployment picture.
### 3.5 Width vs depth, and the task boundary ### 3.5 Width vs depth, and the task boundary
+15
View File
@@ -31,6 +31,21 @@
- Rust loop k=4 vs k=0, overall: A-only 11, B-only 5, n=154, p=0.2101 (n.s.) - Rust loop k=4 vs k=0, overall: A-only 11, B-only 5, n=154, p=0.2101 (n.s.)
- Rust loop k=4 vs k=0, hard: A-only 0, B-only 4, n=25, p=0.125 (n.s.) - Rust loop k=4 vs k=0, hard: A-only 0, B-only 4, n=25, p=0.125 (n.s.)
## Token baselines (paired, per-item)
- **best-of-3 ORACLE (any-pass)**: overall 0.578 [0.534, 0.621] (n=500); hard 0.345 [0.234, 0.477] (n=55)
- **best-of-3 oracle (selector run)**: overall 0.578 [0.534, 0.621] (n=500); hard 0.345 [0.234, 0.477] (n=55)
- **best-of-3 DEPLOYABLE (logprob-selected)**: overall 0.550 [0.506, 0.593] (n=500); hard 0.273 [0.173, 0.402] (n=55)
- bo3-oracle vs loop k=4, overall: arm-only 27, bo3-only 48, p=0.0203 (**significant**)
- bo3-oracle vs loop k=4, hard: arm-only 14, bo3-only 9, p=0.4049 (n.s.)
- bo3-oracle vs distill k=1, overall: arm-only 27, bo3-only 44, p=0.05681 (n.s.)
- bo3-oracle vs distill k=1, hard: arm-only 14, bo3-only 10, p=0.5413 (n.s.)
- bo3-deployable vs loop k=4, overall: arm-only 31, bo3-only 38, p=0.4704 (n.s.)
- bo3-deployable vs loop k=4, hard: arm-only 16, bo3-only 7, p=0.09314 (n.s.)
- bo3-deployable vs distill k=1, overall: arm-only 31, bo3-only 34, p=0.8043 (n.s.)
- bo3-deployable vs distill k=1, hard: arm-only 15, bo3-only 7, p=0.1338 (n.s.)
(token-baseline per-item files incomplete: [Errno 2] No such file or directory: '/home/nils/jspace/results-loop/eval_budgetcot_pi.json')
## Pooled hard bucket (MBPP + HumanEval + Rust) ## Pooled hard bucket (MBPP + HumanEval + Rust)
Paired within-item k>0 vs k=0, counts pooled across benchmarks (loop arm; distill pooled where available). Paired within-item k>0 vs k=0, counts pooled across benchmarks (loop arm; distill pooled where available).
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+102
View File
@@ -322,6 +322,108 @@
"a_only": 0, "a_only": 0,
"b_only": 4, "b_only": 4,
"p": 0.125 "p": 0.125
},
"bo3-oracle vs loop k=4, overall": {
"n": 500,
"a_only": 27,
"b_only": 48,
"p": 0.020298406990107445
},
"bo3-oracle vs loop k=4, hard": {
"n": 55,
"a_only": 14,
"b_only": 9,
"p": 0.4048728942871094
},
"bo3-oracle vs distill k=1, overall": {
"n": 500,
"a_only": 27,
"b_only": 44,
"p": 0.056814677932839015
},
"bo3-oracle vs distill k=1, hard": {
"n": 55,
"a_only": 14,
"b_only": 10,
"p": 0.5412561893463135
},
"bo3-deployable vs loop k=4, overall": {
"n": 500,
"a_only": 31,
"b_only": 38,
"p": 0.4703685318581444
},
"bo3-deployable vs loop k=4, hard": {
"n": 55,
"a_only": 16,
"b_only": 7,
"p": 0.0931396484375
},
"bo3-deployable vs distill k=1, overall": {
"n": 500,
"a_only": 31,
"b_only": 34,
"p": 0.8043170001933986
},
"bo3-deployable vs distill k=1, hard": {
"n": 55,
"a_only": 15,
"b_only": 7,
"p": 0.13380050659179688
}
},
"best-of-3 ORACLE (any-pass)": {
"overall": {
"acc": 0.578,
"n": 500,
"ci": [
0.534,
0.621
]
},
"hard": {
"acc": 0.34545454545454546,
"n": 55,
"ci": [
0.234,
0.477
]
}
},
"best-of-3 oracle (selector run)": {
"overall": {
"acc": 0.578,
"n": 500,
"ci": [
0.534,
0.621
]
},
"hard": {
"acc": 0.34545454545454546,
"n": 55,
"ci": [
0.234,
0.477
]
}
},
"best-of-3 DEPLOYABLE (logprob-selected)": {
"overall": {
"acc": 0.55,
"n": 500,
"ci": [
0.506,
0.593
]
},
"hard": {
"acc": 0.2727272727272727,
"n": 55,
"ci": [
0.173,
0.402
]
} }
}, },
"pooled_hard_loop": { "pooled_hard_loop": {
+39
View File
@@ -200,6 +200,45 @@ def main():
lines.append(f"- {name}: A-only {r['a_only']}, B-only {r['b_only']}, " lines.append(f"- {name}: A-only {r['a_only']}, B-only {r['b_only']}, "
f"n={r['n']}, p={r['p']:.4g} ({sig})") f"n={r['n']}, p={r['p']:.4g} ({sig})")
# ---------- 2b. token baselines, per-item (oracle vs deployable) ------
try:
d = json.load(open(OUT / "eval_bestof3_select.json"))
sel = {it["task_id"]: it["selected"] for it in d["per_item"]}
orc = {it["task_id"]: it["oracle"] for it in d["per_item"]}
d2 = json.load(open(OUT / "eval_bestof3_pi.json"))
orc_pi = {it["task_id"]: it["ok"] for it in d2["per_item"]}
lines += ["", "## Token baselines (paired, per-item)", ""]
for name, m in [("best-of-3 ORACLE (any-pass)", orc_pi),
("best-of-3 oracle (selector run)", orc),
("best-of-3 DEPLOYABLE (logprob-selected)", sel)]:
o, h = acc_ci(m), acc_ci(m, mbpp_hard)
lines.append(f"- **{name}**: overall {fmt(o)}; hard {fmt(h)}")
report[name] = {"overall": o, "hard": h}
for base_name, m in [("oracle", orc_pi), ("deployable", sel)]:
for arm_name, arm in [("loop k=4", loop4), ("distill k=1", dist1)]:
for sub, subn in [(None, "overall"), (mbpp_hard, "hard")]:
r = mcnemar(pair(arm, m, sub))
report["mcnemar"][f"bo3-{base_name} vs {arm_name}, {subn}"] = r
sig = "**significant**" if r["p"] < 0.05 else "n.s."
lines.append(f"- bo3-{base_name} vs {arm_name}, {subn}: "
f"arm-only {r['a_only']}, bo3-only "
f"{r['b_only']}, p={r['p']:.4g} ({sig})")
d3 = json.load(open(OUT / "eval_budgetcot_pi.json"))
bc = {it["task_id"]: it["ok"] for it in d3["per_item"]}
o, h = acc_ci(bc), acc_ci(bc, mbpp_hard)
lines.append(f"- **budget-CoT-50 (per-item rerun)**: overall {fmt(o)}; "
f"hard {fmt(h)}")
for arm_name, arm in [("loop k=4", loop4), ("distill k=1", dist1)]:
for sub, subn in [(None, "overall"), (mbpp_hard, "hard")]:
r = mcnemar(pair(arm, bc, sub))
report["mcnemar"][f"budget-cot vs {arm_name}, {subn}"] = r
sig = "**significant**" if r["p"] < 0.05 else "n.s."
lines.append(f"- budget-CoT vs {arm_name}, {subn}: arm-only "
f"{r['a_only']}, cot-only {r['b_only']}, "
f"p={r['p']:.4g} ({sig})")
except FileNotFoundError as e:
lines.append(f"(token-baseline per-item files incomplete: {e})")
# ---------- 3. pooled hard bucket across benchmarks ---------- # ---------- 3. pooled hard bucket across benchmarks ----------
lines += ["", "## Pooled hard bucket (MBPP + HumanEval + Rust)", lines += ["", "## Pooled hard bucket (MBPP + HumanEval + Rust)",
"", "Paired within-item k>0 vs k=0, counts pooled across " "", "Paired within-item k>0 vs k=0, counts pooled across "