Оптимизация

Байесовская оптимизация

Обучение GPT-3 стоит 4.6M. Тюнить гиперпараметры полным перебором - невозможно. Google Vizier, Optuna, BoTorch решают эту проблему: 50 умных экспериментов вместо 5000 случайных. Bayesian Optimization - это когда алгоритм учится из каждого дорогого эксперимента.

  • **Google Vizier:** HPO-сервис Google, используемый для оптимизации гиперпараметров всех производственных ML-моделей - тысячи запусков в день
  • **Optuna:** открытая библиотека HPO с BO (TPE); используется PyTorch Lightning, Hugging Face, Kaggle
  • **A/B тесты:** Facebook/Meta использует BO для оптимизации UI экспериментов при ограниченном трафике

Предварительные знания

  • Stochastic Optimization

Суррогатная модель и GP

Bayesian Optimization (BO) решает задачу: max f(x), где f - дорогая black-box функция (например, accuracy после полного обучения). Идея: строим **суррогатную модель** p(f|данные), которая аппроксимирует f дёшево. После каждого эксперимента обновляем суррогат и выбираем следующий x умно.

**Почему Gaussian Process?** GP даёт не только предсказание, но и **неопределённость** sigma(x) в каждой точке. Это критично для BO: в областях с большой неопределённостью нужно исследовать, в областях с хорошими предсказаниями - эксплуатировать. Альтернативы: Random Forest (Hyperopt), neural network surrogate (DNGO).

Зачем суррогатная модель в BO должна предоставлять **неопределённость** sigma(x), а не только предсказание mu(x)?

Acquisition Functions

**Acquisition function** α(x) - критерий выбора следующего эксперимента. Она балансирует exploration (места с высокой неопределённостью) и exploitation (места с хорошим предсказанием). Максимизируется аналитически или через многостартовый gradient descent.

AcquisitionФормулаСвойства
EI (Expected Improvement)E[max(f(x)-f_best, 0)]Баланс exploration/exploitation; популярна
UCB (Upper Confidence Bound)mu(x) + kappa*sigma(x)Простая; kappa контролирует exploration
PI (Prob. of Improvement)P(f(x) > f_best + xi)Консервативная; меньше exploration
Thompson SamplingВыборка из posterior GPПараллельная BO; simple to implement

UCB acquisition function: UCB(x) = mu(x) + kappa*sigma(x). Что происходит при kappa→∞?

Parallel BO и HPO на практике

**Parallel BO** выбирает batch из q точек одновременно, а не по одной. Это критично для HPO в ML: обучать q моделей параллельно на кластере. Acquisition functions для batch: q-EI, q-UCB (через Monte Carlo sampling от GP posterior).

**Optuna TPE vs GP:** Optuna по умолчанию использует TPE (Tree-structured Parzen Estimator) - быстрее GP для многомерных пространств. GP точнее, но медленнее (O(n³)). Для n>200 наблюдений GP становится узким местом. BoTorch с sparse GP или нейросетевым суррогатом масштабируется до тысяч наблюдений.

Почему BO эффективнее случайного поиска (random search) для HPO нейросетей?

BO для A/B тестов и budget allocation

BO выходит за рамки HPO: **A/B тест с BoTorch** - оптимизация нескольких версий продукта при ограниченном бюджете пользователей. **Budget allocation** - распределение рекламного бюджета между каналами. Любая дорогая black-box оптимизация - кандидат для BO.

**Когда НЕ использовать BO:** если функция дёшевая (< 1 секунды) - random search или grid search достаточно. Если параметров > 50 - BO деградирует, используйте evolutionary methods. Если бюджет > 1000 evaluations - можно позволить более простые методы.

Bayesian Optimization - это просто умный random search с GP

BO использует принципиально иную стратегию: строит модель зависимости quality→hyperparameters и выбирает следующую точку через acquisition function. Это позволяет находить оптимум за 2-10× меньше evaluations.

Random search: каждый выбор независим, не учится из прошлого. BO: posterior GP обновляется после каждого эксперимента - алгоритм накапливает знания. Acquisition function (EI, UCB) формализует компромисс exploration/exploitation. На практике: BO часто находит лучший HPS за 50 trials, чем random search за 500.

BO оптимален для 'дорогих' функций (обучение нейросети = 1 час). Какой бюджет evaluations оптимален для BO?

Ключевые идеи

  • **GP surrogate** аппроксимирует дорогую f через posterior; даёт mu (prediction) и sigma (uncertainty)
  • **Acquisition function** (EI, UCB, PI) балансирует exploration/exploitation; следующий эксперимент = argmax α(x)
  • **Parallel BO** (q-EI): выбирает batch из q точек для параллельных экспериментов
  • **Optuna/BoTorch** - standard для HPO; 10-500 evaluations оптимальный диапазон для GP; при >500 - TPE или sparse GP

Связанные темы

BO объединяет Bayesian inference и оптимизацию:

  • Стохастическая оптимизация — BO оптимизирует гиперпараметры SGD/Adam; шум в evaluations моделируется GP
  • Метаэвристики — При > 50 параметров BO деградирует; эволюционные методы (CMA-ES) лучше для NAS
  • Multi-Objective Optimization — Multi-objective BO (EHVI) оптимизирует несколько метрик одновременно (accuracy + latency)

Вопросы для размышления

  • Почему BO с GP surrogate неэффективен при очень большом числе наблюдений (n > 1000)? Какие модификации позволяют масштабировать BO?
  • EI, UCB, PI - разные acquisition functions. В какой ситуации вы бы выбрали каждую? Как xi (в EI) и kappa (в UCB) влияют на баланс exploration/exploitation?
  • BO хорошо работает для 5-30 гиперпараметров. Что происходит в high-dimensional пространстве (n=100+)? Как разрабатывают HPO для NAS?

Связанные уроки

  • ml-09-gradient-descent
Байесовская оптимизация

0

1

Войти