What Population-Averaged Brain Encoders Provably Cannot Capture
Karan Prasad | Obvix Labs | hello@karanprasad.com | ORCID: 0009-0009-0747-2311
Every brain is wired differently. Not just a little. Fundamentally differently.
The biggest AI models for reading brain activity (like Meta's TRIBE v2, MindEye2, and others) all do the same thing: they train on data pooled from hundreds of people, then try to generalize to individuals. TRIBE v2 (Meta FAIR, March 2026) trains on over 700 subjects across ~70,000 cortical vertices, uses multimodal encoders (V-JEPA2, Wav2Vec-BERT, LLaMA 3.2), and explicitly predicts the population-averaged brain response with zero-shot generalization to unseen individuals. The assumption is that brains are mostly similar, and the differences are small enough to correct for later.
We proved that assumption is mathematically wrong.
When you average brain data across people, you destroy two types of information that can never be recovered:
-
Each person's unique way of encoding the world. Your brain literally maps images through a different function than mine. Averaging wipes out everything that makes your brain yours. We tested this on 8 people viewing the same images in a 7T MRI scanner. Cross-subject similarity? Indistinguishable from zero. Every single brain region. Not "low." Zero.
-
The variability in how the brain responds. Some images make your neurons fire consistently. Others make them fire all over the place. That variability is not noise. It is meaningful signal. But every brain model trained with standard loss functions (MSE) is mathematically blind to it. The optimization landscape is completely flat with respect to variance. The model literally cannot see it.
We ran six different empirical tests on real brain data from the Natural Scenes Dataset (8 subjects, 40 sessions each, 7 Tesla fMRI, 766 shared stimuli with ≥2 repetitions). The results are not ambiguous. Individual models explain ~59% of shared-stimulus variance. Population models go deeply negative, actively anti-predicting. Neural fingerprinting hits 100% accuracy (chance is 12.5%). Variance patterns are stable (r=0.94–0.97), reliable, and completely invisible to MSE-trained models (R²=0.85–0.91 for variance prediction).
The gap between population and individual brain models is not an engineering problem. It is a mathematical property of averaging itself.
Cross-subject RSA (representational similarity analysis) across 8 visual cortex ROIs. Values are indistinguishable from zero everywhere (all permutation p > 0.05). Different brains encode the same images using completely different neural geometries.
Q75/Q25 variance ratio across ROIs. All 12 tested regions show significant heteroscedasticity (CV > 0.3 or Q75/Q25 > 2.0). This variance is stable signal with split-half reliability r > 0.99, yet MSE-optimized models are provably invariant to it.
| What we measured | Result | What it means |
|---|---|---|
| Cross-subject RSA | V1=0.45, V2=0.39, V3=0.48, hV4=0.29, LO=0.33, TO=0.30, VO=0.33, IPS=0.37 (all p=0.0002) | Brains encode the same stimuli using entirely different geometries |
| Encoding gap (ROI-mean) | Individual R² ≈ 0.59, Population R² deeply negative | Population models actively anti-predict individual brain responses |
| Encoding gap (RDM) | Small gaps -0.03 to +0.08 (population nearly as good as individual) | Variance patterns drive the gap; mean RDMs are more shared |
| Neural fingerprinting | 100% accuracy all ROIs, both variance and mean (chance = 12.5%) | Brain patterns are perfectly unique across all 8 subjects |
| Heteroscedasticity | Q75/Q25 = 1.65–2.03 (IPS, VO above 2.0) | Response variance depends on stimulus. This is signal, not noise |
| Variance profile reliability | Split-half r = 0.94–0.97 | Variance patterns are stable signal with high reproducibility |
| Variance predictability | R² = 0.85–0.91 | Stimulus-driven variance is reliable and quantifiable |
| Procrustes-aligned RSA | 0.05–0.10 (lower than raw) | Alignment hurts with train/test split; individual geometry is not recoverable |
Theorem 1 (Direction Erosion). For arbitrary nonlinear encoding functions f_i(S), population averaging converges to the shared component f_shared(S). The information loss for subject i is I(S; delta_i(S) | f_shared(S)) >= 0. No linearity or distributional assumptions.
Theorem 2 (Variance Blindness). The MSE loss decomposes as E[(X - f(S))^2] = E[(f(S) - E[X|S])^2] + E[Var(X|S)]. The second term is model-independent. So the MSE-optimal predictor f*(S) = E[X|S] is determined entirely by the conditional mean and is invariant to Var(X|S). Two data-generating processes with identical E[X|S] but different Var(X|S) produce the same f*. No distributional assumptions required.
Important framing note: These theorems formalize well-known statistical properties (law of large numbers, bias-variance decomposition). The contribution is their specific application to brain encoding models and the empirical quantification of what is lost in practice.
Natural Scenes Dataset (NSD; Allen et al., 2022): 7T fMRI at 1.8mm resolution. 8 subjects (subj01–subj08), 40 sessions per subject (30,000+ trials total per subject). Shared-stimulus pool: 1,000 images seen by all 8 subjects, 3 repetitions each. ROIs from Kastner2015 atlas (V1, V2, V3, hV4, V3ab, LO, TO, VO, IPS) plus functional localizer ROIs (faces, places, bodies, words).
Beta estimates use betas_fithrf_GLMdenoise_RR (already GLMdenoise-denoised). All subjects have different brain volume shapes, so RSA is used for cross-subject comparison instead of direct voxel correlation.
The v2.1 validation incorporates the 73K image ID stimulus matching fix:
-
Stimulus mapping (73K ID fix): masterordering (30k trials) → subjectim (8×10000 per-subject image indices) → 73K image IDs → sharedix (1000 shared image IDs checked for ≥2 repetitions). No longer uses responses.tsv; uses nsd_expdesign.mat only.
-
Multi-session loading: loads all 40 sessions per subject, extracts shared-stimulus betas, averages across 3 repetitions per stimulus for improved SNR. Subj03/04/06/08 completed fewer sessions; 766 is the true cross-subject intersection with ≥2 reps.
-
Cross-subject RSA on shared stimuli: RDMs computed on the same 766 shared images across subjects. 1,000 bootstrap, 5,000 permutations. Procrustes-aligned RSA quantifies f_shared vs. delta_i.
-
Encoding gap tests: ROI-mean activation on shared stimuli (alignment-free) plus RDM-based comparison. Separate tests for individual vs. population models.
-
Neural fingerprinting on shared-stimulus betas: 100% accuracy all ROIs, both mean and variance patterns.
-
Heteroscedasticity & variance profile reliability: all 8 subjects, all 12 ROIs.
-
Variance predictability: R²=0.85–0.91 predicting stimulus-driven variance from activation patterns.
Results are saved to results/full_results_v2.json. The paper generator reads this file and auto-populates all numbers.
Note: v1 code (code/test_theorems.py) is preserved for transparency. See docs/METHODS.md for detailed comparison of v1 vs v2 methodology.
information-erosion/
├── README.md
├── LICENSE (MIT)
├── requirements.txt
├── generate_paper.py # PDF generator (auto-reads results JSON)
├── paper/
│ └── Information_Erosion_Paper.pdf
├── code/
│ ├── test_theorems_v2.py # Revised validation (shared stimuli, fixed methodology)
│ └── test_theorems.py # Original v1 (preserved for transparency)
├── figures/
│ ├── fig1_rsa_v2.png # Raw vs Procrustes-aligned RSA
│ ├── fig2_heteroscedasticity_v2.png
│ └── fig3_encoding_gap_v2.png
├── results/
│ ├── full_results_v2.json # v2 results (shared stimuli, multi-session)
│ └── full_results.json # v1 results (preserved)
└── docs/
├── WHAT_AND_WHY.md
└── METHODS.md # Detailed methods + v1 vs v2 comparison
pip install numpy scipy scikit-learn nibabel matplotlib boto3 reportlab pillow# Full run: all 40 sessions, 8 subjects
# Needs ~64 GB RAM, ~80 GB disk for NSD data, ~3-6 hours
python code/test_theorems_v2.py --sessions 40 --subjects 8 --n-workers 4
# Medium run: 10 sessions (captures ~75% of shared stimulus repetitions)
python code/test_theorems_v2.py --sessions 10 --subjects 8 --n-workers 4
# Light run: 3 sessions (fastest, fewer repetitions averaged)
python code/test_theorems_v2.py --sessions 3 --subjects 8 --n-workers 4The script auto-downloads NSD data from AWS S3 (public, no credentials needed). Set NSD_DATA_DIR to point to pre-downloaded local data.
python generate_paper.pyReads results/full_results_v2.json and populates all numbers. Falls back to hardcoded values if no JSON exists.
Ryzen 5 8600G, 32 GB DDR5. Full 8-subject run takes roughly 45 minutes. No GPU needed. All analyses run on CPU.
@article{prasad2026information,
title={Information Erosion: What Population-Averaged Brain Encoders Provably Cannot Capture},
author={Prasad, Karan},
year={2026},
doi={10.5281/zenodo.19339553},
note={Preprint},
url={https://doi.org/10.5281/zenodo.19339553}
}Karan Prasad | hello@karanprasad.com | Obvix Labs
MIT. See LICENSE.

