Оптимизация гиперпараметров с помощью Optuna

Глубокое обучение с подкреплением на Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Что такое гиперпараметры

 

 

  • Большое количество гиперпараметров в алгоритмах DRL
  • Могут существенно влиять на производительность
  • Сложность поиска растёт с числом гиперпараметров

 

Примеры
Коэффициент дисконтирования
PPO: эпсилон отсечения, бонус за энтропию
Повторное использование опыта: размер буфера, размер батча
Расписание убывания ε-жадности
Фиксированные Q-цели: $\tau$
Скорость обучения
Количество слоёв, узлов в слое...
Глубокое обучение с подкреплением на Python

Как выбирать значения гиперпараметров

 

Цель: средние накопленные вознаграждения

Методы поиска гиперпараметров:

  • Подбор вручную методом проб и ошибок
  • Поиск по сетке
  • Случайный поиск
  • Специализированные алгоритмы

Огромная механическая машина с десятками ручек и циферблатов

Глубокое обучение с подкреплением на Python

Логотип Optuna

 

Рабочий процесс Optuna:

  • Определить целевую функцию
  • Создать объект study в Optuna
  • Запустить перебор испытаний

 

 

import optuna

def objective(trial): ...
study = optuna.create_study()
study.optimize(objective, n_trials=100)
study.best_params
{'learning_rate': 0.001292481, 'batch_size': 8}
Глубокое обучение с подкреплением на Python

Задание целевой функции

 

В целевой функции:

  • Определить оптимизируемые гиперпараметры
  • Определить метрику(и) для оптимизации

Полная гибкость при задании гиперпараметров:

  • вещественное число
  • целое число
  • категориальное

 

def objective(trial: optuna.trial.Trial):

# Hyperparameters x and y between -10 and 10
x = trial.suggest_float('x', -10, 10) y = trial.suggest_float('y', -10, 10)
# Return the metric to minimize return (x - 2) ** 2 + 1.2 * (y + 3) ** 2
Глубокое обучение с подкреплением на Python

Исследование в Optuna

 

  • Использование sqlite для сохранения исследования
  • Выборка n_trials испытаний стандартным сэмплером (TPE)
    • Поначалу выбирает гиперпараметры случайно
    • Затем сосредотачивается на перспективных областях
  • Если n_trials не указан: испытания выполняются до прерывания
  • Исследование можно загрузить из базы данных позднее

 

import sqlite
study = optuna.create_study(
                 storage="sqlite:///DRL.db",
                 study_name="my_study")

study.optimize(objective, n_trials=100)
loaded_study = optuna.load_study(
                        study_name="my_study", 
                        storage="sqlite:///DRL.db")
Глубокое обучение с подкреплением на Python

Анализ результатов исследования

optuna.visualization.plot_param_importances(study)

Столбчатая диаграмма, показывающая важность гиперпараметров x и y: y — 0,71, x — 0,29.

optuna.visualization.plot_contour(study)

Контурный график с одной точкой на испытание. Точки сосредоточены около x = 2, y = -3.

Глубокое обучение с подкреплением на Python

Давайте потренируемся!

Глубокое обучение с подкреплением на Python

Preparing Video For Download...