Optimisation des hyperparamètres avec Optuna

Apprentissage par renforcement profond en Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Que sont les hyperparamètres

 

 

  • De nombreux hyperparamètres dans les algorithmes de DRL
  • Impact potentiellement fort sur les performances
  • La complexité de recherche croît avec le nombre d'hyperparamètres

 

Exemples
Taux d'actualisation
PPO : épsilon de clipping, bonus d'entropie
Experience replay : taille du buffer, taille de lot
Barème epsilon décroissant pour le greediness
Q-cibles fixes : $\tau$
Taux d'apprentissage
Nombre de couches, nœuds par couche...
Apprentissage par renforcement profond en Python

Comment choisir les valeurs d'hyperparamètres

 

Objectif : récompenses cumulées moyennes

Techniques de recherche d'hyperparamètres :

  • Essais-erreurs manuels
  • Recherche en grille
  • Recherche aléatoire
  • Algorithmes dédiés

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

Apprentissage par renforcement profond en Python

Le logo Optuna

 

Flux de travail Optuna :

  • Définir une fonction objectif
  • Instancier une study Optuna
  • Laisser Optuna itérer sur les 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}
Apprentissage par renforcement profond en Python

Définir la fonction objectif

 

Dans la fonction objectif :

  • Définir les hyperparamètres d'intérêt
  • Définir la(les) métrique(s) à optimiser

Offre une flexibilité totale pour spécifier les hyperparamètres :

  • flottant
  • entier
  • catégoriel

 

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

# Hyperparamètres x et y entre -10 et 10
x = trial.suggest_float('x', -10, 10) y = trial.suggest_float('y', -10, 10)
# Renvoyer la métrique à minimiser return (x - 2) ** 2 + 1.2 * (y + 3) ** 2
Apprentissage par renforcement profond en Python

L'étude Optuna

 

  • Utiliser sqlite pour enregistrer l'étude
  • Échantillonner n_trials avec l'échantillonneur par défaut (TPE)
    • Choisit d'abord des hyperparamètres au hasard
    • Puis se concentre sur les zones 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")
Apprentissage par renforcement profond en Python

Explorer les résultats de l'étude

optuna.visualization.plot_param_importances(study)

Un histogramme montrant l'importance des hyperparamètres pour x et y ; y est à 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.

Apprentissage par renforcement profond en Python

Passons à la pratique !

Apprentissage par renforcement profond en Python

Preparing Video For Download...