Skip to content

fix: apply symmetric tolerance guard in revin denormalization - #528

Open
reginaldalfret wants to merge 2 commits into
google-research:masterfrom
reginaldalfret:fix/522-revin-symmetric-scale-guard
Open

reginaldalfret wants to merge 2 commits into
google-research:masterfrom
reginaldalfret:fix/522-revin-symmetric-scale-guard

Conversation

@reginaldalfret

Copy link
Copy Markdown

Description

Fixes #522.

In reversible instance normalization (
evin), forward normalization guards against division-by-zero on low/zero-variance inputs (\sigma < _TOLERANCE) by clamping small \sigma\ to \1.0. However, reverse denormalization previously used raw \sigma\ directly (\x * sigma + mu).

For zero-variance or near-zero-variance series (\sigma < 10^-6, common in telemetry, quiescent sensors, piecewise-constant metrics, or idle systems), the transformer backbone's predicted forecast deltas were multiplied by \

In reversible instance normalization (revin), forward normalization guards
against division-by-zero on low/zero-variance inputs (sigma < _TOLERANCE)
by substituting 1.0. However, reverse denormalization previously used raw sigma
directly (x * sigma + mu).

For zero-variance or near-zero-variance series, this destroyed the roundtrip
identity revin(revin(x, reverse=False), reverse=True) == x, multiplying forecast
deltas by zero and collapsing predictions to a flat line (mu).

Apply the tolerance guard symmetrically during reverse denormalization across
PyTorch, Flax, and MLX implementations, and add regression unit tests.

Fixes google-research#522

Signed-off-by: Reginald Alfret <reginaldalfret@gmail.com>
@google-cla

google-cla Bot commented Sep 23, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@reginaldalfret

Copy link
Copy Markdown
Author

@google-cla recheck

Signed-off-by: Reginald Alfret <reginaldalfret@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Asymmetric scale guard in revin causes roundtrip invariant violation and silent forecast annihilation for low-variance / quiescent series

1 participant