pyproximal.utils.bilinear.BilinearOperator#

class pyproximal.utils.bilinear.BilinearOperator[source]#

Common interface for bilinear operator of a function.

Bilinear operator template class. A user must subclass it and implement the following methods:

  • gradx: a method evaluating the gradient over \(\mathbf{x}\): \(\nabla_x H\)

  • grady: a method evaluating the gradient over \(\mathbf{y}\): \(\nabla_y H\)

  • grad: a method returning the stacked gradient vector over \(\mathbf{x},\mathbf{y}\): \([\nabla_x H\), [nabla_y H]`

  • lx: Lipschitz constant of \(\nabla_x H\)

  • ly: Lipschitz constant of \(\nabla_y H\)

Two additional methods (updatex and updatey) are provided to update the \(\mathbf{x}\) and \(\mathbf{y}\) internal variables. It is user responsability to choose when to invoke such method (i.e., when to update the internal variables).

Notes

A bilinear operator is defined as a differentiable nonlinear function \(H(x,y)\) that is linear in each of its components indipendently, i.e, \(\mathbf{H_x}(y)\mathbf{x}\) and \(\mathbf{H_y}(y)\mathbf{x}\).

Methods

__init__()

grad(y)

gradx(x)

grady(y)

lx(x)

ly(y)

updatex(x)

Update x variable (to be used to update the internal variable x)

updatexy(xy)

updatey(y)

Update y variable (to be used to update the internal variable y)

Examples using pyproximal.utils.bilinear.BilinearOperator#

Low-Rank completion via Matrix factorization

Low-Rank completion via Matrix factorization