Research log Small Model Experimentation
GitHub

Qwen3.5-4B: Does the Model Know When It Will Fail?

Knows when it's guessing, but can't say so

The one idea you need

The model answers with one digit, but underneath it spreads a fixed pile of betting chips across all ten possible digits. When it knows the answer, nearly every chip lands on one; when guessing, they scatter thin. That hidden pile is its true confidence — not anything it says aloud.

The question

When a small model is about to get an answer wrong, does it have any inner sense that it's just guessing — and can it actually tell you so?

What we found

Yes, but only in its numbers, never its words. The probability it quietly places on the digit it writes sorts right answers from wrong ones almost perfectly — 95 out of 100, versus 50 for a coin flip — and beats guessing from surface prompt features alone (61). Yet ask it outright "is your answer correct?" and it scores 46, no better than chance.

Why it matters

For a confidence or abstain gate on a small model, read the probability it assigns to its own answer — one forward pass. Never trust a "how confident are you?" prompt or a self-check; both are noise here.

How well the answer-odds sort right from wrong95 out of 100near-perfect; 50 out of 100 would be a coin flip
How well its spoken self-check sorts right from wrong46 out of 100asking the model 'is my answer correct?' is about chance
How well surface prompt features sort right from wrong61 out of 100the answer-odds beat this too — genuine self-knowledge, not surface-reading
Accuracy on questions it chooses to answer, after abstaining23% → ~100%dropping the answers it marks low-confidence
On this page
  1. Results at a glance
  2. Overview
  3. Report
    1. Motivation
    2. Method (review-hardened)
    3. Results (n=150/condition)
    4. Conclusion
    5. Honest caveats
    6. Artifact Manifest
  4. Experiment log
  5. Figures
  6. Reproduce
  7. Related

Results at a glance 2

Answer-odds track how often the model is right; its self-check stays flat

How to read

Four task types run left to right, easiest to near-impossible. Each shows three bars: how often the model is actually right, the probability it placed on its own answer, and its yes/no self-check. A confidence bar that hugs the accuracy bar is good.

0%25%50%75%100%familiar_executefamiliar_execute100%100%42%familiar_inducefamiliar_induce40%44%35%reversal_inducereversal_induce19%29%38%novel_inducenovel_induce10%15%38%

Takeaway → The answer-probability bars rise and fall in near-lockstep with accuracy, from 100% down to about 15%; the self-check bars stay pinned near 40%, blind to difficulty.

Data table
conditionactual accuracyIMPLICIT: mean P(answer)EXPLICIT: mean P(True) self-verification
familiar_execute100%100%42%
familiar_induce40%44%35%
reversal_induce19%29%38%
novel_induce10%15%38%

Numbers from

Technical framing

Does the model know when it will fail? YES implicitly (answer-token probability tracks accuracy), NO explicitly (self-verification is flat) — Uses C39's VERIFIED competence boundary as crisp ground truth (rare in calibration research). Task: 'advance k in a cyclic order', format-equalized, across a competence spectrum. Two non-degenerate logit confidence signals (verbalized 0-100 is a useless constant 100): IMPLICIT P(answer) = the model's own probability on the digit it emits (softmax over the 10 digit tokens, one forward pass); EXPLICIT P(True) = Kadavath-style self-verification ('is your answer correct? A/B'). RESULT: implicit P(answer) tracks accuracy almost perfectly (1.00/0.44/0.29/0.15 vs acc 1.00/0.40/0.19/0.10), while explicit P(True) is FLAT (~0.4) and even underconfident on the perfect execute cell. The model's uncertainty lives in its output distribution, not its self-report.

Which confidence signal actually predicts the model's mistakes?

How to read

Within one medium-difficulty task, five signals ranked by how reliably each separates items the model got right from ones it got wrong. Higher is better; 50 out of 100 is a coin flip. Includes the answer-odds, their margin and spread, the self-check, and prompt features.

00.250.50.751P(answer) implicitP(answer) implicit0.95marginmargin0.9-entropy-entropy0.9P(True) explicitP(True) explicit0.46surface baselinesurface baseline0.61

Takeaway → Answer-odds tower near 95; prompt features reach only 61 and the spoken self-check sits at 46 — a coin flip. Real self-knowledge lives in the odds, not the words.

Data table
conditionAUROC predicting per-item correctness (within familiar_induce, acc 0.40)
P(answer) implicit0.95
margin0.9
-entropy0.9
P(True) explicit0.46
surface baseline0.61

Numbers from

Technical framing

Item-level self-knowledge WITHIN the surface-matched familiar-induce cell: implicit P(answer) beats surface features and explicit self-report — The clean self-knowledge test (review-mandated): WITHIN the surface-matched intermediate cell (familiar_induce, acc 0.40, where both correct and incorrect items exist), can a signal predict WHICH items the model gets right? The implicit P(answer) achieves AUROC 0.95 (95% CI 0.90-0.99) -- it knows its own per-item correctness. It CRUSHES the external surface-feature baseline (0.61 -- a logistic classifier on prompt features like k, gap-to-seen, so this is genuine self-knowledge, not surface-reading) and the explicit P(True) self-verification (0.46 = chance). So the model has real item-level self-knowledge in its logits but cannot verbalize or self-verify it. Deployable: selective prediction by low P(answer) lifts accuracy-on-attempted from 0.23 to ~1.0. AUROC 0.5 = chance.

In the author’s words from the Overview · “Results”

Implicit P(answer) tracks accuracy (1.00/0.44/0.29/0.15 vs acc 1.00/0.40/0.19/0.10); explicit P(True) flat (~0.4). Within familiar_induce: P(answer) AUROC 0.95 (CI 0.90-0.99) >> surface 0.61 >> P(True) 0.46 (chance). Selective prediction lifts accuracy-on-attempted 0.23 -> ~1.0. See reports/report.md, analysis/metacognitive_boundary.png.

Overview

Research Program

  • Program: benchmark_generalization (first metacognition/calibration claim)
  • Question: the arc pinned a VERIFIED competence boundary (C39). Does the model's own confidence/uncertainty track it -- does it know when it is guessing?

Setup

  • Format-equalized single-value task ('advance k in a cyclic order') across a verified competence spectrum. Two non-degenerate logit confidence signals (verbalized 0-100 is degenerate = constant 100): IMPLICIT P(answer) = softmax over the 10 digit tokens at 'Answer: ' (one forward pass); EXPLICIT P(True) = Kadavath self-verification. Clean test = WITHIN-condition item-level AUROC in the surface-matched familiar_induce cell vs an external surface-feature baseline.

Run

python scripts/eval_metacog.py --n 150 then python scripts/analyze.py.

Results

Implicit P(answer) tracks accuracy (1.00/0.44/0.29/0.15 vs acc 1.00/0.40/0.19/0.10); explicit P(True) flat (~0.4). Within familiar_induce: P(answer) AUROC 0.95 (CI 0.90-0.99) >> surface 0.61 >> P(True) 0.46 (chance). Selective prediction lifts accuracy-on-attempted 0.23 -> ~1.0. See reports/report.md, analysis/metacognitive_boundary.png.

Interpretation

The model knows when it will fail -- but only in its OUTPUT DISTRIBUTION, not in anything it can SAY. Deployable: read answer-token probability for a confidence/abstain signal; never trust explicit self-assessment.

Knowledgebase Update

  • Claim ledger: C40

Artifacts

  • scripts/succ_family.py (format-equalized substrate), scripts/eval_metacog.py (logit confidence signals), scripts/analyze.py
  • runs/metacog_records.json, runs/verdict.json, analysis/metacognitive_boundary.png, reports/{report,design_review}.md

Report

Rendered from reports/report.md

Motivation

The arc pinned a verified competence boundary (C39): on "advance k in a cyclic order" the model executes near-perfectly, induces a familiar rule partly (~0.45), and induces a novel rule at chance (~0.10). Unlike normal calibration work, we know exactly which tasks the model gets right and why. So: does the model's own confidence/uncertainty track that boundary — does it know when it's guessing?

Method (review-hardened)

Format-equalized single-value task (every condition shows an order block, so block-presence isn't a cue). Conditions: familiar_execute (anchor ~1.0), familiar_induce (headline — intermediate acc, surface-matched), reversal_induce (intended dissociation), novel_induce (chance). Verbalized 0–100 confidence is a degenerate constant 100, so we use two non-degenerate logit signals:

  • Implicit — P(answer): the model's probability on the digit it emits (softmax over the 10 digit tokens at the Answer: position, one forward pass) + entropy + top-2 margin.
  • Explicit — P(True): Kadavath-style self-verification ("is your answer correct? A/B"), read P(A).

The clean self-knowledge test is within-condition item-level AUROC in familiar_induce (surface matched, both classes present), compared against an external surface-feature baseline (logistic regression on {k, gap-to-seen, n-distinct-seen, query}) — a signal is self-knowledge only if it beats surface.

Results (n=150/condition)

Condition-level calibration:

conditionaccmean P(answer)mean P(True)
familiar_execute1.001.000.42
familiar_induce0.400.440.35
reversal_induce0.190.290.38
novel_induce0.100.150.38

Implicit P(answer) tracks accuracy almost perfectly; explicit P(True) is flat (~0.4) and even underconfident on the perfect execute cell.

Headline — within familiar_induce (surface-matched, acc 0.40), AUROC predicting per-item correctness:

signalAUROC
P(answer) (implicit)0.95 (95% CI 0.90–0.99)
margin / −entropy~0.90
external surface baseline0.61
P(True) (explicit)0.46 (= chance)

The implicit signal predicts which specific items the model gets right, far beyond surface features — genuine item-level self-knowledge. The explicit signal is at chance.

Deployable: selective prediction by low P(answer) lifts accuracy on attempted from 0.23 to ~1.0.

Mechanism: on novel_induce only 0.11 of wrong answers are the natural-successor intrusion → failures are high-entropy scatter (the model is uncertain there), not a confident consistent wrong-rule.

Conclusion

The model knows when it will fail — but only in its output distribution, not in anything it can say. Implicit metacognition (answer-token probability) is excellent and beats both surface and explicit self-report; explicit self-assessment (P(True), verbalized confidence) is broken. For deployment: read the answer-token probability as a confidence/abstain signal; never trust the model's explicit self-assessment. This is a latent capability unearthed (a usable self-knowledge signal exists in the fixed weights) with a sharp caveat on where to read it.

Honest caveats

  • P(True) at chance may partly reflect elicitation, but the independently-degenerate verbalized-100 confirms explicit metacognition is broken regardless.
  • reversal_induce turned out genuinely hard (0.19), not the intended "scrambled-looking-but-easy" dissociation, so the surface-vs-competence contrast rests on the external surface-baseline comparison (0.61 ≪ 0.95), not reversal.
  • Single seed; no-think answer channel (think triggers code-mode — C39).

Artifact Manifest

See reports/artifact_manifest.yaml.

Experiment log 1

Show the running log (1 entry)

Scaffold

Created as a new experiment scaffold.

Figures 1

metacognitive boundary
metacognitive boundary · analysis/

Reproduce

Smoke test

python scripts/eval_metacog.py --n 20

Full run

eval_metacog.py --n 150; analyze.py

Run steps are documented inside the experiment folder (README and scripts).

Browse the experiment folder on GitHub ↗