Optymalizacja hiperparametrów z Optuna

Głębokie uczenie ze wzmocnieniem w Pythonie

Timothée Carayol

Principal Machine Learning Engineer, Komment

Czym są hiperparametry

 

 

  • Duża liczba hiperparametrów w algorytmach DRL
  • Mogą mieć duży wpływ na wydajność
  • Złożoność przeszukiwania rośnie z liczbą hiperparametrów

 

Przykłady
Współczynnik dyskontowania
PPO: epsilon przycinania, bonus entropii
Experience replay: rozmiar bufora, rozmiar wsadu
Harmonogram zanikającego epsilon-zachłannego
Fixed Q-targets: $\tau$
Współczynnik uczenia
Liczba warstw, węzłów na warstwę...
Głębokie uczenie ze wzmocnieniem w Pythonie

Jak dobierać wartości hiperparametrów

 

Cel: średnie skumulowane nagrody

Techniki przeszukiwania hiperparametrów:

  • Próby i błędy ręcznie
  • Przeszukiwanie siatki
  • Przeszukiwanie losowe
  • Dedykowane algorytmy

Ogromna mechaniczna maszyna z dziesiątkami pokręteł i tarcz

Głębokie uczenie ze wzmocnieniem w Pythonie

Logo Optuna

 

Przepływ pracy Optuna:

  • Zdefiniuj funkcję celu
  • Utwórz instancję study Optuna
  • Pozwól Optuna iterować po próbach

 

 

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}
Głębokie uczenie ze wzmocnieniem w Pythonie

Definiowanie funkcji celu

 

W funkcji celu:

  • Zdefiniuj interesujące hiperparametry
  • Zdefiniuj metrykę(-i) do optymalizacji

Pełna elastyczność w definiowaniu hiperparametrów:

  • zmiennoprzecinkowe
  • całkowitoliczbowe
  • kategoryczne

 

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
Głębokie uczenie ze wzmocnieniem w Pythonie

Studium Optuna

 

  • Zapis studium w sqlite
  • Próbkowanie n_trials prób domyślnym samplerem (TPE)
    • Początkowo losowy dobór hiperparametrów
    • Następnie skupienie na obiecujących obszarach
  • Brak n_trials: próby trwają do przerwania
  • Możliwość późniejszego wczytania studium z bazy

 

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")
Głębokie uczenie ze wzmocnieniem w Pythonie

Analiza wyników studium

optuna.visualization.plot_param_importances(study)

Wykres słupkowy pokazujący ważność hiperparametrów x i y; y wynosi 0,71, x wynosi 0,29.

optuna.visualization.plot_contour(study)

Wykres konturowy z jedną kropką na próbę. Kropki skupiają się wokół x = 2, y = -3.

Głębokie uczenie ze wzmocnieniem w Pythonie

Czas na ćwiczenia!

Głębokie uczenie ze wzmocnieniem w Pythonie

Preparing Video For Download...