BregmanDistance
- class odl.functionals.functional.BregmanDistance(*args, **kwargs)[source]
Bases:
FunctionalThe Bregman distance functional.
The Bregman distance, also refered to as the Bregman divergence, is similar to a metric but satisfies neither the triangle inequality nor symmetry. Nevertheless, the Bregman distance is used in variational regularization of inverse problems, see, e.g., [Bur2016].
Notes
Given a functional
, a point
, and a (sub)gradient
, the Bregman distance functional
in a point
is given by
For mathematical details, see [Bur2016]. See also the Wikipedia article: https://en.wikipedia.org/wiki/Bregman_divergence
References
[Bur2016] Burger, M. Bregman Distances in Inverse Problems and Partial Differential Equation. In: Advances in Mathematical Modeling, Optimization and Optimal Control, 2016. p. 3-33.
- __init__(functional, point, subgrad)[source]
Initialize a new instance.
Parameters
- functional
Functional Functional on which to base the Bregman distance.
- pointelement of
functional.domain Point from which to define the Bregman distance.
- subgradelement of
functional.domain A subgradient of
functionalinpoint. If it exists, a valid option isfunctional.gradient(point).
Examples
Example of initializing the Bregman distance functional:
>>> space = odl.uniform_discr(0, 1, 10) >>> l2_squared = odl.functionals.L2NormSquared(space) >>> point = space.one() >>> subgrad = l2_squared.gradient(point) >>> bregman_dist = odl.functionals.BregmanDistance( ... l2_squared, point, subgrad)
This is gives squared L2 distance to the given point, ||x - 1||^2:
>>> expected_functional = l2_squared.translated(point) >>> bregman_dist(space.zero()) == expected_functional(space.zero()) True
- functional