Optimizarea hiperparametrilor cu Optuna

Deep Reinforcement Learning în Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Ce sunt hiperparametrii

 

 

  • Număr mare de hiperparametri în algoritmii DRL
  • Pot influența semnificativ performanța
  • Complexitatea căutării crește cu numărul de hiperparametri

 

Exemple
Rata de reducere
PPO: epsilon de tăiere, bonus de entropie
Experience replay: dimensiunea buffer-ului, dimensiunea batch-ului
Programul epsilon greedy cu scădere
Q-ținte fixe: $\tau$
Rata de învățare
Număr de straturi, noduri per strat...
Deep Reinforcement Learning în Python

Cum se aleg valorile hiperparametrilor

 

Obiectiv: recompense cumulative medii

Tehnici de căutare a hiperparametrilor:

  • Încercare și eroare manuală
  • Căutare pe grilă
  • Căutare aleatorie
  • Algoritmi dedicați

O mașinărie mecanică imensă cu zeci de butoane și cadrane

Deep Reinforcement Learning în Python

Logo-ul Optuna

 

Fluxul de lucru Optuna:

  • Definiți o funcție obiectiv
  • Instanțiați un study Optuna
  • Lăsați Optuna să itereze prin trial-uri

 

 

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 în Python

Specificarea funcției obiectiv

 

În funcția obiectiv:

  • Definiți hiperparametrii de interes
  • Definiți metrica (metricile) de optimizat

Flexibilitate completă în specificarea hiperparametrilor:

  • float
  • integer
  • categorial

 

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 în Python

Studiul Optuna

 

  • Utilizați sqlite pentru a salva studiul
  • Eșantionați n_trials cu samplerul implicit (TPE)
    • Alege hiperparametri aleatoriu inițial
    • Apoi se concentrează pe regiunile promițătoare
  • Dacă n_trials este omis: rulează până la întrerupere
  • Studiul poate fi încărcat ulterior din baza de date

 

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 în Python

Explorarea rezultatelor studiului

optuna.visualization.plot_param_importances(study)

Diagramă cu bare care arată importanța hiperparametrilor x și y; y este 0,71, iar x este 0,29.

optuna.visualization.plot_contour(study)

Grafic de contur cu câte un punct per trial. Punctele sunt concentrate în jurul x = 2, y = -3.

Deep Reinforcement Learning în Python

Să exersăm!

Deep Reinforcement Learning în Python

Preparing Video For Download...