Optimisation des hyperparamètres avec Optuna

Deep Reinforcement Learning en Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Qu'est-ce qu'un hyperparamètre

 

 

  • Grand nombre d'hyperparamètres en DRL
  • Peut fortement influer sur la performance
  • La complexité de recherche croît avec le nombre d'hyperparamètres

 

Exemples
Taux d'actualisation
PPO : epsilon de rognage, prime d'entropie
Relecture d'expériences : taille du tampon, taille de lot
Barème d'epsilon glouton décroissant
Cibles Q fixes : $\tau$
Taux d'apprentissage
Nombre de couches, nœuds par couche...
Deep Reinforcement Learning en Python

Comment choisir les valeurs d'hyperparamètres

 

Objectif : récompenses cumulées moyennes

Techniques de recherche d'hyperparamètres :

  • Essais-erreurs à la main
  • Recherche en grille
  • Recherche aléatoire
  • Algorithmes dédiés

Une énorme machine mécanique avec des dizaines de boutons et de cadrans

Deep Reinforcement Learning en Python

Le logo d'Optuna

 

Flux de travail Optuna :

  • Définir une fonction objectif
  • Instancier une study Optuna
  • Laisser Optuna itérer sur des essais

 

 

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

Spécifier la fonction objectif

 

Dans la fonction objectif :

  • Définir les hyperparamètres d'intérêt
  • Définir la ou les mesures à optimiser

Souplesse totale pour la spécification :

  • float
  • integer
  • categorical

 

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

La étude Optuna

 

  • Utiliser sqlite pour enregistrer la étude
  • Échantillonner n_trials avec l'échantillonneur par défaut (TPE)
    • Choisit d'abord des hyperparamètres au hasard
    • Puis se concentre sur les régions prometteuses
  • Si n_trials est omis : exécute jusqu'à interruption
  • Possibilité de recharger l'étude depuis la base plus tard

 

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

Explorer les résultats de l'étude

optuna.visualization.plot_param_importances(study)

Un diagramme à barres montrant l'importance des hyperparamètres pour x et y ; y à 0,71 et x à 0,29.

optuna.visualization.plot_contour(study)

Une carte de contours montrant un point par essai. Les points se concentrent autour de x = 2, y = -3.

Deep Reinforcement Learning en Python

Passons à la pratique !

Deep Reinforcement Learning en Python

Preparing Video For Download...