Оптимізація гіперпараметрів з Optuna

Глибоке навчання з підкріпленням у Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Що таке гіперпараметри

 

 

  • Багато гіперпараметрів в алгоритмах DRL
  • Вони суттєво впливають на продуктивність
  • Складність пошуку зростає з кількістю гіперпараметрів

 

Приклади
Коефіцієнт дисконтування
PPO: clipping epsilon, бонус ентропії
Experience replay: розмір буфера, розмір пакета
Розклад спадання epsilon-жадібності
Фіксовані Q-цілі: $\tau$
Швидкість навчання
Кількість шарів, вузлів на шар...
Глибоке навчання з підкріпленням у Python

Як обрати значення гіперпараметрів

 

Мета: середня сумарна винагорода

Техніки пошуку гіперпараметрів:

  • Спроби й помилки вручну
  • Перебір за сіткою (grid search)
  • Випадковий пошук
  • Спеціальні алгоритми

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

Глибоке навчання з підкріпленням у Python

Логотип Optuna

 

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

  • Визначте цільову функцію
  • Створіть study Optuna
  • Дозвольте 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

Визначення цільової функції

 

У цільовій функції:

  • Визначте потрібні гіперпараметри
  • Визначте метрику(и) для оптимізації

Повна гнучкість у визначенні гіперпараметрів:

  • float
  • integer
  • categorical

 

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

# Гіперпараметри x і y між -10 та 10
x = trial.suggest_float('x', -10, 10) y = trial.suggest_float('y', -10, 10)
# Повернути метрику для мінімізації 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...