Optimasi hyperparameter dengan Optuna

Deep Reinforcement Learning dengan Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Apa itu hyperparameter

 

 

  • Banyak hyperparameter pada algoritme DRL
  • Dapat sangat memengaruhi kinerja
  • Kompleksitas pencarian tumbuh seiring jumlah hyperparameter

 

Contoh
Discount rate
PPO: clipping epsilon, entropy bonus
Experience replay: ukuran buffer, ukuran batch
Jadwal epsilon-greedy yang menurun
Fixed Q-targets: $\tau$
Learning rate
Jumlah layer, node per layer...
Deep Reinforcement Learning dengan Python

Cara memilih nilai hyperparameter

 

Objektif: rata-rata reward kumulatif

Teknik pencarian hyperparameter:

  • Coba-coba manual
  • Grid search
  • Random search
  • Algoritme khusus

Mesin mekanis besar dengan banyak kenop dan dial

Deep Reinforcement Learning dengan Python

Logo Optuna

 

Alur kerja Optuna:

  • Definisikan fungsi objektif
  • Buat study Optuna
  • Biarkan Optuna menjalankan trials

 

 

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

Menentukan fungsi objektif

 

Dalam fungsi objektif:

  • Tentukan hyperparameter yang dicari
  • Tentukan metrik untuk dioptimalkan

Fleksibel penuh untuk spesifikasi hyperparameter:

  • float
  • integer
  • kategorikal

 

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

# Hyperparameters x dan y antara -10 dan 10
x = trial.suggest_float('x', -10, 10) y = trial.suggest_float('y', -10, 10)
# Kembalikan metrik yang akan diminimalkan return (x - 2) ** 2 + 1.2 * (y + 3) ** 2
Deep Reinforcement Learning dengan Python

Study di Optuna

 

  • Gunakan sqlite untuk menyimpan study
  • Sampling n_trials dengan sampler default (TPE)
    • Awalnya acak
    • Lalu fokus ke area yang menjanjikan
  • Jika n_trials tidak diisi: jalan terus hingga dihentikan
  • Study dapat dimuat kembali dari database

 

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

Menjelajahi hasil study

optuna.visualization.plot_param_importances(study)

Bagan batang yang menampilkan pentingnya hyperparameter untuk x dan y; y di 0,71 dan x di 0,29.

optuna.visualization.plot_contour(study)

Plot kontur dengan satu titik per percobaan. Titik berkumpul di sekitar x = 2, y = -3.

Deep Reinforcement Learning dengan Python

Ayo berlatih!

Deep Reinforcement Learning dengan Python

Preparing Video For Download...