Hyperparameteroptimalisatie met Optuna

Deep Reinforcement Learning in Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Wat zijn hyperparameters

 

 

  • Veel hyperparameters in DRL-algoritmes
  • Kunnen grote impact op performance hebben
  • Zoekcomplexiteit groeit met het aantal hyperparameters

 

Voorbeelden
Discontovoet
PPO: clipping-epsilon, entropiebonus
Experience replay: buffergrootte, batchgrootte
Afbouwschema epsilon-greediness
Fixed Q-targets: $\tau$
Learning rate
Aantal lagen, nodes per laag...
Deep Reinforcement Learning in Python

Hoe kies je hyperparametervaarden

 

Doel: gemiddelde cumulatieve beloningen

Technieken voor hyperparameterzoektocht:

  • Handmatig trial-and-error
  • Grid search
  • Random search
  • Specifieke algoritmes

Een enorme machine met tientallen knoppen en wijzerplaten

Deep Reinforcement Learning in Python

Het Optuna-logo

 

Optuna-werkwijze:

  • Definieer een doelfunctie
  • Maak een Optuna study aan
  • Laat Optuna over trials itereren

 

 

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 in Python

De doelfunctie specificeren

 

In de doelfunctie:

  • Definieer de hyperparameters van interesse
  • Definieer de te optimaliseren metriek(en)

Volledige flexibiliteit voor hyperparameters:

  • float
  • integer
  • categorisch

 

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

# Hyperparameters x en y tussen -10 en 10
x = trial.suggest_float('x', -10, 10) y = trial.suggest_float('y', -10, 10)
# Retourneer de te minimaliseren metriek return (x - 2) ** 2 + 1.2 * (y + 3) ** 2
Deep Reinforcement Learning in Python

De Optuna-studie

 

  • Gebruik sqlite om de studie op te slaan
  • Neem n_trials met de standaard sampler (TPE)
    • Kiest eerst willekeurige hyperparameters
    • Richt zich daarna op veelbelovende regio’s
  • Als n_trials ontbreekt: draait door tot je stopt
  • Studie later uit database laden kan

 

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 in Python

De studieresultaten verkennen

optuna.visualization.plot_param_importances(study)

Een staafdiagram met hyperparameterbelang voor x en y; y is 0,71 en x 0,29.

optuna.visualization.plot_contour(study)

Een contourplot met één punt per trial. Punten clusteren rond x = 2, y = -3.

Deep Reinforcement Learning in Python

Laten we oefenen!

Deep Reinforcement Learning in Python

Preparing Video For Download...