Research · Speculative decoding · Representation-level probing
Acceptance Prediction before Drafting
A small drafter guesses the next few tokens; the big target model checks them in one pass and keeps what it agrees with. Rejected guesses waste the draft compute. So it pays to know, up front, whether a round is worth drafting at all. But every signal used for this today is computed after the draft exists, once the cost is already paid. The target holds the answer one round early: a linear probe on the state it left cached at the last accepted token predicts whether the next round's first token will be accepted, before any draft runs.
Qwen2.5-7B / 0.5BLlama-3.1-8B / 3.2-1BLossless greedy decodingPrompt-grouped splitsFrozen test, scored oncePre-registered atlas
+0.04 – +0.11AUROC the probe adds on top of a hard baseline, in all three settings
Scored onceFrozen test, strict dev to test. The gains are +0.056, +0.103 and +0.039.
2 – 10×How much more steering the state hurts acceptance than matched controls do
0.53 – 0.56What random columns of the same width score. So the gain is signal, not size.
Where the signal sits in the round
The target checks round r−1 in one pass. As it reads, it builds a state for every token in the prefix. Take that state at the last kept token, the frontier. Take it at four depths: layers 6, 12, 18 and 24. Join them into one vector. That is 14,336 numbers for the Qwen pair and 16,384 for Llama. Three things matter here. It is the target's state, not the drafter's. It is free, because the check just built it. And it is in memory before the next round drafts.
- Already paid for
Round r−1 is checked
The target reads the whole prefix in one pass. It builds a state for each token. At the last kept token, that state just sits there in memory. We call the spot the frontier.
- Our signal
Read the frontier state
One dot product over 14k numbers. It takes about 16 µs. That is 0.015% of a round. No draft compute has been spent yet. This is where our signal lives.
- All prior signals
Round r drafts
Now the drafter runs. Every control signal we found in prior work shows up here, and not before. That list covers draft entropy, acceptance heads, confidence schedulers and tree pruners. By then the cost is paid.
Main result: the cached state predicts next-round acceptance
Work on the dev split left one candidate alive: the raw frontier state. We then scored the frozen test split once per protocol. The spec was registered in advance. Nothing at all was selected on test. P1 runs the dev-frozen pipeline out of fold, inside the test rows.P2 is the strict dev-to-test transfer. The scaler, probe, control columns, fill-in means, domain list and calibrator are all fit on dev alone. Test rows are then scored once. P2 is the one that matches serving.
| Setting | Test rows | P1 ΔAUROC | P2 ΔAUROC | P2 base → combined | P2 control |
|---|
| Qwen-v1 | 11,982 | +0.076 [+0.063, +0.089] | +0.056 [+0.041, +0.070] | 0.660 → 0.716 | 0.542 |
|---|
| Qwen-v2 | 7,191 | +0.092 [+0.073, +0.111] | +0.103 [+0.083, +0.124] | 0.626 → 0.729 | 0.528 |
|---|
| Llama-v1 | 9,610 | +0.053 [+0.037, +0.070] | +0.039 [+0.023, +0.057] | 0.713 → 0.752 | 0.559 |
|---|
Every interval clears zero. P(Δ≤0) = 0.000 in every cell. The dev split shows the same pattern: 0.670 → 0.742 on Qwen-v1, 0.618 → 0.731 on Qwen-v2, and 0.696 → 0.765 on Llama-v1. The numbers come back in a fresh container to about ±0.001 AUROC. That spread is BLAS rounding noise. It is ten times smaller than the CI half-widths.
What this rules out. The baseline already holds domain one-hots, and captures are spread evenly by domain. So the gain is not the probe telling domains apart. The baseline also holds the target's entropy and margin from the round before. In theory those are the free variables that drive greedy acceptance. So the result says one thing plainly: entropy and margin are not enough. The cached state holds more that bears on the choice.
Methodology
The study is built to repeat cleanly and to leak nothing. An exact engine. Sealed captures. A bar we set high on purpose. And a rule that no number here is ever typed by hand.
A verified lossless engine
The engine is greedy and exact match, with one target and one drafter. In fp32 it passes bit-identity gates against target-only decoding. It passes in every test, in both families, 118 of 118 on the Llama pair. The gates cover skip, stop-rule and end-of-sequence cases. In bf16 the math is not exact. Batch check and step-by-step decode drift apart on about 0.7% of tokens, through argmax ties. We log that per request rather than hide it. Either way the acceptance labels stay exact.
Two families, two corpora
Main pair: Qwen2.5-7B-Instruct with the 0.5B drafter. Second pair: Llama-3.1-8B-Instruct with the 3.2-1B drafter. Model revisions are pinned. Corpus v1 has 644 prompts over chat, code, math and summaries. Corpus v2 has 1,494 prompts over seven axes. It adds translation, grounded QA and structured output. We report three settings all the way through: Qwen-v1, Qwen-v2 and Llama-v1.
Sealed traces, scripted numbers
Draft length is fixed at 8. Max new tokens is 256. We run bf16, one request per batch, on A100-class cards. Captures are spread evenly by domain over 400 prompts. That gives 23,568, 14,122 and 19,269 rows per setting, each at four layers. A versioned script reads locked files and prints every number here. None of them is worked out by hand.
A deliberately hard bar
The baseline holds every free pre-round signal we could find. A running mean of acceptance over earlier rounds. The target's entropy at the frontier, from the round before. Its top-1 to top-2 margin. Flags for missing values, with mean fill-in. And one-hots for the domain. Theory says margin is the term that governs greedy acceptance. Drop it and a claimed gain would mean nothing.
Prompt-grouped everything
We split 50/50 into dev and test by prompt, never by token. So no split here is random at the row level. Probes are logistic models with an l2 penalty. We set C=0.1 on dev, so that fits repeat run to run. Each is fit under 5-fold GroupKFold, with columns scaled inside each fold. Error bars are 95% grouped bootstrap CIs on the AUROC gain, over 1,000 resamples. The length probes use 2,000.
Equal-capacity controls
Each candidate is scored against two fakes of the same width. Both are random Gaussian columns. One is raw, one is matched per column for spread. A gain that random columns can match is not a gain. Ours sit at 0.53 to 0.56 AUROC, at or below the baseline.
Steering the direction disrupts real acceptance
A gain in what we can predict is not enough on its own. It cannot tell a load-bearing state from a shadow. So on held-out test rounds we steer the target's state at the frontier. We do it with forward hooks: h ← h + α·σ·d̂. Here d̂ is the acceptance direction fit on dev. Next, σ is the mean state norm, which sets the dose scale. The dose α runs over {−2, −1, 0, +1, +2}. Each layer gets controls: random directions at the same norm, and shuffled ones. A no-op check confirms the hook site (fidelity 0.95 on Qwen-v1, 1.00 on Llama).
Steering along d̂ hurts real first-token acceptance 2–10× more than the controls do. The damage tracks the dose. It traces an upside-down U that peaks at α=0. It holds at all four probed layers, in both families. On Llama the real hit is 0.32–0.40, while the controls sit near zero. The gap holds even in narrow bins of the entropy change it induces. So the effect does not run through entropy alone. We read this at the level of the state and no further. The probed direction drives whether the target's next token can agree. We make no claim about the inner workings.
Calibration: where the odds are honest, and where they aren't
Raw probes over many columns are far too sure of themselves. Before calibration the combined ECE runs as high as 0.14. One global Platt map fixes most of that. The map is monotone, so AUROC does not move, and it cannot leak. Under P1 the test ECE falls back to0.016–0.024. Under P2 we freeze the map on dev out-of-fold scores. We then apply it to test scores from a model fit on all of dev. That shift in spread costs us some calibration on one setting. The combined test ECE is 0.037 on Qwen-v1, against 0.024 and 0.021 on v2 and Llama. We report it rather than patch it. The ranking metrics do not change.
Where the signal stops: first token only
Survival probes by length show where the signal lives. At k=1 the gain is strong and clean in all three settings. By k≥4 it is null to harmful. It is clearly worse than the baseline on v2 and Llama at k=8. That is the point where domain and history already predict long runs. A length controller run off the survival probe also fails to beat one run off the baseline. The one exception is a small win at a single draft-cost point.
| Survival k | Qwen-v1 | Qwen-v2 | Llama-v1 |
|---|
| P(A ≥ 1) | +0.073 | +0.103 | +0.065 |
|---|
| P(A ≥ 2) | +0.008 | +0.045 | −0.007 |
|---|
| P(A ≥ 4) | −0.010 | −0.004 | −0.019 |
|---|
| P(A ≥ 6) | −0.002 | −0.011 | −0.032 |
|---|
| P(A ≥ 8) | +0.002 | −0.018 | −0.021 |
|---|
AUROC gain on the dev split, domain controlled, 2,000-resample grouped bootstrap. Green marks a clean gain. Red marks a clean loss. The frontier state answers one question: will speculation connect at all next round? It does not say for how long. That sets it apart from work that predicts draft length before the draft. Those papers find that treating length as a class label does worse. It also points at the skip choice as the natural user of the signal.
What it costs, and where it actually matters
Reading the frontier state is free on the capture path. The states fall out of the check anyway. The probe is one dot product over 14k numbers. That is about 16 µs per round, or0.015% of a round. The honest caveat is engineering, not compute.
The decision proxy. We sweep a calibrated skip-or-draft choice across draft-cost ratios. When drafting is cheap (0.2× verify or less) every calibrated model says "always draft". No pre-round signal changes a thing there. Adding a skip arm at those costs even hurts, by 0.3% to 0.7%. At a draft cost of 1× verify or more, the probe cuts regret in a way the CIs back. That holds across a range of costs on Qwen-v2 and Llama, under both protocols, and on Qwen-v1 under P1. Under P2, Qwen-v1 clears the bar at one cost point only. We report that sensitivity rather than hide it. So the signal changes real decisions where drafting is dear: launch-bound drafters, large drafters, packed batch serving. Elsewhere it is a diagnostic.
It adds to control inside the round. It does not replace it. For adaptivelength, a draft-entropy stop inside the round is still stronger. It beats the best fixed length by +6.7% to +11.2% in serving efficiency across the three settings. On Qwen-v1 that is +11.2%, 95% CI [+10.3%, +12.1%]. A pre-round gate on frontier entropy wins back only a third to a half of that. The two signals pair up by timing. One admits or skips a round, and schedules it. The other stops a round that has begun.
Acceptance itself has shape: the atlas
Here is a second question, and a purely behavioral one. No probes. No inner states. Does acceptance have a shape we can read? We pre-registered one contrast on dev. It was HIGH (code_delimiter, operator, number, pooled) minus LOW (named_entity, reasoning_transition, pooled). We then fixed criteria T1–T4 and the rule that maps each one to an outcome. We committed all of it before the test split was unblinded. A script did the scoring. PASS 3/3.
| Registered criterion | Qwen-v1 152,592 tok | Qwen-v2 209,160 | Llama-v1 124,000 |
|---|
| T1. Overall HIGH − LOW contrast | +0.1947 [+0.172, +0.216] | +0.2104 [+0.193, +0.228] | +0.1177 [+0.103, +0.134] |
|---|
| T2. Positive and CI-clean in every domain cell | 4 / 4 | 7 / 7 | 4 / 4 |
|---|
| T3. Tail stability vs. the setting marginal | PASS (0.742) | PASS (0.688) | PASS (0.833) |
|---|
| T4. Phase spread (registered as an expected null) | 0.0084 PASS | 0.0036 PASS | 0.0589 (descriptive) |
|---|
The contrast runs +0.12 to +0.21 in acceptance rate. And it is not domain identity in disguise. It is clean and positive in all 15 domain cells across the three settings. The tails hold across families too. In every setting, code_delimiter,operator, number, clause_boundary and punctuationsit above the marginal. In every setting, named_entity sits below it. The reading is a plain one. A small drafter is good at the tokens that syntax forces on the spot. It misses the tokens that call for what the target knows, or for a choice the target has to make. Our domain marginals recover the known domain axis (Qwen-v1 dev: summarization 0.657 < chat 0.700 < code 0.813 < math 0.875). We treat that axis as a control. The category structure holds once we condition on it.
The half that failed. The claim as first posed had a second axis. It said acceptance would vary across the phases of generation. It did not survive. On both Qwen settings the phase spread is flat, and flat by a wide margin: 0.0084 and 0.0036, against a bar of ≤0.03 set in advance. Llama does show a steady rise (prefix 0.794 → mid 0.824 → late 0.853). But that is one family on its own, and a length or mix confound is plausible. So we record it and claim nothing from it. The atlas result is narrowed to the category axis.
Two disclosures. First, a cell we had named in advance as free to be null came out positive. Llama-code was flat on dev, at −0.006, sitting on a 0.913 ceiling. On test it landed at +0.0674 [+0.0304, +0.1097]. So the dev null was ceiling noise. Second, the weakest cell that survives is Qwen-v1 summarization. It comes in at +0.0544, with P(Δ≤0) = 0.027 and a percentile CI lower bound of −0.002. That clears the p<0.05 bar we set in advance. We flag it as the margin to watch in any re-run. One more oddity we record but do not explain: on Llama the special category accepts at 0.007 (n=883). The likely cause is a gap in how chat templates and special tokens are handled, not an acceptance effect. We leave it out of the contrast.
Negative results that back the claim
Clean negativeDraft-side states don't beat surface signals
On the same traces we probed the drafter's own states. The best layer reaches 0.803 AUROC. But cheap surface signals reach 0.870: entropy, margin, history and position. Add the draft probe on top of those and it gains at most +0.006. So this is not a story about probes beating baselines. What does the work is where you read, and when.
Clean negativeCheap compressions lose the signal
We tried cheaper stand-ins for the full state. Low-rank projections at k=16. Norm summaries. Layer-alignment features. Drift speeds. Each adds only +0.01 to +0.04, and none holds up across settings. Only the full state clears the bar in all three. A small stand-in that works is the main open problem here.
Clean negativeHistory-only control is weak
Our baseline already holds the acceptance history. A fixed bandit over length arms just learns the best single arm. So in replay it ties best-fixed by design: 2.4015 against 2.4022. The entropy stop that reads context reaches 2.6715. That is context for state-level signals, not a contest.
Systems contextNo wall-clock claim
The decision study is a calibrated proxy run over sealed traces. We did not put the probe in a live serving path and time it. That test is the systems gate. Until it runs, we claim no speedup in clock terms. One more gap: engines today do not hand you frontier states from many layers. Shipping this needs that hook, which is cheap, or the small stand-in above, which is open.
Context: the earlier phase of this work
Before the pre-round question, we used the same traces to ask two others. Could draft lengthadapt? Could the choice of draft model adapt? Those results are not claims of this paper. But they set the bar the pre-round signal is measured against, and one is a clean dead end worth recording. Here are the questions that phase asked:
Yes
Can we pick a smart number of tokens to draft each round instead of a fixed number?
A stop rule inside the round beats the best fixed count and cuts waste sharply. The gain holds on fresh held-out prompts, with no re-tuning.
No
Do off-the-shelf topic-specialist draft models help?
The Qwen2.5-Coder model only ties the same-size Qwen2.5 generalist on code. The Qwen2.5-Math model loses to that generalist even on math. We ran them as shipped. There was no fine-tuning and no distillation toward the target. So this is a result about the released weights, not about specialists in principle.
Collapses to the first question
Does combining both ideas beat the best fixed setup?
Off-the-shelf specialists add nothing. So the only live lever from that phase is draft length.
Adaptive draft length, the within-round baseline
We replay draft-length policies on the frozen exam set. A stop rule inside the round beats the best fixed count by +11.2% efficiency on Qwen-v1, 95% CI [+10.3%, +12.1%]. Across the three settings the range is +6.7% to +11.2%. This is the number the pre-round gate is measured against above, and for length it wins. It is a signal from inside the round. It reads how unsure the drafter is once drafting has begun.
| Policy (frozen exam set) | Tokens / round | Wasted per kept token | Efficiency |
|---|
| Best fixed count (8) | 4.32 | 1.08 | 2.40 |
|---|
| Within-round entropy stop | 3.85 | 0.41 | 2.67 (+11.2%) |
|---|
| Oracle hindsight (ceiling) | 4.32 | 0.02 | 3.23 |
|---|
Bandit-style "try and learn" controllers over length arms cannot beat this. A fixed bandit learns the best single arm, so it ties best-fixed by construction: 2.4015 against 2.4022. The entropy stop reaches 2.6715. Acceptance history sits in the pre-round baseline for the same reason. See the interactive demo →
Off-the-shelf specialist drafters: a tested dead end
We scored five released checkpoints, as shipped, across four topics. Each was measured against the same target output. None of them was fine-tuned, distilled or aligned toward the target. The same-size Qwen2.5-Coder model only ties the Qwen2.5 generalist on code. The Qwen2.5-Math model is worse than the same-size generalist even on math. The best router over this set would pick the 1.5B generalist everywhere. Acceptance is about matching the target's own style. A generalist from the same family matches a generalist target better than a narrow expert does. Bigger helps. Picking an off-the-shelf specialist does not.
Scope of this negative. It says that swapping in a published domain checkpoint is not a lever for acceptance. It does not say specialization can never help. A drafter trained or distilled to copy this target is a different test, and one we did not run.
| Draft model | chat | code | math | summaries |
|---|
| Qwen2.5 0.5B (generalist) | 0.738 | 0.898 | 0.910 | 0.672 |
|---|
| Qwen2.5-Coder 0.5B (off-the-shelf) | 0.675 | 0.899 | 0.877 | 0.603 |
|---|
| Qwen2.5 1.5B (generalist) | 0.789 | 0.917 | 0.928 | 0.736 |
|---|
| Qwen2.5-Math 1.5B (off-the-shelf) | 0.662 | 0.862 | 0.919 | 0.554 |
|---|
| Qwen2.5-Coder 1.5B (off-the-shelf) | 0.753 | 0.917 | 0.917 | 0.695 |
|---|
Limitations
- First token only. We make no claim about run length. A controller that picks length gets no help from it.
- We use the whole frontier state. A cheap version you could ship is still open.
- One decoding mode: greedy exact match. We did not test acceptance under sampling.
- Two families, one drafter each. Trained heads of the EAGLE class are out of scope by design. Ours is the cell where the drafter stands alone.
- We picked layers 6, 12, 18 and 24 for the drafter depth, then reused them on the deeper targets. A sweep tuned to the target may make the result stronger. It may also pin it to fewer layers.
- The decision study is a proxy over sealed traces. No end-to-end timing test was run.
- The harness runs one request at a time. We did not measure how batches interfere.
- Under the strict protocol, calibration gets worse on one setting. We report that rather than patch it.
- We describe and log the bf16 tie-breaking drift. We do not remove it.
- The atlas leans on one taxonomy, v1.0.0, whose categories overlap. It covers two families and two corpora. Its phase half did not survive. It describes behavior only. We do not tie it to the probe evidence.
What it means
- The claim. Before any draft compute is spent, the target has already cached a state. That state carries a signal about whether the next round will connect. The signal is calibrated, and steering it changes real acceptance. It survives a baseline of entropy, margin, history and domain. It shows up in two model families and on two corpora. And it held under frozen-test rules, with the strict protocol scored exactly once.
- Its bounds, stated plainly. First token only, not run length. It adds to control inside the round rather than replacing it. It changes real decisions only where drafting is dear. Elsewhere it is a diagnostic. We claim no more than that. And we claim no gain in clock time at all until the systems gate runs.
- Negatives that do work. Draft-side states do not beat free surface signals. Cheap stand-ins for the frontier state lose most of the gain. And off-the-shelf specialist drafters do not beat a same-size generalist. Each one narrows where the real headroom is.
- One result stands on its own, with no appeal to inner states. Acceptance is shaped by token category. Structural tokens beat entity tokens by +0.12 to +0.21, in all 15 domain cells, against criteria we registered before unblinding. At the grain we tested, it is not shaped by the phase of generation. We report that failed half too.