Skip to content

Federated Design

The design rules behind the node/server split, and the notation used throughout these docs.

Rule 1 — The Locality Rule

Does this operation require both modalities simultaneously? No → node-local. Yes → server, and minimise what it receives.

Applied mechanically, this single question reproduces the whole architecture. It is also reusable: it is the scalpel to apply to any centralized method you want to federate.

The consequence is that communication cost concentrates entirely in the few coupled steps, which then become the scaling bottleneck; see Architecture.

Rule 2 — Split-Π

Centralized MaxFuse stores a matching as triples over both index spaces:

\[ \Pi = \{(i_k,\; j_k,\; w_k)\}_{k=1}^{n} \subset \mathbb{Z}^+ \times \mathbb{Z}^+ \times \mathbb{R} \]

Federated MaxFuse splits it so each node holds only its own indices:

\[ \Pi_{(0,2)} = \{(i_k,\; w_k)\}_{k=1}^{n} \quad\text{(node 1)}, \qquad \Pi_{(1,2)} = \{(j_k,\; w_k)\}_{k=1}^{n} \quad\text{(node 2)} \]

generalised as \(\Pi_{(\mathrm{i}-1,\,2)}\) for node index \(\mathrm{i} \in \{1,2\}\).

Indices are private; weights are shared. Node 1 learns that its cell k matched something with score \(w_k\), never which cell. The shared weights are what allow both nodes to apply the same pivot filter α independently and stay consistent without an extra round trip.

Rule 3 — Normalisation shifts the correlation

The trick that makes federated matching cheap. Centralized Pearson correlation is

\[ \rho(X,Y) = \frac{\sum_k (X_k-\bar{X})(Y_k-\bar{Y})}{\sqrt{\sum_k (X_k-\bar{X})^2}\sqrt{\sum_k (Y_k-\bar{Y})^2}} \]

If each node instead ships the mean-centred, L2-normalised matrix

\[ X' = \frac{X - \bar{X}}{\lVert X - \bar{X} \rVert_2} \]

then the server's correlation collapses to a plain dot product, \(\rho = X_1' \cdot X_2'^\top\), and the entire server matching kernel becomes

\[ D \;\leftarrow\; 1.0 - X_1' \cdot (X_2')^\top \]

This is mathematically identical to the centralized computation. The normalisation work moves to the data owner, and the server does linear algebra on representations that have already been smoothed and rescaled.

Inherited, not invented

The reference implementation already centres per row and L2-normalises before its dot product (maxfuse/utils.py::cdist_correlation). Fed-MaxFuse's contribution is recognising that this factorisation is a federation boundary and moving the two normalisation lines to the nodes.

Rule 4 — Exchange projections, never features

Where a computation genuinely couples the nodes, as the singular-vector search inside CCA does, the exchanged object is a latent score vector of length N (samples) rather than a weight vector of length p (features).

Scores live in sample space and are already projections; saliences live in feature space and carry feature semantics. Sending scores is both smaller and less revealing. See Iterative Federated CCA.

Notation

Symbol Meaning
\(\mathrm{i} \in \{1,2\}\) Node index
\(\mathbf{X}_\mathrm{i}\) Node i's active (all-feature) dataset
\(\mathbf{X}_\mathrm{i}^\circ\) Node i's shared (linked-feature) dataset
\(\mathbf{X}_\mathrm{i}^m\) Meta-cell representation
\(\widetilde{\mathbf{X}}\), \(\mathbf{X}'\) Fuzzily smoothed; L2-normalised
\(\mathbf{G}_{X_\mathrm{i}}\) k-NN graph
\(\Pi_{(\mathrm{i}-1,\,2)}\) Node i's half of the matching
\(w\) Fuzzy smoothing interpolation weight
\(\alpha,\ \beta\) Pivot and propagation filtering weights
\(T,\ C,\ K\) Refinement iterations, CCA components, SVPM iterations
\(\xi_c,\ \omega_c\) Latent score vectors
\(u_c,\ v_c\) Salience (approximate singular) vectors

Design trade-offs accepted

Decision Benefit Cost
Star topology Simple orchestration; one place to reason about Single point of failure; message bottleneck
Exchange smoothed data Large privacy improvement over raw Not a formal guarantee
Split-Π with shared weights Consistent filtering with no extra round trip Weights leak match quality
Open sklearn's CCA into Mode B PLS Makes CCA federable at all Re-implementation must track upstream numerics
Noise-interpolated SVPM init Avoids sharing a real data column Adds a parameter to tune, though the sweep shows it barely matters
No federated batching Simpler implementation Accuracy gap on large asymmetric datasets

That last row is the main known limitation; see Comparison with Centralized MaxFuse.