Repository navigation
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements EMPF (Exponential Moving Prototype Flow) (
particlegan/empf.py,particlegan/_empf/), a standalone ParticleGAN trainer family (critic_formulation="empf",prior_regularizer="empf", preset"empf") inspired by e-means (Bessa et al., arXiv:2611.09501), together with its full Forge CUDA qualification (empf-v1), 9-family DCGAN scaling campaign, and current leaderboard publication.DEFAULT_RECIPE = "bispf_optimized"and all historical receipts, snapshots, and incumbent recipe digests remain untouched.Formulation Overview (
critic_formulation="empf",prior_regularizer="empf")(S, N)Sufficient-Statistics Prototype Bank (particlegan/_empf/prototypes.py):(S_k, N_k)updated via a clock-free(K, B)hit-rate EMA (alpha = clip(alpha_base * (B / K)^0.45, 0.03, 0.35)), dropping dataset-size and epoch-horizon clocks.N_k < revival_tau * mean(N), splits an active donor selected via golden/plastic (phi_1, phi_2) quasi-Monte Carlo CDF sampling while conserving exact total mass ((N_donor + N_dead) / 2) with zero RNG consumption.particlegan/_empf/transport.py,penalty.py):w_k = N_k / sum_j N_jagainst uniform generated column marginals1 / B_fingamma_gauge), and state-driven smoothstep thermal cooling (EMPFStepRecord, serialized across checkpoints with zero module-level global state).particlegan/_empf/prior.py):N <= min_dof), and a smooth dead-particle revival tether (d_{1\text{nn}}^2 / (isolation_ratio * r_{\text{med}}^2) - 1) pulling stranded outlier particles back to active clusters.Forge CUDA Readout (
empf-v1, Seed 0,NVIDIA RTX A6000)Executed commit:
cb5e484b059d3474f7259c40beb7acb4b5bb8704(readout-d46a41a1da2da54d67d154f4.json, 40 attempts,0 INCOMPLETE,1109/1109attempt coverage):bispf-optimized-quintic-v1)empf-v1, new)recipe-prior-refactor-bcap-pure-v1)atlas-particle-normal-v4)e22)Disclosure: BISPF and BCAP pinned snapshots predate the 4 newer VAE/AE Tier 1 tasks (
4 not run).Key Scientific Findings
27/27Tier 1 view requirements) + Clock-Free Audit PASS (clockfree_audit_measurement_v1,4/4parity comparisons): Passestwo_pole,gaussian1d_smoke,zero_tanh_smoke,ring16_acquisition,five_word_joint_smoke,ae_gan_hold,unused_token_hold,model_ae_gan_multimodal,model_ae_reconstruction,model_vae_categorical, andmodel_vae_hard.vector_unequal_mass): Mass-weighted Sinkhorn (w_k = N_k / sum_j N_j) retains 2.98% mass (122/4096) on the 2% rare mode withcomponent_core_min_eigen_ratio = 0.0595(15× BISPF's0.004and 6.6× BCAP's0.009).dcgan-performance-cloud-1acd41cb5f4a,NVIDIA RTX A6000): Fastest update throughput and lowest high-res peak VRAM across all 9 families atB64,128², and256²:64², B64, W64:39.19 ms(1,628.56 img/s) vs BISPF90.24 ms(710.67 img/s, 2.3×) and BCAP674.06 ms(95.20 img/s, 17.1×).256², B16, W64:156.88 ms(102.03 img/s,1,522 MiB) vs BISPF342.33 ms(46.72 img/s,2,119 MiB, 2.2× faster / 28% less VRAM).grid100/rotated100/staggered100:K_max = 64 < 100target modes coarsens fine 10×10 lattice centers (center_max_sigma ~ 1.72–2.15).gaussian1d_stability&mode_hold(hq=0.8411vs0.90): stationary EMA inertia lags abrupt target shifts and loses 3 of 8 modes over long holds.model_ddgan_gaussian_chain/model_ae_ddgan_gaussian_chain: unconditioned prototype pooling over concatenated transition pairs[x_t, x_{t+1}]blurs conditional transition fibers.Verification
python scripts/check_lint.py— 0 new findingspython ops/refresh_forge_readouts.py --check --reports-only—CURRENT (stale stages: none)uv build— wheel401,152bytes (< 600,000limit)pytest—test_empf.py,test_refresh_forge_readouts.py,test_forge_comparison_policy.py,test_forge_trainer_families.py,test_core_inventory_legacy_documentation.py,test_recipe_defaults.pyall passing