Coverage follow-up to the prior-support work. Everything measured so far came from
one search (MultiStartProdigy) on one cell (imaging/mge hst) —
autolens_profiling#131, write-up results/notes/clipper_campaign/RESULTS.md. This
asks which other searches share the failure mode.
Prompt: PyAutoMind/draft/feature/autofit/prior_exit_sampler_coverage.md
Run this after the Prodigy step-scaling task
(PyAutoMind/draft/feature/autofit/per_parameter_step_scaling.md), so the audit can
measure both levers rather than only the clipper.
The mechanism
The MAP objective is -2 * (log_likelihood + sum(log_prior)); a UniformPrior is
-inf outside its box. The gradient searches step in physical space with
nothing holding them inside, and prior box widths on a real model span 40x
(einstein_radius U(0,8) against bulge.centre U(-0.1,0.1)), so a globally-scaled
step is a wall-crossing for the narrow-box parameters. Lanes do not start near the
edges — _broad_starts draws in the unit cube at [0.15, 0.85] — they walk there.
Already immune, per the phase-1 record (verify, don't re-derive)
- Nested samplers (Nautilus, Dynesty) work in unit-cube coordinates and
cannot leave prior support. This is why Nautilus is the campaign's reference bar.
- MCMC (Emcee, Zeus) reject
-inf proposals so the walker stays put.
"Rejection is the restoring mechanism that gradient methods lack."
- NUTS diverges rather than dying — different mechanism, its own task.
So the exposed family is the gradient / MLE searches.
To audit
| search |
expected exposure |
why |
MultiStartAdam |
high |
fixed learning_rate=0.01 in PHYSICAL units, no adaptation |
MultiStartLion |
high |
fixed learning_rate=0.001, sign-based |
MultiStartADABelief |
high |
fixed rate, same exposure |
MultiStartProdigy |
measured |
baseline in #131 |
LBFGS / AbstractBFGS |
different shape |
takes clipper, hands bounds to scipy — check enforcement actually happens |
BlackJAXNUTS |
out of scope |
divergence, not lane death — confirm and file separately |
Load-bearing hypothesis: the fixed-rate optimizers should be affected MORE than
Prodigy, not less. Prodigy at least estimates its own step scale; Adam, Lion and
ADABelief take a literal constant in physical units, so the 40x disparity cannot be
absorbed anywhere. If that holds, the Prodigy numbers are the optimistic end of
the range and #131's "clipping is cosmetic" verdict may not transfer.
Deliverables
- Coverage table per search — is prior exit reachable, already mitigated, by what
mechanism, and is that mechanism enforced or merely assumed.
- A cheap empirical check per exposed search on
imaging/mge hst with
ClipperPriorBox on, recording clip rate and the alive-versus-step curve
(the clip rate is the quantity comparable across searches; raw lane counters are
survival integrals and are not).
- A per-search recommendation on both levers — clipper default and step scaling
— feeding phase 3.
Grading rules (inherited, all paid for)
- Grade on the alive-versus-step curve, not the percentage — the lane counters
are survival integrals.
- At least two seeds. Identical settings swung the Prodigy result 171,000
nats between seeds 0 and 1. Use the search's seed argument; seeding
random/numpy reaches only the initializer.
- A
ClipperPriorBox arm reporting zero clips has not exercised the clipper — a
broken arm, not a null result (unless the model is genuinely unbounded, where zero
is the PASS).
- Name the step budget with every number: at 105 steps clipping was worth 114 nats
on Prodigy; by 3000 it was worth zero.
Out of scope: flipping any default (phase 3), NUTS divergence, and the
seed-dependence investigation — all filed separately.
Coverage follow-up to the prior-support work. Everything measured so far came from
one search (
MultiStartProdigy) on one cell (imaging/mgehst) —autolens_profiling#131, write-up
results/notes/clipper_campaign/RESULTS.md. Thisasks which other searches share the failure mode.
Prompt:
PyAutoMind/draft/feature/autofit/prior_exit_sampler_coverage.mdRun this after the Prodigy step-scaling task
(
PyAutoMind/draft/feature/autofit/per_parameter_step_scaling.md), so the audit canmeasure both levers rather than only the clipper.
The mechanism
The MAP objective is
-2 * (log_likelihood + sum(log_prior)); aUniformPrioris-infoutside its box. The gradient searches step in physical space withnothing holding them inside, and prior box widths on a real model span 40x
(
einstein_radiusU(0,8) againstbulge.centreU(-0.1,0.1)), so a globally-scaledstep is a wall-crossing for the narrow-box parameters. Lanes do not start near the
edges —
_broad_startsdraws in the unit cube at [0.15, 0.85] — they walk there.Already immune, per the phase-1 record (verify, don't re-derive)
cannot leave prior support. This is why Nautilus is the campaign's reference bar.
-infproposals so the walker stays put."Rejection is the restoring mechanism that gradient methods lack."
So the exposed family is the gradient / MLE searches.
To audit
MultiStartAdamlearning_rate=0.01in PHYSICAL units, no adaptationMultiStartLionlearning_rate=0.001, sign-basedMultiStartADABeliefMultiStartProdigyLBFGS/AbstractBFGSclipper, hands bounds to scipy — check enforcement actually happensBlackJAXNUTSLoad-bearing hypothesis: the fixed-rate optimizers should be affected MORE than
Prodigy, not less. Prodigy at least estimates its own step scale; Adam, Lion and
ADABelief take a literal constant in physical units, so the 40x disparity cannot be
absorbed anywhere. If that holds, the Prodigy numbers are the optimistic end of
the range and #131's "clipping is cosmetic" verdict may not transfer.
Deliverables
mechanism, and is that mechanism enforced or merely assumed.
imaging/mgehst withClipperPriorBoxon, recording clip rate and the alive-versus-step curve(the clip rate is the quantity comparable across searches; raw lane counters are
survival integrals and are not).
— feeding phase 3.
Grading rules (inherited, all paid for)
are survival integrals.
nats between seeds 0 and 1. Use the search's
seedargument; seedingrandom/numpyreaches only the initializer.ClipperPriorBoxarm reporting zero clips has not exercised the clipper — abroken arm, not a null result (unless the model is genuinely unbounded, where zero
is the PASS).
on Prodigy; by 3000 it was worth zero.
Out of scope: flipping any default (phase 3), NUTS divergence, and the
seed-dependence investigation — all filed separately.