3 #include "../common.hpp"
4 #include "../iteration_recorder.hpp"
57 VecFun<V, double> f = [data](
const V &w) ->
double {
return LossFn(
const_cast<double *
>(w.data()), data); };
58 GradFun<V> Gradient = [data](
const V &w) -> V {
59 V grad = V::Zero(w.size());
63 return this->
solve(x, f, Gradient);
128 double grad_f_old = Gradient(x).dot(p);
129 double inf = std::numeric_limits<double>::infinity();
130 double alpha_min = 0.0;
131 double alpha_max = inf;
135 V x_new = x + alpha * p;
136 double f_new = f(x_new);
138 if (f_new > f_old +
c1 * alpha * grad_f_old) {
140 alpha =
rho * (alpha_min + alpha_max);
144 double grad_f_new_dot_p = Gradient(x_new).dot(p);
146 if (grad_f_new_dot_p <
c2 * grad_f_old) {
148 if (alpha_max == inf)
151 alpha =
rho * (alpha_min + alpha_max);
CPU recorder that stores loss/gradient history on host.
Definition: iteration_recorder.hpp:18
Base class for Full Batch Minimizers.
Definition: full_batch_minimizer.hpp:23
double c2
Definition: full_batch_minimizer.hpp:114
double tolerance() const
Returns the tolerance used.
Definition: full_batch_minimizer.hpp:99
V solve_with_enzyme(V x, DataType *data)
Helper to solve directly using an Enzyme-compatible raw function.
Definition: full_batch_minimizer.hpp:56
double rho
Definition: full_batch_minimizer.hpp:115
double _tol
Definition: full_batch_minimizer.hpp:109
virtual void setHessian(const HessFun< V, M > &)
Sets the Hessian function (for Second Order methods).
Definition: full_batch_minimizer.hpp:46
double line_search(V x, V p, VecFun< V, double > &f, GradFun< V > &Gradient)
Backtracking Line Search satisfying Wolfe Conditions.
Definition: full_batch_minimizer.hpp:126
void setRecorder(::IterationRecorder< CpuBackend > *recorder)
Attach a recorder for loss/grad history.
Definition: full_batch_minimizer.hpp:104
virtual ~FullBatchMinimizer()=default
double max_line_iters
Definition: full_batch_minimizer.hpp:116
unsigned int _iters
Definition: full_batch_minimizer.hpp:108
void setTolerance(double tol)
Sets the tolerance for convergence.
Definition: full_batch_minimizer.hpp:87
unsigned int iterations() const
Returns the number of iterations performed.
Definition: full_batch_minimizer.hpp:93
::IterationRecorder< CpuBackend > * recorder_
Optional recorder for diagnostics.
Definition: full_batch_minimizer.hpp:110
double c1
Definition: full_batch_minimizer.hpp:113
virtual void setInitialHessian(const M &)
Sets the initial Hessian approximation (if applicable).
Definition: full_batch_minimizer.hpp:40
void setMaxLineIters(int max_line)
Sets the maximum number of iterations for the line search.
Definition: full_batch_minimizer.hpp:75
void setArmijoMaxIter(int max_armijo)
Sets the maximum iterations for Armijo condition check (alias for setMaxLineIters).
Definition: full_batch_minimizer.hpp:81
unsigned int _max_iters
Definition: full_batch_minimizer.hpp:107
void setMaxIterations(int max_iters)
Sets the maximum number of iterations.
Definition: full_batch_minimizer.hpp:70
virtual V solve(V x, VecFun< V, double > &f, GradFun< V > &Gradient)=0
Performs optimization.
std::function< T(T)> GradFun
Gradient function type alias (T -> T).
Definition: common.hpp:32
std::function< W(T)> VecFun
Objective function type alias (T -> W).
Definition: common.hpp:35
std::function< M(V)> HessFun
Hessian function type alias (V -> M).
Definition: common.hpp:38
double __enzyme_autodiff(void *,...)