ensmallen

Высокопроизводительная библиотека численной оптимизации на C++. Она предоставляет единый и гибкий интерфейс для оптимизации произвольных целевых функций, поддерживая широкий спектр алгоритмов — от классических градиентных методов до современных стохастических техник и эволюционных стратегий. Библиотека тесно интегрируется с Armadillo для эффективных линейно-алгебраических операций и широко используется в машинном обучении и научных вычислениях.

Особенности

  • Широкий спектр оптимизаторов: полноградиентные методы, стохастические, безградиентные, методы для задач с ограничениями и многокритериальной оптимизации;
  • Поддержка произвольных, дифференцируемых, сепарабельных, разреженных и категориальных целевых функций;
  • Все данные представляются через типы arma::mat, что обеспечивает высокую производительность за счёт оптимизированных BLAS/LAPACK-библиотек;
  • Для создания нового оптимизатора достаточно реализовать один метод, а для новой целевой функции — один-два C++ метода.

Основные компоненты

Библиотека построена вокруг концепции разделения целевой функции и оптимизатора. Пользователь определяет класс функции с необходимыми методами, после чего любой подходящий оптимизатор может быть применён для поиска минимума (подробнее с документацией можно ознакомиться здесь).

Определение целевой функции

В зависимости от свойств функции, пользователь реализует соответствующий набор методов. Наиболее общий случай требует только вычисления значения. Для дифференцируемых функций добавляется вычисление градиента.

Основные методы для разных типов функций:

  • Произвольная функция:
    • double Evaluate(const arma::mat& x) — возвращает значение функции f(x).
  • Дифференцируемая функция:
    • double Evaluate(const arma::mat& x) — значение функции;
    • void Gradient(const arma::mat& x, arma::mat& g) — вычисление градиента f'(x) и сохранение в g;
    • (Опционально) double EvaluateWithGradient(const arma::mat& x, arma::mat& g) — одновременное вычисление значения и градиента, часто эффективнее раздельных вызовов.
  • Сепарабельная функция:
    • Дополнительно требуются методы для работы с мини-батчами: Evaluate() и Gradient() с параметром begin/batchSize, а также NumFunctions() и Shuffle().

Категории оптимизаторов

ensmallen включает десятки готовых оптимизаторов, разбитых по категориям. Каждый оптимизатор имеет метод Optimize(f, x), где f — целевая функция, а x — начальное приближение (после вызова содержит найденный оптимум).

Основные категории и примеры:

  • Полноградиентные:
    • ens::L_BFGS — ограниченная по памяти BFGS, эффективен для задач со средней размерностью;
    • ens::GradientDescent — классический градиентный спуск.
  • Стохастические:
    • ens::SGD — стохастический градиентный спуск;
    • ens::Adam, ens::AdaGrad, ens::RMSProp — адаптивные методы, популярные в глубоком обучении;
    • ens::AdaBelief, ens::Yogi, ens::DemonSGD — современные модификации Adam.
  • Безградиентные:
    • ens::CMAES — ковариационная стратегия эволюции;
    • ens::CNE — классическая нейроэволюция;
    • ens::DE — дифференциальная эволюция.
  • Для задач с ограничениями:
    • ens::AugLagrangian — метод множителей Лагранжа;
    • ens::FrankWolfe — алгоритм Франка-Вульфа для выпуклых задач с простыми ограничениями;
    • ens::FBS, ens::FISTA, ens::FASTA — проксимальные градиентные методы для L1-регуляризации и подобных задач.
  • Многокритериальные:
    • ens::NSGA2, ens::MOEA_D — алгоритмы для поиска Парето-фронта.

Коллбэки

ensmallen предоставляет механизм коллбэков для тонкой настройки поведения оптимизации, логирования и ранней остановки.

Основные коллбэки:

  • ens::PrintLoss — вывод значения функции на каждой итерации;
  • ens::EarlyStopAtMinLoss — остановка при достижении минимальной ошибки;
  • ens::ProgressBar — отображение прогресса оптимизации;
  • ens::StoreBestCoordinates — сохранение лучших параметров;
  • ens::GradClipByNorm / ens::GradClipByValue — ограничение градиентов для стабильности.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "ensmallen/2.21.0@aurora",
    )    

Процесс локальной сборки описан в документации.

ensmallen

ensmallen is a high quality C++ library for non-linear numerical optimization.
Лицензия
BSD-3-Clause
Версия
Автор
Daniil Markevich <d.markevich@omp.ru>
Домашняя страница
Скачать
package
220.08 Kb
MD5: d183a87a6bc017af699c701d25f2043a
Updated: 13.11.2025, 13:17:25
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.