Как работает CMA-ES для оптимизации гиперпараметров в Optuna

Как работает CMA-ES для оптимизации гиперпараметров в Optuna

В этой статье наглядно объясняется, как работает алгоритм CMA-ES в библиотеке Optuna. Подойдёт тем, кто хочет понять принцип оптимизации, не углубляясь в сложную математику и английскую документацию.

Что такое Optuna и сэмплинг

Optuna — это библиотека для оптимизации гиперпараметров. Вместо полного перебора она использует результаты предыдущих запусков, чтобы умно выбирать новые значения гиперпараметров, например, такие, которые уменьшат loss или улучшат метрики вроде recall и precision.

Каждый запуск модели с определённым набором гиперпараметров (например, learning_rate = 0.01, batch_size = 32) — это одна точка в пространстве возможных решений. Задача Optuna — находить следующую точку так, чтобы приблизиться к оптимальному решению.

Процесс выбора следующей точки называется сэмплированием. Алгоритмы, которые это делают, — сэмплеры. Они определяют, в какую сторону двигаться и какие значения выглядят многообещающе. Основные сэмплеры в Optuna:

  • TPE
  • Random
  • CMA-ES (Covariance Matrix Adaptation Evolution Strategy)

В этой статье подробно разбирается CMA-ES.

Шаг 1: Задание пространства гиперпараметров

Цель CMA-ES — найти глобальный минимум целевой функции. На практике это может быть, например, ошибка модели XGBoost в зависимости от гиперпараметров scale_pos_weight и max_depth.

Начнём с точки (0, -1). Алгоритм будет искать следующие точки в окрестности текущей. Эту окрестность можно представить как доверительный эллипс — область, в которой с высокой вероятностью будут находиться перспективные точки.

Для начала зададим:

  • sigma = 0.8 — начальный шаг поиска (влияет на радиус области)
  • среднее — начальный центр поиска (координаты начальной точки)
  • ковариационная матрица C — единичная матрица, что означает симметричный поиск (форма области — круг, а не эллипс)

Таким образом, область поиска — круг радиусом σ·√5.991 ≈ 1.96, в котором с 95% вероятностью будут сгенерированные точки. Единичная ковариационная матрица означает, что поиск ведётся одинаково во всех направлениях.

Шаг 2: Сэмплирование точек

На этом этапе генерируются потенциально хорошие точки — те, что могут быстрее привести к минимуму. Точки берутся из нормального распределения вокруг текущего центра.

На каждой итерации генерируется 15 новых точек по формуле:

x = mean + sigma × N(0, C)

где:

  • mean — текущее среднее (центр поиска)
  • sigma — длина шага
  • N(0, C) — двумерное нормальное распределение с нулевым средним и ковариационной матрицей C
  • C — ковариационная матрица
  • 15 — размер выборки

Таким образом, алгоритм исследует пространство в разных направлениях.

Шаг 3: Отбор лучших точек

Лучшими считаются точки с минимальным значением целевой функции. Из 15 сгенерированных выбираем топ-7 (половину).

Эти лучшие (красные) точки используются для определения направления дальнейшего поиска. Худшие (синие) отбрасываются.

Каждой лучшей точке присваивается вес — чем лучше точка, тем больше её вклад в обновление центра поиска.

Новое среднее (новый центр поиска) вычисляется как взвешенное среднее координат лучших точек. Это похоже на градиентный спуск: мы двигаемся туда, где функция даёт лучшие значения.

Шаг 4: Адаптация ковариационной матрицы и шага поиска

Ковариационная матрица C определяет форму области поиска. Её обновление позволяет алгоритму «запоминать» удачные направления и адаптироваться к ландшафту функции.

Новая матрица — это комбинация старой и новой, построенной по лучшим точкам. Формула обновления:

C = (1 - c_cov) × C + c_cov × Σ(w_i × d_i × d_i^T)

где:

  • c_cov — скорость обучения для обновления матрицы (например, 0.9)
  • d_i — нормализованные шаги лучших точек
  • w_i — веса точек

Собственные значения матрицы показывают, насколько вытянута область поиска в каждом направлении. Это помогает быстрее двигаться вдоль оврагов и сложных форм ландшафта.

Теперь обновим глобальный шаг поиска (sigma). Это делается с помощью эволюционного пути — вектора, который накапливает информацию о направлении движения центра поиска.

Формула включает несколько ключевых параметров:

  • Эволюционный путь — направление, в котором двигался центр поиска
  • Ожидаемая длина вектора — эталон для случайного движения (если нет направленного поиска)
  • Скорость обучения — насколько быстро алгоритм реагирует на новые данные
  • Демпфирующий параметр — стабилизирует изменения шага

Если алгоритм уверенно движется в одном направлении, шаг увеличивается. Если топчется на месте — уменьшается. Это позволяет балансировать между скоростью и точностью.

Резюме: как работает CMA-ES

Алгоритм повторяется до сходимости. Основные шаги:

  1. Начинаем с одной точки и круговой области поиска
  2. Генерируем новые точки вокруг центра
  3. Оцениваем их по значению целевой функции
  4. Выбираем лучшие и перемещаем центр поиска
  5. Обновляем форму области (через ковариационную матрицу)
  6. Регулируем размер шага в зависимости от уверенности в направлении
  7. Повторяем, пока не найдём глобальный минимум

Преимущества CMA-ES

CMA-ES — мощный метод оптимизации без градиентов. Его ключевые преимущества:

  • Работает с функциями, у которых нет производных, есть шум, разрывы или локальные минимумы
  • Не требует тонкой настройки — большинство параметров адаптируется автоматически
  • Эффективен в пространствах от нескольких до сотен измерений
  • Хорошо масштабируется и поддерживает параллельные вычисления
  • Сходится быстро на квадратичных функциях, даже без градиентов

Основная идея — адаптация ковариационной матрицы и управление шагом поиска — позволяет алгоритму учиться геометрии функции на ходу.

Таким образом, CMA-ES сочетает случайный поиск и интеллектуальную адаптацию, оставаясь надёжным инструментом для сложных задач оптимизации в Optuna.

Читать оригинал