Limited-Memory Broyden, Fletcher, Goldfarb, Shannon algorithm. More...
#include <shark/Algorithms/GradientDescent/LBFGS.h>
Public Member Functions | |
LBFGS () | |
std::string | name () const |
From INameable: return the class name. More... | |
void | setHistCount (unsigned int numhist) |
Specify the amount of steps to be memorized and used to find the L-BFGS direction. More... | |
SHARK_EXPORT_SYMBOL void | read (InArchive &archive) |
Read the component from the supplied archive. More... | |
SHARK_EXPORT_SYMBOL void | write (OutArchive &archive) const |
Write the component to the supplied archive. More... | |
Public Member Functions inherited from shark::AbstractLineSearchOptimizer | |
SHARK_EXPORT_SYMBOL | AbstractLineSearchOptimizer () |
SHARK_EXPORT_SYMBOL void | init (ObjectiveFunctionType const &objectiveFunction, SearchPointType const &startingPoint) |
initializes the optimizer using a predefined starting point More... | |
SHARK_EXPORT_SYMBOL void | step (ObjectiveFunctionType const &objectiveFunction) |
Carry out one step of the optimizer for the supplied objective function. More... | |
LineSearch const & | lineSearch () const |
LineSearch & | lineSearch () |
RealVector const & | derivative () const |
Returns the derivative at the current point. Can be used for stopping criteria. More... | |
Public Member Functions inherited from shark::AbstractSingleObjectiveOptimizer< RealVector > | |
std::size_t | numInitPoints () const |
By default most single objective optimizers only require a single point. More... | |
virtual void | init (ObjectiveFunctionType const &function, std::vector< SearchPointType > const &initPoints) |
Initialize the optimizer for the supplied objective function using a set of initialisation points. More... | |
virtual const SolutionType & | solution () const |
returns the current solution of the optimizer More... | |
Public Member Functions inherited from shark::AbstractOptimizer< RealVector, double, SingleObjectiveResultSet< RealVector > > | |
const Features & | features () const |
virtual void | updateFeatures () |
bool | requiresValue () const |
bool | requiresFirstDerivative () const |
bool | requiresSecondDerivative () const |
bool | canSolveConstrained () const |
bool | requiresClosestFeasible () const |
virtual | ~AbstractOptimizer () |
virtual void | init (ObjectiveFunctionType const &function) |
Initialize the optimizer for the supplied objective function. More... | |
Public Member Functions inherited from shark::INameable | |
virtual | ~INameable () |
Public Member Functions inherited from shark::ISerializable | |
virtual | ~ISerializable () |
Virtual d'tor. More... | |
void | load (InArchive &archive, unsigned int version) |
Versioned loading of components, calls read(...). More... | |
void | save (OutArchive &archive, unsigned int version) const |
Versioned storing of components, calls write(...). More... | |
BOOST_SERIALIZATION_SPLIT_MEMBER () | |
Protected Member Functions | |
SHARK_EXPORT_SYMBOL void | initModel () |
Initializes the internal model. More... | |
SHARK_EXPORT_SYMBOL void | computeSearchDirection (ObjectiveFunctionType const &) |
Updates the Model and computes the next search direction. More... | |
Protected Member Functions inherited from shark::AbstractOptimizer< RealVector, double, SingleObjectiveResultSet< RealVector > > | |
void | checkFeatures (ObjectiveFunctionType const &objectiveFunction) |
Convenience function that checks whether the features of the supplied objective function match with the required features of the optimizer. More... | |
Additional Inherited Members | |
Public Types inherited from shark::AbstractSingleObjectiveOptimizer< RealVector > | |
typedef base_type::SearchPointType | SearchPointType |
typedef base_type::SolutionType | SolutionType |
typedef base_type::ResultType | ResultType |
typedef base_type::ObjectiveFunctionType | ObjectiveFunctionType |
Public Types inherited from shark::AbstractOptimizer< RealVector, double, SingleObjectiveResultSet< RealVector > > | |
enum | Feature |
Models features that the optimizer requires from the objective function. More... | |
typedef RealVector | SearchPointType |
typedef double | ResultType |
typedef SingleObjectiveResultSet< RealVector > | SolutionType |
typedef AbstractObjectiveFunction< RealVector, ResultType > | ObjectiveFunctionType |
typedef TypedFlags< Feature > | Features |
typedef TypedFeatureNotAvailableException< Feature > | FeatureNotAvailableException |
Protected Attributes inherited from shark::AbstractLineSearchOptimizer | |
LineSearch | m_linesearch |
used line search method. More... | |
std::size_t | m_dimension |
number of parameters More... | |
double | m_initialStepLength |
Initial step length to begin with the line search. More... | |
RealVector | m_derivative |
gradient of m_best.point More... | |
RealVector | m_searchDirection |
search direction of next step More... | |
RealVector | m_lastPoint |
previous point More... | |
RealVector | m_lastDerivative |
gradient of the previous point More... | |
double | m_lastValue |
value of the previous point More... | |
Protected Attributes inherited from shark::AbstractSingleObjectiveOptimizer< RealVector > | |
SolutionType | m_best |
Current solution of the optimizer. More... | |
Protected Attributes inherited from shark::AbstractOptimizer< RealVector, double, SingleObjectiveResultSet< RealVector > > | |
Features | m_features |
Limited-Memory Broyden, Fletcher, Goldfarb, Shannon algorithm.
BFGS is one of the best performing quasi-newton methods. However for large scale optimization, storing the full hessian approximation is infeasible due to O(n^2) memory requirement. The L-BFGS algorithm does not store the full hessian approximation but only stores the data used for updating in the last steps. The matrix itself is then regenerated on-the-fly in an implicit matrix scheme. This brings runtime and memory rquirements of a single step down to O(n*hist_size).
The number of steps stored can be set with setHistCount. This is 100 as default.
The algorithm is implemented for unconstrained and constrained optimization in the case of box constraints. When box constraints are present and the algorithm encounters a constraint, a dog-leg style algorithm is used:
first, all variables with active constraints (e.g. x_i = l_i and g_i > 0) are fixed, i.e. p_i = 0. For the remaining variables, the unconstrained optimization problem is solved. If the solution does not statisfy the box constraints, in the next step the cauchy point is computed. If the cauchy point is feasible, we search the point along the line between unconstrained optimum and cauchy point that lies exactly on the constraint. This is the point with smallest value along the path. This does not find the true optimal step in the unconstrained problem, however a cheap and reasonably good optimum which often improves over naive coordinate descent.
|
inline |
|
protectedvirtual |
Updates the Model and computes the next search direction.
After a step was performed, this method is called to compute the next search direction. This usually involves updating the internal model using the new and old step information. Afterwards m_searchDirection should contain the next search direction.
Implements shark::AbstractLineSearchOptimizer.
Referenced by setHistCount().
|
protectedvirtual |
Initializes the internal model.
Line Search Methods use a Model to search for the next search direction. The model is initialized during init()
Implements shark::AbstractLineSearchOptimizer.
Referenced by setHistCount().
|
inlinevirtual |
From INameable: return the class name.
Reimplemented from shark::INameable.
|
virtual |
Read the component from the supplied archive.
[in,out] | archive | The archive to read from. |
Reimplemented from shark::AbstractLineSearchOptimizer.
Referenced by setHistCount().
|
inline |
Specify the amount of steps to be memorized and used to find the L-BFGS direction.
numhist | The amount of steps to use. |
Definition at line 85 of file LBFGS.h.
References computeSearchDirection(), initModel(), read(), SHARK_EXPORT_SYMBOL, SHARK_RUNTIME_CHECK, shark::AbstractLineSearchOptimizer::step(), and write().
|
virtual |
Write the component to the supplied archive.
[in,out] | archive | The archive to write to. |
Reimplemented from shark::AbstractLineSearchOptimizer.
Referenced by setHistCount().