pyproximal.optimization.cls_primal.AndersonProximalGradient¶
- class pyproximal.optimization.cls_primal.AndersonProximalGradient(callbacks: Callbacks = None)[source]¶
Proximal gradient with Anderson acceleration
Solves the following minimization problem using the Proximal gradient algorithm with Anderson acceleration:
\[\mathbf{x} = \argmin_\mathbf{x} f(\mathbf{x}) + \epsilon g(\mathbf{x})\]where \(f(\mathbf{x})\) is a smooth convex function with a uniquely defined gradient and \(g(\mathbf{x})\) is any convex function that has a known proximal operator.
Notes
The Proximal gradient algorithm with Anderson acceleration can be expressed by the following recursion [1]:
\[\begin{split}m_k = min(m, k)\\ \mathbf{g}^{k} = \mathbf{x}^{k} - \tau^k \nabla f(\mathbf{x}^k)\\ \mathbf{r}^{k} = \mathbf{g}^{k} - \mathbf{g}^{k}\\ \mathbf{G}^{k} = [\mathbf{g}^{k},..., \mathbf{g}^{k-m_k}]\\ \mathbf{R}^{k} = [\mathbf{r}^{k},..., \mathbf{r}^{k-m_k}]\\ \alpha_k = (\mathbf{R}^{kT} \mathbf{R}^{k})^{-1} \mathbf{1} / \mathbf{1}^T (\mathbf{R}^{kT} \mathbf{R}^{k})^{-1} \mathbf{1}\\ \mathbf{y}^{k+1} = \mathbf{G}^{k} \alpha_k\\ \mathbf{x}^{k+1} = \prox_{\tau^{k+1} g}(\mathbf{y}^{k+1})\end{split}\]where \(m\) equals
nhistory, \(k=1,2,...,n_{iter}\), \(\mathbf{y}^{0}=\mathbf{x}^{0}\), \(\mathbf{y}^{1}=\mathbf{x}^{0} - \tau^0 \nabla f(\mathbf{x}^0)\), \(\mathbf{x}^{1}=\prox_{\tau^k g}(\mathbf{y}^{1})\), and \(\mathbf{g}^{0}=\mathbf{y}^{1}\).Refer to [1] for the guarded version of the algorithm (when
safeguard=True).Methods
__init__([callbacks])callback(x, *args, **kwargs)Callback routine
finalize([nbar, show])Finalize solver
memory_usage()Compute memory usage of the solver
run(x, y[, niter, show, itershow])Run solver
setup(proxf, proxg, x0[, epsg, tau, epsr, ...])Setup solver
solve(proxf, proxg, x0[, epsg, tau, epsr, ...])Run entire solver
step(x, y[, show])Run one step of solver