Hilbert-Schmidt-scale KSD loss
Implementation & benchmark of arXiv:2607.03367 — Minimax Estimation of Kernel Stein Discrepancy: Trace versus Hilbert-Schmidt Scales
Source paper: Minimax Estimation of Kernel Stein Discrepancy: Trace versus Hilbert-Schmidt Scales arXiv:2607.03367 ⓘ · analyzed Aug 30, 2026
AI-generated research hypothesis, automatically tested. Not peer-reviewed.
Idea description
Replace the standard plug-in KSD V-statistic with the positive-part square root of the unbiased pairwise U-statistic when evaluating or training a sampler against a fixed target score. The estimator uses off-diagonal cancellation and should approach the Hilbert–Schmidt fluctuation scale instead of the larger trace scale paid by the diagonal-including V-statistic.
Formulas
Mathematical statement
The paper defines the Kernel Stein Discrepancy as $\operatorname{KSD}(P_{0},P)=\|\mathbb{E}_{X\sim P}\xi_{P_{0}}(X)\|_{\mathcal H}$, where $P_{0}$ is the fixed target distribution, $P$ is the model distribution, $\xi_{P_{0}}(x)\in\mathcal H$ is the Stein feature determined by the target score, and $\mathcal H$ is the associated RKHS. Define the Stein kernel $h_{P_{0}}(x,y)=\langle\xi_{P_{0}}(x),\xi_{P_{0}}(y)\rangle_{\mathcal H}$; then $\operatorname{KSD}^{2}(P_{0},P)=\mathbb E_{X,Y\sim P}[h_{P_{0}}(X,Y)]$. For independent samples $X_{1:n}\sim P$, the unbiased estimator is $U_n=[n(n-1)]^{-1}\sum_{i\ne j}h_{P_{0}}(X_i,X_j)$ and the proposed nonnegative estimator is $\widehat{\operatorname{KSD}}_{U}=\sqrt{[U_n]_+}$, where $[a]_+=\max(a,0)$. The paper states that the minimax scale is $\sqrt{\|C_{\star}\|_{\mathrm{HS}}/n}$, where $C_{\star}$ is the Stein covariance operator and $\|C_{\star}\|_{\mathrm{HS}}=\sqrt{\operatorname{tr}(C_{\star}^{2})}$, whereas the usual V-statistic has scale $\sqrt{\operatorname{tr}(C_{\star})/n}$. The transfer relies on the potentially much smaller Hilbert–Schmidt norm; their ratio is governed by the effective rank $r_{\mathrm{eff}}=\operatorname{tr}(C_{\star})^{2}/\|C_{\star}\|_{\mathrm{HS}}^{2}$.
Implementation notes
Integrate this into the discrepancy computation used to train or evaluate a particle sampler, diffusion model, score model, or variational generator against a target distribution with known score $s_{0}(x)=\nabla_x\log p_{0}(x)$. For a differentiable scalar kernel $k(x,y)$, construct the Langevin Stein kernel $h_{P_{0}}(x,y)=s_{0}(x)^\top k(x,y)s_{0}(y)+s_{0}(x)^\top\nabla_y k(x,y)+s_{0}(y)^\top\nabla_x k(x,y)+\operatorname{tr}(\nabla_x\nabla_y k(x,y))$. Given a batch x[1:n] = model(z), compute the pairwise matrix H, remove its diagonal, and form u=(H.sum()-diag(H).sum())/(n*(n-1)); return loss=sqrt(relu(u)+eps). Pseudocode is: x=model(z); H=stein_kernel(x, score0, kernel); u=(H.sum()-H.diagonal().sum())/(n*(n-1)); loss=sqrt(relu(u)+eps); loss.backward(). If negative minibatch estimates cause unstable gradients, optimize u while reporting the square-root U-estimate for validation, or use sqrt(relu(u.detach())+eps) only as a monitoring transform. The mathematical quantities to implement exactly are the off-diagonal U-statistic and positive-part square root. Estimate the empirical benefit by repeating independent batches and comparing estimator variance to the diagonal-including V-statistic; estimate effective rank from Gram eigenvalues using $\widehat r_{\mathrm{eff}}=(\sum_j\hat\lambda_j)^2/\sum_j\hat\lambda_j^2$. Start with a 2D and 10D Gaussian target, RBF kernel, and small MLP particle generator or Langevin sampler. Compare V-KSD and square-root U-KSD at batch sizes 32, 64, 128, and 512 against a large-batch reference. Success is lower estimation variance and bias, better detection of small distribution shifts at fixed sample count, and lower held-out KSD at equal training updates without gradient explosions.
Verification
Stage 1 · Toy mechanism gate: Passed ✓
Stage 2 · Mechanism transferred to benchmark: Confirmed ✓
Stage 2 · Practical benchmark result: Inconclusive
Methodology: 8 paired seeds, permutation test (p<0.05) against a learning-rate-tuned baseline. How verification works
Stage 1 — Mechanism check agent confidence 9/10
Built the Gaussian-target RBF Stein-kernel MVP with exact off-diagonal U-statistic and positive-part square-root estimator. The math check reproduced the diagonal trace and Stein-kernel second-moment formulas closely; across dimensions 2, 5, and 10, V-KSD tracked the trace scale while U-KSD was far smaller and followed the Hilbert–Schmidt-scale trend, with both showing approximately n^-1/2 scaling. The effect is real at the null target, although the square-root U estimate was negative before clipping in roughly 50–60% of minibatches and had larger raw Monte Carlo standard deviation than V, so direct optimization may require using U² or a monitoring-only square root.
- Agent confidence
- 9/10
- Baseline
- At n=32, V mean / trace scale = 0.985 (d=2), 0.997 (d=5), 1.000 (d=10); d=5 log-log slope versus n = -0.499.
- Idea
- At n=32, U mean / Hilbert–Schmidt scale = 0.442 (d=2), 0.436 (d=5), 0.437 (d=10); d=5 log-log slope versus n = -0.505. Effective rank at d=2/5/10 was 14.1/285.2/21853.1, producing the predicted growing V/U gap. U-statistic negativity fraction was 0.56/0.57/0.56 at n=32.
Limitations: Only the fixed Gaussian null-target evaluation was tested; no sampler, neural training loop, shifted alternative, GPU path, or held-out KSD comparison was implemented. The second-moment Monte Carlo check used 200,000 paired samples, with its highest-dimensional relative error about 5.9%.
How to run: python3 ksd_experiment.py
Stage 2 — Benchmark vs. tuned baseline (arXiv:2607.03367)
No significant difference vs. the tuned baseline (+1.7%, p=0.3043, wins 3 / 8 paired seeds).
- Benchmark
- Gaussian_score_matching_1d
- Model
- mlp_tiny
- Paired seeds
- 8
- Baseline mean
- 1.5025
- Idea mean
- 1.5284
- Effect (Δ)
- 0.0259 (+1.7%; negative = idea better)
- Wins
- 3 / 8 paired seeds
- p-value
- 0.3043 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- ±3.6%
- Mechanism
- Confirmed ✓
- Practical effect
- Inconclusive
- Baseline tuning
- swept over 3 configs
The registered custom task is a small 1D Gaussian score-matching regression benchmark because the built-in tracks lack known target-score/KSD structure. Only mlp_tiny, one RBF bandwidth gamma=0.5, 25 epochs, batch 64, and three learning rates were tested; the mechanism bootstrap used one trained seed and is exploratory.
How to run: python3 stage2_bench.py
Verdict computed by deterministic test code from paired-seed statistics — not by the language model.
Stage 2 — Benchmark latest Failed ✗
Agent confidence: 9/10
Implemented the registered gaussian_score_matching_1d custom track with identical mlp_tiny systems, differing only in standard diagonal-including V-KSD versus positive-part square-root off-diagonal U-KSD training. Across 8 paired seeds, U-KSD was slightly worse on held-out MSE (1.528389 versus 1.502536), with paired delta +0.025853 and permutation p=0.3043; this is not a significant win. The trained-model signature measured lower U-KSD values but does not override the independent task-metric result.
- Baseline
- Best lr=0.001; full 8-seed held-out MSE mean=1.5025363577, std=1.8326529003.
- Idea
- Best lr=0.001; full 8-seed held-out MSE mean=1.5283892883, std=1.8366178278; paired delta=+0.0258529306; p=0.3043; wins=3/8.
Benchmark result
No significant difference vs. the tuned baseline (+1.7%, p=0.3043, wins 3 / 8 paired seeds).
- Benchmark
- Gaussian_score_matching_1d
- Model
- mlp_tiny
- Paired seeds
- 8
- Baseline mean
- 1.5025
- Idea mean
- 1.5284
- Effect (Δ)
- 0.0259 (+1.7%; negative = idea better)
- Wins
- 3 / 8 paired seeds
- p-value
- 0.3043 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- ±3.6%
- Mechanism
- Confirmed ✓
- Practical effect
- Inconclusive
- Baseline tuning
- swept over 3 configs
The registered custom task is a small 1D Gaussian score-matching regression benchmark because the built-in tracks lack known target-score/KSD structure. Only mlp_tiny, one RBF bandwidth gamma=0.5, 25 epochs, batch 64, and three learning rates were tested; the mechanism bootstrap used one trained seed and is exploratory.
How to run: python3 stage2_bench.py
Artifacts
- bench_report.json 2.4 KB View Raw
- ksd_experiment.py 3.6 KB View Raw
- ksd_track.py 0.8 KB View Raw
- ksd_track_1d.py 0.7 KB View Raw
- report.md 1.7 KB View
- report_bench_2026-09-04T115817.md 4.2 KB View
- results.json 6.4 KB View Raw
- stage2_bench.py 5.1 KB View Raw