R/vi-functions.R
vi_dual_csiszar_function.Rd
A Csiszar-function is a member of F = { f:R_+ to R : f convex }
.
vi_dual_csiszar_function(logu, csiszar_function, name = NULL)
logu |
|
---|---|
csiszar_function | function representing a Csiszar-function over log-domain. |
name | name prefixed to Ops created by this function. |
dual_f_of_u float
-like Tensor
of the result of calculating the dual of
f
at u = exp(logu)
.
The Csiszar-dual is defined as:
f^*(u) = u f(1 / u)
where f
is some other Csiszar-function.
For example, the dual of kl_reverse
is kl_forward
, i.e.,
f(u) = -log(u) f^*(u) = u f(1 / u) = -u log(1 / u) = u log(u)
The dual of the dual is the original function:
f^**(u) = {u f(1/u)}^*(u) = u (1/u) f(1/(1/u)) = f(u)
Warning: this function makes non-log-space calculations and may therefore be
numerically unstable for |logu| >> 0
.
Other vi-functions:
vi_amari_alpha()
,
vi_arithmetic_geometric()
,
vi_chi_square()
,
vi_csiszar_vimco()
,
vi_fit_surrogate_posterior()
,
vi_jeffreys()
,
vi_jensen_shannon()
,
vi_kl_forward()
,
vi_kl_reverse()
,
vi_log1p_abs()
,
vi_modified_gan()
,
vi_monte_carlo_variational_loss()
,
vi_pearson()
,
vi_squared_hellinger()
,
vi_symmetrized_csiszar_function()