kefirski.me
EMNLPPaper 1320258 min read

Steering LLM Reasoning Through Bias-Only Adaptation

Reinforcement learning on one steering vector per layer, with every base weight frozen, matches fully fine-tuned reasoning models across six math benchmarks.

The whole intervention is one vector per layer

Reinforcement learning with verifiable rewards is the recipe that turned base language models into reasoning models: sample chains of thought, check the final answer, reinforce what worked. The standard version updates every parameter of the network, which is expensive, and it leaves a scientific itch: after all that training, nobody can point at what actually changed. We wanted the smallest intervention that still gets the result.

Our answer is almost embarrassingly small. We freeze every base weight and insert one learnable steering vector sRds_\ell\in\mathbb{R}^{d} at the end of each of the LL transformer layers, added to the residual stream at every token position: h,th,t+sh_{\ell,t}\leftarrow h_{\ell,t}+s_\ell. On an 8B-parameter model those LL vectors amount to roughly 0.0016 percent of the network.

Everything frozen except L bias vectors

The intervention
The trainable surface is a single d-dimensional bias per layer, injected into the residual stream at every position. Nothing else moves during training.

Steering vectors are usually computed, not trained: the interpretability literature builds them from activation differences on contrastive prompts and treats them as amplifiers of features the model already has. We instead optimize them directly with reinforcement learning, at the scale of a real reasoning-training run, and ask how much of the fully fine-tuned model's gain this bias-only family can recover.

Trained with rewards, not demonstrations

Training is a standard online loop in the DeepSeek-R1 style. For each prompt we sample NN candidate solutions from the current policy πθ\pi_\theta and give each rollout a binary reward for a correct boxed answer. RLOO turns this into a low-variance update: the baseline b=1Nirib=\tfrac{1}{N}\sum_i r_i is the mean reward of the group, each rollout gets advantage ai=riba_i=r_i-b, and the vectors follow the policy gradient E[aθlogπθ(yx)]\mathbb{E}\left[a\,\nabla_\theta\log\pi_\theta(y\mid x)\right].

We train on the DeepScaleR problem set with 128 prompts per step and evaluate on six mathematical benchmarks: AIME24, AIME25, and AMC23 averaged over 32 samples because they are small, plus MATH500, MinervaMath, and OlympiadBench at pass at 1. Every number we report is a mean over three evaluation seeds, and each model family is compared in three variants: the untouched base, full RL fine-tuning, and our steering-only training.

It matches full fine-tuning almost everywhere

Mean accuracy across six math benchmarks

mean accuracy
base modelsteering onlyfull fine-tune
Mean accuracy across six math benchmarks Mean over AIME24/25, AMC23, MATH500, MinervaMath, and OlympiadBench, three seeds. Steering-only training tracks full fine-tuning within noise on every Qwen model and ties it exactly on Llama3.1-8B-Instruct. Q2.5-1.5B: base 0.3; steering 23.2; full 22.7 Q2.5-7B: base 24.2; steering 36.4; full 37.1 Q2.5-14B: base 26.1; steering 42.3; full 41.3 QMath-1.5B: base 18.1; steering 33.9; full 33.6 QMath-7B: base 24.8; steering 43.3; full 43.5 Llama-8B-It: base 21.7; steering 26.1; full 26.1 012.52537.550 base: Q2.5-1.5B, 0.3steering: Q2.5-1.5B, 23.2full: Q2.5-1.5B, 22.7Q2.5-1.5Bbase: Q2.5-7B, 24.2steering: Q2.5-7B, 36.4full: Q2.5-7B, 37.1Q2.5-7Bbase: Q2.5-14B, 26.1steering: Q2.5-14B, 42.3full: Q2.5-14B, 41.3Q2.5-14Bbase: QMath-1.5B, 18.1steering: QMath-1.5B, 33.9full: QMath-1.5B, 33.6QMath-1.5Bbase: QMath-7B, 24.8steering: QMath-7B, 43.3full: QMath-7B, 43.5QMath-7Bbase: Llama-8B-It, 21.7steering: Llama-8B-It, 26.1full: Llama-8B-It, 26.1Llama-8B-It mean accuracy
Mean over AIME24/25, AMC23, MATH500, MinervaMath, and OlympiadBench, three seeds. Steering-only training tracks full fine-tuning within noise on every Qwen model and ties it exactly on Llama3.1-8B-Instruct.

On Qwen2.5-14B steering actually edges ahead, 42.3 against 41.3; on Qwen2.5-Math-7B it is 43.3 against 43.5; on the instruct-tuned Llama the two are identical at 26.1. The one clear exception is base Llama3.1-8B, where steering reaches 9.1 against 11.5 for full tuning, recovering roughly seventy percent of the gain. We come back to what that exception teaches below.

What the frozen network buys on Qwen2.5-14B

MetricFull fine-tuneSteering only
Trainable parameters14.7 B245 K
Optimizer memory13.8 GB240 KB
Update and broadcast per step9.94 s0.11 s
One training epoch (314 steps)52 min34 s
Because only the vectors train, the optimizer state fits in kilobytes and the per-step parameter broadcast to the inference engine becomes negligible.

The economics follow directly from the parameter count. Optimizer state for 245 thousand parameters is 240 kilobytes instead of 13.8 gigabytes, and pushing fresh weights to the sampling engine after every update takes a tenth of a second instead of ten. Over the 314 steps of an epoch that is 34 seconds of overhead where full fine-tuning spends 52 minutes.

A logit lens on what training added

Because the entire effect of training lives in LL vectors, we can ask directly what they do. We read each ss_\ell through the unembedding matrix with the logit-lens trick: for every vocabulary token vv with unembedding row uvu_v, the cosine c(v)=s,uv/suvc_\ell(v)=\langle s_\ell,u_v\rangle\,/\,\lVert s_\ell\rVert\lVert u_v\rVert says whether the vector pushes the residual stream toward or away from that token. We collect the fifty most-aligned tokens per layer and have GPT-o3 translate and cluster them.

Three depths, three jobs

Logit-lens readout
Representative clusters for Llama3.1-8B-Instruct trained on GSM8K. The learned vectors are not noise: each depth amplifies a coherent, readable family of tokens.

The depth profile tells a story. At layer 2 the vector aligns with source-code and test-harness vocabulary plus named entities, structure the model seems to borrow from programming for formal manipulation, and the names that populate word problems. At layer 17 it shifts to correctness, necessity, and confirmation, the vocabulary of checking a step. At layer 30 it promotes Because, Therefore, and However, in several languages at once, the connective tissue that assembles verified steps into an argument.

What one vector can and cannot do

A bias per layer cannot write new circuits into frozen weights; it can only shift the operating point of circuits that already exist. That such a shift recovers full RL performance is strong evidence for the view that reasoning training mostly amplifies behaviors pretraining already built. Our results tighten the parameter budget on that claim considerably: not millions of adapter weights, but thousands of bias dimensions.

The base Llama3.1-8B exception sharpens the picture rather than blurring it. A steering vector is the same at every token position, and in a follow-up on GSM8K and MATH we found that replacing it with a rank-4 LoRA on the MLP down-projection, in effect a token-dependent steering vector, closes the remaining gap. Where a single global direction is not enough, a slightly position-aware one is.

We are careful about scope. Our sweep covers one online-RL setup and mathematical reasoning only, and the logit lens reads each vector in isolation, ignoring how later layers transform the injected signal. But the practical recipe stands: if you want an RL-tuned reasoning model and a budget measured in kilobytes of optimizer state, one vector per layer is very likely all you need.

If one bias vector per layer recovers RL-level reasoning, the capability was already in the base model; training mostly learns to switch it on.