pyproximal.Geman#

class pyproximal.Geman(sigma, gamma=1.3)[source]#

Geman penalty.

The Geman penalty (named after its inventor) is a non-convex penalty [1]. The pyproximal implementation considers a generalized model where

\[\mathrm{Geman}_{\sigma,\gamma}(\mathbf{x}) = \sum_i \frac{\sigma |x_i|}{|x_i| + \gamma}\]

where \({\sigma\geq 0}\), \({\gamma>0}\).

Parameters
sigmafloat

Regularization parameter.

gammafloat, optional

Regularization parameter. Default is 1.3.

Notes

In order to compute the proximal operator of the Geman penalty one must find the roots of a cubic polynomial. Consider the one-dimensional problem

\[\prox_{\tau \mathrm{Geman}(\cdot)}(x) = \argmin_{z} \mathrm{Geman}(z) + \frac{1}{2\tau}(x - z)^2\]

and assume \({x\geq 0}\). Either the minimum is obtained when \(z=0\) or when

\[\tau\sigma\gamma + (z-x)(z+\gamma)^2 = 0 .\]

The pyproximal implementation uses the closed-form solution for a cubic equation, and discards infeasible roots, to find the minimum.

1

Geman and Yang “Nonlinear image recovery with half-quadratic regularization”, IEEE Transactions on Image Processing, 4(7):932 – 946, 1995.

Methods

__init__(sigma[, gamma])

affine_addition(v)

Affine addition

chain(g)

Chain

elementwise(x)

grad(x)

Compute gradient

postcomposition(sigma)

Postcomposition

precomposition(a, b)

Precomposition

prox(**kwargs)

proxdual(**kwargs)

Examples using pyproximal.Geman#

Concave penalties

Concave penalties