PIXELBANKv8.2.1
Menu
Back to Concepts
Parameter-Efficient Fine-Tuning2026

TinyLoRA

Learning to Reason in 13 Parameters

John X. Morris, Niloofar Mireshghallah, Mark Ibrahim, Saeed Mahloujifar

Read the Paper on arXiv

Paper Overview

How many parameters does it take to teach a language model to reason? The conventional answer has been millions — but TinyLoRA challenges this assumption dramatically.

Standard LoRA fine-tuning of a 7B model at rank r=8r = 8 introduces roughly 40M trainable parameters — low-rank matrices ARd×rA \in \mathbb{R}^{d \times r} and BRr×kB \in \mathbb{R}^{r \times k} across every attention and MLP projection. Even LoRA-XS, which trains only r×rr \times r matrices within the SVD of frozen weights, still needs thousands of parameters. TinyLoRA pushes this to the extreme: it replaces the per-module trainable matrix RR with a single shared vector vRu\mathbf{v} \in \mathbb{R}^{u} projected through fixed random tensors PiP_i, achieving what the authors call "rank below one" adaptation.

The key result: a Qwen2.5-7B model (hidden dim d=4096d = 4096, 80 transformer blocks, 560 adapted modules) achieves 91% accuracy on GSM8K with only 13 trained parameters — stored in just 26 bytes of bf16. These 13 values are shared across all 560 module positions via weight tying, and each position produces a unique weight update because the fixed random projection matrices PiP_i and the module-specific SVD factors U,Σ,VU, \Sigma, V are different at every position.

The paper reveals a surprising asymmetry: reinforcement learning (GRPO) is dramatically more parameter-efficient than supervised fine-tuning for reasoning tasks. While SFT at 13 parameters achieves only 83% (5% above the 78% base model baseline), RL achieves 91% — a 13-point gain. At 120 parameters, the gap widens further: RL reaches 95% while SFT remains at 84%. The explanation is rooted in signal density: SFT provides a dense loss signal over every token in a chain-of-thought solution (formatting, intermediate steps, final answer), overwhelming a 13-parameter budget. RL's binary reward (correct/incorrect final answer) correlates cleanly with the few features the tiny adapter can control.

An additional scaling law emerges: larger pretrained models require fewer TinyLoRA parameters to reach the same fraction of peak performance. To reach 95% of peak GSM8K accuracy, Qwen2.5-3B needs ~350 parameters, Qwen2.5-7B needs ~120, and Qwen2.5-14B needs even fewer. This suggests that reasoning capability is increasingly latent in larger models, waiting to be activated with a minimal nudge. If 13 parameters can unlock mathematical reasoning in a 7B model, what capabilities are already present in trillion-parameter models?

Chapter Roadmap

Click any topic to jump in

1
TinyLoRA Update

Projects a 13-dim vector through fixed random bases and frozen SVD factors to construct per-module weight updates.

2
Rank Below One

Weight tying across 560 modules drops effective per-module rank to 0.023 — below any classical bound.

enabled by tying
3
RL vs SFT

Binary RL reward is a 1-D signal that maps cleanly to tiny capacity; SFT's ~200-D token loss overwhelms it.

chooses training signal
4
GRPO Training

Group-relative policy optimization uses the group mean as baseline, no value network, producing a clean gradient.

5
Scaling Law

Larger pretrained models need fewer adaptation parameters — reasoning is latent, adapter just activates it.

TinyLoRA extends parameter-efficient fine-tuning to extreme compression by projecting a tiny trainable vector through fixed random matrices, reducing the trainable parameter count from millions to as few as 13 while maintaining strong task performance.

The Problem

Standard LoRA decomposes weight updates into low-rank matrices ΔW=BA\Delta W = BA where BRd×rB \in \mathbb{R}^{d \times r} and ARr×kA \in \mathbb{R}^{r \times k}. For a Qwen2.5-7B model with hidden dimension d=k=4096d = k = 4096, even at the minimum rank r=1r = 1, each adapted module requires d+k=8,192d + k = 8{,}192 parameters. At rank r=8r = 8 (a common default), that's r(d+k)=65,536r(d + k) = 65{,}536 parameters per module — and with 560 modules across 80 transformer blocks (7 modules each: Q, K, V, O projections + 3 MLP matrices), the total reaches 36.7 million trainable parameters. This is efficient compared to full fine-tuning (\sim7B), but still represents enormous capacity.

LoRA-XS improves this by computing the truncated SVD of frozen weights W=UΣVW = U\Sigma V^\top at rank rr, then training only a small r×rr \times r matrix RR in the middle: ΔW=UΣRV\Delta W = U\Sigma R V^\top. At rank r=2r = 2, this requires only r2=4r^2 = 4 trainable parameters per module — a massive reduction to 4×560=2,2404 \times 560 = 2{,}240 total parameters.

The fundamental limitation remains: both methods need at least one trainable parameter per module. The minimum total is proportional to nmn_m, the number of adapted modules. With 560 modules, even one parameter per module means 560 parameters — and each module's adapter is independent, preventing information sharing across the model. This architectural constraint makes sub-thousand parameter adaptation seem impossible.

The Solution

TinyLoRA replaces the per-module trainable matrix RR with a globally shared low-dimensional vector vRu\mathbf{v} \in \mathbb{R}^u projected through fixed random tensors:

W=W+UΣ(i=1uviPi)VW' = W + U\Sigma\left(\sum_{i=1}^{u} v_i P_i\right) V^\top

Where:

  • WRd×kW \in \mathbb{R}^{d \times k} is the frozen pretrained weight matrix (e.g., 4096×40964096 \times 4096 for attention projections)
  • URd×rU \in \mathbb{R}^{d \times r}, ΣRr×r\Sigma \in \mathbb{R}^{r \times r}, VRk×rV \in \mathbb{R}^{k \times r} come from the truncated SVD of WW at rank r=2r = 2
  • PiRr×rP_i \in \mathbb{R}^{r \times r} are fixed random matrices drawn once at initialization and never trained — each module gets its own unique set of PiP_i
  • vRu\mathbf{v} \in \mathbb{R}^u is the only trainable component — as few as u=13u = 13 values shared across all 560 modules

The mechanism works in three stages. First, the vector v\mathbf{v} is combined with the fixed random matrices to form a module-specific update matrix: Rm=i=1uviPi(m)R_m = \sum_{i=1}^{u} v_i P_i^{(m)} where each module mm has its own unique random bases Pi(m)P_i^{(m)}. Second, this r×rr \times r matrix is sandwiched between the frozen SVD factors to produce the full-rank update: ΔWm=UmΣmRmVm\Delta W_m = U_m \Sigma_m R_m V_m^\top. Third, the update is added to the frozen weights.

The random projections PiP_i act as a fixed basis for the space of possible r×rr \times r weight update matrices. Training only needs to find the right linear combination coefficients viv_i. This is justified by the Johnson-Lindenstrauss lemma: random projections from Ru\mathbb{R}^u into Rr×r\mathbb{R}^{r \times r} approximately preserve pairwise distances with high probability, so the essential structure of the update space is maintained even at extreme compression. The SVD factors U,Σ,VU, \Sigma, V further constrain updates to lie in the principal subspace of the original weights, ensuring alignment with the model's learned representations.

Parameter comparison at d=k=4096d = k = 4096, 560 modules:

MethodParams per moduleTotal params
Full fine-tuningd×k=16.8Md \times k = 16.8M\sim7B
LoRA (r=8r = 8)r(d+k)=65,536r(d+k) = 65{,}53636.7M
LoRA (r=1r = 1)d+k=8,192d + k = 8{,}1924.6M
LoRA-XS (r=2r = 2)r2=4r^2 = 42,240
TinyLoRA (u=13u = 13, full tying)shared13

Key Points

1

Replaces per-module trainable matrix RRr×rR \in \mathbb{R}^{r \times r} with a single shared vector vRu\mathbf{v} \in \mathbb{R}^u projected through unique fixed random matrices Pi(m)P_i^{(m)} at each module

2

Random projections preserve the structure of the update space (Johnson-Lindenstrauss lemma) — distances in the uu-dimensional space map to distances in the r×rr \times r matrix space

3

Frozen SVD factors U,Σ,VU, \Sigma, V constrain updates to lie in the principal subspace of the original weights, ensuring structural alignment with pretrained representations

4

Parameters reduced from O(r2nm)O(r^2 \cdot n_m) (LoRA-XS) to O(u)O(u) total — a 172x reduction from LoRA-XS's 2,240 to TinyLoRA's 13

5

Each module produces a unique ΔW\Delta W despite sharing the same v\mathbf{v}, because the random PiP_i and SVD factors differ per module — analogous to how DNA produces different proteins in different cellular contexts

6

Truncated SVD at rank r=2r = 2 works best — diminishing returns beyond r=2r = 2 because higher-rank components capture less variance in pretrained weights

Mathematical Formulation

TinyLoRA Weight Update

Wm=Wm+UmΣm(i=1uviPi(m))VmW'_m = W_m + U_m\Sigma_m\left(\sum_{i=1}^{u} v_i P_i^{(m)}\right) V_m^\top

The weight update at module m is constructed by linearly combining that module's fixed random matrices P_i with the shared trainable coefficients v_i, then projecting through that module's frozen SVD factors. Each module gets a unique ΔW from the same v.

Parameter Count

Total params=unmntie\text{Total params} = \frac{u \cdot n_m}{n_{\text{tie}}}

u is the vector dimension (13), n_m is the number of adapted modules (560), and n_tie is the weight-tying factor. With full tying (n_tie = n_m = 560): total = u = 13. With no tying (n_tie = 1): total = u × n_m = 7,280.

Storage Requirement

Storage=u×bformat=13×2=26 bytes (bf16)\text{Storage} = u \times b_{\text{format}} = 13 \times 2 = 26 \text{ bytes (bf16)}

The entire model adaptation — all weight updates across 560 modules in a 7B model — is encoded in 26 bytes. This fits in a single CPU cache line (64 bytes).

Mathematical Intuition

The Johnson–Lindenstrauss lemma guarantees that random linear projections from Ru\mathbb{R}^u into Rr×r\mathbb{R}^{r \times r} approximately preserve pairwise distances. This means a tiny uu-dim vector retains the essential geometry of the full update space — training just finds the right linear combination of fixed random bases.