ricci
Graph neural network layers, plus Ollivier-Ricci edge curvature
(the curvature module) for finding oversquashing bottlenecks.
Quickstart
[]
= "0.8"
= { = "0.20", = false, = ["std"] }
= "0.20"
Hyperbolic distance on the Poincare ball:
use ;
use NdArray;
use PoincareBall;
type B = ;
let dev = default;
let ball = new;
let x = from_data;
let y = from_data;
let d = ball.distance.to_data..unwrap;
assert!;
Geometry
The Poincare ball $\mathbb{B}^d_c = {x \in \mathbb{R}d : c\lVert x \rVert2 < 1}$ with curvature $-c$:
| Operation | Formula |
|---|---|
| Distance | $d_c(x, y) = \frac{2}{\sqrt{c}} \text{arctanh}\bigl(\sqrt{c}\lVert -x \oplus_c y \rVert\bigr)$ |
| Mobius addition | $x \oplus_c y = \frac{(1 + 2c\langle x,y\rangle + c\lVert y\rVert2)x + (1 - c\lVert x\rVert2)y}{1 + 2c\langle x,y\rangle + c2\lVert x\rVert2\lVert y\rVert^2}$ |
| Exp map | $\exp_xc(v) = x \oplus_c \bigl(\tanh\bigl(\frac{\sqrt{c}\lambda_xc\lVert v\rVert}{2}\bigr)\frac{v}{\sqrt{c}\lVert v\rVert}\bigr)$ |
| Log map | $\log_xc(y) = \frac{2}{\sqrt{c}\lambda_xc}\text{arctanh}(\sqrt{c}\lVert -x \oplus_c y\rVert)\frac{-x \oplus_c y}{\lVert -x \oplus_c y\rVert}$ |
where $\lambda_xc = \frac{2}{1 - c\lVert x\rVert2}$ is the conformal factor.
API surface
ricci::PoincareBall: Poincare ball geometry (project, mobius_add, exp/log maps, distance, parallel transport).ricci::GCNConv: graph convolution (linear projection + adjacency matmul).ricci::HGCNConv: hyperbolic graph convolution on the Poincare ball.ricci::RGCNConv: relational graph convolution (per-relation transforms over an adjacency stack, optional basis decomposition) for typed graphs.ricci::NBFConv: conditional message passing (edge-type representations as forward inputs; indicator-initialized pair representations).ricci::relgraph: the graph of relations (four interaction-type adjacencies over relation nodes, inverses included). All conv layers derive Burn'sModule, so they embed in trainable models.ricci::curvature: Ollivier-Ricci edge curvature over an adjacency matrix (lazy-walkalpha, entropicW1).ricci::features: homomorphism-count node features (walk and closed-walk profiles); these separate some graphs that 1-WL message passing cannot.
Inputs are shaped [batch, d] (row-major feature vectors).
Examples
See examples/README.md for runnable examples with captured output.
References
Each entry links to a mechanism-level summary in docs/papers.md.
- Ollivier. Ricci curvature of Markov chains on metric spaces. Journal of Functional Analysis 256(3), 2009. The edge curvature computed here. notes
- Topping, Di Giovanni, Chamberlain, Dong, Bronstein. Understanding over-squashing and bottlenecks on graphs via curvature. ICLR 2022. arXiv:2111.14522. Negative curvature marks the bottleneck edges. notes
- Kipf, Welling. Semi-supervised classification with graph convolutional
networks. ICLR 2017.
arXiv:1609.02907.
GCNConv. notes - Ganea, Bécigneul, Hofmann. Hyperbolic neural networks. NeurIPS 2018.
arXiv:1805.09112. The Möbius
operations behind
PoincareBall. notes - Chami, Ying, Ré, Leskovec. Hyperbolic graph convolutional neural
networks. NeurIPS 2019.
arXiv:1910.12933.
HGCNConv. notes - Cuturi. Sinkhorn distances: lightspeed computation of optimal
transportation distances. NeurIPS 2013.
arXiv:1306.0895. The entropic
W1solved per edge. notes - Dell, Grohe, Rattan. Lovász meets Weisfeiler and Leman. ICALP 2018. arXiv:1802.08876. Homomorphism counts as an expressiveness measure. notes
- Barceló, Geerts, Reutter, Ryschkov. Graph neural networks with local graph parameters. NeurIPS 2021. arXiv:2106.06707. Hom-count features in practice. notes
- Schlichtkrull, Kipf, Bloem, van den Berg, Titov, Welling. Modeling
relational data with graph convolutional networks. ESWC 2018.
arXiv:1703.06103.
RGCNConv. notes - Zhu, Zhang, Xhonneux, Tang. Neural Bellman-Ford networks: a general
graph neural network framework for link prediction. NeurIPS 2021.
arXiv:2106.06935.
NBFConv. notes - Galkin, Yuan, Mostafa, Tang, Zhu. Towards foundation models for
knowledge graph reasoning. ICLR 2024.
arXiv:2310.04562.
relgraph. notes
License
MIT OR Apache-2.0