Research record

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: analysis/thinking_budget.py. Output: analysis/thinking_budget.json. Reproduce with python 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.

Teaching a model to think less, against simply giving it less time
Teaching a model to think less, against simply giving it less time. A small model answers a puzzle after 'thinking' for a number of internal steps. One set of models is always given a fixed number of steps. Another learned to think freely and was then trained with a penalty for every step it takes, so it learns to stop when it thinks it is done. Each dot is one penalty strength. The penalty works as advertised: it removes over a third of the thinking for at most one point of accuracy. But every dot sits below the grey line. A model that always thinks for exactly three steps beats all of them, using fewer steps on average and costing less than half as much to train. Before teaching a model when to stop, check what a fixed budget gets you.
The model thinks longest about the questions it never gets wrong
The model thinks longest about the questions it never gets wrong. The same small thinking model, trained with no penalty on thinking, broken down by the questions it is asked. Questions with more non-zero entries are harder for it: that is where every one of its mistakes happens. The solid line is how many steps it chose to think for on each kind of question. It spends its thinking backwards: the full eight steps on the easiest questions, which it never gets wrong, and about three on the hardest, where all its mistakes are. A penalty on thinking shortens every column but keeps this order. Charging for thinking does not teach a model where thinking is needed.

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.

ArmTraining
overthinker3000 steps, loss sum_n p_n CE_n -- no penalty on thinking
penalisedthe overthinker, 1000 more steps with + beta sum_n p_n n, beta from 0 to 0.1
fixed budget Nthe 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.
betaAccuracyMean thinking steps
00.984 [0.978, 0.990]6.19
0.0010.9846.10
0.0030.9845.87
0.010.9825.16
0.030.9834.54
0.10.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 budgetAccuracy
10.582
20.895 [0.817, 0.974]
30.999 [0.997, 1.000]
4-80.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 entries12345678910
thinking steps8.007.967.777.336.866.265.484.473.973.27
accuracy1.0001.0001.0001.0001.0000.9940.9590.9640.9820.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.7 times 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.

Want this measured on your data?

We build private models our clients own and run on their own infrastructure, and every engagement proves measured lift on the client's own tasks before we call it done. Start free with a readiness scorecard that tells you whether your data can support it, or book a short call.