Meta-learning In-Context approach for training-free cross-subject brain decoding. Enables zero-calibration BCI through context-based meta-learning. Triggers: meta-learning, brain decoding, cross-subject, training-free, in-context learning, zero-calibration BCI.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add hiyenwong/ai_collection --skill meta-learning-in-context-brain-decoding --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Meta Learning In Context Brain Decoding?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hiyenwong-meta-learning-in-context-brain-decoding-6d7a0f90)More formats (shields.io, HTML) on the badges page.
---
name: meta-learning-in-context-brain-decoding
description: "Meta-learning In-Context approach for training-free cross-subject brain decoding. Enables zero-calibration BCI through context-based meta-learning. Triggers: meta-learning, brain decoding, cross-subject, training-free, in-context learning, zero-calibration BCI."
---
# Meta-Learning In-Context for Training-Free Brain Decoding
> Foundation framework for training-free cross-subject visual brain decoding using meta-learning with in-context examples, enabling zero-calibration BCI deployment.
## Metadata
- **Source**: arXiv:2604.08537v1
- **Published**: 2026-04
## Core Methodology
### Key Innovation
Enables zero-calibration brain decoding by using meta-learning to train models that can adapt to new subjects through in-context examples rather than gradient-based fine-tuning. The approach treats subject-specific brain activity patterns as context tokens, allowing pre-trained models to decode from new subjects without any training on their data.
### Technical Framework
1. **Meta-Learning Pre-Training**: Train decoder on many subjects
2. **In-Context Encoding**: Subject activity as context sequence
3. **Cross-Subject Transfer**: Model adapts via attention over context
4. **Training-Free Inference**: No gradient updates for new subjects
### Architecture
```
New Subject Brain Activity → Tokenized → Context Sequence
↓
Pre-trained Meta-Decoder → Cross-Attention over Context → Decoded Stimulus
↑
Training Data from Many Subjects (Meta-Learning)
```
## Implementation Guide
### Prerequisites
- Pre-trained brain encoder (e.g., Brain-DiT, fMRI foundation model)
- Multi-subject fMRI/EEG dataset for meta-training
- Large-scale training infrastructure
- GPU cluster for distributed training
### Step-by-Step
1. **Data Preparation**: Standardize brain data across subjects
2. **Tokenization**: Convert brain activity to discrete tokens
3. **Meta-Training Setup**: Configure in-context learning objective
4. **Train Meta-Decoder**: Learn to decode from context
5. **Evaluate**: Test zero-shot transfer to held-out subjects
6. **Deploy**: Use for new subjects without retraining
### Code Example
```python
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
class InContextBrainDecoder(nn.Module):
"""
Meta-learning based brain decoder using in-context learning
"""
def __init__(self, brain_dim=1024, latent_dim=512, num_heads=8):
super().__init__()
self.brain_dim = brain_dim
self.latent_dim = latent_dim
# Brain activity embedding
self.brain_embed = nn.Linear(brain_dim, latent_dim)
# Stimulus embedding (for context examples)
self.stimulus_embed = nn.Linear(stimulus_dim, latent_dim)
# Cross-attention for in-context adaptation
self.cross_attn = nn.MultiheadAttention(
embed_dim=latent_dim,
num_heads=num_heads,
batch_first=True
)
# Query embedding for target brain activity
self.query_embed = nn.Linear(latent_dim, latent_dim)
# Output projection to stimulus space
self.output_proj = nn.Sequential(
nn.Linear(latent_dim, latent_dim * 2),
nn.ReLU(),
nn.Linear(latent_dim * 2, stimulus_dim)
)
# Layer norm
self.norm1 = nn.LayerNorm(latent_dim)
self.norm2 = nn.LayerNorm(latent_dim)
def forward(self, target_brain, context_brains, context_stimuli):
"""
Args:
target_brain: [batch, brain_dim] - Brain activity to decode
context_brains: [batch, num_context, brain_dim] - Example brain patterns
context_stimuli: [batch, num_context, stimulus_dim] - Corresponding stimuli
Returns:
predicted_stimulus: [batch, stimulus_dim]
"""
batch_size = target_brain.size(0)
# Embed target brain activity (query)
query = self.query_embed(self.brain_embed(target_brain)) # [batch, latent]
query = query.unsqueeze(1) # [batch, 1, latent]
# Embed context examples (key and value)
context_kv = self.brain_embed(context_brains) # [batch, num_ctx, latent]
context_stim = self.stimulus_embed(context_stimuli) # [batch, num_ctx, latent]
# Combine brain and stimulus for richer context
context = context_kv + context_stim # [batch, num_ctx, latent]
# In-context cross-attention
attn_output, _ = self.cross_attn(
query=query, # [batch, 1, latent]
key=context, # [batch, num_ctx, latent]
value=context # [batch, num_ctx, latent]
)
# Add & norm
attended = self.norm1(query + attn_output)
# Project to stimulus space
predicted = self.output_proj(attended.squeeze(1))
return predicted
class MetaLearningTrainer:
"""Meta-learning trainer for in-context brain decoding"""
def __init__(self, model, num_inner_steps=5, inner_lr=0.001):
self.model = model
self.num_inner_steps = num_inner_steps
self.inner_lr = inner_lr
def meta_train_step(self, batch_subjects):
"""
Perform one meta-training step
batch_subjects: List of subject data dictionaries
"""
total_loss = 0
for subject_data in batch_subjects:
# Sample support and query sets for this subject
support_indices = torch.randperm(len(subject_data))[:10]
query_indices = torch.randperm(len(subject_data))[:20]
support_brains = subject_data['brain'][support_indices]
support_stimuli = subject_data['stimulus'][support_indices]
query_brains = subject_data['brain'][query_indices]
query_stimuli = subject_data['stimulus'][query_indices]
# Forward pass with context
predictions = self.model(
target_brain=query_brains,
context_brains=support_brains.unsqueeze(0).expand(len(query_brains), -1, -1),
context_stimuli=support_stimuli.unsqueeze(0).expand(len(query_brains), -1, -1)
)
# Compute loss
loss = nn.MSELoss()(predictions, query_stimuli)
total_loss += loss
# Meta-optimization step
return total_loss / len(batch_subjects)
def evaluate_zero_shot(self, new_subject_data, num_context=5):
"""Evaluate on completely new subject (zero-shot)"""
# Sample context examples from new subject
context_indices = torch.randperm(len(new_subject_data))[:num_context]
query_indices = torch.randperm(len(new_subject_data))[num_context:num_context+50]
context_brains = new_subject_data['brain'][context_indices]
context_stimuli = new_subject_data['stimulus'][context_indices]
query_brains = new_subject_data['brain'][query_indices]
query_stimuli = new_subject_data['stimulus'][query_indices]
# Inference without any training
with torch.no_grad():
predictions = self.model(
target_brain=query_brains,
context_brains=context_brains.unsqueeze(0).expand(len(query_brains), -1, -1),
context_stimuli=context_stimuli.unsqueeze(0).expand(len(query_brains), -1, -1)
)
# Compute metrics
mse = nn.MSELoss()(predictions, query_stimuli).item()
return mse, predictions
# Usage Example
# Initialize model
model = InContextBrainDecoder(brain_dim=1024, latent_dim=512)
# Meta-training
trainer = MetaLearningTrainer(model)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
for epoch in range(num_epochs):
for batch in multi_subject_dataloader:
optimizer.zero_grad()
loss = trainer.meta_train_step(batch)
loss.backward()
optimizer.step()
# Zero-shot evaluation on new subject
new_subject_data = load_new_subject() # Never seen during training
mse, predictions = trainer.evaluate_zero_shot(new_subject_data, num_context=5)
print(f"Zero-shot MSE: {mse:.4f}")
```
## Advanced: Brain-DiT Integration
```python
class BrainDiTInContextAdapter:
"""
Adapts Brain-DiT for in-context learning
"""
def __init__(self, brain_dit_model):
self.brain_dit = brain_dit_model
self.context_projector = nn.Linear(brain_dit_model.hidden_dim, brain_dit_model.hidden_dim)
def encode_with_context(self, brain_activity, context_examples):
"""
brain_activity: [batch, brain_dim]
context_examples: [batch, num_context, brain_dim + stimulus_dim]
"""
# Encode context
context_brain = context_examples[..., :brain_dim]
context_stim = context_examples[..., brain_dim:]
# Get DiT embeddings
context_embeds = self.brain_dit.encode(context_brain)
context_stim_embeds = self.brain_dit.encode_stimulus(context_stim)
# Combine via attention
adapted_embeds = self.cross_attention(
query=self.brain_dit.encode(brain_activity),
key=context_embeds + context_stim_embeds,
value=context_embeds + context_stim_embeds
)
return adapted_embeds
def decode_stimulus(self, brain_activity, context_examples):
"""Training-free stimulus decoding"""
adapted = self.encode_with_context(brain_activity, context_examples)
stimulus = self.brain_dit.generate(adapted)
return stimulus
```
## Applications
- Zero-calibration brain-computer interfaces
- Clinical deployment of brain decoders
- Rapid subject adaptation
- Privacy-preserving BCI (no subject data stored)
- Population-level brain models
## Pitfalls
- **Context size**: Too few context examples hurt performance; too many increase compute
- **Subject variability**: Extreme anatomical/functional differences may still require fine-tuning
- **Stimulus diversity**: Meta-learning requires diverse training stimuli
- **Computational cost**: Meta-training is expensive (many subjects, large model)
- **Inference latency**: Cross-attention over context adds overhead
## Related Skills
- brain-dit-fmri-foundation-model
- eeg-foundation-model-adapters
- in-context-brain-decoding
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!