When self_normalized = True, the KL-reverse Csiszar-function is:
f(u) = -log(u) + (u - 1)
When self_normalized = False the (u - 1) term is omitted.
Observe that as an f-Divergence, this Csiszar-function implies:
D_f[p, q] = KL[q, p]
The KL is "reverse" because in maximum likelihood we think of minimizing q
as in KL[p, q].
Args
logu
float-like Tensor representing log(u) from above.
self_normalized
Python bool indicating whether f'(u=1)=0. When
f'(u=1)=0 the implied Csiszar f-Divergence remains non-negative even
when p, q are unnormalized measures.
name
Python str name prefixed to Ops created by this function.
Returns
kl_reverse_of_u
float-like Tensor of the Csiszar-function evaluated at
u = exp(logu).
[null,null,["Last updated 2023-11-21 UTC."],[],[],null,["# tfp.vi.kl_reverse\n\n\u003cbr /\u003e\n\n|--------------------------------------------------------------------------------------------------------------------------------------------------|\n| [View source on GitHub](https://github.com/tensorflow/probability/blob/v0.23.0/tensorflow_probability/python/vi/csiszar_divergence.py#L221-L266) |\n\nThe reverse Kullback-Leibler Csiszar-function in log-space. \n\n tfp.vi.kl_reverse(\n logu, self_normalized=False, name=None\n )\n\nA Csiszar-function is a member of, \n\n F = { f:R_+ to R : f convex }.\n\nWhen `self_normalized = True`, the KL-reverse Csiszar-function is: \n\n f(u) = -log(u) + (u - 1)\n\nWhen `self_normalized = False` the `(u - 1)` term is omitted.\n\nObserve that as an f-Divergence, this Csiszar-function implies: \n\n D_f[p, q] = KL[q, p]\n\nThe KL is \"reverse\" because in maximum likelihood we think of minimizing `q`\nas in `KL[p, q]`.\n| **Warning:** when self_normalized = True`this function makes non-log-space\n| calculations and may therefore be numerically unstable for`\\|logu\\| \\\u003e\\\u003e 0\\`.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Args ---- ||\n|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `logu` | `float`-like `Tensor` representing `log(u)` from above. |\n| `self_normalized` | Python `bool` indicating whether `f'(u=1)=0`. When `f'(u=1)=0` the implied Csiszar f-Divergence remains non-negative even when `p, q` are unnormalized measures. |\n| `name` | Python `str` name prefixed to Ops created by this function. |\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Returns ------- ||\n|-------------------|-----------------------------------------------------------------------------|\n| `kl_reverse_of_u` | `float`-like `Tensor` of the Csiszar-function evaluated at `u = exp(logu)`. |\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Raises ------ ||\n|-------------|-----------------------------------------------|\n| `TypeError` | if `self_normalized` is `None` or a `Tensor`. |\n\n\u003cbr /\u003e"]]