Оптимизация
Байесовская оптимизация
Обучение 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 экспериментов при ограниченном трафике
Предварительные знания
Суррогатная модель и 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?