Lewati ke konten utama

Optuna untuk Deep Reinforcement Learning di Python

Pelajari cara menguasai penyetelan hyperparameter dengan Optuna. Ketahui cara mendefinisikan hyperparameter, menyiapkan fungsi objektif, serta memanfaatkan teknik sampling dan pruning dalam deep reinforcement learning.
Diperbarui 28 Sep 2026  · 11 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Model machine learning memiliki hyperparameter yang secara signifikan memengaruhi performanya. Parameter-parameter ini bisa diibaratkan seperti suhu yang tepat untuk memanggang kue atau sudut yang pas untuk membalik panekuk. Dalam reinforcement learning, hyperparameter memengaruhi pendekatan kebijakan (policy) dan penghampiran reward, dan dengan penyetelan yang lebih baik, optimasi hyperparameter dapat meningkatkan hasil secara drastis. 

Artikel ini akan membahas Optuna, kerangka kerja open-source yang kuat untuk mengoptimalkan hyperparameter. Jika Anda baru dalam topik ini, pertimbangkan untuk memulai dengan Understanding Machine Learning, yang menawarkan pengantar tanpa kode. Untuk berlatih menggunakan Python, coba kursus Machine Learning Fundamentals with Python, yang menggunakan scikit-learn. Selanjutnya, MLOps Concepts akan membantu Anda memahami cara memindahkan model machine learning dari notebook lokal ke lingkungan produksi. Terakhir, coba Preprocessing for Machine Learning in Python, kursus yang sangat relevan dengan artikel ini karena mengajarkan Anda cara membersihkan dan menyiapkan data untuk model machine learning.

Apa itu Optuna?

Optuna adalah alat open-source untuk kerangka kerja optimasi hyperparameter yang mengotomatiskan pencarian hyperparameter. Alat ini dapat digunakan dengan kerangka kerja machine learning atau deep learning apa pun. Beberapa kemampuan utama Optuna mencakup: 

  • Mudah Diparalelkan dan Diskalakan Lintas Tugas: Saat kebutuhan komputasi meningkat, Optuna memberi fleksibilitas untuk memanfaatkan pelatihan terdistribusi dan juga memungkinkan Anda terhubung ke backend cloud seperti Kubernetes atau Dask.
  • Pencarian Otomatis Hyperparameter Optimal: Optuna mencari kombinasi hyperparameter terbaik ketika Anda menentukan rentang untuk masing-masingnya. 
  • Algoritme Mutakhir untuk Sampling dan Pruning: Optuna memiliki beberapa algoritme mutakhir, seperti Median Pruner dan WilcoxonPruner, yang melakukan pruning menggunakan uji statistik.
  • Kemudahan Penggunaan: Optuna mudah digunakan dan hanya memerlukan 5–6 baris kode untuk diimplementasikan!
  • Optuna Dashboard: Optuna kini memungkinkan Anda menyimpan dan menganalisis hasil semua eksperimen melalui Optuna Dashboard.
  • Optuna Hub. Memungkinkan Anda berbagi dan menggunakan fitur buatan kontributor. 

Apa itu Reinforcement Learning (RL)?

ilustrasi reinforcement learning menggunakan robot dan dua bendera, satu hijau dan satu oranye

Menemukan jalur optimal. Sumber: Gambar oleh Penulis

Reinforcement learning (RL) menggabungkan machine learning dan optimal control. Bidang ini mempelajari bagaimana agen cerdas harus bertindak dalam lingkungan dinamis untuk memaksimalkan reward kumulatif. Secara sederhana, reinforcement learning adalah tentang mengajarkan agen cerdas mengambil keputusan paling optimal yang memaksimalkan reward di dalam suatu lingkungan. Reward untuk setiap langkah yang diambil bisa positif atau negatif saat ia mendekati tujuan yang diinginkan.

Berbeda dari machine learning, algoritme reinforcement learning membuat keputusan untuk mencapai hasil paling optimal, mirip dengan proses belajar coba-coba yang kita gunakan untuk mencapai target. Deep reinforcement learning berbeda dari reinforcement learning karena menggunakan deep neural network untuk menghampiri fungsi yang kompleks. Kita juga bisa mengatakan bahwa reinforcement learning biasa berfokus pada pendekatan yang lebih deterministik, sementara deep reinforcement learning menggunakan pendekatan stokastik.

Menggunakan Optuna pada Model Reinforcement Learning Anda

Dalam suatu lingkungan, bisa ada banyak rute untuk mencapai tujuan. Dibandingkan dengan supervised learning, deep reinforcement learning jauh lebih sensitif terhadap pemilihan hyperparameter seperti learning rate, gamma, jumlah langkah, dan sebagainya.

Pilihan hyperparameter yang buruk dapat menyebabkan konvergensi yang buruk/tidak stabil. Tantangan ini diperparah oleh variasi performa lintas random seed (yang digunakan untuk menginisialisasi bobot jaringan dan lingkungan).

Pada bagian ini, kita akan membahas proses menyiapkan Optuna dan dependensi terkait, mendefinisikan ruang pencarian, serta menjalankan optimasi untuk algoritme MountainCarContinuous-v0. Algoritme MountainCarContinuous-v0 adalah salah satu algoritme RL di RL-Zoo, sebuah kerangka pelatihan yang menyediakan skrip untuk mengevaluasi agen dan memplot hasil. Algoritme MountainCarContinuous-v0 memodelkan lingkungan di mana agen (sebuah mobil) berusaha mencapai tujuannya (mencapai bendera).

gif yang menunjukkan mobil melaju ke atas untuk mencapai bendera di puncak gunung guna mengilustrasikan algoritme mountain car

Representasi algoritme MountainCarContinuous-v0 yang telah disetel. Gambar oleh Penulis.

Cara memulai dengan Optuna

Untuk memulai, Anda perlu:

  1. Menyiapkan konfigurasi yang bergantung pada model Anda.
  2. Mendefinisikan hyperparameter dan menyarankan rentang nilai untuk masing-masing.
  3. Mendefinisikan fungsi objektif, yang memuat model atau fungsi yang ingin Anda optimalkan. Anda juga sebaiknya mendefinisikan CallBack untuk mengembalikan evaluasi berkala.
  4. Membuat studi Optuna dan menjalankan fungsi yang dioptimalkan untuk jumlah uji coba tertentu.

Menyiapkan Optuna dan StableBaseline 3

Setelah membuat virtual environment baru, kita menginstal paket yang diperlukan. Perlu dicatat, Optuna mendukung Python 3.7 atau yang lebih baru. Jika Anda ingin meninjau cara menyiapkan virtual environment, baca tutorial Virtual Environment in Python kami.

pip install optunapip install stable-baselines3pip install sb3-contrib

Impor paket yang diperlukan

Kita akan menggunakan paket gym untuk membuat lingkungan tempat agen melakukan aksi.

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__)

Proyek ini akan menggunakan algoritme MountainCarContinuous-v0 dari Advantage Actor-Critic (A2C). Advantage Actor-Critic (A2C) — salah satu algoritme Actor-Critic, adalah arsitektur hibrida yang menggabungkan metode berbasis nilai (mengukur reward untuk aksi yang diambil) dan berbasis kebijakan (mengendalikan aksi agen) yang membantu menstabilkan pelatihan dengan mengurangi varians.

Mendefinisikan hyperparameter

Mari tetapkan konfigurasi yang akan digunakan dalam tugas ini.

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,}

Kita akan menyarankan rentang nilai untuk hyperparameter.

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)    }

Mendefinisikan fungsi objektif

Fungsi CallBack TrialEvalCallback() didefinisikan karena kita ingin mengembalikan hasil evaluasi berkala dari tugas optimasi. Lihat notebook Google Colab untuk implementasi callback.

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

Mekanisme sampling dan pruning yang efisien

Pruning merujuk pada pemangkasan parameter atau wilayah ruang pencarian yang kecil kemungkinannya menghasilkan hasil optimal, dan dalam kasus ini, melakukan pruning setelah anggaran tertentu. Dalam Optuna, pruning menghapus uji coba yang performanya buruk pada tahap awal pelatihan. Ini memangkas himpunan parameter dan waktu untuk mencapai ruang pencarian optimal. Optuna memiliki beberapa pruner, termasuk Median Pruner, yang menggunakan aturan penghentian median. Anda dapat membaca lebih lanjut tentang Pruner Optuna di dokumentasi Optuna.

Mengimplementasikan MedianPruner Optuna 

Algoritme Median Pruner melakukan pruning jika hasil terbaik saat ini lebih buruk daripada median hasil sebelumnya. Pembagian dengan tiga digunakan karena kita hanya ingin melakukan pruning setelah 1/3 dari anggaran maksimal digunakan.

pruner = MedianPruner(n_startup_trials=N_STARTUP_TRIALS, n_warmup_steps=N_EVALUATIONS // 3)

Mengimplementasikan TPESampler Optuna

Pilih sampler, bisa acak, TPESampler, CMAES, dll.

sampler = TPESampler(n_startup_trials=N_STARTUP_TRIALS)

Membuat studi dan memulai tugas optimasi

Kita sekarang siap membuat studi Optuna.

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}")

Fitur Lanjutan Optuna

Mari lihat beberapa fitur lanjutan Optuna.

Alat visualisasi Optuna

Optuna menyediakan dasbor yang memungkinkan kita memvisualisasikan, melacak, dan menganalisis run sebelumnya dan saat ini. Dulu, Anda mungkin perlu menghubungkan alat pelacakan seperti MLFlow untuk mengelola hasil.

Contoh Optuna Dashboard

Optuna Dashboard. Sumber: Optuna

Integrasi dengan sistem terdistribusi untuk eksperimen skala besar

Dukungan Optuna untuk pelatihan terdistribusi memungkinkan Anda menghubungkan backend terdistribusi, seperti Kubernetes atau Dask, untuk memanfaatkan lebih banyak sumber daya komputasi bagi eksperimen skala besar. Anda juga dapat menghubungkan backend penyimpanan untuk menyimpan dan mengelola hasil sesi Anda. Anda dapat menggunakan penyimpanan cloud seperti penyimpanan Dask atau SQLite untuk run lokal.

Tips Menggunakan Optuna dalam Deep Reinforcement Learning

Berikut beberapa tips untuk menghindari jebakan umum dalam penyetelan hyperparameter:

  • Tentukan Kebutuhan Penyetelan Hyperparameter: Pertimbangkan apakah penyetelan hyperparameter memang yang Anda butuhkan. Terkadang, Anda hanya perlu melatih dengan langkah yang lebih panjang.
  • Bersiap untuk Hasil yang Tidak Konsisten: Menjalankan eksperimen yang sama dengan hyperparameter yang sama berulang kali dalam RL tidak menjamin hasil yang sama.
  • Pertimbangkan Tantangan Ukuran Ruang Pencarian: Seperti masalah machine learning pada umumnya, Anda mungkin tidak pernah mendapatkan parameter optimal jika ruang pencarian terlalu kecil. Jika ruang pencarian terlalu besar, prosesnya bisa sangat lama.

Optuna vs. HyperOpt dan Alat Lainnya

Sebagai bagian penutup, mari bandingkan Optuna, HyperOpt, dan RayTune dari sisi kemudahan penggunaan, dukungan, dan aspek lainnya.

 
Fitur Optuna HyperOpt RayTune
Kemudahan Penggunaan API ramah pengguna Banyak konfigurasi awal API komprehensif namun lebih kompleks
Mendukung PyTorch/TensorFlow dan kerangka ML lainnya Ya Ya Ya
Mendukung optimasi terdistribusi/paralel Ya Dukungan terbatas Ya
Pruning/Penghentian Ya Tidak, hanya early stopping Ya
Alat visualisasi Ya Tidak Ya
Algoritme Pencarian TPESampler, Random Sampler, CmAESampler, GridSampler, QMCSampler, NSGAIISampler, PartialFixedSampler, GPSampler TPE, Pencarian Acak Pencarian Acak, Grid Search, HyperBand, BOHB, PBT, ASHA

Kesimpulan

Dalam artikel ini, kita mempelajari konsep optimasi hyperparameter dan reinforcement learning. Anda juga telah belajar cara menyiapkan Optuna dan menghubungkannya ke algoritme RL favorit Anda. Sebaiknya Anda langsung mempraktikkan konsep ini dan menerapkannya pada proyek yang pernah atau ingin Anda kerjakan. 

Untuk bacaan lanjutan dan memperdalam pemahaman, pertimbangkan untuk mengeksplorasi dokumentasi resmi Optuna dan Tutorial Reinforcement Learning tentang Optimasi Hyperparameter ini. 

Pertimbangkan juga sumber daya Datacamp tambahan untuk pembelajaran lebih lanjut, termasuk tutorial Apa itu Reinforcement Learning dari Umpan Balik AI? dan Apa itu Reinforcement Learning dari Umpan Balik Manusia?. Jika Anda sedang mempersiapkan wawancara di bidang ini, lihat 25 Proyek Machine Learning untuk Semua Tingkat dan posting blog 25 Pertanyaan Wawancara Machine Learning Teratas.


Bunmi Akinremi's photo
Author
Bunmi Akinremi
LinkedIn
Twitter

Insinyur Machine Learning dan Penyair

Pertanyaan yang Sering Diajukan

Apa itu Optuna dan bagaimana cara kerjanya?

Optuna adalah kerangka kerja open-source untuk optimasi hyperparameter yang dirancang untuk mengotomatiskan proses penyetelan model machine learning. Anda perlu mendefinisikan hyperparameter yang ingin disetel, fungsi objektif, dan menjalankan studi.

Mengapa saya harus menggunakan Optuna untuk Deep Reinforcement Learning?

Optuna menangani ruang pencarian yang kompleks dan berdimensi tinggi, memangkas uji coba yang tidak menjanjikan, serta mudah terintegrasi dengan kerangka deep learning populer.

Bagaimana saya dapat mengintegrasikan Optuna dalam proyek Reinforcement Learning yang sudah ada?

Untuk mengintegrasikan Optuna dengan deep reinforcement learning, Anda perlu memilih hyperparameter dan menyediakan ruang pencarian untuk masing-masing, mendefinisikan fungsi objektif yang mengevaluasi performa model Anda, serta membuat studi yang menjalankan fungsi tersebut untuk n uji coba. Artikel ini memberikan panduan langkah demi langkah untuk mencapai integrasi tersebut.

Apakah Optuna dapat digunakan dengan kerangka Deep Reinforcement Learning populer seperti TensorFlow dan PyTorch?

Ya, Optuna mendukung kerangka TensorFlow dan PyTorch.

Hyperparameter apa dalam algoritme Reinforcement Learning yang dapat dioptimalkan?

Anda dapat mengoptimalkan learning rate, jumlah langkah, gamma, fungsi aktivasi, dan arsitektur jaringan.

Topik
Python
Machine Learning

Pelajari Machine Learning dengan DataCamp

Kursus

Memahami Machine Learning

2 jam
310.9K
Pengantar machine learning tanpa perlu coding.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya