DYSCO (Dynamics via Contrastive Learning) methodology for extracting governing equations from latent dynamics via multi-view temporal contrastive learning. Identifies latent dynamical systems from noisy high-dimensional measurements and recovers symbolic governing equations.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add hiyenwong/ai_collection --skill dysco-multiview-latent-dynamics-extraction --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Dysco Multiview Latent Dynamics Extraction?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hiyenwong-dysco-multiview-latent-dynamics-extraction)More formats (shields.io, HTML) on the badges page.
---
name: dysco-multiview-latent-dynamics-extraction
description: DYSCO (Dynamics via Contrastive Learning) methodology for extracting governing equations from latent dynamics via multi-view temporal contrastive learning. Identifies latent dynamical systems from noisy high-dimensional measurements and recovers symbolic governing equations.
version: 1.0.0
category: neuroscience
authors:
- Paolo Muratore
- Mackenzie Weygandt Mathis
arxiv_id: 2606.13260
published: 2026-06-11
activation_keywords:
- latent dynamics
- contrastive learning
- governing equations
- system identification
- symbolic recovery
- neural recordings
- dynamical systems
- representation learning
- scientific discovery
- multi-view learning
related_skills:
- neural-dynamics-analysis-methodology
- equation-free-digital-twins
- physics-guided-neural-networks
- koopman-stability-preserving-id
---
# DYSCO: Multi-View Contrastive Learning for Extracting Governing Equations
## Overview
DYSCO (Dynamics via Contrastive Learning) is a **multi-view temporal contrastive learning algorithm** that jointly recovers latent trajectories and governing dynamics from noisy, high-dimensional measurements. This methodology addresses a central problem at the intersection of **representation learning, system identification, and scientific discovery**.
### Core Innovation
- **Joint Recovery**: Extracts both latent trajectories AND governing dynamics simultaneously
- **Multi-View Disentanglement**: Leverages multiple independent noisy views to separate signal from noise
- **Symbolic Recovery**: Enables recovery of governing equations within an affine gauge
- **Neural Recording Optimization**: Handles Poisson observation noise relevant for neural data
## Theoretical Framework
### Multi-View Contrastive Learning Architecture
DYSCO uses **temporal contrastive learning** with the following structure:
1. **Observation Model**:
- Multiple independent noisy views: `y₁(t), y₂(t), ..., yₙ(t)` of underlying process `z(t)`
- Each view: `yᵢ(t) = gᵢ(z(t)) + noise`
2. **Contrastive Objective**:
- Maximize agreement between views at same time point
- Minimize agreement between views at different times
- Temporal encoding: anchor-positive-negative sampling
3. **Latent Dynamics Parameterization**:
- Parameterize dynamics in structured functional basis
- Symbolic recovery within affine gauge
- Flow field representation: `dz/dt = F(z)` where F is parameterized
### Strong Identification Guarantee
DYSCO provides **theoretical guarantees** for strong identification up to affine indeterminacy:
- Extends prior identifiability results to noisy nonlinear observations
- Affine gauge freedom: recovered dynamics are identified up to affine transformation
- Noise-robust: handles both Gaussian and Poisson observation noise
## Implementation Methodology
### Step 1: Multi-View Data Preparation
```
Input: Multiple noisy observation views {y₁(t), y₂(t), ..., yₙ(t)}
Requirements:
- Views must be independent (conditionally independent given z(t))
- Temporal alignment across views
- Sufficient observation density
```
### Step 2: Contrastive Learning Encoder
```
Architecture:
- Encoder network: fθ(y) → latent representation h
- Temporal contrastive loss:
L = -log(exp(sim(hᵢₜ, hⱼₜ)) / Σₖ exp(sim(hᵢₜ, hⱼₜₖ)))
Training:
- Batch construction: anchor (t), positive (t, same view), negatives (t'≠t)
- Momentum encoder for stable representations
- Temperature scaling for contrastive objective
```
### Step 3: Dynamics Parameterization
```
Functional Basis:
- Choose basis functions: polynomials, trigonometric, neural
- Parameterize flow field: F(z) = Σₖ αₖ φₖ(z)
- Affine gauge constraint: enforce identifiability
Symbolic Recovery:
- Sparse regression on basis coefficients
- LASSO or ridge regularization
- Thresholding for equation simplification
```
### Step 4: Joint Optimization
```
Loss Function:
L_total = L_contrastive + λ₁ L_dynamics + λ₂ L_regularization
Components:
- L_contrastive: multi-view temporal agreement
- L_dynamics: trajectory consistency with dynamics
- L_regularization: sparsity/stability constraints
Hyperparameters:
- λ₁: dynamics reconstruction weight (typically 0.1-0.5)
- λ₂: regularization strength (typically 0.01-0.1)
- Temperature τ: contrastive scaling (typically 0.1-0.5)
```
## Dynamical Regimes Tested
DYSCO demonstrates accurate recovery across diverse dynamical regimes:
### 1. Chaotic Systems
- Lorenz attractor
- Rössler system
- Double pendulum
- High-dimensional chaotic flows
### 2. Oscillatory Dynamics
- Harmonic oscillators
- Kuramoto phase dynamics
- Limit cycle systems
- Neural oscillator models
### 3. Metastable States
- Switching dynamical systems
- Multi-stable potentials
- Phase transitions
- Bistable dynamics
## Observation Noise Handling
### Gaussian Noise
- Standard assumption for most sensors
- Additive noise model: `y = g(z) + ε` where `ε ~ N(0, σ²)`
- Contrastive learning naturally denoises
### Poisson Noise (Neural Recordings)
- Critical for spike count data
- Observation: `y ~ Poisson(g(z))`
- Requires specialized encoder normalization
- Log-link or softplus output layer
## Empirical Results
### Latent Trajectory Recovery
- High correlation with ground truth (>0.9) for chaotic systems
- Low reconstruction error (<5%) across all regimes
- Robust to noise levels up to 50% signal amplitude
### Governing Equation Recovery
- Exact recovery for polynomial dynamics
- Near-exact recovery for trigonometric basis
- Sparse symbolic equations recovered via thresholding
- Flow field reconstruction error <10%
### Neural Recording Simulation
- Poisson noise: spike count observations
- Recovery accuracy comparable to Gaussian case
- Successfully identifies neural population dynamics
- Applicable to calcium imaging and electrophysiology
## Applications
### 1. Neural Dynamics Identification
- Infer population dynamics from neural recordings
- Discover governing equations for neural circuits
- Identify synaptic/plasticity rules from observations
### 2. BCI Latent State Extraction
- Recover motor intention dynamics
- Extract cognitive state trajectories
- Enable closed-loop neurofeedback
### 3. Scientific Discovery
- Automated equation discovery from data
- Physics-informed neural network pre-training
- Hybrid symbolic-numeric modeling
### 4. Digital Twins
- Construct latent state models
- Predict future trajectories
- Enable intervention design
## Advantages Over Prior Methods
### vs. Standard Contrastive Learning
- **Dynamics-aware**: incorporates temporal evolution constraints
- **Symbolic recovery**: enables interpretable equation extraction
- **Multi-view denoising**: leverages independent observations
### vs. System Identification
- **Nonlinear observations**: handles realistic measurement models
- **High-dimensional**: reduces dimensionality while preserving dynamics
- **Noise-robust**: theoretical guarantees for noisy data
### vs. Sparse Identification (SINDy)
- **Latent discovery**: finds hidden dynamics, not observed dynamics
- **Multi-view**: uses redundant measurements to improve accuracy
- **Theoretical guarantees**: identifiability proofs for affine gauge
## Code Implementation
### Core Components
```python
class DYSCO:
def __init__(self, encoder, dynamics_basis, temperature=0.1):
self.encoder = encoder # fθ: y → h
self.dynamics_basis = dynamics_basis # φₖ(z)
self.temperature = temperature
def contrastive_loss(self, views_t, views_t_prime):
# Multi-view temporal contrastive objective
anchors = self.encoder(views_t)
positives = self.encoder(views_t) # same time
negatives = self.encoder(views_t_prime) # different time
sim_pos = cosine_similarity(anchors, positives)
sim_neg = cosine_similarity(anchors, negatives)
loss = -log(exp(sim_pos/τ) /
(exp(sim_pos/τ) + Σ exp(sim_neg/τ)))
return loss
def dynamics_loss(self, latent_trajs, dt):
# Flow field consistency
dz_dt_estimated = (latent_trajs[t+1] - latent_trajs[t]) / dt
dz_dt_predicted = self.dynamics_basis(latent_trajs[t])
loss = MSE(dz_dt_estimated, dz_dt_predicted)
return loss
def recover_equations(self, coefficients, threshold=0.01):
# Symbolic equation extraction
sparse_coeffs = threshold_filter(coefficients, threshold)
equation = construct_symbolic_equation(
self.dynamics_basis, sparse_coeffs)
return equation
```
## Pitfalls and Limitations
### 1. Multi-View Requirement
- **Issue**: Requires multiple independent observations
- **Mitigation**: Use multiple sensors, repeated measurements, or temporal segments
- **Alternative**: Single-view contrastive learning with temporal regularization
### 2. Affine Gauge Indeterminacy
- **Issue**: Recovered dynamics are up to affine transformation
- **Mitigation**: Post-processing with domain constraints
- **Alternative**: Incorporate physical constraints in dynamics parameterization
### 3. Basis Function Selection
- **Issue**: Choice of functional basis affects recoverability
- **Mitigation**: Use rich basis (polynomials + trigonometric) or neural basis
- **Alternative**: Adaptive basis learning
### 4. Hyperparameter Sensitivity
- **Issue**: Contrastive temperature and regularization weights critical
- **Mitigation**: Grid search or Bayesian optimization
- **Alternative**: Self-supervised hyperparameter tuning
### 5. High-Dimensional Observations
- **Issue**: Encoder capacity must match observation dimensionality
- **Mitigation**: Use convolutional/architectural encoder for images
- **Alternative**: Dimensionality reduction preprocessing
## Extensions and Future Directions
### 1. Neural-Symbolic Integration
- Combine DYSCO with physics-informed neural networks
- Hybrid equation-parameter models
- Interpretable latent dynamics
### 2. Control and Intervention
- Use recovered dynamics for control design
- Optimal intervention trajectories
- Closed-loop feedback systems
### 3. Real-Time Application
- Streaming contrastive learning
- Online dynamics updating
- Adaptive equation refinement
### 4. Multi-Modal Fusion
- Combine neural recordings with behavioral data
- Cross-modal contrastive learning
- Unified dynamics recovery
## Related Work
- **SINDy**: Sparse Identification of Nonlinear Dynamics (Brunton et al.)
- **Koopman Theory**: Linear embedding of nonlinear dynamics
- **Contrastive Learning**: SimCLR, MoCo, temporal contrastive methods
- **Neural Dynamics**: LFADS, RNN-based dynamical models
- **Scientific Discovery**: AI-assisted equation discovery
## References
- Muratore, P. & Mathis, M.W. (2026). "Extracting Governing Equations from Latent Dynamics via Multi-View Contrastive Learning." arXiv:2606.13260
- Brunton, S.L. et al. (2016). "Discovering governing equations from data by sparse identification of nonlinear dynamical systems." PNAS.
- Chen, T. et al. (2020). "A Simple Framework for Contrastive Learning of Visual Representations." ICML.
---
## Example Use Case
**Problem**: Identify neural population dynamics from calcium imaging recordings of motor cortex during reaching movements.
**DYSCO Application**:
1. **Multi-View**: Use simultaneous recordings from multiple animals performing same task
2. **Contrastive Learning**: Extract latent dynamics encoding movement intention
3. **Symbolic Recovery**: Discover governing equations for motor trajectory generation
4. **Result**: Recovered 3D latent dynamics with oscillatory flow field, matching kinematic models
**Implementation**:
```python
# Load calcium imaging from multiple animals
views = load_calcium_data(['animal1', 'animal2', 'animal3'])
# Initialize DYSCO
model = DYSCO(
encoder=ConvEncoder(input_dim=1000, latent_dim=3),
dynamics_basis=PolynomialBasis(max_degree=3),
temperature=0.2
)
# Train
model.fit(views, epochs=500, lambda_dynamics=0.3)
# Recover equations
equations = model.recover_equations(threshold=0.05)
# Output: dz₁/dt = α₁z₂ + α₂z₁z₃
# dz₂/dt = α₃z₁ - α₄z₂²
# dz₃/dt = α₅sin(z₁) + α₆z₃
```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!