Files
PracticeClassif/_research/SECTION_hpo_methods.md
2026-06-30 15:17:40 +03:00

36 KiB
Raw Permalink Blame History

title, tags, supervisor, status
title tags supervisor status
Методы оптимизации и подбора гиперпараметров — таксономия, теория, источники
HPO
hyperparameter-optimization
methodology
automl
мнс Павленко Б.В. draft

Методы оптимизации / подбора гиперпараметров

Раздел учебно-исследовательской методички. Цель — дать самодостаточную таксономию методов HPO (Hyper-Parameter Optimization), их теоретические основы, формулы, сравнительные таблицы и практическую методологию для DL-классификации.

1. Гиперпараметры vs параметры. Пространство поиска, бюджет, цель

Параметры (parameters) — переменные модели, которые настраиваются оптимизатором в ходе обучения напрямую минимизацией функции потерь (веса W, смещения b свёрток и линейных слоёв, \gamma,\beta в BatchNorm). Их градиент \partial \mathcal{L}/\partial W вычислим аналитически (backprop).

Гиперпараметры (hyper-parameters) — переменные, которые задаются до/над обучением и управляют либо самим процессом обучения (learning rate, weight decay, batch size, оптимизатор, расписание), либо ёмкостью и структурой модели (глубина, ширина, dropout, label smoothing), либо данными (аугментации). Градиент целевой метрики по ним обычно недоступен в замкнутой форме — отсюда отдельная дисциплина HPO.

Формально HPO — это задача оптимизации «чёрного ящика»:


\lambda^{\*} = \arg\min_{\lambda \in \Lambda}\; \mathcal{L}_{\text{val}}\big(A_\lambda(D_{\text{train}}),\, D_{\text{val}}\big),

где \lambda — вектор гиперпараметров из пространства поиска \Lambda; A_\lambda — алгоритм обучения, обученный с этой конфигурацией; \mathcal{L}_{\text{val}} — целевая функция (валидационный loss или 1-\text{accuracy}, 1-\text{R@1} и т. д.). Функция \mathcal{L}_{\text{val}}(\lambda)дорогая (один replay = полное обучение), зашумлённая (random seed, недетерминизм GPU), недифференцируемая по \lambda и часто немонотонная.

Типы переменных в пространстве поиска \Lambda

Тип Пример Шкала Примечание
Непрерывный (continuous / real) lr \in[10^{-5},10^{-1}], weight_decay, dropout log / linear для lr, wdлогарифмическая
Целочисленный (integer / ordinal) batch_size, число эпох заморозки, ширина слоя log2 / linear порядок имеет смысл
Категориальный (categorical / nominal) optimizer ∈ {SGD, AdamW, Lion}, тип scheduler порядка нет
Условный / иерархический (conditional) momentum существует только если optimizer=SGD; betas — только для Adam дерево зависимостей → tree-structured space

Условность (conditional space) — ключевая черта реальных задач: подпространство активно только при определённом значении родителя. Метод HPO должен это моделировать (TPE, SMAC — могут; чистый GP — хуже).

Бюджет (budget) — ограничение ресурсов: число trial'ов N, суммарное GPU-время, либо «fidelity» (число эпох / доля данных / разрешение). Цель методологии — найти хороший \lambda при фиксированном бюджете, а не глобальный оптимум любой ценой.

Цель (objective) — скаляр (single-objective) или вектор (multi-objective: accuracy ↔ latency/FLOPs — критично для edge-моделей вроде EdgeNeXt на Jetson). При multi-objective говорят о Pareto-фронте.


2.1 Manual / Babysitting («graduate student descent»)

Эксперт вручную меняет один-два гиперпараметра, смотрит на кривые обучения, корректирует. Плюсы: дёшево на старте, накапливает интуицию. Минусы: невоспроизводимо, не масштабируется, систематический bias, не параллелится.

Декартово произведение заранее заданных значений по каждой оси. Для d осей по k значений — k^d конфигураций (комбинаторный взрыв). Полностью параллелизуем, прост, воспроизводим. Главная беда — проклятие размерности и неэффективное покрытие при наличии «неважных» осей.

Каждая конфигурация сэмплируется независимо из заданных распределений по осям ($\log$-uniform для lr/wd, uniform/categorical для остальных).

Ключевой источник: Bergstra & Bengio, 2012, «Random Search for Hyper-Parameter Optimization», JMLR 13:281305.

Почему random эффективнее grid в высокой размерности. На практике целевая функция имеет низкую эффективную размерность (low effective dimensionality): из d гиперпараметров реально важны лишь d_{\text{eff}} \ll d. Grid тратит бюджет на повторную дискретизацию неважных осей: при k^d точках по каждой важной оси пробуется только k различных значений. Random Search при N trial'ах пробует N различных значений по каждой оси (с вероятностью 1), то есть гораздо плотнее покрывает проекцию на важные оси.

Интуиция «вероятности промаха»: если хорошая область занимает долю v объёма \Lambda, то вероятность хотя бы одного попадания за N случайных trial'ов:


P(\text{hit}) = 1 - (1 - v)^N .

Чтобы получить P \ge 1-\epsilon, нужно N \ge \dfrac{\log \epsilon}{\log(1-v)} — это не зависит от размерности d, в отличие от grid. Bergstra & Bengio эмпирически показали, что random search находит модели не хуже, чем тщательный grid+manual search из предыдущих работ, за малую долю вычислений.

# Минимальный Random Search в лог-шкале для lr/wd (PyTorch-агностично)
import numpy as np

def sample_config(rng):
    return {
        "lr":           10 ** rng.uniform(-4, -1),    # log-uniform
        "weight_decay": 10 ** rng.uniform(-6, -2),    # log-uniform
        "batch_size":   int(rng.choice([64, 128, 256])),
        "optimizer":    rng.choice(["sgd", "adamw"]),
    }

rng = np.random.default_rng(seed=42)  # фиксируем seed → воспроизводимость
configs = [sample_config(rng) for _ in range(64)]  # бюджет N=64 trial'ов

3. Bayesian Optimization (BO)

Идея: построить дешёвую суррогатную модель (surrogate) p(\mathcal{L}\mid\lambda) по уже наблюдённым (\lambda_i,\mathcal{L}_i) и выбирать следующую точку, максимизируя acquisition function — это Sequential Model-Based Optimization (SMBO). BO выборочно-эффективна (sample-efficient), но последовательна по природе (плохо параллелится без модификаций) и хуже масштабируется по d.

3.1 Суррогатные модели

Gaussian Process (GP). Апостериор по функции — гауссов: \mathcal{L}(\lambda)\sim \mathcal{GP}(\mu(\lambda),k(\lambda,\lambda')). Даёт замкнутые предсказательные среднее \mu(\lambda) и дисперсию \sigma^2(\lambda). Минусы: O(n^3) по числу наблюдений, плохо с категориальными/условными осями и высокой размерностью.

TPE (Tree-structured Parzen Estimator). Источник: Bergstra, Bardenet, Bengio, Kégl, 2011, «Algorithms for Hyper-Parameter Optimization», NeurIPS 24:25462554. Вместо p(y\mid\lambda) моделируется p(\lambda\mid y) двумя плотностями, разделяя trial'ы порогом y^{\*} (квантиль):


p(\lambda \mid y) =
\begin{cases}
\ell(\lambda), & y < y^{\*} \quad (\text{«хорошие»})\\[2pt]
g(\lambda), & y \ge y^{\*} \quad (\text{«плохие»})
\end{cases}

Можно показать, что максимизация Expected Improvement эквивалентна максимизации отношения \ell(\lambda)/g(\lambda). TPE естественно поддерживает категориальные и условные пространства (отсюда «tree-structured») и хорошо масштабируется по d. Open-source реализация — hyperopt (2013), а также ядро Optuna.

SMAC (random forest surrogate). Источник: Lindauer et al., 2022, «SMAC3», JMLR 23(54):19. Суррогат — random forest, дающий среднее и дисперсию по разбросу деревьев. RF хорошо работает с категориальными/условными осями, целочисленными переменными и высоким d; плюс агрессивный racing-механизм для сравнения конфигураций на нескольких instance.

3.2 Acquisition functions

Пусть f^{\*} — лучшее наблюдённое значение (минимизация), \mu,\sigma — апостериорные среднее и СКО суррогата.

Acquisition Формула Поведение
PI (Probability of Improvement) \mathrm{PI}(\lambda)=\Phi\!\Big(\dfrac{f^{\*}-\mu(\lambda)-\xi}{\sigma(\lambda)}\Big) жадная, склонна к exploitation
EI (Expected Improvement) \mathrm{EI}(\lambda)=(f^{\*}-\mu-\xi)\Phi(z)+\sigma\,\phi(z),\;\; z=\dfrac{f^{\*}-\mu-\xi}{\sigma} баланс, индустриальный стандарт
UCB/LCB (Upper/Lower Confidence Bound) \mathrm{LCB}(\lambda)=\mu(\lambda)-\beta_t\,\sigma(\lambda) \beta_t напрямую регулирует exploration

Здесь \Phi,\phi — CDF и PDF стандартного нормального распределения, \xi\ge 0 — параметр jitter для exploration.

Exploration vs exploitation. Это центральный компромисс BO: \sigma(\lambda) велика в неисследованных областях (exploration), \mu(\lambda) мала в перспективных (exploitation). UCB/LCB даёт теоретические гарантии: Srinivas et al., 2010, «Gaussian Process Optimization in the Bandit Setting: No Regret and Experimental Design», ICML доказали сублинейную границу кумулятивного regret \tilde{O}(\sqrt{N\,\gamma_N}) для GP-UCB, где \gamma_N — максимальный information gain, а \beta_t выбирается по информационно-теоретическому правилу.


4. Эволюционные / популяционные методы

4.1 CMA-ES (Covariance Matrix Adaptation Evolution Strategy)

Поддерживает многомерное гауссово распределение \mathcal{N}(m,\,\sigma^2 C) над пространством поиска; на каждой итерации сэмплирует популяцию \lambda_i, оценивает, и адаптирует среднее m, шаг \sigma и матрицу ковариаций C по лучшим особям:


\lambda_i \sim m + \sigma\,\mathcal{N}(0,C),\qquad
m \leftarrow \sum_{i=1}^{\mu} w_i\,\lambda_{i:\text{best}} .

Сильна на непрерывных, не-сепарабельных, мультимодальных ландшафтах; не требует градиента. Минусы: категориальные/условные оси — неестественны; затраты на C растут с d^2.

4.2 Генетические алгоритмы (GA)

Популяция «особей» (конфигураций) эволюционирует через selection → crossover → mutation. Гибки к смешанным пространствам, легко параллелятся, но требуют много оценок и тонкой настройки операторов.

4.3 Population Based Training (PBT)

Источник: Jaderberg et al., 2017, «Population Based Training of Neural Networks», DeepMind, arXiv:1711.09846.

PBT обучает популяцию моделей параллельно и периодически выполняет две операции:

  • exploit — слабые модели копируют веса И гиперпараметры лучших (truncation selection);
  • explore — скопированные гиперпараметры возмущаются (perturb / resample).

Ключевая особенность: PBT находит расписание (schedule) гиперпараметров во времени, а не одну фиксированную точку — что часто оптимальнее (например, убывающий lr, меняющаяся сила аугментаций). Асинхронен, эффективно использует фиксированный бюджет, переиспользует частично обученные веса (не стартует с нуля).


5. Multi-fidelity / early-stopping

Базовая идея: дёшево отсеять заведомо плохих, не доводя их до полного обучения. «Fidelity» (точность оценки) = число эпох / доля данных / разрешение. Плохие конфигурации убиваются рано, бюджет переливается перспективным.

5.1 Successive Halving (SHA)

Запустить n конфигураций с малым бюджетом r; оставить верхние 1/\eta; увеличить их бюджет в \eta раз; повторять. За \log_\eta n «раундов» бюджет на конфигурацию растёт геометрически.

Проблема SHA — компромисс «n vs $B/n$»: при фиксированном суммарном бюджете B неясно, брать много конфигураций с малым бюджетом каждой или мало с большим (риск рано убить «медленный старт»).

5.2 Hyperband

Источник: Li, Jamieson, DeSalvo, Rostamizadeh, Talwalkar, 2018, «Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization», JMLR (arXiv:1603.06560).

Hyperband решает дилемму n vs B/n, запуская несколько «брекетов» (brackets) SHA с разными стартовыми (n,r): от «много конфигураций / агрессивное отсеивание» до «мало / щадящее». Это страхует от misleading early performance. Внешний цикл по s, внутренний — SHA:


s_{\max}=\lfloor\log_\eta(R)\rfloor,\qquad n_s=\Big\lceil \tfrac{s_{\max}+1}{s+1}\eta^{s}\Big\rceil,\qquad r_s=R\,\eta^{-s},

где R — максимальный бюджет на одну конфигурацию, \eta — фактор отсева (обычно 3). Hyperband даёт ускорение более чем на порядок против random search и model-based методов на DL/kernel-задачах.

5.3 ASHA (Asynchronous Successive Halving)

Источник: Li et al., 2020, «A System for Massively Parallel Hyperparameter Tuning», MLSys (arXiv:1810.05934).

SHA синхронна: «раунд» ждёт завершения всех конфигураций (stragglers тормозят). ASHA асинхронна: как только конфигурация дошла до уровня и попадает в топ-1/\eta на текущий момент — её сразу промотируют, не дожидаясь остальных; освободившийся ресурс берёт новую конфигурацию. Это даёт почти линейное масштабирование на сотни-тысячи воркеров. ASHA превосходит PBT, BOHB и Vizier в массово-параллельном режиме.

5.4 BOHB (Bayesian Optimization + HyperBand)

Источник: Falkner, Klein, Hutter, 2018, «BOHB: Robust and Efficient Hyperparameter Optimization at Scale», ICML (arXiv:1807.01774).

Hyperband сэмплирует конфигурации случайно — это его слабость на «больших» бюджетах. BOHB заменяет random-сэмплинг внутри Hyperband на TPE-суррогат (модель строится по уже виденным результатам на разных fidelity). Получает: anytime-производительность и параллелизм Hyperband + sample-efficiency BO. Ускорение поиска до ~50× по wall-clock. Реализация — HpBandSter (AutoML).


6. Gradient-based / hypergradients и meta-learning (кратко)

Если бы метрика была дифференцируема по \lambda, можно было бы делать градиентный спуск по гиперпараметрам. Подходы:

  • Reversible learning / hypergradients. Maclaurin, Duvenaud, Adams, 2015, «Gradient-based Hyperparameter Optimization through Reversible Learning», ICML (arXiv:1502.03492): вычисляют точный градиент валидационной потери по тысячам гиперпараметров, разворачивая (reverse-mode) всю динамику SGD-with-momentum назад во времени. Позволяет настраивать расписания lr/momentum, схемы регуляризации, инициализацию.
  • Implicit differentiation. Дифференцирование через условие стационарности обученных весов — избегает хранения всей траектории (масштабируется лучше).
  • Meta-learning связь. Та же машинерия (внешний/внутренний цикл) лежит в основе MAML-подобных подходов: «гиперпараметром» становятся инициализация или сам алгоритм обучения.

Ограничение: применимо к непрерывным дифференцируемым гиперпараметрам (lr, wd, веса лоссов); не работает для категориальных/архитектурных. На практике в edge-классификации используется редко (дорого, нестабильно), но важно концептуально.


7. Инструменты-фреймворки

Фреймворк Основные алгоритмы Плюсы Минусы Лицензия
Optuna (Akiba 2019, KDD) TPE, CMA-ES, GP, Random; pruners (ASHA/Hyperband/Median) define-by-run API (динамич. условные пространства), отличная визуализация, importance surrogate-GP слабее спец-BO; sampler по умолчанию последовательный MIT
Ray Tune ASHA, Hyperband, PBT, BOHB; интегрирует Optuna/HyperOpt/Ax/Nevergrad масштаб от ноутбука до кластера без правки кода, лучший параллелизм overhead Ray, кривая входа Apache-2.0
Hyperopt (Bergstra 2011/2013) TPE, Random, (Anneal) классика TPE, условные пространства, MongoDB-параллелизм вялое развитие, устаревший API, нет GP BSD
scikit-optimize GP-BO, RF, GBRT (gp_minimize) sklearn-совместим, прост малый параллелизм, проект почти заморожен BSD-3
Ax / BoTorch (arXiv:1912.05686) GP-BO на PyTorch, multi-objective (qEHVI), constraints SOTA-BO, multi-objective/Pareto, neural-aware избыточен для простого поиска; нужен GPyTorch MIT
Nevergrad CMA-ES, DE, PSO, TBPSA, oneshot (ask-and-tell) богатый набор gradient-free, хорош для непрерывных/шумных слабая поддержка условных, мало DL-инфраструктуры MIT
SMAC3 (Lindauer 2022, JMLR) RF-surrogate BO + racing, multi-fidelity (Hyperband) силён на категор./условных/смешанных, AutoML-зрелость сложнее в освоении, тяжелее зависимости BSD-3
NNI (Microsoft) TPE, SMAC, Hyperband, PBT, NAS, Anneal, Evolution широкий охват (HPO + NAS + compression), web-UI объёмный, реже обновляется MIT
W&B Sweeps Grid, Random, Bayes (+early-terminate Hyperband) трекинг + поиск в одном, агенты-воркеры, дашборды BO базовый; SaaS-зависимость для UI проприет. (SaaS) + open client (MIT)
KerasTuner Random, Hyperband, BO прост, нативно Keras/TF только TF/Keras-экосистема, базовые алгоритмы Apache-2.0

Практический выбор для edge-DL (EdgeNeXt и т. п.): Optuna (TPE + ASHA pruner) как дефолт; Ray Tune при многоузловом кластере; Ax/BoTorch при явной multi-objective (accuracy ↔ latency).


8. Практическая методология для DL-классификации

8.1 Что подбирать и в какой шкале

Гиперпараметр Типичный диапазон Шкала Приоритет
learning_rate 10^{-4}\ldots10^{-1} (SGD) / 10^{-5}\ldots10^{-3} (AdamW) log ★★★ высший
weight_decay 10^{-6}\ldots10^{-2} log ★★★
batch_size {64,128,256,512} log2 ★★ (связан с lr)
optimizer {SGD+momentum, AdamW, Lion} categorical ★★
lr_scheduler {cosine, step, one-cycle, warmup+cosine} categorical / cond ★★
warmup_epochs 0…10 linear
dropout / drop_path 0.0…0.5 linear ★★
label_smoothing 0.0…0.2 linear
аугментации (RandAugment N,M; mixup \alpha; cutmix) N\in[1,3], M\in[5,15], \alpha\in[0.1,1.0] mixed ★★
ёмкость / глубина модели (если NAS-lite) пресеты {XS,S,M} ordinal/cat ★★
глубина заморозки (freeze depth при fine-tuning) 0…L блоков integer ★★ (для transfer)

Почему лог-шкала для lr/wd. Их эффект мультипликативен, а «хорошие» значения охватывают несколько порядков. Линейный сэмплинг между 10^{-5} и 10^{-1} отдал бы ~99 % проб диапазону [10^{-2},10^{-1}] и почти не пробовал малые значения. Лог-uniform делает плотность равномерной по порядкам: \log_{10}(\text{lr})\sim U(-4,-1).

8.2 Воспроизводимость и валидация

  • Фиксация seed. Задавать seed для Python/NumPy/torch и torch.use_deterministic_algorithms(True) (где возможно). Помнить: \mathcal{L}_{\text{val}}(\lambda) зашумлена — один seed даёт смещённую оценку.
  • Реплики (replicas). Топ-кандидатов переоценивать на \ge 3 seed'ах и сравнивать по среднему ± std; иначе «победитель» может оказаться счастливым seed'ом.
  • Валидационная стратегия. Hold-out (фикс. train/val) — стандарт для больших DL-датасетов (быстро, дёшево). k-fold CV — для малых датасетов (надёжнее, но в k раз дороже; в DL применяют редко). Test-сет трогать только однократно в самом конце.
  • Бюджет. Заранее зафиксировать N trial'ов или GPU-часы; multi-fidelity (ASHA) при тесном бюджете.
  • Отчёт о важности (importance). После поиска — fANOVA / permutation importance (есть в Optuna plot_param_importances), чтобы понять, какие оси реально влияют, и сузить \Lambda в следующей итерации.
# Optuna: TPE + ASHA-pruner, log-шкала для lr/wd, медианный pruning по эпохам
import optuna

def objective(trial):
    lr = trial.suggest_float("lr", 1e-4, 1e-1, log=True)
    wd = trial.suggest_float("weight_decay", 1e-6, 1e-2, log=True)
    opt = trial.suggest_categorical("optimizer", ["sgd", "adamw"])
    model, loader_tr, loader_val = build(lr, wd, opt)        # пользовательская сборка
    for epoch in range(MAX_EPOCHS):
        train_one_epoch(model, loader_tr)
        acc = evaluate(model, loader_val)
        trial.report(acc, epoch)                              # для pruner'а
        if trial.should_prune():                              # ранний отсев
            raise optuna.TrialPruned()
    return acc

study = optuna.create_study(
    direction="maximize",
    sampler=optuna.samplers.TPESampler(seed=42),              # фикс. seed
    pruner=optuna.pruners.SuccessiveHalvingPruner(),          # multi-fidelity
)
study.optimize(objective, n_trials=64)                        # бюджет
print(study.best_params)
optuna.importance.get_param_importances(study)                # отчёт о важности

9. Типичные ошибки

Ошибка Суть Как избежать
Утечка test в подбор гиперпараметры выбираются по test-метрике → test перестаёт быть честной оценкой test трогать один раз; подбор — только на val
Переобучение на валидации при большом N и одном val-сете выбирается \lambda, случайно хороший на этом val nested CV / отдельный «дев»-сет; репорт ± std по seed'ам; ограничить N
Нечестное сравнение методов сравнивать random vs BO при разном числе trial'ов или GPU-часов фиксировать одинаковый бюджет (trial'ы или wall-clock) и одинаковое \Lambda
Линейная шкала для lr/wd почти не пробуются малые значения log-uniform
Один seed как «доказательство» разброс по seed'ам > разницы между конфигурациями \ge 3 реплик, сравнение по средним
Сравнение на разных $\Lambda$ у random search границы шире/уже, чем у grid единое пространство поиска для всех методов
Игнор зашумлённости objective принятие решения по разнице в 0.1 % стат-тест (напр., paired t-test, p<0.05) перед выводом
Подбор архитектуры по test (NAS-leak) выбор размера/глубины по тестовой точности архитектурный поиск — на val/dev

Итоговая сравнительная таблица методов

Метод Размерность d Бюджет (sample-eff.) Параллелизм Категориальные Условные Anytime
Manual / Babysitting низкая низкая эфф. нет да (вручную) да да
Grid Search низкая (k^d) очень низкая полный (embarrassingly) да плохо нет
Random Search высокая ✓ низкая–средняя полный ✓ да да да
BO — GP низкая–средняя высокая слабый (последоват.) плохо плохо да
BO — TPE средняя–высокая ✓ высокая средний да ✓ да ✓ да
BO — SMAC (RF) средняя–высокая высокая средний да ✓ да ✓ да
CMA-ES средняя (непрер.) средняя да (популяция) плохо плохо да
Genetic Algorithms средняя–высокая низкая–средняя да ✓ да да да
PBT средняя высокая (reuse весов) да ✓ ограниченно ограниченно да (расписание)
Successive Halving высокая высокая ✓ средний (синхр.) да да да
Hyperband высокая ✓ высокая ✓ хороший да да да
ASHA высокая ✓ высокая массовый да да да
BOHB высокая ✓ высокая ✓ (BO+HB) хороший ✓ да ✓ да ✓ да
Gradient/hypergradient очень высокая (непрер.) высокая слабый нет нет частично

Anytime-свойство — способность выдать разумный «лучший на текущий момент» результат при остановке в любой момент (важно при ограниченном/непредсказуемом бюджете). Им обладают random search, BO и особенно multi-fidelity (Hyperband/ASHA/BOHB), тогда как grid search anytime-свойством не обладает.


Источники

  1. Bergstra J., Bengio Y. (2012). Random Search for Hyper-Parameter Optimization. JMLR 13:281305.
  2. Bergstra J., Bardenet R., Bengio Y., Kégl B. (2011). Algorithms for Hyper-Parameter Optimization. NeurIPS 24:25462554.
  3. Srinivas N., Krause A., Kakade S., Seeger M. (2010). Gaussian Process Optimization in the Bandit Setting: No Regret and Experimental Design. ICML.
  4. Lindauer M. et al. (2022). SMAC3: A Versatile Bayesian Optimization Package for HPO. JMLR 23(54):19.
  5. Jaderberg M. et al. (2017). Population Based Training of Neural Networks. arXiv:1711.09846.
  6. Li L., Jamieson K., DeSalvo G., Rostamizadeh A., Talwalkar A. (2018). Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization. arXiv:1603.06560.
  7. Li L. et al. (2020). A System for Massively Parallel Hyperparameter Tuning (ASHA). MLSys. arXiv:1810.05934.
  8. Falkner S., Klein A., Hutter F. (2018). BOHB: Robust and Efficient Hyperparameter Optimization at Scale. ICML. arXiv:1807.01774.
  9. Maclaurin D., Duvenaud D., Adams R.P. (2015). Gradient-based Hyperparameter Optimization through Reversible Learning. ICML. arXiv:1502.03492.
  10. Akiba T. et al. (2019). Optuna: A Next-generation Hyperparameter Optimization Framework. KDD. arXiv:1907.10902.
  11. Balandat M. et al. (2019). BoTorch / Ax: Bayesian Hyperparameter Optimization. arXiv:1912.05686.