Ana içeriğe atla

Python'da Derin Pekiştirmeli Öğrenme için Optuna

Optuna ile hiperparametre ayarını nasıl ustalaşacağınızı keşfedin. Hiperparametreleri tanımlamayı, hedef fonksiyonunuzu kurmayı ve derin pekiştirmeli öğrenmede örnekleme ile budama tekniklerini kullanmayı öğrenin.
Güncel 3 Eki 2026  · 11 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

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?

bir robot ve biri yeşil diğeri turuncu iki bayrakla pekiştirmeli öğrenmeyi gösteren illüstrasyon

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.

dağın tepesindeki bayrağa ulaşmak için tırmanan bir arabayı gösteren, mountain car algoritmasını anlatan bir gif

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:

  1. Modele bağlı yapılandırmanızı ayarlayın.
  2. Hiperparametrelerinizi tanımlayın ve her biri için değer aralıkları önerin.
  3. 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.
  4. 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-contrib

Gerekli 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_reward

Verimli ö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 örneği

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.


Bunmi Akinremi's photo
Author
Bunmi Akinremi
LinkedIn
Twitter

Makine Öğrenimi Mühendisi ve Şair

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.

Konular
Python
Makine Öğrenimi

DataCamp ile Makine Öğrenimi öğrenin

Kurs

Machine Learning'i Anlamak

2 sa
314.1K
Kodlama gerektirmeyen makine öğrenimine giriş.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör