Scaling Parameter-Efficient Fine-Tuning for Brain Encoding
Organizations: Columbia University · Mind Lab · Tsinghua University · HKUST(GZ)
Abstract
Brain encoding models aim to predict neural responses to stimuli. The most widely used approach fits readouts from frozen pretrained backbones. Using neural data to train large models from scratch or fully fine-tune them after task-pretraining has proven difficult because neural data is costly and limited. We show that parameter-efficient fine-tuning (PEFT) enables us to effectively adapt very large pretrained backbones for brain encoding with a small number of trainable parameters. To make it computationally practical, we exploit the backbone's causal structure to predict multiple timepoints in a single pass instead of using sliding windows, significantly reducing feature-extraction cost. This enables efficient fine-tuning of multimodal backbones with up to 104B parameters, the largest model adapted for brain encoding to our knowledge. Trained with a low-rank adapter (LoRA) and a lightweight readout, our approach consistently improves brain encoding performance across nine diverse multimodal backbones. On the same Qwen3-Omni backbone as the prior state-of-the-art (SoTA), our method BrainLoRA achieves the best published performance on the Algonauts 2025 Challenge. We also show the adapted multimodal backbones remain interpretable: modality attribution recovers the canonical sensory topography that prior work often obtains by construction from separate unimodal encoders, and neural adaptation increases the contribution of audio inputs and cross-modal mixing within the backbone. To scale out the number of adapted models, we develop a multi-LoRA kernel that accelerates joint training of multiple LoRAs on a shared backbone. This enables an ensemble of 200+ adapted models that ranks first on the public Algonauts post-challenge leaderboard at the time of writing. Together, our results highlight PEFT as an efficient and powerful paradigm for brain encoding.
Figures & tables
| Trainable | Pearson | |||
| Model | params | val | ID | OOD |
| Single model | ||||
| TRIBE † ( d’Ascoli et al., 2026 ) | – | – | 0.303 | 0.196 |
| MIRAGE † ( Gokce et al., 2026a ) | 1.1B | 0.319 | 0.310 | 0.217 |
| Linear + frozen backbone | 52.3M | 0.291 | 0.287 | 0.187 |
| Linear + full finetuning | 20.3B | 0.323 | 0.320 | 0.217 |
| Configuration | s06 |
|---|---|
| Frozen backbone | 0.2907 |
| + LoRA r16 (ours) | 0.3263 |
| without closed-form re-fit | 0.3202 |
| Rank 32 | 0.3268 |
| Gated-MLP readout | 0.3269 |
| Cross-attention readout | 0.3310 |
| Extract | MIRAGE head (1,123M) | Linear (52.3M) | Train | |||||
|---|---|---|---|---|---|---|---|---|
| Stimulus design | (GPU-h) | frozen | LoRA | + re-fit | LoRA | + re-fit | s/step | (GPU-h) |
| Sliding window, full-res. media | 700 | 0.3187 | – | – | – | – | – | – |
| Sliding window, media | 700 | 0.3178 | – | – | – | – | – | – |
| Single pass, whole clip | 1.99 | 0.3149 | – | – | – | – | – | – |
| Single pass, whole clip, | 1.99 | 0.3137 | – | – | – | – | – | – |
| + window-local (149 s), no lead | 1.99 | 0.3091 | – | – | 0.3148 | 0.3206 | 9.7 | 4.0 |
| Frozen + 1,123M readout | LoRA + 52.3M readout | |
| Hardware and precision | ||
| Device | 1 A800-80GB | |
| Precision | bf16 backbone, fp32 patch-embed conv | |
| Stimulus encoding | ||
| Protocol | sliding window | single causal pass |
| Forward passes / clip | 2,758 | 5.1 |
| Rank | Readout lr | Runs | s06 (mean) | s.d. |
|---|---|---|---|---|
| 16 | 3 | 4 | 0.3262 | 0.00007 |
| 32 | 3 | 1 | 0.3268 | – |
| 32 | 5 | 9 | 0.3257 | 0.00109 |
| 64 | 5 | 4 (+1 diverged) | 0.3237 | 0.00128 |
| 128 | 5 | 0 (+2 diverged) | – | – |
| Feature-extraction layer | Frozen | Trained |
|---|---|---|
| 16 | 0.2682 | – |
| 24 | 0.2839 | – |
| 30 | 0.2889 | 0.3252 |
| 31 | 0.2885 | 0.3260 |
| 32 | 0.2881 | 0.3263 |
| 33 | 0.2872 | 0.3258 |
| LoRA lr | Readout lr | s06 (pre-re-fit) |
|---|---|---|
| 0 | 2e-5 | 0.2818 |
| 1e-3 | 1e-4 | 0.3071 |
| 1e-3 | 3e-4 | 0.3131 |
| 6e-4 | 1e-3 | 0.3076 |
| 6e-4 | 3e-4 | 0.3134 |
| Step | 200 | 400 | 600 | 800 | 1000 | 1200 | 1400 | 1600 | 1800 | 2000 | 2200 | 2400 | 2600 | 2800 | 2858 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| s06 | 0.2789 | 0.2856 | 0.2877 | 0.2921 | 0.2977 | 0.3007 | 0.3052 | 0.3009 | 0.2999 | 0.2996 | 0.3017 | 0.3019 | 0.3031 | 0.3030 | 0.3028 |
| Prefix ends at | audio | vision | text |
|---|---|---|---|
| 140 s | 0.9579 | 0.9895 | 0.9960 |
| 160 s | 0.9569 | 0.9908 | 0.9970 |
| 180 s | 0.9553 | 0.9901 | 0.9969 |
| 200 s | 0.9584 | 0.9906 | 0.9973 |
| same span twice | 1.0000 | 1.0000 | 1.0000 |
| Configuration | Members | Seeds |
|---|---|---|
| shipped recipe | 34 | 15 seeds |
| rank 32, readout lr 0.0005 | 27 | 13 seeds |
| lead 30 | 16 | 8 seeds |
| backbone Qwen3.8-27B , chunk 2, no audio | 10 | 6 seeds |
| readout cross-attn (tokens), tokens stream | 8 | 3 seeds |
| bag 0.6 | 6 | 2 seeds |
| Method | Params | s06 | frozen | % of LoRA gain | / M params |
|---|---|---|---|---|---|
| Frozen backbone (readout only) | 0 | 0.2907 | — | — | — |
| IA 3 , attention + FFN | 0.057M | 0.3127 | 62% | 0.3833 | |
| IA 3 , + MoE experts | 3.18M | 0.3177 | 76% | 0.0085 | |
| Bottleneck adapter, FFN only ( ) | 4.26M | 0.3164 | 72% | 0.0060 | |
| Bottleneck adapter, attention + FFN ( ) | 8.52M | 0.3190 | 79% | 0.0033 | |
| LoRA (ours) | 8.91M | 0.3263 | 100% | 0.0040 |
| Backbone | Params | Extraction layer | Frozen | +LoRA | +cross-attn | |
|---|---|---|---|---|---|---|
| Phi-4-MM | 4.7B | 20 | 0.2521 | 0.2841 | +0.0320 | 0.2888 |
| Qwen2.5-Omni 3B | 6.0B | 30 | 0.2807 | 0.3139 | +0.0331 | 0.3175 |
| Gemma 3n E4B | 7.8B | 25 | 0.2631 | 0.3026 | +0.0395 | 0.3049 |
| LCO-Omni 7B | 8.9B | 26 | 0.2683 | 0.3199 | +0.0517 | 0.3200 |
| MiniCPM-o | 9.4B | 28 | 0.2594 | 0.3249 | +0.0655 | 0.3265 |
| Qwen2.5-Omni 7B | 11.2B | 24 | 0.2748 | 0.3178 | +0.0431 | 0.3214 |
| Configuration | Training targets | s06 |
|---|---|---|
| LoRA + linear (ours) | aligned | 0.3263 |
| Frozen backbone | aligned | 0.2907 |
| Frozen backbone | shifted | 0.2617 |
| LoRA + linear | shifted | 0.1874 |
| Held-out | frozen | 3-subj., held out | 3-subj., in-sample | 4-subject | vs. frozen | vs. in-sample | vs. 4-subj. |
|---|---|---|---|---|---|---|---|
| sub-01 | 0.2875 | 0.3210 | 0.3215 | 0.3229 | +0.0335 | -0.0005 | -0.0019 |
| sub-02 | 0.2968 | 0.3286 | 0.3286 | 0.3301 | +0.0317 | -0.0000 | -0.0015 |
| sub-03 | 0.3130 | 0.3485 | 0.3490 | 0.3497 | +0.0355 | -0.0005 | -0.0012 |
| sub-05 | 0.2734 | 0.3034 | 0.3014 | 0.3025 | +0.0301 | +0.0021 | +0.0010 |
| subject-mean | % of noise ceiling | |||||
|---|---|---|---|---|---|---|
| frozen | LoRA | gain | frozen | LoRA | gain, points [95% CI] | |
| Algonauts, validation | 0.2907 | 0.3263 | +0.0356 | 81.3 | 92.0 | +10.7 [+10.0, +11.4] |
| NNDb, readout transferred | 0.0991 | 0.1223 | +0.0232 | 43.5 | 54.6 | +11.1 [+10.5, +11.6] |
| NNDb, readout re-fitted | 0.0914 | 0.1252 | +0.0338 | 40.3 | 55.7 | +15.4 [+14.6, +16.2] |
| calibration data from the new subject (min) | ||||||||
| Algonauts, held-out subject | 0 | 5 | 10 | 20 | 40 | 79 | 159 | all |
| Ridge from scratch | – | 0.1495 | 0.1967 | 0.2273 | 0.2493 | 0.2687 | 0.2869 | 0.3254 |
| Low-rank deviation ( ) | 0.2574 | 0.2572 | 0.2578 | 0.2591 | 0.2603 | 0.2621 | 0.2642 | – |
| Anchored ridge | 0.2574 | 0.2597 | 0.2641 | 0.2718 | 0.2789 | 0.2889 | 0.2997 | – |
| LoRA frozen (anchored) | +0.0236 | +0.0254 | +0.0260 | +0.0272 | +0.0273 | +0.0298 | +0.0326 | +0.0326 |
| region | frozen | LoRA | gain [95% CI] | rel. % | |
| Yeo 7 networks | |||||
| DorsAttn | 122 | 0.330 | 0.380 | +0.0502 [+0.0468, +0.0533] | 15 |
| Vis | 162 | 0.398 | 0.438 | +0.0401 [+0.0364, +0.0440] | 10 |
| Cont | 129 | 0.279 | 0.317 | +0.0379 [+0.0347, +0.0412] | 14 |
| SalVentAttn | 121 | 0.241 | 0.277 | +0.0352 [+0.0319, +0.0397] | 15 |
| Default | 212 | 0.318 | 0.351 | +0.0330 [+0.0306, +0.0355] | 10 |
| pool | val. | explained % | missed % | cross % | missed |
|---|---|---|---|---|---|
| main single model (LoRA + linear) | 0.3263 | 60.5 | 36.2 | 3.3 | 0.0480 |
| 3-member mean | 0.3262 | 60.8 | 36.5 | 2.6 | 0.0485 |
| 261-member uniform mean | 0.3401 | 66.2 | 32.5 [30.0, 35.3] | 1.3 | 0.0431 |
| Block | (s) | (s) | covers (s) | full | clipped | zero |
|---|---|---|---|---|---|---|
| 1 | 0.5 | 2.0 | 98 | 1 | 1 | |
| 2 | 2.5 | 2.0 | 99 | 1 | 0 | |
| 3 | 4.5 | 4.0 | 97 | 2 | 1 | |
| 4 | 8.5 | 8.0 | 92 | 5 | 3 | |
| 5 | 16.5 | 16.0 | 81 | 10 | 9 | |
| 6 | 32.5 | 32.0 | 60 | 21 | 19 |
| Backbone | Hugging Face repository | Revision |
|---|---|---|
| Phi-4-MM | microsoft/Phi-4-multimodal-instruct | 467a5d77dcfa |
| Qwen2.5-Omni 3B | Qwen/Qwen2.5-Omni-3B | f75b40e3da20 |
| Gemma 3n E4B | unsloth/gemma-3n-E4B-it | 45e9fb1dd0e3 |
| LCO-Omni 7B | LCO-Embedding/LCO-Embedding-Omni-7B | 3d38f58aae12 |
| MiniCPM-o | openbmb/MiniCPM-o-4_5 | 503e754207c9 |
| Qwen2.5-Omni 7B | Qwen/Qwen2.5-Omni-7B | ae9e1690543f |
Neural Encoding
Neural encoding studies how information is represented in biological neural activity and how models map stimuli or signals into neural codes.
See all 91 papers