A Fixed Budget Thinks Better
Ongoing research. This is an experimental result from active work, not a settled conclusion. The numbers are what we measured and the method is described so you can judge it, but the programme is still running and later experiments may revise what it means.
A note on the language in these records. This is a working laboratory notebook for research into training AI models more cheaply and efficiently, so you will read that an approach did not work, that a result did not hold up, or that one method was worse than another. That is the research doing its job, not a verdict on the engineering we deliver to clients. Ruling an approach out is how the search narrows, and these are the pages that teach us the most: nearly every technique we now rely on came from understanding why something else fell short. Testing our own ideas at least as hard as anyone else's is the point of publishing them. More about this programme and why we run it.
Part of a bigger question: What actually makes training cheaper? – One thing has worked: stopping part of the training early saved about 7% with no loss of quality. Everything else tested has been matched by a simpler or cheaper method -- and in two cases the clever method was only winning because it was quietly being given more.
In plain English
What we asked. Some AI models 'think' before they answer, and thinking costs compute every time the model is used. One company reported this week that it trimmed about 37% of a model's thinking with almost no loss of accuracy. A suggested way to do that is to reward correct answers and charge a small fee for every step of thinking. We tried that on a small thinking model, and compared it with the plainest alternative: pick one amount of thinking in advance and use it for every question.
What we found. The fee works. It cut our model's thinking by 38% while losing at most one point of accuracy, a strikingly similar number, though our tiny test cannot confirm theirs. But a model that simply always thinks for three steps did better than every version that learned when to stop: more accurate, fewer steps on average, and less than half as expensive to train. The reason is the interesting part. The model that chose its own thinking time spent the longest on the questions it never got wrong, and the least on the ones where all its mistakes were. The fee shortened its thinking everywhere but never fixed that order.
Why it matters. The lesson: before building a model that decides how long to think, find out how well a fixed thinking time does. And a model with lots of removable thinking is not proof that letting it choose is working. It may be a sign that it is choosing badly. On real language tasks, where questions differ far more in difficulty, choosing per question has more room to pay off, so this is a warning to check rather than a verdict.
The rest of this page is the technical record: the design, every number, and the limits. It is written for a reviewer, and you do not need it to have understood the result above.
New here? How to read a research record
- Start at the verdict. Every record states, before the experiment was run, what result would have made us abandon the idea. That is the "kill test". Then it says whether the test fired. Nothing gets reinterpreted after the fact.
- Numbers in square brackets are uncertainty.
23.4 [18.1, 28.7]means our best estimate is 23.4 and the true value is probably somewhere in that range. If a range includes zero, we cannot claim an effect. - Results that rule an idea out are kept. Roughly half of what is published here says an approach did not work, including plenty of our own. Those pages are the output, not a shortfall: knowing which direction is a dead end is what lets the next experiment go somewhere better, and most of what we now rely on came out of understanding why something else fell short. Work that only publishes what worked is not measuring anything.
- Read the Limits section. Every record ends with what it does not show. It is the most honest part of any experiment and usually the shortest.
- Pro tip: the figures near the top are designed to carry the result on their own. If you read nothing else, read the caption under each one, which says what it shows and what to take from it.
EXPLORATORY. Not a preregistered study. Local CPU, six seeds. The design and kill test were committed (7a56fcc) before any measured run; calibration used seeds disjoint from these and found the step penalty collapses every model to chance when applied from initialisation, which is disclosed in the program doc and is why the penalty is applied during fine-tuning.
Program v2 Bucket S, item S3. Decisive computation: . Output: analysis/thinking_budget.py. Reproduce with analysis/thinking_budget.jsonpython analysis/thinking_budget.py (about thirty minutes on a throttled laptop CPU); --reuse re-derives every endpoint from the saved evaluations.
The question
BottleCap AI's ThinkingCap-Qwen3.8-27B reports 37.2% fewer thinking tokens for 0.86 points of accuracy across twelve benchmarks (post). The post describes removing reasoning that does not change the answer and does not disclose its objective. The maintainer's report proposed training with reward = correctness - lambda x tokens and sweeping lambda for a Pareto frontier. That proposal is what is tested here, and nothing below is a claim about how ThinkingCap was made.
The programme's standing rule adds the comparison the proposal leaves out. An adaptive mechanism must beat the best fixed schedule you can find (K2, J7, N14 each found one that did not). Here the fixed schedule is the obvious one: decide how many thinking steps to take once, for every input.
Kill test, fixed before execution: at matched mean thinking steps, no penalised model beats the fixed-budget frontier (linear between neighbouring budgets, which randomly mixing two budgets achieves), paired over six seeds. Fires if no beta has an interval above zero.
Prior recorded in advance: moderate.
Design
The task is parity, Graves's adaptive-computation-time problem shrunk: a 10-entry vector with between 1 and 10 non-zero +/-1 entries; output whether the count of +1s is odd. The model is a GRU cell of width 64 that re-reads the input once per "thinking" step, for up to 8 steps. At each step a halting unit gives the probability of stopping there and an answer head gives the answer if it does. At test time it stops at the first step whose halting probability exceeds one half.
| Arm | Training |
|---|---|
| overthinker | 3000 steps, loss sum_n p_n CE_n -- no penalty on thinking |
| penalised | the overthinker, 1000 more steps with + beta sum_n p_n n, beta from 0 to 0.1 |
fixed budget N | the same cell, 4000 steps, always exactly N thinking steps, N = 1..8 |
Every arm gets the same number of optimiser steps. Precondition, met: every overthinker reaches 0.90 (weakest 0.935).
Result: the thinking cut reproduces
Against each seed's own beta = 0 fine-tune, the largest cut in mean thinking steps that costs at most one point of accuracy:
38.1%fewer thinking steps[33.8%, 42.4%], for at most one point.
beta | Accuracy | Mean thinking steps |
|---|---|---|
0 | 0.984 [0.978, 0.990] | 6.19 |
0.001 | 0.984 | 6.10 |
0.003 | 0.984 | 5.87 |
0.01 | 0.982 | 5.16 |
0.03 | 0.983 | 4.54 |
0.1 | 0.981 [0.975, 0.988] | 3.83 [3.31, 4.34] |
A penalised fine-tune removes over a third of the thinking at essentially no cost in accuracy. The closeness to ThinkingCap's 37.2% is a coincidence of scale, not a replication: a 27B language model over twelve benchmarks and a width-64 cell on parity share a shape of result, not a mechanism that would make the two numbers comparable. The shape is the finding: an unpenalised thinker leaves a large share of removable thinking on the table.
Result: the kill test fires -- a fixed budget of three beats all of it
| Fixed budget | Accuracy |
|---|---|
1 | 0.582 |
2 | 0.895 [0.817, 0.974] |
3 | 0.999 [0.997, 1.000] |
4-8 | 0.997-1.000 |
Every penalised model sits below the fixed-budget frontier at its own mean step count, by -0.015 to -0.018, every interval excluding zero; against the stricter envelope (the best mixture of any two budgets), the same. A model that always thinks for exactly three steps is more accurate than the best adaptive model and uses fewer steps than any of them.
It is also cheaper to train. The adaptive model trains all eight steps on every example, whatever it later halts at: 32,000 cell-steps per training row against 12,000 for a fixed budget of three, 2.7 times as much, for a worse result.
So the report's proposal does what it says -- penalising thinking removes thinking -- and **the thing it is removing thinking from is the problem**. The overthinker spends 6.2 steps where three would do, and the penalty walks it back to 3.8, still above three and still less accurate.
Why: the thinker allocates its steps backwards
Where the beta = 0 model spends its thinking, by how many entries are non-zero, and where it is wrong:
| Non-zero entries | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| thinking steps | 8.00 | 7.96 | 7.77 | 7.33 | 6.86 | 6.26 | 5.48 | 4.47 | 3.97 | 3.27 |
| accuracy | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 0.994 | 0.959 | 0.964 | 0.982 | 0.933 |
The inputs it gets wrong are exactly the ones it thinks about least. It spends the full eight steps on a single non-zero entry, which it never gets wrong, and about three on ten, where it is wrong one time in fifteen. At beta = 0.1 every column shrinks and the ordering is unchanged (6.13 down to 2.20), with the same errors in the same places.
A halting unit that reads the state learns what the state makes easy to read, and here that is evidently how much input there is, not how hard the answer is. The penalty cannot fix that: it charges every step equally, so it trims the allocation without re-ordering it. Adaptive computation is only worth its machinery if the halting signal tracks difficulty, and nothing in correctness - lambda x tokens makes it do so.
What stands
- The thinking cut reproduces in shape. A step penalty applied in fine-tuning removes
38.1%of thinking steps for at most one point of accuracy. - The kill test fires. No penalised model beats a fixed thinking budget at matched mean steps, and a fixed budget of three beats every one of them outright, at
2.7times less training compute. - The learned allocation is inverted relative to difficulty, and the penalty preserves the inversion. That is the mechanism: the objective charges for thinking without asking where it goes.
- The practical reading: before training a model to decide how long to think, find out how long a fixed budget needs to be. If a fixed budget matches it, the adaptive part is buying nothing -- and an overthinking model's removable thinking is evidence that its halting signal is poor, not that per-input budgeting works.
Limits
- Parity is not reasoning in language. A language model's thinking tokens carry intermediate results, and on real benchmarks difficulty varies far more across inputs than it does here. That is precisely the regime where per-input budgeting could beat a fixed budget, and a single-task toy with a fixed budget that saturates at three steps is close to the worst case for adaptivity. The direction of the kill test should not be read as "adaptive thinking never pays".
- One halting rule (stop at the first step past one half) and one penalty form. Sampling the halt, or a prior on the halting distribution as PonderNet uses, might allocate differently. The inversion is a fact about this learned halting signal.
- The fixed-budget frontier is measured by budget, not interpolated inside the adaptive model. Both readings of it -- neighbouring budgets and the full envelope -- give the same verdict.
- The overthinker was trained without any pressure to halt, so its allocation was never asked to track anything. Whether a model trained with a penalty from the start (after a warm-up that avoids the collapse calibration found) allocates better is the natural follow-up.
Terms on this page
Every piece of vocabulary this record uses, in plain language. Generated from the text above, so it cannot drift out of step with it.
- accuracy
- The fraction of answers a model gets right on questions it was not trained on.
- calibration
- Working out an instrument's settings from runs whose answer you already know, so it can be used on a run whose answer you do not.
- fine-tuning
- Continuing to train an already-trained model on a new, usually narrower, task.
- GRU
- Gated Recurrent Unit. A compact design for processing sequences one item at a time, with internal switches controlling what it keeps in memory.
- kill test
- A condition written down before running the experiment that says what result would make us abandon the idea. Fixing it in advance is what stops a disappointing result being reinterpreted as an encouraging one.
- parity
- Whether a count is odd or even. A classic test puzzle for models, because the answer flips with every single item and cannot be guessed from a rough impression.
- seed
- The number that fixes all the randomness in a training run. Same seed, same run. Running several seeds is how you tell a real effect from a lucky one.
- width
- How many internal numbers a model uses at each layer. The usual way we vary model size in these experiments.
Get new results as we publish them
Roughly monthly, one finding per email, in plain English first. Including the approaches that turned out not to work, which are usually the useful ones. No sales email.
Double opt-in: we send a confirmation link and add nobody who does not click it. One-click unsubscribe on every email.