braincoder: (Encoding &) Decoding Neural Data

Gilles de Hollander

Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

braincoder

  • Developed at University of Amsterdam, Spinoza Centre for Neuroimaging and UZH
  • Maintainer
    • Gilles de Hollander
  • Contributors
    • Tomas Knapen (UvA/Spinoza Centre for Neuroimaging)
    • Marco Aqil (UvA/Spinoza Centre for Neuroimaging)
    • Maike Renkert (UZH)
  • Upcoming paper
  • Extensive documentation: braincoder-devs.github.io
Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

braincoder

Key features:

  • Massive computationa optimisation thanks to Tensorflow and GPUs
  • Ease-of-use
  • All standard models implemented
  • Inversion of encoding models
Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

1. Encoding Models: Mapping Stimulus → BOLD

Deterministic mapping:

  • : Stimulus (e.g., orientation, numerosity, 2D image)
  • : BOLD response (single voxel or pattern )
  • : Parameters (e.g., PRF center/dispersion, amplitude, baseline)

Example: 1D Gaussian PRF

Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

2. Linear Encoding Models

  • "Jehee approach"
  • Fixed neural populations (fixed ) + linear weights:

  • Advantage: Fit weights ( W ) with linear regression (fast! Can be done with standard fMRI analyses packages.).
  • Disadvantages:
    • Parameters are not interpretable
    • Model mispecification?
  • Example: Von Mises tuning curves for orientation.

Basis Functions

Voxel Predictions

Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

3. Building the Likelihood

  • Add Gaussian noise to deterministic models:

  • Covariance matrix ():

    • Regularized estimate (shrinkage + neural population overlap).
    • Accounts for voxel-to-voxel noise correlations.

Key:

  • Enables Bayesian inversion (stimulus decoding).
Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

4. From Neural Responses → Stimulus Features

Bayes’ Rule:

Approach:

  • Keep and fixed, and evalute/estimate/sample over .

Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

4. From Neural Responses → Stimulus Features

Bayes’ Rule:

Approach:

  • Keep and fixed, and evalute/estimate/sample over .

Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

5. Decoding Noisy Neural Data

Steps:

  1. Fit encoding model () (grid + gradient descent).
  2. Estimate noise covariance ().
  3. Compute posterior ().
  4. Extract mean posterior or MAP estimate.
  5. (Extract uncertainy surrounding posterior)
Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

Key Takeaways

  • Encoding: Map stimuli to BOLD (linear/non-linear models).
  • Decoding: Invert models using Bayesian inference + noise modeling.
  • Tools:
    • braincoder can do all of this and leverages TensorFlow for fast, GPU-accelerated fitting.

Your Turn:

  • Try fitting a PRF model to your own data!
Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

Example code for PRF fit

from braincoder.models import GaussianPRF2DWithHRF
from braincoder.hrf import SPMHRFModel
from braincoder.optimize import ParameterFitter

# Set up model, including HRF
hrf_model = SPMHRFModel(tr=1.7)
model = GaussianPRF2DWithHRF(grid_coordinates=grid_coordinates, hrf_model=hrf_model)

# Set up fitter
fitter = ParameterFitter(data=v1_ts, model=model, paradigm=stimulus)

# Define grid search parameters
mu_x = np.linspace(-3, 3, 20, dtype=np.float32)
mu_y = np.linspace(-3, 3, 20, dtype=np.float32)
sigma = np.linspace(0.1, 5, 20, dtype=np.float32)
baselines = [0.0]
amplitudes = [1.0]

# Do grid search using correlation cost (so baseline and amplitude do not matter)
grid_pars = fitter.fit_grid(mu_x, mu_y, sigma, baselines, amplitudes, use_correlation_cost=True)

 # Refine baseline and amplitude using OLS
grid_pars = fitter.refine_baseline_and_amplitude(grid_pars)
gd_pars = fitter.fit(init_pars=grid_pars)
Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025

Assigment 4: Decoding visual stimuli

Open notebooks/4_decode.ipynb.

Computation in Neuroeconomics seminar, Soglio, Switzerland, 2025