A Csiszar-function is a member of F = { f:R_+ to R : f convex }.

vi_dual_csiszar_function(logu, csiszar_function, name = NULL)

Arguments

logu

float-like Tensor representing log(u) from above.

csiszar_function

function representing a Csiszar-function over log-domain.

name

name prefixed to Ops created by this function.

Value

dual_f_of_u float-like Tensor of the result of calculating the dual of f at u = exp(logu).

Details

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.

See also