The Halt Vector: Internalizing a Causal Steering Intervention for Efficient Reasoning
Organizations: University of Waterloo · Independent Researcher
Abstract
Reasoning models do not stop when they know the answer. On DeepSeek-R1-Distill-Qwen-7B the chain of thought runs about twice as long as the model's own answer probability takes to settle, and how much of that excess is removable varies from problem to problem, so a global length penalty cannot take it out. We take it out by internalizing a causal interpretability finding into the weights. The mechanism is a halt vector: a difference-of-means direction at layer 18 of this model whose steering strength controls how long it thinks, while a replicated value axis does nothing. Installing that intervention in the weights is harder than it looks. Maximizing the scalar projection onto the direction corrupts the off-axis dimensions a frozen downstream reader depends on, and generation gets longer instead of shorter; what works is reconstructing the whole steered activation with those dimensions pinned to their natural values. Fit from 24 problems and no reinforcement learning, the halt removes about a quarter of the thinking at held accuracy across five unseen benchmarks, and the cut tracks each problem's own removable slack at 0.70. It also closes a non-termination pathology that grows with difficulty and that a decoding-time confidence hook makes worse. We do not claim to beat a well-tuned length penalty or decoding-time early exit on the raw trade-off; the contribution is how the halt is obtained.
Figures & tables
| train-24 | AMC | |||||
|---|---|---|---|---|---|---|
| direction distilled at | acc | think | acc | think | ||
| halt vector (ours) | 0.792 | 4911 | 25% | 0.822 | 4760 | 24% |
| value axis (control) | 0.771 | 6253 | 4% | 0.797 | 6162 | 2% |
| random direction (control) | 0.771 | 7195 | 10% | 0.807 | 6468 | 3% |
| eval set | base (acc / think) | ours (acc / think) | think | closed |
|---|---|---|---|---|
| goldilocks holdout (disjoint) | 0.845 / 6617 | 0.835 / 5014 | 24% | 0.98 |
| AMC (cross-benchmark) | 0.813 / 6280 | 0.822 / 4760 | 24% | 0.98 |
| AIME24 | 0.512 / 10413 | 0.492 / 7898 | 24% | 0.94 |
| AIME25 | 0.358 / 10808 | 0.385 / 8376 | 22% | 0.91 |
| MATH500 ( Hendrycks et al., 2021 ) | 0.934 / 3101 | 0.930 / 2495 | 20% | 0.99 |
| reconstruction (ours) | DEER | |||
|---|---|---|---|---|
| benchmark | think | acc | think | acc |
| goldilocks holdout | 24% | 1.0 | 64% | 5.0 |
| AMC | 24% | 0.9 | 40% | 8.4 |
| AIME24 | 24% | 2.0 | 26% | 6.7 |
| AIME25 | 22% | 2.7 | n/a | n/a |
| MATH500 | 20% | 0.4 | 54% | 4.0 |
Appendix figures & tables17 assets
Supplementary material from the paper’s appendix.
Appendix
| arm (AMC, 16k, ) | accuracy | mean think-tok | think |
|---|---|---|---|
| base | 0.813 | 6280 | n/a |
| naive length penalty (control) | 0.803 | 5911 | 5.9% |
| per-problem budget (best) | 0.830 | 5996 | 4.5% |
| per-problem budget (full data) | 0.792 | 6264 | 0.3% |
| method | where the “stop” signal lands | outcome |
|---|---|---|
| outcome RL | one scalar over tokens | tail-trims only |
| plain SFT (imitate short traces) | 0.34% of the token loss | no change in length |
| SimPO (length-normalized preference) | canceled by length-normalization | null |
| vanilla DPO (prefer short) | a ranking of two fixed sequences | held accuracy, no compression |
| boundary-weighted SFT (up-weight stop tokens) | on the stop tokens | moves length, trades accuracy |
| layer | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| lock-on (ours) | .573 | .658 | .685 | .788 | .795 | .785 | .804 | .795 | .795 | .803 | .792 | .773 | .764 | .768 |
| between-item | .955 | .961 | .960 | .945 | .943 | .945 | .946 | .942 | .942 | .943 | .942 | .945 | .946 | .947 |
| layer | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| lock-on (ours) | .761 | .768 | .753 | .748 | .758 | .776 | .793 | .782 | .787 | .799 | .796 | .793 | .766 | .554 |
| between-item | .949 | .950 | .950 | .950 | .951 | .952 | .949 | .953 | .953 | .958 | .965 | .961 | .954 | .955 |
| arm | acc | tok_think | think | closed |
|---|---|---|---|---|
| base | 0.812 | 6516 | n/a | 0.95 |
| hold , attn (headline) | 0.792 | 4911 | 25% | 0.99 |
| hold , attn | 0.833 | 5818 | 11% | 0.96 |
| hold , attn+MLP | 0.698 | 5235 | 20% | 0.99 |
| hold , attn+MLP | 0.740 | 5943 | 9% | 0.95 |
| gate , attn | 0.823 | 5870 | 10% | 0.93 |
| scalar-projection arm | proj_post | acc | tok_think | think | closed |
|---|---|---|---|---|---|
| base | n/a | 0.812 | 6516 | n/a | 0.95 |
| attn+MLP, target margin 50 | 0.336 | 0.573 | 9331 | 43% | 0.61 |
| raw+MLP, target margin 30 | 0.238 | 0.573 | 8984 | 38% | 0.67 |
| attn+MLP, target margin 15 | 0.119 | 0.781 | 7648 | 17% | 0.85 |
| raw, target margin 15 | 0.077 | 0.688 | 7453 | 14% | 0.79 |
| arm | family | on-axis | drift | drift/on-axis | %out | KL p50 |
|---|---|---|---|---|---|---|
| null | control | 0.0000 | 0.000 | n/a | 0.0% | 0.0000 |
| reconmlp | reconstruction | 0.1292 | 0.272 | 2.11 | 0.0% | 0.0004 |
| champion | reconstruction | 0.0828 | 0.303 | 3.66 | 0.0% | 0.0002 |
| m15 | scalar, target | 0.1474 | 0.769 | 5.22 | 0.2% | 0.0005 |
| m50lam4 | scalar, | 0.1491 | 0.848 | 5.69 | 1.1% | 0.0006 |
| m50lam2 | scalar, | 0.1257 | 0.718 | 5.71 | 0.3% | 0.0005 |
| arm | on-axis | drift | drift/on-axis | %out | KL p50 |
|---|---|---|---|---|---|
| champion (reference) | 0.0828 | 0.303 | 3.66 | 0.0% | 0.0002 |
| m15 , no penalty | 0.1474 | 0.769 | 5.22 | 0.2% | 0.0005 |
| m15 penalty, | 0.0120 | 0.053 | 4.43 | 0.0% | 0.0000 |
| m15 penalty, | 0.0046 | 0.044 | 9.46 | 0.0% | 0.0000 |
| m15 penalty, | 0.0008 | 0.041 | 50.91 | 0.0% | 0.0000 |
| method | acc | acc (pp) | tok_think | think | closed |
|---|---|---|---|---|---|
| base | 0.812 | n/a | 6516 | n/a | 0.95 |
| imitation (halt-SFT) | 0.708 | 10.4 | 7500 | 15% | 0.82 |
| steering-distillation (uniform) | 0.740 | 7.2 | 6057 | 7% | 0.85 |
| steering-distillation (gated) | 0.750 | 6.2 | 5179 | 21% | 0.93 |
| reconstruction (ours) | 0.792 | 2.0 | 4911 | 25% | 0.99 |
| comp acc | comp think | comp think | anchor acc | anchor think | anchor think | |
|---|---|---|---|---|---|---|
| 10 | 0.833 | 5818 | 11% | 0.719 | 4912 | 2% |
| 25 | 0.792 | 4911 | 25% | 0.750 | 4174 | 13% |
| 40 | 0.781 | 4788 | 27% | 0.812 | 3909 | 19% |
| 50 | 0.740 | 4511 | 31% | 0.750 | 3778 | 21% |
| holdout | AMC | |||||
|---|---|---|---|---|---|---|
| adapter (150 problems) | acc | think | closed | acc | think | closed |
| recon-full, ep4 | 0.792 | 19% | 0.96 | 0.780 | 20% | 0.96 |
| recon-full, ep12 (erosion) | 0.825 | 0.2% | 0.93 | 0.788 | 9% | 0.96 |
| hybrid , ep4 | 0.790 | 12.6% | 0.94 | 0.812 | 17.8% | 0.95 |
| hybrid , ep12 | 0.733 | 23.1% | 0.86 | 0.773 | 19.9% | 0.79 |
| hybrid , ep12 (recon off) | 0.802 | 0.9% | 0.92 | 0.773 | 1.9% | 0.89 |
| holdout | AMC | |||||
|---|---|---|---|---|---|---|
| soft-truncation arm | acc | think | closed | acc | think | closed |
| , ep4 | 0.790 | 32.6% | 0.98 | 0.800 | 31.5% | 0.99 |
| , ep12 | 0.780 | 12.3% | 0.96 | 0.812 | 21.6% | 0.98 |
| , ep4 | 0.784 | 29.2% | 0.97 | 0.791 | 27.8% | 0.97 |
| , ep12 | 0.752 | 6.3% | 0.95 | 0.803 | 16.3% | 0.98 |
| , ep4 | 0.770 | 24.3% | 0.97 | 0.789 | 26.1% | 0.98 |
| surface / arm | acc | acc (pp) | tok_think | think | closed | |
|---|---|---|---|---|---|---|
| AMC, base greedy | n/a | 0.771 | n/a | 6796 | n/a | 0.77 |
| DEER base | 0.98 | 0.747 | 2.4 | 4236 | 37.7% | 0.89 |
| DEER base | 0.95 | 0.687 | 8.4 | 4062 | 40.2% | 0.89 |
| DEER base | 0.90 | 0.590 | 18.1 | 3215 | 52.7% | 0.96 |
| AMC, champ greedy | n/a | 0.687 | n/a | 6899 | n/a | 0.73 |
| DEER champ | 0.95 | 0.699 | 1.2 | 3513 | 49.1% | 0.92 |
| seed 17 | seed 0 | seed 42 | mean sd | |
| train-24 | ||||
| acc | 0.792 | 0.771 | 0.823 | 0.795 0.026 |
| think | 4911 | 5021 | 4724 | 4885 150 |
| think | 25% | 23% | 28% | 25.0% 2.3 |
| closed | 0.99 | 0.99 | 1.00 | 0.99 |
| AMC | ||||
| layer | (strength, length) | 10: think / term / acc | 25: think / term / acc |
|---|---|---|---|
| 6 | 0.63 | 981 / 77% / 14% | 27 / 67% / 0% |
| 12 | 0.44 | 3685 / 75% / 28% | 8192 / 45% / 2% |
| 18 | 0.82 | 3256 / 83% / 56% | 18 / 89% / 12% |
| 24 | 0.24 | 4619 / 78% / 72% | 3180 / 80% / 61% |
| (layer 6) | median think-tok | terminated | accuracy | value-axis control |
|---|---|---|---|---|
| 50 | 12288 (cap) | 0% | 1.6% | flat |
| 0 | 5188 | 88% | 81% | identical at |
| 25 | 32 | 68% | 1.6% | flat |
| 50 | 17 | 77% | 0% | flat |
| benchmark | base closed | ours closed | base non-term | ours non-term |
|---|---|---|---|---|
| MATH500 | 0.97 | 0.99 | 3% | 1% |
| train-24 (goldilocks) | 0.95 | 0.99 | 5% | 1% |
| goldilocks holdout | 0.93 | 0.98 | 7% | 2% |
| AMC | 0.89 | 0.98 | 11% | 2% |
| AIME24 | 0.69 | 0.94 | 31% | 6% |
| AIME25 | 0.62 | 0.91 | 38% | 9% |
| bursts | problems | holdout think (acc) | AMC think (acc) | closed |
|---|---|---|---|---|
| 1 | 24 | 22.0% (0.819) | 24.2% (0.822) | 0.98 |
| 2 | 48 | 24.2% (0.811) | 26.6% (0.809) | 0.98 |
| 3 | 72 | 24.3% (0.824) | 25.8% (0.839) | 0.98 |
| 4 | 96 | 23.8% (0.816) | 26.1% (0.809) | 0.98 |
| 5 | 120 | 24.7% (0.805) | 23.8% (0.810) | 0.98 |
| 6 | 144 | 24.9% (0.825) | 26.2% (0.815) | 0.98 |
Efficient Language Model Reasoning
Efficient language model reasoning studies how to improve problem-solving accuracy while reducing inference, memory, latency, and training costs.
See all 370 papers