pyproximal.optimization.primal.GeneralizedProximalGradient¶
- pyproximal.optimization.primal.GeneralizedProximalGradient(proxfs: list[ProxOperator], proxgs: list[ProxOperator], x0: ndarray[tuple[Any, ...], dtype[_ScalarT]], tau: float | None, epsg: float | ndarray[tuple[Any, ...], dtype[_ScalarT]] = 1.0, weights: ndarray[tuple[Any, ...], dtype[_ScalarT]] | None = None, eta: float = 1.0, niter: int = 10, acceleration: str | None = None, callback: Callable[[ndarray[tuple[Any, ...], dtype[_ScalarT]]], None] | None = None, show: bool = False) ndarray[tuple[Any, ...], dtype[_ScalarT]][source]¶
Generalized Proximal gradient
Solves the following minimization problem using Generalized Proximal gradient algorithm:
\[\mathbf{x} = \argmin_\mathbf{x} \sum_{i=1}^n f_i(\mathbf{x}) + \sum_{j=1}^m \epsilon_j g_j(\mathbf{x}),~~n,m \in \mathbb{N}^+\]where the \(f_i(\mathbf{x})\) are smooth convex functions with a uniquely defined gradient and the \(g_j(\mathbf{x})\) are any convex function that have a known proximal operator.
- Parameters:
- proxfs
list Proximal operators of the \(f_i\) functions (must have
gradimplemented)- proxgs
list Proximal operators of the \(g_j\) functions
- x0
numpy.ndarray Initial vector
- tau
float Positive scalar weight, which should satisfy the following condition to guarantees convergence: \(\tau \in (0, 1/L]\) where
Lis the Lipschitz constant of \(\sum_{i=1}^n \nabla f_i\).- epsg
floatornumpy.ndarray, optional Scaling factor(s) of
gfunction(s)- weights
float, optional Weighting factors of
gfunctions. Must sum to 1.- eta
float, optional Relaxation parameter (must be between 0 and 1, 0 excluded). Note that this will be only used when
acceleration=None.- niter
int, optional Number of iterations of iterative scheme
- acceleration: :obj:`str`, optional
Acceleration (
None,vandenbergheorfista)- callback
callable, optional Function with signature (
callback(x)) to call after each iteration wherexis the current model vector- show
bool, optional Display iterations log
- proxfs
- Returns:
- x
numpy.ndarray Inverted model
- x
Notes
The Generalized Proximal gradient algorithm can be expressed by the following recursion [1]:
\[\begin{split}\text{for } j=1,\cdots,n, \\ ~~~~\mathbf z_j^{k+1} = \mathbf z_j^{k} + \eta \left[prox_{\frac{\tau^k \epsilon_j}{w_j} g_j}\left(2 \mathbf{x}^{k} - \mathbf{z}_j^{k} - \tau^k \sum_{i=1}^n \nabla f_i(\mathbf{x}^{k})\right) - \mathbf{x}^{k} \right] \\ \mathbf{x}^{k+1} = \sum_{j=1}^n w_j \mathbf z_j^{k+1} \\\end{split}\]where \(\sum_{j=1}^n w_j=1\). In the current implementation, \(w_j=1/n\) when not provided.
[1]Raguet, H., Fadili, J. and Peyré, G. “Generalized Forward-Backward Splitting”, arXiv, 2012.