Section

Playground

A public, server-free playground -- train a Neural ODE or a classifier live in your browser and watch it learn.

Live

This is the public build of vZero, a research playground for Neural ODEs built around a chemical-kinetics problem (H2/O2 autoignition). Everything below runs entirely in your browser: no server, no data leaves this tab, and it works offline. It has two tabs.

Neural ODE tab: watch a network learn the physics

A neural network f is trained so that integrating dy/dt = f(y) reproduces trajectories sampled from a known system. You see the true trajectories (grey, dashed), the network’s own trajectories from the same starting points (blue), a start the network never trained on (orange), the learned vector field as small arrows, and the training loss falling live.

  • How it trains. A small tanh network is the right-hand side; a fixed-step Runge-Kutta (RK4) integrator turns it into trajectories; and the gradient is back-propagated by hand through every RK4 stage. It is checked against finite differences, not trusted by eye.
  • Two systems. A damped spiral and a predator-prey (Lotka-Volterra) orbit. Change the network width or learning rate and press Reset; if the loss blows up, the page tells you.
  • An honest limit. These are smooth, non-stiff systems. Stiff H2/O2 autoignition did not pass the same test in the browser: the loss fell about a hundred-fold, but the radical species peaks stayed wrong, so that case is trained with the Python version and shown as figures on the project page, not faked here.

Classifier tab: the toy-dataset playground

Pick a dataset, edit the network’s width and depth, choose an activation, and watch a real gradient-descent loop train live.

  • 9 datasets. The original 6 (circle, XOR, two-Gaussian, spiral, plane regression, Gaussian-mixture regression) re-implement the formulas TensorFlow Playground’s dataset.ts uses (Apache-2.0; re-derived from the main project’s Python port, not copied). Three are written for this playground: moons, checkerboard, and rings.
  • Bring your own data. A CSV upload (x, y, label, label -1/0/1) trains the same network on your data, parsed and kept entirely in your browser (capped at 2,000 rows).
  • Your personal best, per dataset, saved in this browser’s local storage only; never shared.
  • The network is a from-scratch multi-layer perceptron (own initialization, hand-derived backpropagation, Adam, mini-batches, optional L1/L2). It is verified to reach comparable accuracy to the main project’s PyTorch version, not to match it bit-for-bit.
  • Two things TensorFlow Playground doesn’t have: a small activation heatmap for every neuron, and a loss-function picker (squared error or cross-entropy).

What the full vZero trains

The full local environment trains the H2/O2 autoignition Neural ODE with the real chemistry: Cantera h2o2.yaml, a constant-pressure reactor at a range of starting temperatures, an 11-value state (ten species fractions plus temperature), an adaptive stiff-capable ODE solver, and a loss that can be plain squared error or a power mean. Its best-known finding is a plain one: scaling temperature is what makes the training work (about an order of magnitude lower error), because otherwise temperature’s raw size dominates the gradient. The environment is not public yet; the project page tells the full story.

Built with Claude Code across a multi-week collaboration.

Learn

  1. State, rate, trajectory: the three things a Neural ODE must not confuse Open in the Studio
  2. A complete small learning loop: fit with Adam, test beyond the training window, and check the gradient three ways Open in the Studio
  3. Two clocks, one step size: why stiffness limits the solver and why a change of coordinates must be checked Open in the Studio
  4. Which channel is loud? Scaling, gradients, power means and a loss landscape as four views of the same question Open in the Studio
  5. Making nonlinear dynamics look linear: lifts, snapshot fits and low-dimensional models Open in the Studio
  6. Put the structure in the model: valid inertia, valid rates, graphs, and what a sensor can see Open in the Studio
  7. Round it, export it, compare it: the checks that remain after the model is trained Open in the Studio

Concept explainers

Documents

Experiments

optimizer race

11-optimizer race on the Van der Pol benchmark, proper names + final numbers
11-optimizer race on the Van der Pol benchmark, proper names + final numbersExplain

ablation

Normalization ablation — raw baseline vs. 9 normalized arms
Normalization ablation — raw baseline vs. 9 normalized armsExplain

rl arena

RL Arena — the real PPO agent's weight-space trajectory
RL Arena — the real PPO agent's weight-space trajectoryExplain
RL arena: weight-space trajectory of the agent
RL arena: weight-space trajectory of the agentExplain
RL arena: objective and reward over training
RL arena: objective and reward over trainingExplain
RL arena: action magnitude vs episode phase
RL arena: action magnitude vs episode phaseExplain
RL arena: reward autocorrelation
RL arena: reward autocorrelationExplain

dataset geometry

Dataset split geometry — random pool split
Dataset split geometry — random pool splitExplain
Trajectory bundles by split — T, H2O, OH, HO2
Trajectory bundles by split — T, H2O, OH, HO2Explain
Dataset split geometry — structured grid (never run)
Dataset split geometry — structured grid (never run)Explain

rl evaluation

RL vs. gradient-free solvers, matched-budget scorecard
RL vs. gradient-free solvers, matched-budget scorecardExplain
RL training convergence, running best objective
RL training convergence, running best objectiveExplain
Machine-written verdict: ADOPT
Machine-written verdict: ADOPTExplain

curriculum

Per-parameter gradient magnitude over training
Per-parameter gradient magnitude over trainingExplain
Gradient flow to the first hidden layer — shallow vs. deep
Gradient flow to the first hidden layer — shallow vs. deepExplain
The seven input features as fixed spatial filters
The seven input features as fixed spatial filtersExplain
Final-layer embedding — discrete MLP vs. continuous Neural ODE
Final-layer embedding — discrete MLP vs. continuous Neural ODEExplain
Linear vs. nonlinear model on two toy datasets
Linear vs. nonlinear model on two toy datasetsExplain
Weight decay vs. the train/test generalization gap
Weight decay vs. the train/test generalization gapExplain
Zero initialization fails to break symmetry
Zero initialization fails to break symmetryExplain

loss and training

Train vs. validation loss on the Van der Pol benchmark
Train vs. validation loss on the Van der Pol benchmarkExplain
Linear readout vs. an MLP decoder stage
Linear readout vs. an MLP decoder stageExplain

Code