tfp.vi.dual_csiszar_function

View source on GitHub

Calculates the dual Csiszar-function in log-space.

tfp.vi.dual_csiszar_function(
    logu,
    csiszar_function,
    name=None
)

A Csiszar-function is a member of,

F = { f:R_+ to R : f convex }.

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)

Args:

  • logu: float-like Tensor representing log(u) from above.
  • csiszar_function: Python callable representing a Csiszar-function over log-domain.
  • name: Python str name prefixed to Ops created by this function.

Returns:

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