Epsilon-greedy adalah strategi dasar yang menyeimbangkan eksplorasi dan eksploitasi dengan aturan sederhana: pada setiap langkah, dengan probabilitas pilih aksi secara acak, dan dengan probabilitas pilih aksi dengan estimasi tertinggi. Nilai mengatur seberapa banyak eksplorasi dilakukan, sedangkan estimasi action-value diperbarui melalui rata-rata sampel. Topik ini mengimplementasikan epsilon-greedy pada bandit 10-lengan selama 1000 langkah dan mengukur dua hal, yaitu reward rata-rata dan persentase pemilihan aksi optimal.
Mekanisme epsilon-greedy#
Pada setiap langkah , agen menarik sebuah bilangan acak seragam . Apabila , agen memilih aksi secara seragam acak dari k lengan, yang merupakan eksplorasi. Apabila , agen memilih , yang merupakan eksploitasi. Nilai yang besar mendorong lebih banyak eksplorasi tetapi mengurangi pemanfaatan lengan terbaik yang sudah diketahui, sedangkan yang kecil cenderung membuat agen cepat terjebak pada lengan suboptimal.
Estimasi diperbarui dengan rata-rata sampel, yang pada setiap observasi reward melakukan koreksi inkremental:
dengan adalah jumlah tarikan lengan itu sejauh ini. Bentuk ini setara dengan rata-rata aritmetika, tetapi tidak perlu menyimpan seluruh riwayat reward, sehingga hemat memori. Karena setiap lengan diperbarui secara terpisah, pembaruan pada satu lengan tidak mempengaruhi estimasi lengan lain.
Bentuk pembaruan di atas dapat diturunkan dari definisi rata-rata sampel. Misalkan adalah rata-rata reward pertama. Rata-rata reward adalah . Dengan menamai ulang indeks, diperoleh bentuk pembaruan pada blok di bawah. Turunan ini menunjukkan bahwa pembaruan inkremental dan rata-rata sampel penuh adalah objek yang sama, hanya berbeda dalam penggunaan memori.
Pada bandit dengan lengan, eksplorasi acak memilih tiap lengan dengan probabilitas . Dalam langkah, rata-rata jumlah tarikan per lengan akibat eksplorasi saja adalah . Untuk , , dan , angka ini menjadi 10, yang cukup untuk membangun estimasi kasar tiap lengan tanpa menguras terlalu banyak langkah dari eksploitasi. Perhitungan kasar ini menjelaskan mengapa menjadi kompromi lazim pada bandit 10-lengan.
Implementasi epsilon-greedy#
Blok berikut adalah berkas epsilon_greedy.py yang utuh dan dapat dijalankan. Berkas ini membangun bandit 10-lengan, menjalankan epsilon-greedy dengan selama 1000 langkah, lalu mencetak reward rata-rata dan persentase pemilihan aksi optimal.
import warnings; warnings.filterwarnings("ignore")
import numpy as np
np.random.seed(0)
k = 10
steps = 1000
epsilon = 0.1
q_true = np.random.normal(0, 1, k)
optimal = int(np.argmax(q_true))
Q = np.zeros(k)
N = np.zeros(k, dtype=int)
total_reward = 0.0
optimal_count = 0
for t in range(steps):
if np.random.rand() < epsilon:
a = int(np.random.randint(k))
else:
a = int(np.argmax(Q))
r = q_true[a] + np.random.normal(0, 1)
N[a] += 1
Q[a] += (r - Q[a]) / N[a]
total_reward += r
if a == optimal:
optimal_count += 1
print(f"avg_reward = {total_reward / steps:.4f}")
print(f"optimal_action % = {100 * optimal_count / steps:.2f}")avg_reward = 1.9161
optimal_action % = 54.10Membaca keluaran#
Dengan , reward rata-rata mencapai 1.9161 dan aksi optimal terpilih pada 54.10% langkah. Angka ini jauh lebih baik daripada greedy murni karena eksplorasi sesekali memaksa agen mencoba lengan selain yang saat ini tampak terbaik, sehingga estimasi untuk lengan optimal akhirnya naik melebihi lengan yang dulu tampak unggul. Persentase 54.10% bukan angka tinggi karena sepuluh persen langkah secara eksplisit dihabiskan untuk eksplorasi acak, yang hampir selalu tidak memilih lengan optimal.
Pemilihan merupakan kompromi lazim: cukup kecil agar eksploitasi dominan, tetapi cukup besar agar setiap lengan ditarik berkali-kali dalam 1000 langkah. Nilai yang lebih kecil, misalnya 0.01, mempercepat eksploitasi tetapi memperlambat penemuan lengan optimal, sedangkan nilai yang lebih besar seperti 0.3 memperbanyak eksplorasi dengan biaya reward sesaat. Tidak ada tunggal yang optimal untuk semua masalah, sehingga pemilihannya sering menjadi bagian dari penalaan eksperimen.
Perbandingan dengan greedy murni menggarisbawahi loncatan kualitas. Greedy murni memperoleh reward rata-rata 1.7119 karena terjebak pada lengan suboptimal, sedangkan epsilon-greedy dengan mencapai 1.9161, naik sekitar 12 persen. Kenaikan ini datang dari eksplorasi yang sesekali menemukan lengan optimal indeks 3 dan mengangkat estimasinya di atas lengan yang dulu tampak unggul. Persentase pemilihan aksi optimal 54.10% mencerminkan keseimbangan: mayoritas langkah memilih lengan optimal setelah estimasi konvergen, tetapi sekitar 46 persen langkah lain terbagi antara eksplorasi acak dan eksploitasi lengan suboptimal yang estimasinya belum turun.
Kesalahan umum#
- Memilih epsilon tanpa mempertimbangkan skala reward. Penyebabnya, nilai epsilon yang sama memberi efek berbeda pada bandit dengan reward berskala kecil dan besar. Perbaikannya, mencoba beberapa nilai epsilon pada bandit yang sama dan memilih berdasarkan reward rata-rata yang diobservasi, bukan meniru nilai dari contoh.
- Memakai rata-rata sampel pada masalah non-stasioner. Penyebabnya, bobot memberi bobot sama pada seluruh riwayat sehingga perubahan terbaru lengan lambat tercermin. Perbaikannya, mengganti dengan langkah konstan , misalnya 0.1, agar pembaruan memberi bobot lebih pada reward terbaru.
- Lupa memperbarui N(a) sebelum Q(a). Penyebabnya, urutan pembaruan yang terbalik membuat pembagi rata-rata salah. Perbaikannya, menambah
N[a]lebih dulu, baru memperbaruiQ[a]denganN[a]yang baru.
Ringkasan#
- Epsilon-greedy menyeimbangkan eksplorasi (probabilitas ) dan eksploitasi (probabilitas ) dengan aturan sederhana.
- Estimasi diperbarui inkremental melalui , setara dengan rata-rata sampel tanpa menyimpan riwayat.
- Pada bandit 10-lengan, menghasilkan reward rata-rata 1.9161 dan aksi optimal terpilih pada 54.10% langkah.
Referensi#
- Reinforcement Learning: An Introduction (2nd ed.) — Sutton & Barto — Bab 2 memperkenalkan epsilon-greedy dan pembaruan rata-rata sampel sebagai strategi dasar.