Kurs
Makine öğrenimi modellerinin performansını önemli ölçüde etkileyen hiperparametreleri vardır. Bu parametreler, bir keki pişirmek için doğru sıcaklık veya bir krebi çevirmek için doğru açı olarak düşünülebilir. Pekiştirmeli öğrenmede hiperparametreler, politika ve ödül yaklaşımlarını etkiler ve daha iyi ayarlamalarla hiperparametre optimizasyonu sonuçları dramatik biçimde iyileştirebilir.
Bu yazıda, hiperparametreleri optimize etmek için güçlü bir açık kaynak çerçevesi olan Optuna'yı inceleyeceğiz. Konuya yeniyseniz, kod yazmadan bir giriş sunan Makine Öğrenimini Anlamak ile başlamayı düşünebilirsiniz. Python kullanarak pratik yapmak için scikit-learn kullanan Python ile Makine Öğreniminin Temelleri kursumuzu deneyin. Ardından, MLOps Kavramları yerel not defterlerinden üretim ortamlarına geçişi nasıl yapacağınızı anlamanıza yardımcı olacaktır. Son olarak, bu makale için oldukça ilgili olan Python'da Makine Öğrenimi için Ön İşleme kursunu deneyin; çünkü bu kurs, verinizi makine öğrenimi modelleri için temizlemeyi ve hazırlamayı öğretir.
Optuna nedir?
Optuna, hiperparametre aramasını otomatikleştirmek için bir hiperparametre optimizasyon çerçevesi sunan açık kaynaklı bir araçtır. Her türlü makine öğrenimi veya derin öğrenme çerçevesiyle kullanılabilir. Optuna’nın bazı temel yetenekleri şunlardır:
- Görevler Arasında Kolay Paralelleştirme ve Ölçekleme: Hesaplama talepleri arttıkça, Optuna dağıtık eğitimi kullanma esnekliği sunar ve Kubernetes veya Dask gibi bulut arka uçlarına bağlanmanıza da olanak tanır.
- En Uygun Hiperparametreler için Otomatik Arama: Her hiperparametre için bir aralık belirlediğinizde Optuna en iyi kombinasyonları arar.
- Örnekleme ve Budama için Güncel Algoritmalar: Optuna, istatistiksel testler kullanan Median Pruner ve WilcoxonPruner gibi son teknoloji algoritmalara sahiptir.
- Kullanım Kolaylığı: Optuna kullanımı kolaydır ve uygulamak için 5-6 satır kod yeterlidir!
- Optuna Dashboard: Optuna artık tüm deneylerinizin sonuçlarını saklamanıza ve analiz etmenize olanak tanıyan bir Dashboard sunuyor.
- Optuna Hub. Katkıda bulunanlar tarafından oluşturulan özellikleri paylaşmanıza ve kullanmanıza olanak tanır.
Pekiştirmeli Öğrenme (RL) nedir?

En uygun yolu bulmak. Kaynak: Yazarın görseli
Pekiştirmeli öğrenme (RL), makine öğrenimi ile optimal kontrolü birleştirir. Akıllı bir ajanın dinamik bir ortamda kümülatif ödülünü en üst düzeye çıkarmak için nasıl hareket etmesi gerektiğiyle ilgilenir. Basitçe söylemek gerekirse, pekiştirmeli öğrenme bir ajana, bir ortamda ödüllerini maksimize eden en optimal kararları almayı öğretmekle ilgilidir. Ajanın attığı her adım için ödül, hedefe yaklaştıkça pozitif veya negatif olabilir.
Makine öğreniminden farklı olarak, pekiştirmeli öğrenme algoritmaları hedeflerimize ulaşmak için kullandığımız deneme-yanılma öğrenme sürecine benzer şekilde, en optimal sonuçları elde etmek için kararlar verir. Derin pekiştirmeli öğrenme ise karmaşık fonksiyonları yaklaştırmak için derin sinir ağlarını kullanmasıyla ayrışır. Ayrıca, klasik pekiştirmeli öğrenmenin daha belirleyici (deterministik) yaklaşımlara odaklandığını, derin pekiştirmeli öğrenmenin ise stokastik yaklaşımlar kullandığını söyleyebiliriz.
Pekiştirmeli Öğrenme Modelinizde Optuna Kullanımı
Bir ortamda hedefe ulaşmak için birçok rota olabilir. Gözetimli öğrenmeyle karşılaştırıldığında, derin pekiştirmeli öğrenmenin öğrenme oranı, gamma, adım sayısı gibi hiperparametrelerin seçimine çok daha duyarlı olduğunu unutmayın.
Kötü hiperparametre seçimleri zayıf/kararsız yakınsamaya yol açabilir. Bu zorluk, ağ ağırlıklarını ve ortamı başlatmak için kullanılan rastgele tohumlar arasındaki performans değişkenliğiyle daha da artar.
Bu bölümde, Optuna ve ilgili bağımlılıkların kurulumu, arama uzayının tanımlanması ve MountainCarContinuous-v0 algoritması için optimizasyonun çalıştırılması sürecini adım adım inceleyeceğiz. MountainCarContinuous-v0, ajanları değerlendirmek ve sonuçları çizmek için betikler sunan bir eğitim çerçevesi olan RL-Zoo içindeki RL algoritmalarından biridir. MountainCarContinous-v0 algoritması, ajanın (bir araba) hedefine (bayrağa ulaşmak) çalıştığı bir ortamı modeller.

Ayarlanmış MountainCarContinuous-v0 algoritmasının temsili. Yazarın görseli.
Optuna ile nasıl başlanır
Başlamak için şunlara ihtiyacınız var:
- Modele bağlı yapılandırmanızı ayarlayın.
- Hiperparametrelerinizi tanımlayın ve her biri için değer aralıkları önerin.
- Optimize etmek istediğiniz model veya fonksiyonu içeren hedef fonksiyonunuzu tanımlayın. Ayrıca periyodik değerlendirmeleri döndürecek bir CallBack de tanımlamalısınız.
- Bir Optuna çalışması (study) oluşturun ve belirli sayıda deneme için optimize edilmiş fonksiyonu çalıştırın.
Optuna ve StableBaseline 3'ün kurulumu
Yeni bir sanal ortam oluşturduktan sonra paketlerimizi kuruyoruz. Not olarak, Optuna Python 3.7 veya daha yenisini destekler. Bir sanal ortam kurulumunu gözden geçirmek isterseniz, Python'da Sanal Ortam eğitimimizi okuyun.
pip install optunapip install stable-baselines3pip install sb3-contribGerekli paketleri içe aktarın
Ajanın eylemleri gerçekleştireceği ortamı oluşturmak için gym paketini kullanacağız.
from stable_baselines3.common.env_util import make_vec_envfrom stable_baselines3 import A2Cimport gymimport optunafrom optuna.pruners import MedianPrunerfrom optuna.samplers import TPESamplerfrom optuna.visualization import plot_optimization_history, plot_param_importancesfrom typing import Any, Dictimport torchimport torch.nn as nnprint(optuna.__version__)Bu projede Advantage Actor-Critic (A2C) içinden MountainCarContinuous-v0 algoritmasını kullanacağız. Advantage Actor-Critic (A2C) — Aktör-Kritik algoritmalarından biri — değer tabanlı (alınan bir eylemin ödülünü ölçen) ve politika tabanlı (ajanın eylemlerini kontrol eden) yöntemleri birleştiren hibrit bir mimaridir ve varyansı azaltarak eğitimi stabilize etmeye yardımcı olur.
Hiperparametreleri tanımlayın
Bu görevde kullanılacak yapılandırmaları belirleyelim.
N_TRIALS = 100 # Maximum number of trialsN_JOBS = 1 # Number of jobs to run in parallelN_STARTUP_TRIALS = 5 # Stop random sampling after N_STARTUP_TRIALSN_EVALUATIONS = 2 # Number of evaluations during the trainingN_TIMESTEPS = 100000 # Training budgetEVAL_FREQ = int(N_TIMESTEPS / N_EVALUATIONS)N_EVAL_ENVS = 5N_EVAL_EPISODES = 10TIMEOUT = int(60 * 15) # 15 minutesENV_ID = "MountainCarContinuous-v0"DEFAULT_HYPERPARAMS = { "policy": "MlpPolicy", "env": ENV_ID,}Hiperparametreler için bir değer aralığı önereceğiz.
def a2c_hyper_params(trial: optuna.Trial) -> dict: """Sample A2C hyperparameters for Optuna trial.""" return { "learning_rate": trial.suggest_float("learning_rate", 1e-5, 1e-2), "gamma": trial.suggest_float("gamma", 0.9, 0.9999), "n_steps": trial.suggest_int("n_steps", 5, 2048), "ent_coef": trial.suggest_float("ent_coef", 1e-8, 1e-2), "vf_coef": trial.suggest_float("vf_coef", 0.1, 1.0), "max_grad_norm": trial.suggest_float("max_grad_norm", 0.3, 10) }Hedef fonksiyonunu tanımlayın
Optimizasyon görevlerinin periyodik değerlendirme sonuçlarını döndürmek istediğimiz için bir CallBack fonksiyonu olan TrialEvalCallback() tanımlanmıştır. Geri çağırma (callback) uygulaması için Google Colab not defterine bakın.
def objective(trial: optuna.Trial) -> float: """ This will be used by Optuna to evaluate one set of hyperparameters at a time.Given a trial object, it will sample hyperparameters, evaluate it and report the result. :param trial: Optuna trial object :return: Mean episodic reward after training """ kwargs = DEFAULT_HYPERPARAMS.copy() # 1. Sample hyperparameters and update the keyword arguments kwargs.update(a2c_hyper_params(trial)) # 2. Create the RL model model = A2C(**kwargs) # 3. Create envs used for evaluation using make_vec_env, ENV_ID and N_EVAL_ENVS eval_envs = make_vec_env(ENV_ID, n_envs=N_EVAL_ENVS) # 4. Create the TrialEvalCallback callback eval_callback = TrialEvalCallback( eval_envs, trial, n_eval_episodes=N_EVAL_EPISODES, eval_freq=EVAL_FREQ, deterministic=True, verbose=0, ) nan_encountered = False try: # Train the model model.learn(N_TIMESTEPS, callback=eval_callback) except AssertionError as e: # Sometimes, random hyperparams can generate NaN print(e) nan_encountered = True finally: # Free memory model.env.close() eval_envs.close() # Tell the optimizer that the trial failed if nan_encountered: return float("nan") if eval_callback.is_pruned: raise optuna.exceptions.TrialPruned() return eval_callback.last_mean_rewardVerimli örnekleme ve budama mekanizmaları
Budama, optimal sonuç verme olasılığı düşük olan parametreleri veya arama uzayındaki bölgeleri kısmak anlamına gelir; burada belirli bir bütçeden sonra budama yapılır. Optuna’da, eğitimlerin erken aşamalarında daha kötü performans gösteren denemeler budanır. Bu, parametre kümesini ve optimal arama uzayına ulaşma süresini azaltır. Optuna’nın, medyan durdurma kuralını kullanan Median Pruner da dahil olmak üzere birkaç budayıcısı vardır. Optuna Budayıcıları hakkında daha fazlasını Optuna dokümantasyonundan okuyabilirsiniz.
Optuna'nın MedianPruner'ını uygulamak
Median Pruner algoritması, mevcut en iyi sonucun önceki sonuçların medyanından daha kötü olması durumunda budar. Üçte bire bölme, yalnızca maksimum bütçenin 1/3’ü kullanıldıktan sonra budama yapmak istediğimiz için kullanılır.
pruner = MedianPruner(n_startup_trials=N_STARTUP_TRIALS, n_warmup_steps=N_EVALUATIONS // 3)Optuna'nın TPESampler'ını uygulamak
Örnekleyiciyi seçin; rastgele, TPESampler, CMAES vb. olabilir.
sampler = TPESampler(n_startup_trials=N_STARTUP_TRIALS)Çalışmayı oluşturun ve optimizasyon görevini başlatın
Artık bir Optuna çalışması oluşturmaya hazırız.
study = optuna.create_study(sampler=sampler, pruner=pruner, direction="maximize")try:study.optimize(objective, n_trials=N_TRIALS, n_jobs=N_JOBS, timeout=TIMEOUT)except KeyboardInterrupt: passprint("Number of finished trials: ", len(study.trials))print("Best trial:")trial = study.best_trialprint(f" Value: {trial.value}")print(" Params: ")for key, value in trial.params.items(): print(f" {key}: {value}")print(" User attrs:")for key, value in trial.user_attrs.items(): print(f" {key}: {value}")Optuna'nın Gelişmiş Özellikleri
Optuna’nın daha gelişmiş özelliklerinden bazılarına bakalım.
Optuna'nın görselleştirme araçları
Optuna, geçmiş ve mevcut çalışmaları görselleştirmenize, takip etmenize ve analiz etmenize olanak tanıyan bir gösterge paneli sunar. Geçmişte, sonuçları yönetmek için MLFlow gibi bir takip aracınızı bağlamanız gerekebilirdi.

Optuna Dashboard. Kaynak: Optuna
Büyük ölçekli deneyler için dağıtık sistemlerle entegrasyon
Optuna’nın dağıtık eğitim desteği, Kubernetes veya Dask gibi dağıtık arka uçlara bağlanarak büyük ölçekli deneyler için daha fazla hesaplama kaynağından yararlanmanıza olanak tanır. Ayrıca oturum sonuçlarınızı depolamak ve yönetmek için depolama arka ucunuzu bağlayabilirsiniz. Bulut depolama (ör. Dask storage) kullanabilir veya yerel çalıştırmalar için SQLite tercih edebilirsiniz.
Derin Pekiştirmeli Öğrenmede Optuna Kullanımı için İpuçları
Hiperparametre ayarlamadaki yaygın tuzaklardan kaçınmak için bazı ipuçları:
- Hiperparametre Ayarlama İhtiyacını Belirleyin: Gerçekten hiperparametre ayarlamasına ihtiyacınız olup olmadığını düşünün. Bazen tek gereken daha uzun süre eğitmektir.
- Tutarsız Sonuçlara Hazırlıklı Olun: RL’de aynı hiperparametrelerle aynı deneyi tekrar çalıştırmak aynı sonuçları garanti etmez.
- Arama Uzayı Boyutu Zorluklarını Dikkate Alın: Tipik bir makine öğrenimi probleminde olduğu gibi, arama uzayı çok küçükse asla optimal parametreleri bulamayabilirsiniz. Çok büyükse de bu işlem sonsuza dek sürebilir.
Optuna vs. HyperOpt ve Diğer Araçlar
Son bölüm olarak, Optuna, HyperOpt ve RayTune'u kullanım kolaylığı, destek ve diğer boyutlar açısından karşılaştıralım.
| Özellikler | Optuna | HyperOpt | RayTune |
|---|---|---|---|
| Kullanım Kolaylığı | Kullanıcı dostu API | Kurulum yükü fazla | Kapsamlı ancak daha karmaşık API |
| PyTorch/TensorFlow ve diğer ML çerçevelerini destekler | Evet | Evet | Evet |
| Dağıtık/paralel optimizasyon desteği | Evet | Sınırlı destek | Evet |
| Budama/Durdurma | Evet | Hayır, yalnızca erken durdurma | Evet |
| Görselleştirme aracı | Evet | Hayır | Evet |
| Arama Algoritmaları | TPESampler, Random Sampler, CmAESampler, GridSampler, QMCSampler, NSGAIISampler, PartialFixedSampler, GPSampler | TPE, Rastgele Arama | Rastgele Arama, Izgara Arama, HyperBand, BOHB, PBT, ASHA |
Sonuç
Bu yazıda, hiperparametre optimizasyonu ve pekiştirmeli öğrenme kavramlarını inceledik. Ayrıca Optuna’yı nasıl kuracağınızı ve favori RL algoritmanızla nasıl entegre edeceğinizi öğrendiniz. Bu kavramları uygulamalı olarak denemeli ve üzerinde çalıştığınız ya da başlamak istediğiniz bir projeye uygulamalısınız.
Daha fazla okumak ve bilginizi derinleştirmek için, Optuna'nın resmi dokümantasyonunu ve Pekiştirmeli Öğrenmede Hiperparametre Optimizasyonu Eğitimini incelemeyi düşünün.
Ayrıca daha fazla öğrenim için Datacamp’in ek kaynaklarını göz önünde bulundurun: Yapay Zekâ Geri Bildiriminden Pekiştirmeli Öğrenme Nedir? ve İnsan Geri Bildiriminden Pekiştirmeli Öğrenme Nedir? eğitimleri. Alanda mülakata giriyorsanız, Tüm Seviyeler için 25 Makine Öğrenimi Projesi ve En Popüler 25 Makine Öğrenimi Mülakat Sorusu blog yazılarımıza göz atın.
Sıkça Sorulan Sorular
Optuna nedir ve nasıl çalışır?
Optuna, makine öğrenimi modelleri için ayarlama sürecini otomatikleştirmek üzere tasarlanmış açık kaynaklı bir hiperparametre optimizasyon çerçevesidir. Ayarlamak istediğiniz hiperparametreleri, hedef fonksiyonunu tanımlamanızı ve çalışmayı yürütmenizi gerektirir.
Derin Pekiştirmeli Öğrenme için neden Optuna kullanmalıyım?
Optuna, karmaşık ve yüksek boyutlu arama uzaylarını yönetir, umut vaat etmeyen denemeleri budar ve popüler derin öğrenme çerçeveleriyle kolayca entegre olur.
Optuna’yı mevcut Pekiştirmeli Öğrenme projelerime nasıl entegre edebilirim?
Optuna’yı derin pekiştirmeli öğrenme ile entegre etmek için hiperparametreleri seçip her biri için bir arama uzayı sağlamalı, modelinizin performansını değerlendiren hedef fonksiyonu tanımlamalı ve bu fonksiyonu n deneme boyunca çalıştıran bir çalışma (study) oluşturmalısınız. Bu makale, bu entegrasyonu adım adım nasıl yapacağınızı gösterir.
Optuna, TensorFlow ve PyTorch gibi popüler Derin Pekiştirmeli Öğrenme çerçeveleriyle kullanılabilir mi?
Evet, Optuna TensorFlow ve PyTorch çerçevelerini destekler.
Pekiştirmeli Öğrenme algoritmalarında hangi hiperparametreler optimize edilebilir?
Öğrenme oranı, adım sayısı, gamma, aktivasyon fonksiyonu ve ağ mimarisi optimize edilebilir.

