--- title: Cortex-Conv — Browser-Native Equilibrium Propagation emoji: 🧠 colorFrom: purple colorTo: indigo sdk: static pinned: false license: mit short_description: 34K-param EqProp net at 96.8% MNIST, in your browser. tags: - equilibrium-propagation - webgpu - mnist - fashion-mnist - biologically-plausible-learning - no-backprop - browser --- # cortex-conv **A 34,106-weight convolutional neural network trained with Equilibrium Propagation — no backpropagation — running entirely in your browser on WebGPU. Ships pre-trained at 96.8% MNIST test accuracy: the page loads at 96.8% on the very first visit.** The neuron is a leaky integrator with sigmoid activation. The training rule is two forward passes (free + ±β-clamped) plus a local activity-difference weight update — no backward graph, no transposed weights, no autodiff. Toggle to Fashion-MNIST to watch the same network train from scratch on clothing items, live. ## What's in this Space | Panel | What it shows | |---|---| | **Panel 03** — *the lead* | `cortex-conv` itself: a trained network that ships at 96.8% MNIST. Click `train` to keep refining; toggle `data` for Fashion-MNIST. | | **Panel 00** — *context* | The FitzHugh-Nagumo reaction-diffusion substrate that EqProp's underlying proof was developed on. Cortex-conv inherits the proof's broader-class guarantee but uses a simpler neuron. | | **Panel 01** — *context* | An inference shortcut cortex-conv deliberately doesn't use (it has a ~30-layer precision wall; cortex-conv has 3 layers and uses iterative settling instead). | | **Panel 02** — *context* | The self-adjointness proof that lets any EqProp variant work on this neuron class. | ## How cortex-conv stacks up | Method | Params | MNIST accuracy | Deployment | |---|---|---|---| | Kendall 2026 (FHN, 5-layer dense) | 1,457,674 | 97.2% | Python | | EqSpike (Martin et al. 2021, spiking) | unspec. | 97.6% | neuromorphic HW | | Oscillator Ising EqProp (2025) | unspec. | 97.2% ± 0.1% | physical oscillators | | Scellier & Bengio 2017 (original) | unspec. | 97-98% | Python | | **cortex-conv (this Space)** | **34,106** | **96.8%** | **browser, WebGPU** | | (small backprop CNN, for context) | 31,818 | 99.26% | Python | Honest positioning: **the smallest browser-deployed EqProp net on MNIST**. Slightly below the EqProp accuracy frontier (96.8% vs 97.2-97.6%) but orders of magnitude more deployable — no Python, no GPU server, no hardware lab, just a browser tab. ## Technical write-up See [`PAPER_COMPANION.md`](./PAPER_COMPANION.md) for the architecture, the four "cortex" learning ingredients (each with verified citations), the comparison math, and reproducibility instructions. ## Related work - Jack Kendall, *Equilibrium Propagation and Hamiltonian Inference in the Diffusive FitzHugh-Nagumo Model*, [arXiv:2605.21568](https://arxiv.org/abs/2605.21568) (2026) — the self-adjointness proof Panel 02 visualises. - Liu & Chen, *FRE-RNN: Feedback Regulation for Practical EqProp*, [arXiv:2508.11659](https://arxiv.org/abs/2508.11659) (2025) — source of the adaptation-current ingredient. - Kubo, Chalmers & Luczak, *Adjusted Adaptation*, [arXiv:2204.14008](https://arxiv.org/abs/2204.14008) (2022) — source of the adjusted-relaxation ingredient. - Zhang, Liu & Schaeffer, *AdaGO: AdaGrad Meets Muon*, [arXiv:2509.02981](https://arxiv.org/abs/2509.02981) (2025) — the optimiser cortex-conv uses on top of EqProp gradients. - Scellier & Bengio, *Equilibrium Propagation*, Frontiers Comp. Neurosci. (2017) — the foundational EqProp paper. ## Requirements A browser with WebGPU enabled (Chrome / Edge 113+ on macOS / Windows / Linux; Safari 18+ on macOS Sonoma). If WebGPU is unavailable the page falls back to a slower CPU path with a smaller embedded MNIST. ## Files | Path | Purpose | |---|---| | `index.html` | The four-panel demo page | | `tests/gpu_lib_conv_multi.js` | WGSL training pipeline (forward + ±β-clamped relaxation + gradient kernels) | | `tests/gpu_lib_deep.js` | Muon / AdaGO optimisers + helpers | | `tests/gpu_lib_conv_full.js` | WebGPU device init + command-encoder utilities | | `tests/eqprop_lib.js` | Shared activation funcs + dataset loader | | `mnist/mnist_pack_28_60k.json` | 60K MNIST samples at 28×28 (base64-packed uint8) | | `fashion/fashion_pack_28_60k.json` | 60K Fashion-MNIST samples at 28×28 | | `weights/cortex_conv_mnist_R28.json` | Pre-trained cortex-conv weights (96.8% test acc, 720 KB) | | `PAPER_COMPANION.md` | Full technical write-up | ## License MIT.