Optuna ile hiper parametreleri iyileştirme

Tamamlandı

Optuna, hiper parametre iyileştirmesi için açık kaynak bir Python kitaplığıdır. Optuna, verimli ve esnek hiper parametre ayarlaması için yaygın olarak kullanılır. Modeli eğitirken kullanmak için şu adımları izleyin:

  1. Modeli eğitmek ve değerlendirmek için bir hedef işlev tanımlayın.
  2. İyileştirme sürecini yönetmek için bir Optuna çalışması oluşturun.
  3. En iyi hiper parametreleri aramak için Optuna iyileştirmesini çalıştırın.

Nesnel işlev tanımlama

Optuna, simge durumuna küçültülecek sayısal bir değer döndüren bir nesnel işlevi yinelemeli olarak çağırarak çalışır; bu iyileştirme hedefidir. Model eğitim ve değerlendirme mantığınızı şu işlevlerde kapsüllemeniz gerekir:

  • Hiper parametre değerleri önermek için kullanılan bir parametreyi (genellikle bir trial nesne) kabul eder.
  • Önerilen hiper parametre değerlerini kullanarak modeli eğiter.
  • Modeli tahmine dayalı performans için hedef ölçüme göre değerlendirir.
  • Performans ölçümünü yansıtan sayısal bir değer döndürür, böylece model performansının artırılması dönüş değerini düşürür .

Örneğin aşağıdaki işlev, Spark MLlib kitaplığındaki LogisticRegression algoritmasını kullanarak optuna tarafından önerilen hiper parametrelerle bir makine öğrenmesi modelini eğitmektedir:

def objective(trial):
  from pyspark.ml.classification import LogisticRegression
  from pyspark.ml.evaluation import MulticlassClassificationEvaluator

  data_df = get_training_data()  # This is just an example!
  splits = data_df.randomSplit([0.7, 0.3])
  training_df = splits[0]
  validation_df = splits[1]

  # Suggest hyperparameters using Optuna's trial object
  max_iter = trial.suggest_int('Iterations', 1, 10)
  reg_param = trial.suggest_float('Regularization', 0.0, 1.0)

  # Train a model using the suggested hyperparameters
  lr = LogisticRegression(labelCol="label", featuresCol="features",
              maxIter=max_iter,
              regParam=reg_param)
  model = lr.fit(training_df)

  # Evaluate the model
  predictions = model.transform(validation_df)
  eval = MulticlassClassificationEvaluator(labelCol="label",
                       predictionCol="prediction",
                       metricName="accuracy")
  accuracy = eval.evaluate(predictions)

  # Optuna minimizes the objective, so return negative accuracy
  return -accuracy

Bu örnekte deneme parametresi , Yinelemeler ve Normalleştirme hiper parametreleri için değer önermek için kullanılan bir Optuna nesnesidir. Bu değerler lojistik regresyon algoritmasının maxIter ve regParam parametrelerine atanır. İşlev, eğitilen modelin doğruluğunu değerlendirir ve negatif değerini döndürür, böylece Optuna döndürülen değeri en aza indirerek doğruluğu en üst düzeye çıkarır.

Hiper parametre arama alanını tanımlama

Amaç işlevi her çağrıldığında, denenecek hiper parametre değerlerini içeren bir parametre gerektirir. Farklı değer birleşimlerini keşfetmek için, her deneme sırasında Optuna'nın örneklemesi için bir arama alanı tanımlamanız gerekir.

Optuna, nesne üzerinde trial her hiper parametre için değerler önermek için aşağıdakiler dahil olmak üzere yöntemler sağlar:

  • trial.suggest_int(name, low, high): ile high (dahil) arasında low bir tamsayı değeri önerir.
  • trial.suggest_float(name, low, high): ile higharasında low kayan nokta değeri önerir.
  • trial.suggest_categorical(name, choices): Kategorik seçenekler listesinden bir değer önerir.

Tavsiye

Öneri yöntemlerinin tam listesi için Optuna belgelerine bakın.

Önceki örnekte arama alanı, nesnesi kullanılarak doğrudan işlevde objectivetrial tanımlanmıştır:

def objective(trial):
  max_iter = trial.suggest_int('Iterations', 1, 10)
  reg_param = trial.suggest_float('Regularization', 0.0, 1.0)
  # ... rest of the function ...

Bu yaklaşım, Optuna'nın her deneme için hiper parametre değerlerini dinamik olarak örneklemesini sağlayarak arama alanını esnek ve değiştirilmesini kolaylaştırır.

Arama algoritmasını belirtme

Optuna, arama alanından hiper parametre değerlerini seçmek ve hedef işlevi iyileştirmek için bir örnekleyici kullanır. En sık kullanılan örnekleyici, önceki sonuçlara göre uyarlamalı olarak yeni hiper parametre ayarlarını seçen Bayes iyileştirme algoritması olan Ağaç yapılandırılmış Parzen Estimator'dır (TPE).

Optuna çalışması oluştururken örnekleyiciyi belirtebilirsiniz. Örneğin, TPE örnekleyicisini kullanmak için:

import optuna

sampler = optuna.samplers.TPESampler()
study = optuna.create_study(direction="minimize", sampler=sampler)

Optuna, rastgele arama optuna.samplers.RandomSamplergibi diğer örnekleyicileri de destekler. Çoğu kullanım örneğinde varsayılan TPE örnekleyicisi önerilir.

Optuna iyileştirmesini çalıştırma

Son olarak, iyileştirmeyi yürütmek için, arama algoritmasına göre arama alanından hiper parametre birleşimlerini kullanarak sürekli olarak hedef işlevi çağıran study.optimize yöntemini kullanın. Amaç, amaç işlevi tarafından döndürülen değeri en aza indirmektir (ve bu nedenle modelin performansını iyileştirmek).

Aşağıdaki örnek kod, daha önce tanımlanan amaç işlevini çağırmak için study.optimize yöntemini kullanır. Çalışma, bulunan en iyi performansa sahip parametre değeri bileşimini döndürmeden önce işlev en fazla 100 kez değerlendirilir.

study.optimize(objective, n_trials=100)

print("Best param values: ", study.best_params)

Önceki koddan elde edilen çıkış aşağıdaki örneğe benzer.

Best param values:  {'Iterations': 6, 'Regularization': 0.5461699702338606}