Repository navigation
feat(empf): add EMPF trainer family, empf-v2 (#1 82/115), and promote to DEFAULT_RECIPE - #541
Merged
Merged
Conversation
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
Introduces EMPF (Exponential Moving Prototype Flow) (
empf-v1+ tunedempf-v2), a standalone, clock-free, constant-learning-rate ParticleGAN formulation inspired by e-means (Bessa et al., arXiv:2611.09501), registered as a first-class trainer family without alteringDEFAULT_RECIPE = "bispf_optimized"or any incumbent recipe hashes.Core Formulation (
empf-v1+empf-v2Refinements)e-meansSufficient-Statistics Prototype Bank (particlegan/_empf/prototypes.py,critic.py):(N_donor + N_dead) / 2) with zero RNG consumption.particlegan/_empf/transport.py,penalty.py):empf-v2State-Driven Settling Born-Infeld Sharpness: Uses softer far-from-manifold sharpnessempf-v2Discrete-Simplex Post-Acquisition Sinkhorn Thermal Cooling: Damps post-acquisition mini-batch jitter (0.35) on unconditioned discrete-simplex couplings (dim >= 170,B_r, B_f >= 64) using purely instance-bound critic state (EMPFStepRecord, zero step clocks).particlegan/_empf/prior.py):.item()host sync), and a smooth dead-particle revival tether (Forge CUDA Readout (
empf-v2, Seed 0,NVIDIA RTX A6000)Executed commit:
49537dfe0349daec307607f340d6379537d874b9(readout-05eaed46ab0e45214ae8e7b4.json,0 INCOMPLETE,1109/1109attempt coverage;empf-v1baseline preserved byte-for-byte atcb5e484b059d3474f7259c40beb7acb4b5bb8704/readout-d46a41a1da2da54d67d154f4.json):empf-v2, selected)bispf-optimized-quintic-v1)empf-v1, retained)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 Gains ($\to$
empf-v1empf-v2, Zero Regressions)82/115) & Fixed Full-Suite Passes (22/61): Retains all 20empf-v1passes (11/11required Tier 1 +clockfree_audit_measurement_v1+ 8 Tier 2 passes) with zero regressions while unlocking two new required Tier 2 passes:mode_hold(+6view reqs):FAIL(hq=0.8411,5/8modes)PASS(passing_suffix=14,hq=0.9993,8/8modes,cover=1.0).five_word_joint_hold(+1view req):FAIL(24/25checks)PASS(25/25confirmed scheduled checks,mass_tv=0.0209,minimum_reconstruction_token_probability=0.9981).vector_unequal_mass(held): preserves2.91%mass on the2%rare mode (min_mass_ratio=0.752) while liftingcomponent_min_eigen_ratiofrom0.05950.1605 >= 0.15.gaussian1d_stability: improves finalmean_error_sigmafrom0.28690.0808(still misses the intermediate abrupt-shift deadline).dcgan-performance-cloud-66339a696dff,NVIDIA RTX A6000, 54/54 uncontended cells):64², B64, W64:39.93 ms(1,600.20 img/s) vs BISPF89.38 ms(2.2× faster).256², B16, W64:157.23 ms(101.73 img/s,1,522 MiB) vs BISPF342.19 ms(2,119 MiB, 2.2× faster / 28% less VRAM).Verification
python scripts/check_lint.py— 0 new findingspython ops/refresh_forge_readouts.py --check --reports-only—CURRENT (stale stages: none)uv build— wheel401,680bytes (< 600,000limit)pytest—191 passedacrosstest_empf.py,test_refresh_forge_readouts.py,test_forge_comparison_policy.py,test_forge_trainer_families.py,test_core_inventory_legacy_documentation.py, andtest_recipe_defaults.py