-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Pushforward problems #125
Comments
I think I have at least a partial approach that may help. First, we enforce laws # Law 1
logdensity_def(μ, x) == logdensity_rel(μ, basemeasure(μ), x)
# Law 2
logdensity_rel(pushfwd(f, μ), pushfwd(f, ν), x) == logdensity_rel(μ, ν, inverse(f)(x)) Then we add some new smart constructors:
Then in the above basemeasure sequence, instead of pushfwd(MulAdd(2.0, 3.0), 0.3989 * LebesgueBase()) we'd get 0.3989 * pushfwd(MulAdd(2.0, 3.0), LebesgueBase()) which further reduces to 0.19945 * LebesgueBase() So the full basemeasure sequence of the pushforward would be pushfwd(MulAdd(2.0, 3.0), StdNormal())
0.19945 * LebesgueBase()
LebesgueBase() I especially like that this makes it easier (I think) to work with the logjac - we need only compute it once, at the same time we take the log-density relative to |
Let me think this over for a day :-) |
I think for the general case (opaque
And require that the shape of For specific kinds of |
Say we have
Then benchmarking gives
I'm also confused by the basemeasure sequence here:
I'd think there are always a couple of laws in place around these things:
But then we'd expect
logdensityof(ν, x) == logdensityof(StdNormal(), x)
, which is not the case.@oschulz any idea what's going on here?
The text was updated successfully, but these errors were encountered: