poincare-hyper / README.md
DHDRL's picture
Update README.md
514b075 verified
|
Raw
History Blame Contribute Delete
7.83 kB
---
license: apache-2.0
library_name: pytorch
tags:
- scientific-ml
- hyperbolic
- poincare
- spatiotemporal
- continual-learning
- reinforcement-learning
- physics-informed
- hierarchy-embedding
- the-well
- paleobiology
datasets:
- polymathic-ai/the_well
metrics:
- mean_reciprocal_rank
- hyperbolic_loss
pipeline_tag: other
---
# well_poincare_rl
**Hierarchical multi-step field predictor in the Poincaré ball**, with optional PPO fine-tuning, continual learning (Replay + EWC), and explicit data/checkpoint contracts for multi-contributor scientific use.
This model predicts spatiotemporal scientific fields and embeds hierarchical structure (e.g. taxonomies) using hyperbolic geometry.
## Model description
| Component | Role |
|---|---|
| `MultiScaleEncoder` | Channel-agnostic encoder (shared 1×1 stem per channel → mean fusion → spectral + local path) → 8-D Euclidean latent |
| `HierarchicalHyperbolicPredictor` | Multi-step prediction in the Poincaré ball (coarse RNN + residual refinement levels) |
| `HierarchyEmbedding` | Poincaré vs Euclidean node embeddings for taxonomy trees (RiemannianAdam / geoopt) |
| Continual stack | Per-domain `FieldNormalizer`, same-C `ReplayBuffer`, `DiagonalEWC`, optional hyperbolic distillation |
| Optional RL | Gymnasium env + PPO / on-policy fine-tune with hyperbolic critic |
**Intended uses**
- Multi-step forecasting of continuum fields (reaction–diffusion, active matter, fluids, similar PDE-style data)
- Continual training across scientific domains with **different channel counts** (no fixed-`C` encoder lock-in)
- Hierarchy recovery on taxonomic / tree-structured scientific data (explicit Poincaré vs Euclidean comparison)
- Research on hyperbolic representations for multi-scale and hierarchical scientific structure
## How to use
```bash
pip install torch geoopt gymnasium h5py the_well
# clone / install this package, then:
```
```python
import torch
from src.model import MultiScaleEncoder, HierarchicalHyperbolicPredictor
from src.config import BEST_HPARAMS as BEST
enc = MultiScaleEncoder(hidden=BEST["hidden"], out_dim=8)
model = HierarchicalHyperbolicPredictor(
enc, c=BEST["curvature"], pred_steps=BEST["pred_steps"], levels=BEST["levels"]
)
# x: (B, T, C, H, W) or (B, C, H, W) — C is not fixed by the encoder
pred = model(x) # (B, pred_steps, 8) points in the Poincaré ball
```
**Real multi-stream continual (requires HF network access):**
```bash
python -m src.run_multistream \
--datasets gray_scott_reaction_diffusion active_matter shear_flow \
--max-samples 96 --epochs-per-domain 3
```
**Hierarchy embedding (real PBDB or synthetic tree):**
```bash
python -m src.run_hierarchy_embed \
--pbdb-taxa Dinosauria Mammalia \
--dims 8 --loss-types softmax --burn-in-epochs 0 \
--c-values 1.0 2.0 --epochs 80 --lr 0.02 --seeds 0 --optimizer radam
```
Synthetic-only smoke tests: `python -m src.run_full --synthetic` and `python -m src.run_hierarchy_embed --synthetic ...`.
## Training data
| Source | Role | Provenance label |
|---|---|---|
| [The Well](https://github.com/polymathic-ai/the_well) (HF streams) | Spatiotemporal fields (e.g. gray_scott, active_matter, shear_flow) | `REAL_STREAMED` |
| Local Well-format HDF5 | Same, offline | `REAL_LOCAL` |
| [PBDB](https://paleobiodb.org) occurrence records | Taxonomy edges (Dinosauria + Mammalia) and optional density fields | `REAL_PBDB` / `REAL_PBDB_TAXONOMY` |
| Synthetic Well-like / synthetic trees | Opt-in only (`--synthetic`); never silent fallback | `SYNTHETIC` / `SYNTHETIC_TREE` |
**Contract:** real-data paths **hard-fail** on missing data, schema mismatch, or stream failure. Synthetic data is only available via explicit APIs. Provenance is always reported and stored with checkpoints.
## Evaluation results
Verification tiers used below:
- 🔒 **Checkpoint-verified** — recomputed from a saved artifact (hash chain, stored metrics, or model structure)
- 📋 **Reported** — from a run log; consistent and plausible, not independently re-derived from a saved artifact
### Track A — Multi-stream continual learning (Well)
Sequential training on live HF streams, no synthetic fallback.
🔒 Verified from checkpoint: `REAL_STREAMED` provenance, dataset names, per-domain normalizer channel counts (C=2, 11, 4), channel-agnostic encoder architecture.
📋 Reported retention losses (checkpoint format does not yet persist the loss history):
| After domain | gray_scott (C=2) | active_matter (C=11) | shear_flow (C=4) |
|---|---|---|---|
| Domain 1 | 0.3486 | — | — |
| Domain 2 | 0.3561 | 0.3299 | — |
| Domain 3 | 0.3248 | 0.3484 | 0.3358 |
Replay buffer by channel count after full run: `{2: 24, 11: 24, 4: 24}`.
### Track B — Real PBDB hierarchy (Poincaré vs Euclidean)
Live taxonomy edges from Dinosauria + Mammalia (~16k occurrence records → **2141 nodes**, **2172 edges**).
🔒 **Independently recomputed** from raw occurrence JSON using this repo’s `build_edge_list` / `hash_edge_list` / `hash_config` / `combined_identity_hash`; matched checkpoint identity and stored `results_table` to full precision.
| Setting | ΔMRR (Poincaré − Euclidean) |
|---|---|
| dim=8, softmax, c=1.0 | 🔒 **+0.1151** |
| dim=8, softmax, c=2.0 | 🔒 **+0.1576** |
Protocol: reconstruction (train = test edges) — measures embedding capacity at a given dimension, not link-prediction generalization.
**Scope:** one seed, one dimension, metrics-only hierarchy checkpoint (full embedding weights not exported in the verified artifact).
## Hyperparameters (default / Optuna best)
```text
lr=3.82e-4, curvature=0.455, hidden=96, batch_size=8,
pred_steps=4, w_phys=9.6e-4, levels=2, window=4
```
Single source of truth: `src/config.py` (`BEST_HPARAMS`).
## Limitations
- Multistream **retention numbers** are 📋 reported, not 🔒 checkpoint-verified (loss history not stored in the multistream checkpoint format).
- Real PBDB hierarchy result is **one seed / one dimension**.
- Channel fusion is **mean-pooling** (lossy); attention-based fusion is future work.
- Soft hierarchical **region structure** in the Poincaré ball is currently deferred.
- While PPO is implemented and smoke-tested; it has not yet been optimized and verified for performance.
- Conservation auxiliary loss in the shipped physics suite is a soft proxy; a stricter spatial-integral form is a recommended upgrade, not necessarily present in every checkpoint.
- Supported compute: **CPU and CUDA**. Not ported to TPU/XLA or LPU.
- Data licenses are separate from code: PBDB is CC0; The Well has its own terms. This card’s Apache-2.0 license covers **code and released model artifacts**, not third-party datasets.
## Ethical considerations
- In many fields, when a measure becomes a target it ceases to be a good measure; that is likely true with reward hacking this design as well.
- This release is for research and methodological development.
- The field of Paleobiology includes data with known incompleteness and occasional inconsistencies;
- As models trained on this system reflect curator-assigned taxonomy in PBDB, they reflect such inconsistencies across recorded embeddings.
- The pipeline records edges as-observed and does not “resolve” taxonomic disputes.
## Citation
If you use this code or results, please cite the repository and the relevant data sources (The Well, PBDB). A formal paper citation will be added when the arXiv draft is public.
```bibtex
@software{well_poincare_rl,
title = {well\_poincare\_rl: Hierarchical hyperbolic field prediction and taxonomy embedding},
year = {2026},
license = {Apache-2.0}
}
```
## License
Code and released model artifacts: **Apache License 2.0**.
Dataset terms remain those of the original providers (The Well, Paleobiology Database, etc.).