Generalized Forward-Backward algorithm
For the minimization of objectives of the form
where \(f\) has a smooth gradient and \(g_1, \ldots, g_P\) are
prox-capable. Function \(f\) corresponds to the model.loss method
of the model (passed with set_model to the solver) and
\(g_1, \ldots, g_P\) correspond to the list of prox passed with the
set_prox method.
One iteration of GFB is as follows:
where \(\nabla f(w)\) is the gradient of \(f\) given by the
model.grad method and \(\mathrm{prox}_{\eta g_p}\) is given by the
prox[p].call method. The step-size \(\eta\) can be tuned with
step. The iterations stop whenever tolerance tol is achieved, or
after max_iter iterations. The obtained solution \(w\) is returned
by the solve method, and is also stored in the solution attribute
of the solver. The level of sur-relaxation \(\beta\) can be tuned
using the surrelax attribute.
step : float, default=None
Step-size parameter, the most important parameter of the solver. Whenever possible, this can be tuned as
step = 1 / model.get_lip_best()
tol : float, default=1e-10
The tolerance of the solver (iterations stop when the stopping criterion is below it)
max_iter : int, default=500
Maximum number of iterations of the solver.
surrelax : float, default=1
Level of sur-relaxation to use in the algorithm.
verbose : bool, default=True
If
True, solver verboses history, otherwise nothing is displayed, but history is recorded anyway
print_every : int, default=10
Print history information every time the iteration number is a multiple of
print_every. Used only isverboseis True
record_every : int, default=1
Save history information every time the iteration number is a multiple of
record_every
model : Model
The model used by the solver, passed with the
set_modelmethod
prox : list of Prox
List of proximal operators used by the solver, passed with the
set_proxmethod
solution : numpy.array, shape=(n_coeffs,)
Minimizer found by the solver
history : dict-like
A dict-type of object that contains history of the solver along iterations. It should be accessed using the
get_historymethod
time_start : str
Start date of the call to
solve()
time_elapsed : float
Duration of the call to
solve(), in seconds
time_end : str
End date of the call to
solve()
References
H. Raguet, J. Fadili, G. Peyré, A generalized forward-backward splitting, SIAM Journal on Imaging Sciences (2013)