spd_learn.modules.step_dynamic_trivialization#
- spd_learn.modules.step_dynamic_trivialization(model: Module, optimizer: Optimizer | None = None, *, threshold: float = 0.0, optimizer_state: Literal['reset', 'transport', 'keep'] = 'reset') None[source]#
Recenter native BiMap and exponential SPD charts, enabling SPD on first call.
Call after K completed optimizer updates and backward, outside
parametrize.cached(). Effective values and Parameter identities remain unchanged, including frozen parameters. Unsupported target chains raise. Nonparametrized BiMaps, softplus and positive scalars stay unchanged.Recentering is deterministic and preserves the horizontal Stiefel frame without consuming RNG state. Gradients of recentered Parameters are cleared.
- Parameters:
model (nn.Module) – Model containing parametrized
BiMaporSymmetricPositiveDefinitemodules.optimizer (torch.optim.Optimizer or None, default=None) – Optimizer whose state should be updated according to
optimizer_state.threshold (float, default=0.0) – Minimum tangent displacement norm required to trigger recentering for a given parameter. When
0.0(default), all eligible parameters are recentered unconditionally.optimizer_state ({"reset", "transport", "keep"}, default="reset") – How to handle
optimizer.state[original]whenoptimizeris provided:"transport"parallel-transports first-moment buffers (exp_avg/momentum_buffer) into the new tangent frame while preservingstepandexp_avg_sq;"keep"leaves state untouched;"reset"clearsoptimizer.state[original].
Notes
Single-subject / cross-session EEG (short travel): When weights stay close to initialization (\(\lesssim 25^\circ\)), static trivialization (\(K = \infty\), the default) is already nearly isometric, so dynamic updates are not needed.
Cross-subject, continual adaptation, or long-horizon training (large travel): When covariance shifts push weights far from initialization, periodic recentering (\(K \in [10, 50]\) or
threshold > 0) prevents differential distortion. Just asSPDBatchNormMeanVaruses parallel transport (\(G^{-1/2} P G^{-1/2}\)) to re-center batch covariances to the identity, each dynamic trivialization step updates the base point (\(B \leftarrow \phi_B(A), A \leftarrow 0\)) and transports the parameter tangent space back to the identity (\(\Gamma_{B \to I}\)), acting as Riemannian metric preconditioning.