BregmanDistance¶
-
class
odl.solvers.functional.functional.
BregmanDistance
(*args, **kwargs)[source]¶ Bases:
odl.solvers.functional.functional.Functional
The 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.
- Attributes
adjoint
Adjoint of this operator (abstract).
convex_conj
The convex conjugate
domain
Set of objects on which this operator can be evaluated.
functional
The functional used to define the Bregman distance.
grad_lipschitz
Lipschitz constant for the gradient of the functional.
gradient
Gradient operator of the functional.
inverse
Return the operator inverse.
is_functional
True
if this operator’s range is aField
.is_linear
True
if this operator is linear.point
The point used to define the Bregman distance.
proximal
Return the
proximal factory
of the functional.range
Set in which the result of an evaluation of this operator lies.
subgrad
The subgradient used to define the Bregman distance.
Methods
_call
(self, x)Return
self(x)
.bregman
(self, point, subgrad)Return the Bregman distance functional.
derivative
(self, point)Return the derivative operator in the given point.
norm
(self[, estimate])Return the operator norm of this operator.
translated
(self, shift)Return a translation of the functional.
-
__init__
(self, 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
functional
inpoint
. If it exists, a valid option isfunctional.gradient(point)
.
- functional
Examples
Example of initializing the Bregman distance functional:
>>> space = odl.uniform_discr(0, 1, 10) >>> l2_squared = odl.solvers.L2NormSquared(space) >>> point = space.one() >>> subgrad = l2_squared.gradient(point) >>> bregman_dist = odl.solvers.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