Optuna ile hiperparametre optimizasyonu

Python ile Deep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

Hiperparametreler nedir

 

 

  • DRL algoritmalarında çok sayıda hiperparametre vardır
  • Performansı ciddi ölçüde etkileyebilir
  • Arama karmaşıklığı hiperparametre sayısıyla artar

 

Örnekler
İskonto oranı
PPO: kırpma epsilonu, entropi bonusu
Deney tekrar kullanımı: arabellek boyutu, yığın boyutu
Azalan epsilon açgözlülük zamanlaması
Sabit Q-hedefleri: $\tau$
Öğrenme oranı
Katman sayısı, katman başına düğüm...
Python ile Deep Reinforcement Learning

Hiperparametre değerleri nasıl seçilir

 

Amaç: ortalama kümülatif ödüller

Hiperparametre arama teknikleri:

  • Elle deneme-yanılma
  • Izgara arama
  • Rastgele arama
  • Özel algoritmalar

Düzinelerce düğme ve kadranı olan büyük bir mekanik makine

Python ile Deep Reinforcement Learning

Optuna logosu

 

Optuna iş akışı:

  • Bir amaç fonksiyonu tanımlayın
  • Bir Optuna study başlatın
  • Optuna'nın denemeleri yinelemesine izin verin

 

 

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}
Python ile Deep Reinforcement Learning

Amaç fonksiyonunu tanımlama

 

Amaç fonksiyonunda:

  • İlgili hiperparametreleri tanımlayın
  • Optimize edilecek metrik(leri) belirleyin

Hiperparametre tanımında tam esneklik sunar:

  • 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
Python ile Deep Reinforcement Learning

Optuna çalışması

 

  • Çalışmayı kaydetmek için sqlite kullanın
  • Varsayılan örnekleyici (TPE) ile n_trials örnekleyin
    • İlk başta hiperparametreleri rastgele seçer
    • Sonra daha umut vadeden bölgelere odaklanır
  • n_trials verilmezse: kesilene kadar çalışır
  • Çalışma daha sonra veritabanından yüklenebilir

 

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")
Python ile Deep Reinforcement Learning

Çalışma sonuçlarını inceleme

optuna.visualization.plot_param_importances(study)

x ve y için hiperparametre önemini gösteren çubuk grafik; y 0,71, x 0,29.

optuna.visualization.plot_contour(study)

Her deneme için bir nokta gösteren kontur grafiği. Noktalar x = 2, y = -3 çevresinde yoğunlaşmış.

Python ile Deep Reinforcement Learning

Hadi pratik yapalım!

Python ile Deep Reinforcement Learning

Preparing Video For Download...