Limbo: A Flexible High-performance Library for Gaussian Processes modeling and Data-Efficient Optimization

Antoine Cully 1 Konstantinos Chatzilygeroudis 2 Federico Allocati 2 Jean-Baptiste Mouret 2
2 LARSEN - Lifelong Autonomy and interaction skills for Robots in a Sensing ENvironment
Inria Nancy - Grand Est, LORIA - AIS - Department of Complex Systems, Artificial Intelligence & Robotics
Abstract : Limbo (LIbrary for Model-Based Optimization) is an open-source C++11 library for Gaussian Processes and data-efficient optimization (e.g., Bayesian optimization, see (Shahriari et al. 2016)) that is designed to be both highly flexible and very fast. It can be used as a state-of-the-art optimization library or to experiment with novel algorithms with "plugin" components. Limbo is currently mostly used for data-efficient policy search in robot learning (Lizotte et al. 2007) and online adaptation because computation time matters when using the low-power embedded computers of robots. For example, Limbo was the key library to develop a new algorithm that allows a legged robot to learn a new gait after a mechanical damage in about 10-15 trials (2 minutes) (Cully et al. 2015), and a 4-DOF manipulator to learn neural networks policies for goal reaching in about 5 trials (Chatzilygeroudis et al. 2017). The implementation of Limbo follows a policy-based design (Alexandrescu 2001) that leverages C++ templates: this allows it to be highly flexible without the cost induced by classic object-oriented designs (Driesen and Hölzle 1996) (cost of virtual functions). The regression benchmarks 1 show that the query time of Limbo's Gaussian processes is several orders of magnitude better than the one of GPy (a state-of-the-art Python library for Gaussian processes 2) for a similar accuracy (the learning time highly depends on the optimization algorithm chosen to optimize the hyper-parameters). The black-box optimization benchmarks 3 demonstrate that Limbo is about 2 times faster than BayesOpt (a C++ library for data-efficient optimization, (Martinez-Cantin 2014)) for a similar accuracy and data-efficiency. In practice, changing one of the components of the algorithms in Limbo (e.g., changing the acquisition function) usually requires changing only a template definition in the source code. This design allows users to rapidly experiment and test new ideas while keeping the software as fast as specialized code. Limbo takes advantage of multi-core architectures to parallelize the internal optimization processes (optimization of the acquisition function, optimization of the hyper-parameters of a Gaussian process) and it vectorizes many of the linear algebra operations (via the Eigen 3 library 4 and optional bindings to Intel's MKL).
Complete list of metadatas

Cited literature [14 references]  Display  Hide  Download

https://hal.inria.fr/hal-01884299
Contributor : Jean-Baptiste Mouret <>
Submitted on : Sunday, September 30, 2018 - 4:56:18 PM
Last modification on : Tuesday, December 18, 2018 - 4:40:22 PM
Long-term archiving on : Monday, December 31, 2018 - 12:41:03 PM

File

10.21105.joss.00545.pdf
Files produced by the author(s)

Identifiers

Citation

Antoine Cully, Konstantinos Chatzilygeroudis, Federico Allocati, Jean-Baptiste Mouret. Limbo: A Flexible High-performance Library for Gaussian Processes modeling and Data-Efficient Optimization. Journal of Open Source Software, Open Journals, 2018, 3 (26), ⟨10.21105/joss.00545⟩. ⟨hal-01884299⟩

Share

Metrics

Record views

135

Files downloads

68