Глубокое погружение в расширенные возможности Optuna

В нашей предыдущей статье об Optuna мы рассмотрели основы и привели практический пример. На этот раз мы углубимся в детали Оптуны. Мы изучим его мощные алгоритмы оптимизации, которые помогают выбирать гиперпараметры, его разумный подход к исключению менее многообещающих испытаний и его возможности визуализации.

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



Содержание

Следующие разделы будут охватывать следующие темы об Optuna:

  1. Стратегии, которые Optuna использует для сужения пространства поиска
  2. Сэмплеры Optuna + образцы кода
  3. Секаторы Optuna + примеры кода
  4. Визуальная информация, предлагаемая Optuna

Стратегии, которые Optuna использует для сужения пространства поиска

Предыдущие стратегии поиска, такие как поиск по сетке и случайный поиск, не учитывали прошлые результаты, что приводило к исчерпывающему процессу. Если вы хотите узнать больше о сетке и случайном поиске, посмотрите (хотя изучать это необязательно 🤗). Optuna использует две стратегии, а именно выборку и сокращение, для решения проблемы поиска гиперпараметров.

ℹ | Optuna также предоставляет в своих сэмплерах сеточный и случайный поиск.

Выборка

По своей сути Samplers решают вопрос о том, где искать. Представьте, что вы находитесь в незнакомом городе и вам очень хочется пончиков.

Как бы вы подошли к поиску лучшего места? У вас есть два варианта: случайный или сеточный, как исследование, или подход, аналогичный подходу Оптуны. Сетка или случайное исследование потенциально могут привести к наихудшему сценарию, когда лучший вариант окажется последним, с которым вы столкнетесь. Напротив, подход Optuna — это все равно, что обращаться к Интернету, чтобы определить самые популярные места с пончиками в городе. . Такой целенаправленный подход увеличивает шансы найти отличное место.

Поиск в Интернете создаст предварительное убеждение, прежде чем отправиться в какое-либо место. Напротив, помните, что при сеточном или случайном поиске не хватает памяти о ранее встречавшихся результатах. Такой подход к пространству поиска называется байесовским подходом. В этом его сравнение со случайным поиском.

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

TPE (Оценщик Парцена с древовидной структурой) служит пробоотборником Optuna по умолчанию и использует алгоритм байесовской оптимизации. Этот подход начинается с первоначального убеждения и требует определенной метрики для оптимизации, например RMSE.

import optuna
#By default, optuna sampler is TPE
study = optuna.create_study()
print(f"Sampler is {study.sampler.__class__.__name__}")
#Out : Sampler is TPE

Optuna предлагает простой метод перехода между различными сэмплерами. Давайте пройдемся по процессу.

study = optuna.create_study(sampler=optuna.samplers.RandomSampler()) # Random Sampler
study = optuna.create_study(sampler=optuna.samplers.CmaEsSampler()) # Based on Evolutionary algorithm

Несмотря на то, что существует множество сэмплеров, вот удобная шпаргалка, которая поможет вам выбрать правильный.

Секаторы

Секаторы выполняют автоматическую раннюю остановку, останавливая бесперспективные попытки на начальных этапах обучения.

Как и в случае с сэмплерами, существует множество секаторов, таких как медианный секатор,секатор последовательного разделения пополам,секатор гиперполосыи многие другие. Согласно документации op optuna, медианный секатор уступает секатору последовательного деления пополам (SHA) и секатору Hyper-band.

На фундаментальном уровне SHA работает с набором конфигураций (количество пар гиперпараметров, которые нужно попробовать) и фиксированным бюджетом (эпохами). Основная идея последовательного сокращения пополам по-прежнему сосредоточена на устранении конфигураций, демонстрирующих некачественную производительность. На каждой итерации количество конфигураций уменьшается вдвое, а бюджет, выделяемый каждой конфигурации, одновременно увеличивается на η.

Для более глубокого понимания алгоритма последовательного халвинга и Hyper Band рекомендую посмотреть это видео от AIxplained.

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

def objective(trial):
    iris =sklearn.datasets.load_iris() #Loading dataset
    classes = list(set(iris.target))
    train_x, valid_x, train_y, valid_y =sklearn.model_selection.train_test_split(
        iris.data, iris.target, test_size=0.25, random_state=0
    ) # Dataset splitting

    alpha = trial.suggest_float("alpha", 1e-5, 1e-1, log=True) #defining space for hyperparameter
    clf =sklearn.linear_model.SGDClassifier(alpha=alpha) # Classifer

    for stepin range(100):
        clf.partial_fit(train_x, train_y, classes=classes)
#============================================================================
# Report intermediate objective value.intermediate_value = 1.0 - clf.score(valid_x, valid_y)
        trial.report(intermediate_value, step)

# Handle pruning based on the intermediate value.
    if trial.should_prune():
       raise optuna.TrialPruned()

#============================================================================
return 1.0 - clf.score(valid_x, valid_y)

Функция report() служит для периодического отслеживания промежуточных целевых значений, а should_prune() определяет, когда завершать испытание, которое не соответствует заранее определенному условию.

Теперь мы определяем правило остановки следующим образом:

#You can experiment with SuccessiveHalvingPruner & HyperbandPruner
study = optuna.create_study(pruner=optuna.pruners.MedianPruner())
study.optimize(objective, n_trials=20)

Визуальная информация, предлагаемая Optuna

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

История оптимизации

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

optuna.visualization.plot_optimization_history(study)

Как мы видим, поиск концентрируется вокруг оптимальных значений, а не областей, где они неоптимальны.

Кусочек

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

optuna.visualization.plot_slice(study)

Как мы видим, поиск по триалам alexnet исчез из-за обрезки.

График параллельных координат

График ниже позволяет нам наблюдать корреляцию между каждым гиперпараметром и целевой функцией.

optuna.visualization.plot_parallel_coordinate(study)

График промежуточных значений

График промежуточных значений предоставляет обзор всех испытаний. На этой визуализации мы можем наблюдать, что оранжевая и желтая линии не расширяются к концу из-за обрезки, что указывает на отсутствие их вклада в окончательные результаты.

optuna.visualization.plot_intermediate_values(study)

Важные параметры

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

optuna.visualization.plot_param_importances(study)

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

optuna.visualization.plot_param_importances(
  study, 
  target=lambda t: t.duration.total_seconds(), # custom function
 target_name="duration"
)

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

Хорошо! Итак, мы закончили с великолепием optuna 🪄. Теперь страх перед гиперпараметром не должен вас пугать. Продолжайте учиться и проверяйте эти источники для дальнейшего изучения.

Рекомендации









Сообщение от AI Mind

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь: