You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As our available reparameterization strategies become increasingly complex and composable, it would be useful to provide some automatic strategies, possibly even enabled by default in autoguides and MCMC.
Maybe this could work with syntax like poutine.reparam(config="auto") or poutine.reparam(config="full").
Proposed automatic strategies
"minimal": A minimal strategy that reparametrizes only sites that requires reparametrization for mathematical reasons, e.g. StableReparam for Stable distributions, CircularReparamAutoguide inference is incorrect for VonMises distribution #2740 for VonMises, ProjectedNormalReparam for ProjectedNormal sites.
"full": Complete reparametrization after which all pyro.sample sites are parameter-free, as required by [feature request] Implementing TrustVI #2768. This should error on distributions with implicit reparameterization, e.g. Gamma with a learnable concentration parameter.
"auto": Recommended reparametrization including something like
"minimal";
LocScaleReparam to all distributions with .loc and .scale attributes (will require unwrapping Independent and Masked distributions);
SoftmaxReparam for Simplex-constrained random variables.
Design questions
Should we automatically use these in AutoGuide and MCMC? If so, we'd need to refactor Predictive to use the reparametrized guide.model rather than the raw model (this bit me recently), and we might want to add guide.predict() methods Add AutoGuide.predict*() methods #2851.
This will require more composition of reparametrizers. How should this composition work? Maybe a .lift() method? Or will lifting be automatic?
The text was updated successfully, but these errors were encountered:
Should we automatically use these in AutoGuide and MCMC?
Would it also make sense to refactor the automatic transformation to unconstrained space in MCMC and ADVI to use poutine.reparam and an automated "unconstrain" reparameterization strategy?
Also, the enumeration strategies are tantalizingly close to being Reparam classes - I wonder if we could actually rewrite them that way and make config_enumerate into a special case of ReparamMessenger.
Would it also make sense to refactor the automatic transformation to unconstrained space...
Interesting, this seems similar to @fehiepsi's uniform_reparam_transform() in pyro-ppl/numpyro#807.
Before we do any major refactoring, I'd like to see what issues come up with the new use cases of automatic reparametrization strategies in #2884. I expect #2884 to uncover design constraints that will inform how reparametrization transforms work more generally.
In NumPyro, we used unconstrained_reparam in HMC. For autoguide, at first, I tried to use that reparam but later decided to follow Pyro implementation because SVI requires a pair of model and (transformed) guide, not reparamed_model and diagonal guide.
As our available reparameterization strategies become increasingly complex and composable, it would be useful to provide some automatic strategies, possibly even enabled by default in autoguides and MCMC.
Maybe this could work with syntax like
poutine.reparam(config="auto")
orpoutine.reparam(config="full")
.Proposed automatic strategies
StableReparam
forStable
distributions,CircularReparam
Autoguide inference is incorrect for VonMises distribution #2740 forVonMises
,ProjectedNormalReparam
forProjectedNormal
sites.pyro.sample
sites are parameter-free, as required by [feature request] Implementing TrustVI #2768. This should error on distributions with implicit reparameterization, e.g.Gamma
with a learnableconcentration
parameter.LocScaleReparam
to all distributions with.loc
and.scale
attributes (will require unwrappingIndependent
andMasked
distributions);SoftmaxReparam
forSimplex
-constrained random variables.Design questions
AutoGuide
and MCMC? If so, we'd need to refactorPredictive
to use the reparametrizedguide.model
rather than the rawmodel
(this bit me recently), and we might want to addguide.predict()
methods Add AutoGuide.predict*() methods #2851..lift()
method? Or will lifting be automatic?The text was updated successfully, but these errors were encountered: