Template Class MinibatchOptimizer¶
Defined in File minibatchOptimization.h
Class Documentation¶
-
template<typename
BATCH_ELEMENT
>
classparpe
::
MinibatchOptimizer
¶ Public Functions
-
inline std::tuple<int, double, std::vector<double>>
optimize
(SummedGradientFunction<BATCH_ELEMENT> const &f, gsl::span<const BATCH_ELEMENT> data, gsl::span<const double> initialParameters, gsl::span<const double> lowerParameterBounds, gsl::span<const double> upperParameterBounds, OptimizationReporter *reporter, Logger *logger_)¶ Minimize the given function using mini-batch gradient descent.
- Return
Tuple (exit code, final cost, final parameters)
- Parameters
f
: Function to minizedata
: Full data set on which f will be evaluatedinitialParameters
: Starting point for optimizationreporter
: OptimizationReporter instance for tracking progresslogger
: Logger instance for status messages
-
inline FunctionEvaluationStatus
evaluate
(SummedGradientFunction<BATCH_ELEMENT> const &f, gsl::span<const double> parameters, std::vector<BATCH_ELEMENT> datasets, double &cost, gsl::span<double> gradient, Logger *logger, OptimizationReporter *reporter) const¶
-
inline std::tuple<int, double, std::vector<double>>
finish
(double cost, std::vector<double> const ¶meters, minibatchExitStatus status, OptimizationReporter *reporter, Logger *logger)¶
-
inline FunctionEvaluationStatus
rescueInterceptor
(gsl::span<double> parameters, gsl::span<double> oldParameters, gsl::span<double> gradient, gsl::span<double> oldGradient, gsl::span<const double> lowerParameterBounds, gsl::span<const double> upperParameterBounds, double &cost, int &subsequentFails, int iteration, SummedGradientFunction<BATCH_ELEMENT> const &f, std::vector<BATCH_ELEMENT> datasets, Logger *logger, OptimizationReporter *reporter)¶ Try to rescue optimization run at cost function failure.
- Return
FunctionEvaluationStatus
- Parameters
parameters
: current parameter vectoroldParameters
: parameter vector before last stepgradient
: current cost function gradientoldGradient
: cost function gradient before last stepcost
: new cost function value after interceptionsubsequentFails
: number of iterations during rescue interceptorf
: Function to minizedata
: Full data set on which f will be evaluatedlogger
: Logger instance for status messagesreporter
: OptimizationReporter instance for tracking progress
-
inline void
handleStep
(gsl::span<double> parameters, gsl::span<double> oldParameters, gsl::span<double> gradient, gsl::span<const double> lowerParameterBounds, gsl::span<const double> upperParameterBounds, double cost, int iteration, SummedGradientFunction<BATCH_ELEMENT> const &f, std::vector<BATCH_ELEMENT> datasets, Logger *logger, OptimizationReporter *reporter)¶ Try to determine a good step length in descent direction.
- Return
FunctionEvaluationStatus
- Parameters
parameters
: current parameter vectoroldParameters
: parameter vector before last stepgradient
: current cost function gradientoldGradient
: cost function gradient before last stepcost
: new cost function value after interceptionsubsequentFails
: number of iterations during rescue interceptorf
: Function to minizedata
: Full data set on which f will be evaluatedlogger
: Logger instance for status messagesreporter
: OptimizationReporter instance for tracking progress
-
inline void
performLineSearch
(double alpha1, double alpha2, double cost, double cost1, double cost2, double dirGradient, std::function<double(double)> costFunEvaluate)¶ Perform line search according to interpolation algo by [Dennis and Schnabel, Numerical Methods for Unconstrained Optimization and Non-linear Equations, 1993].
- Parameters
alpha1
: step length of first stepalpha2
: step length of second stepcost
: objective function value before updatecost1
: objective function value after first stepcost2
: objective function value after second stepdirGradient
: alignment of gradient and step directioncostFunEvaluate
: objective function wo gradient
Public Members
-
std::unique_ptr<ParameterUpdater>
parameterUpdater
= std::make_unique<ParameterUpdaterVanilla>()¶
-
interceptType
interceptor
= interceptType::reduceStepAndRestart¶
-
int
lineSearchSteps
= 0¶
-
int
batchSize
= 1¶
-
int
maxEpochs
= 1¶
-
double
gradientNormThreshold
= 0.0¶
-
double
learningRate
= 0.001¶
-
std::unique_ptr<LearningRateUpdater>
learningRateUpdater
= std::make_unique<LearningRateUpdater>(maxEpochs, learningRateInterp::linear)¶
-
inline std::tuple<int, double, std::vector<double>>