shark::LBFGS Class Reference

Limited-Memory Broyden, Fletcher, Goldfarb, Shannon algorithm. More...

#include <shark/Algorithms/GradientDescent/LBFGS.h>

+ Inheritance diagram for shark::LBFGS:

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
 
LineSearchlineSearch ()
 
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 SolutionTypesolution () const
 returns the current solution of the optimizer More...
 
- Public Member Functions inherited from shark::AbstractOptimizer< RealVector, double, SingleObjectiveResultSet< RealVector > >
const Featuresfeatures () 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, ResultTypeObjectiveFunctionType
 
typedef TypedFlags< FeatureFeatures
 
typedef TypedFeatureNotAvailableException< FeatureFeatureNotAvailableException
 
- 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
 

Detailed Description

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.

Definition at line 72 of file LBFGS.h.

Constructor & Destructor Documentation

◆ LBFGS()

Member Function Documentation

◆ computeSearchDirection()

SHARK_EXPORT_SYMBOL void shark::LBFGS::computeSearchDirection ( ObjectiveFunctionType const &  objectiveFunction)
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().

◆ initModel()

SHARK_EXPORT_SYMBOL void shark::LBFGS::initModel ( )
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().

◆ name()

std::string shark::LBFGS::name ( ) const
inlinevirtual

From INameable: return the class name.

Reimplemented from shark::INameable.

Definition at line 79 of file LBFGS.h.

◆ read()

SHARK_EXPORT_SYMBOL void shark::LBFGS::read ( InArchive archive)
virtual

Read the component from the supplied archive.

Parameters
[in,out]archiveThe archive to read from.

Reimplemented from shark::AbstractLineSearchOptimizer.

Referenced by setHistCount().

◆ setHistCount()

void shark::LBFGS::setHistCount ( unsigned int  numhist)
inline

Specify the amount of steps to be memorized and used to find the L-BFGS direction.

Parameters
numhistThe 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().

◆ write()

SHARK_EXPORT_SYMBOL void shark::LBFGS::write ( OutArchive archive) const
virtual

Write the component to the supplied archive.

Parameters
[in,out]archiveThe archive to write to.

Reimplemented from shark::AbstractLineSearchOptimizer.

Referenced by setHistCount().


The documentation for this class was generated from the following file: