Optimalizace hyperparametrů pomocí Optuna

Deep Reinforcement Learning v Pythonu

Timothée Carayol

Principal Machine Learning Engineer, Komment

Co jsou hyperparametry

 

 

  • DRL algoritmy mají velké množství hyperparametrů
  • Mohou mít zásadní vliv na výkon
  • Složitost prohledávání roste s počtem hyperparametrů

 

Příklady
Diskontní faktor
PPO: clipping epsilon, entropický bonus
Experience replay: velikost bufferu, batch size
Rozvrh klesajícího epsilon-greedy
Fixní Q-targety: $\tau$
Rychlost učení
Počet vrstev, uzlů na vrstvu...
Deep Reinforcement Learning v Pythonu

Jak zvolit hodnoty hyperparametrů

 

Cíl: průměrné kumulativní odměny

Metody prohledávání hyperparametrů:

  • Ruční pokus a omyl
  • Prohledávání mřížky
  • Náhodné prohledávání
  • Specializované algoritmy

Obří mechanický stroj s desítkami knoflíků a ciferníků

Deep Reinforcement Learning v Pythonu

Logo Optuna

 

Pracovní postup Optuna:

  • Definujte účelovou funkci
  • Vytvořte instanci study
  • Nechte Optuna iterovat přes pokusy

 

 

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}
Deep Reinforcement Learning v Pythonu

Definice účelové funkce

 

V účelové funkci:

  • Definujte sledované hyperparametry
  • Definujte metriku(y) k optimalizaci

Plná flexibilita při specifikaci hyperparametrů:

  • float
  • integer
  • kategorické

 

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
Deep Reinforcement Learning v Pythonu

Studie Optuna

 

  • Uložení studie pomocí sqlite
  • Vzorkování n_trials výchozím samplerem (TPE)
    • Zpočátku vybírá hyperparametry náhodně
    • Postupně se zaměřuje na perspektivní oblasti
  • Bez n_trials: běží až do přerušení
  • Studii lze později načíst z databáze

 

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")
Deep Reinforcement Learning v Pythonu

Prozkoumání výsledků studie

optuna.visualization.plot_param_importances(study)

Sloupcový graf zobrazující důležitost hyperparametrů x a y; y je 0,71, x je 0,29.

optuna.visualization.plot_contour(study)

Konturový graf s jedním bodem na pokus. Body jsou soustředěny kolem x = 2, y = -3.

Deep Reinforcement Learning v Pythonu

Lass uns üben!

Deep Reinforcement Learning v Pythonu

Preparing Video For Download...