fix: interferometer LM objective double-counting + warm start (mid-tier certified)#629
Merged
Merged
Conversation
…rm start The normal-equation translation of the iterative objective treated the state's dpsi as BOTH a lens perturbation (via the re-trace) and a linear model term (G dpsi in chi2/gradient) — double-counting that a warm start exposes as active cancellation of a correct correction (dkappa corr -0.83). Fixed: chi2 and the Gauss-Newton gradient use the source block only (residual d - T f(psi0+dpsi) s; J^T C^-1 r = D - F [s|0]); the reg-optimization's linear dpsi output is applied as an increment on the lens state. Adds solve_joint_optimization(x0=) warm start. Campaign mid-tier certification: warm-started iterative corr 0.839 / peak 0.34" / 9.2 sigma == one-shot (0.841/0.34"/9.3). Part of PyAutoLens#627 (parent #623). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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
Campaign-driven fix (#627, parent #623): the interferometer iterative engine's normal-equation objective double-counted the state's δψ — once through the re-traced lens, once as the linear
G·δψmodel term. Invisible from cold starts (second-order small at δψ≈0); a warm start from the certified one-shot solution exposed it as active cancellation (δκ corr −0.83). Three-part fix: χ² and the Gauss–Newton gradient use the source block only (residuald − T·f(ψ₀+δψ)·s;JᵀC⁻¹r = D − F·[s|0]); the evidence re-optimization's linear δψ output is applied as an increment on the lens state;solve_joint_optimization(x0=)adds the warm start.Certification result (mid tier, 9,920 vis, regime gate 3.19): warm-started iterative corr 0.839 / local 0.679 / peak 0.34″ / 9.2σ — statistically identical to the one-shot (0.841 / 0.682 / 0.34″ / 9.3σ). The visibility-space iterative engine now recovers at two tiers.
API Changes
Added
x0=onsolve_joint_optimization; behaviour fix in the LM objective (cold-start results change slightly — they were computed under the inconsistent objective).See commit for detail.
Test Plan
test_autolens: 439 passed (identity test updated to the source-block model).Generated by the PyAutoLabs agent workflow.