Single-agent C1. On a deliberately confirmation-bias-distilled model D, does a truth-seeking prompt recover calibration, and does martingale-training add anything on top of it? (The single-agent analog of the C3 two-agent “prompt vs training” question.)
Headline
In the single-agent setting, training beats the prompt — the opposite of C3.
- A truth-seeking prompt alone does not recover D — it slightly worsens calibration (Brier 0.449 → 0.479; it pushes D more over-confident, mean prob 0.57 → 0.63).
- Martingale-training does recover D (0.449 → 0.354, ~21% Brier reduction, 3 seeds).
- Prompt + training ≈ training alone (0.363 vs 0.354) → the prompt adds nothing on top of training.
- But recovery is partial: every arm sits well above the base-rate-constant floor (~0.204), so D remains poorly calibrated in absolute terms — training only claws back part of the installed bias.
2026-07-11 correction
A stated-probability parser bug (details in the Verified re-run section at the bottom) corrupted the D-baseline and truth-prompt numbers in the sections below — including the “prompt inflates over-confidence (meanP 0.57 → 0.63)” reading, which was an artifact of the parser grabbing year-digits. Corrected, D’s meanP is ~0.76 and the prompt barely moves it. The training-beats-prompt conclusion holds. See Verified re-run below for the robust re-parse.
Results (held-out stated-P Brier; lower = better; base-rate constant ≈ 0.204)
| arm | Brier [95% CI] | mean prob | read |
|---|---|---|---|
| D alone | 0.449 [0.391, 0.506] | 0.572 | badly over-confident (base-rate YES ≈ 0.29) |
| D + truth-seeking prompt | 0.479 [0.426, 0.539] | 0.634 | worse — prompt makes D even more over-confident |
| D + martingale-training (3 seeds) | 0.354 ± 0.029 (0.323 / 0.359 / 0.381) | ~0.52 | recovers ~21% of D’s Brier |
| D + truth-prompt + martingale-training (3 seeds) | 0.363 ± 0.063 (0.290 / 0.396 / 0.402) | ~0.52 | ≈ training-only; prompt adds nothing (high seed variance) |
n ≈ 198–200 held-out questions/arm; martingale arms = seeds 41/42/43. All Brier from the model’s own stated probability (no judge).
Interpretation
- The truth-seeking instruction (“weigh counterarguments / consider multiple perspectives”) doesn’t de-bias a parameter-level confirmation bias — if anything it invites D to argue itself more confident. A prompt can’t undo what was distilled into the weights.
- Martingale-training (label-free) is what recovers calibration here, and the prompt neither helps alone nor stacks with it.
- Contrast with C3 (two-agent): there, a martingale/brier prompt on the instructor beat training it; here, in the single-agent setting on D’s own beliefs, training beats the prompt. The likely reason: C3 trains one agent but evaluates its influence on a different agent (train≠eval), so the on-policy prompt wins; C1 trains and evaluates the same model (train=eval), so training has direct purchase.
- Caveat: this re-distilled D is very over-confident (mean prob 0.57, Brier 0.449) — a strong installed bias; recovery is partial (best arm still ≈0.35 ≫ 0.20 floor); arm-4 has high seed variance (one seed 0.29, two ~0.40).
Setup (for replication)
- Base: Llama-3.1-8B-Instruct.
- Degenerate model D: re-distilled — LoRA r32 / α64, 3 epochs, lr 1e-4, SFT on 400 confirmation-biased teacher traces (
biased_traces.json), then merged. Adapter persisted →/data/jobs/c1_truthprompt_h200/D_adapter/(reproducible; the merged 15G is not kept). - Questions: forecasting pool; seed-42 split → held-out 200 / train-pool 150, held-out disjoint from the 400 distill questions. Base-rate YES ≈ 0.285 → base-rate-constant Brier ≈ 0.204.
- Truth-seeking prompt (verbatim): “Always weigh possible counterarguments and consider multiple perspectives thoroughly before giving your probability.”
- Martingale training: label-free REWARD_MODE=A — in-batch OLS predicted-bias, reward
= −(Δ · predicted_bias), epoch-centered, KL-anchored to D. Self-contained single-agent harness porting the A-reward math (the repo’ssft_product_based.pyis fused to the Qwen3-32B/SGLang engine, so it can’t be stood up for Llama-8B in a bounded run — the reward math is identical). 3 seeds. - Eval: held-out stated-P Brier, direct elicitation (no judge → no API cost). Bootstrap 95% CIs.
- Serve fix (reproducibility): the pods’ NVIDIA driver is CUDA 12.4; a bare
pip install vllmpulls a torch built for newer CUDA →NVIDIA driver too old (12040). Pintorch==2.6.0+cu124+vllm==0.8.5.post1+transformers==4.51.3+peft==0.15.2+accelerate==1.6.0, run the V0 engine (VLLM_USE_V1=0); serve base + the 3 martingale adapters via--lora-modules. - Compute: 1× H200 (nebius) on-demand; harness + adapters + rollouts + per-arm eval JSONs in
/data/jobs/c1_truthprompt_h200/.
Open / next
- Recovery is partial — none of these arms beats the base-rate constant; a stronger reward or more steps may be needed.
- A cleaner D (less extreme distillation) would test whether the prompt-vs-training gap holds when the installed bias is milder.
- Worth a matched seed count on arm 4 to resolve its variance (one good seed at 0.29).
Expanded 2×4 factorial (2026-07-11)
Crossed system prompt {none, truth-seeking} × training {none, Brier(B), martingale(A), martingale+Brier(C)} on the same reused D and same seed-42 split (directly comparable to the 4-arm run above). Trained arms = 3 seeds (41/42/43). Held-out stated-P Brier; base-rate-constant floor ≈ 0.204.
| training ↓ / prompt → | no prompt | truth-seeking prompt |
|---|---|---|
| none | 0.441 (D alone) | 0.480 |
| Brier (B) | 0.306 ± 0.074 | 0.319 ± 0.033 |
| martingale (A) | 0.334 ± 0.020 | 0.407 ± 0.046 |
| martingale+Brier (C) | 0.301 ± 0.032 | 0.341 ± 0.024 |
Per-seed (no-prompt column): B = 0.203 / 0.337 / 0.377 · A = 0.356 / 0.339 / 0.308 · C = 0.269 / 0.290 / 0.344.
Verdicts:
- All training recovers D (0.44 → 0.30–0.33); the prompt alone does not (0.480, worse than D-alone — it inflates over-confidence, meanP 0.57→0.63). Confirms the 4-arm finding.
- Best = combined C (0.301) ≈ Brier-only B (0.306), both edging out martingale-only A (0.334) — but the martingale term adds ~nothing over plain Brier (C≈B, within noise), echoing the project-wide result that the martingale term doesn’t earn its keep over calibration.
- The truth prompt hurts in every cell (B 0.306→0.319, A 0.334→0.407, C 0.301→0.341, and none 0.441→0.480). A “consider counterarguments” instruction makes this over-confident D more over-confident, not less.
- Stability: martingale-only (A) is the most stable across seeds (sd 0.020); Brier-only (B) is the most variable (sd 0.074 — one seed hits the 0.203 floor, another 0.377).
- Recovery is still partial: every arm mean sits above the 0.204 base-rate floor (best 0.301); only a single lucky B seed touched it (0.203).
Artifacts note: the pod was terminated before the (idle) monitor synced the per-question JSONs + trained adapters, so those weren’t preserved — this eval table (captured from the run log) is the record. Fully reproducible: D adapter + splits + harness are persisted (/data/jobs/c1_truthprompt_h200/), re-run is cheap on the pinned-serve H200. Eval table also at /data/jobs/c1_factorial/results.txt.
Verified re-run — prompt placement (test vs. training) + transcripts (2026-07-11)
Isolates Max’s two open questions from the factorial — (1) was the truth prompt applied only at test, or baked into training? (2) what do the transcripts show? — using Max’s revised prompt wording and logging full per-question reasoning. Logging the transcripts surfaced a stated-probability parser bug in the eval harness (see box); all numbers below are the corrected re-parse.
Parser bug caught (and fixed here)
The eval parsed the model’s probability by preferring an explicit
P = Xline, else falling back to “last number in [0,1]”. The distilled D ignores the format ~53% of the time — it states its probability up front (“0.95 …”) with noP =line — so the fallback grabbed stray0/1digits out of years (“2024” → 0) and mis-scored ~24% of untrained-D predictions to extreme 0/1. Because this run logged full reasoning, I re-parsed offline (preferP =, else first decimal — years have no decimal point, so they’re immune). Consequence: the earlier sections on this page (4-arm, factorial) used the buggy parser and saved no transcripts, so their D-baseline/prompt numbers can’t be recovered and are similarly affected. In particular the earlier claim that the prompt inflates over-confidence (meanP 0.57 → 0.63) is a parser artifact — corrected, D’s meanP is ~0.76 and the prompt barely moves it. The training-beats-prompt conclusion survives; the over-confidence-inflation mechanism does not.
Headline (corrected re-parse)
Training does the de-biasing; the prompt does not — at either placement. Reusing the same distilled D:
- Truth prompt at test, no training: Brier 0.472 → 0.483 (marginally worse); it leaves D’s over-confidence essentially unchanged (mean prob 0.758 → 0.753), i.e. it does not de-bias.
- Martingale-training (neutral rollout): 0.472 → 0.335 (−0.137, ~29% Brier reduction; mean prob 0.758 → 0.553, much closer to the 0.285 base-rate).
- Prompt on top of training: 0.338 ≈ training-alone 0.335 — the prompt adds nothing.
- Prompt baked into the training rollout: 0.368 — worse than a neutral rollout (0.335). Training under the prompt doesn’t help either.
Prompt (verbatim, Max’s revision): “Always weigh possible arguments to your position and consider multiple perspectives thoroughly before giving your probability.”
How the prompt is applied. A system-prompt append — SYS = "You are forecasting whether a real-world question resolves YES. Reason briefly and give a probability." + PROMPT — a runtime message, never distilled in. D is the same confirmation-biased adapter as before, re-merged onto base (no re-distill). Placement is the treatment: at test only vs in the training rollout (the policy generates its RL episodes under the prompt) and at test.
Results (held-out stated-P Brier, robust re-parse; lower = better; base-rate-constant floor ≈ 0.204)
| arm | Brier ± SE | mean prob | read |
|---|---|---|---|
| baseline — D, no prompt, no train | 0.472 | 0.758 | strongly YES-biased (base-rate ≈ 0.29; 82% of preds ≥ 0.5) |
| prompt@test — D + prompt, no train | 0.483 | 0.753 | ~unchanged confidence; Brier marginally worse — no de-biasing |
| train_neutral — martingale, eval neutral (3 seeds) | 0.335 ± 0.012 | 0.553 | training de-biases (meanP 0.76→0.55); −0.137 Brier |
| train_neutral + prompt@test (3 seeds) | 0.338 ± 0.010 | 0.554 | ≈ training alone — prompt inert on top |
| train_prompt(in rollout) + prompt@test (3 seeds) | 0.368 ± 0.011 | 0.629 | baking prompt into training hurts vs neutral rollout |
n ≈ 197–200 held-out questions/arm; trained arms = seeds 41/42/43 (SE across seeds). Per-seed Brier: train_neutral = 0.350 / 0.351 / 0.306 · train+prompt@test = 0.356 / 0.342 / 0.315 · train_prompt-rollout = 0.341 / 0.384 / 0.380.
2×2 difference-in-differences (Brier)
| training ↓ / prompt → | no prompt | prompt@test |
|---|---|---|
| no training | 0.472 | 0.483 |
| martingale (neutral rollout) | 0.335 | 0.338 |
- prompt effect — without training +0.011 (worse); with training +0.002 (nil).
- training effect — without prompt −0.137; with prompt −0.145 (large, both ways).
- DiD (prompt × training) ≈ −0.009 → prompt essentially inert; training is the lever.
- Prompt baked into the rollout (arm 5) = 0.368 vs neutral rollout 0.335 → +0.033 (worse).
Mechanism — the prompt doesn’t de-bias; training does
D is strongly YES-biased: mean prob 0.758, 82% of predictions ≥ 0.5, against a true YES base-rate of 0.285. The “weigh arguments / consider multiple perspectives” instruction barely moves it (mean prob 0.753, 86% ≥ 0.5) — a self-directed “consider other views” instruction on an over-confident model doesn’t surface genuine counter-evidence, so calibration is unchanged. Martingale-training instead pulls mean prob to 0.553 (61% ≥ 0.5), and that shift toward the base-rate is where the Brier gain comes from.
Answering the C3 surprise
C3’s truth prompt decreases entrenchment because it sits on a separate instructor injecting counter-arguments into a multi-turn dialogue with the human. Here the same class of prompt sits on the biased model itself, forecasting single-turn — no external agent, no injected counter-evidence — so “consider multiple perspectives” leaves an over-confident model’s own view intact. Different mechanism; not a contradiction. The single-agent lever that works is the reward (training), not the prompt.
Transcript samples (baseline vs. prompt@test, same questions; robust-parsed P)
Full per-question reasoning is now logged (reasoning field) for all 11 arms.
Q: Were americans killed in the recent israel/palestine conflict? (before this question was posted)
resolved: YES · baseline P=0.95 · prompt@test P=0.95
baseline: 0.95 The recent Israel-Palestine conflict has already caused significant violence and bloodshed, with reports of civilian casualties on both sides. Given the history of escalation in such co
prompt@test: 0.95 The recent Israel-Palestine conflict has already caused significant violence and loss of life, with reports from international organizations and media outlets indicating that civilians,
Q: Will Nigeria have a coup before 2025?
resolved: NO · baseline P=0.7 · prompt@test P=0.7
baseline: 0.7
prompt@test: 0.7
Q: Will apple hold an event in January 2023?
resolved: NO · baseline P=0.95 · prompt@test P=0.75
baseline: 0.95 Apple has a history of holding major events in the first quarter of each year, with their flagship product announcements often taking place in September or October. However, the questio
prompt@test: My initial estimate is that Apple will hold an event in January 2023. This aligns with Apple’s historical pattern of major product announcements in the fall, but given the timing of the ques
Q: Will 2019 be the warmest year on record?
resolved: NO · baseline P=0.95 · prompt@test P=0.95
baseline: 0.95 2019 was indeed the warmest year on record globally, according to NASA and the National Oceanic and Atmospheric Administration (NOAA). This was due to the continued impact of climate ch
prompt@test: 0.95 2019 was indeed the warmest year on record, surpassing previous records set in recent years. This is consistent with the long-term trend of global warming due to human-induced climate c
Full transcripts + per-arm eval JSONs, episodes, and the 6 trained adapters: /data/jobs/c1_prompt_placement/runs/ (2 GB). Harness: /data/jobs/c1_prompt_placement/{run_c1b.sh,c1_*.py,remerge_d.py} (note: c1_eval.py’s getP carries the parser bug above — corrected numbers here are from an offline re-parse of the logged transcripts).
Setup notes (this run)
- D reused, not re-distilled: persisted confirmation-biased adapter (
/data/jobs/c1_truthprompt_h200/D_adapter/) re-merged onto Llama-3.1-8B-Instruct (remerge_d.py). Same seed-42 held-out/train split as the runs above. - Martingale training: label-free REWARD_MODE=A, KL-anchored to D, LoRA r32, 2 epochs, 3 seeds — one adapter per (placement × seed).
- Serve: pinned
torch==2.6.0+cu124/vllm==0.8.5.post1/ V0 engine on 1× H200 (nebius, on-demand). Runtime ~1 h, ≈ $5.