Çok kollu biraderler

Python ile Gymnasium'da Reinforcement Learning

Fouad Trad

Machine Learning Engineer

Çok kollu biraderler

 

  • Kumarbazın karşısında slot makineleri
  • Amaç → kazanımı en çoklamak
  • Çözüm → keşif-sömürü dengesi

Bir adamın bir sıra slot makinesine baktığını gösteren görsel

Python ile Gymnasium'da Reinforcement Learning

Slot makineleri

Kullanıcıya bilinmeyen, kazanma olasılıkları %45, %35, %85 ve %62 olan 4 slot makinesini gösteren görsel.

  • Bir koldan ödül 0 veya 1'dir
  • Ajanın hedefi → toplam ödülü en çoklamak
Python ile Gymnasium'da Reinforcement Learning

Problemi çözme

 

  • Azalan epsilon-greedy
  • Epsilon → rastgele makine seç

Epsilon olasılığıyla, ajanın rastgele bir makine seçerek keşfettiğini gösteren diyagram.

Python ile Gymnasium'da Reinforcement Learning

Problemi çözme

 

  • Azalan epsilon-greedy
  • Epsilon → rastgele makine seç
  • 1 - epsilon → şu ana kadarki en iyiyi seç
  • Epsilon zamanla azalır

Epsilon olasılığıyla ajanın rastgele makine seçerek keşfettiğini, 1 - epsilon ile bilinen en iyi makineyi seçerek sömürdüğünü gösteren diyagram.

Python ile Gymnasium'da Reinforcement Learning

Başlatma

n_bandits = 4  
true_bandit_probs = np.random.rand(n_bandits)

n_iterations = 100000 epsilon = 1.0 min_epsilon = 0.01 epsilon_decay = 0.999
counts = np.zeros(n_bandits) # Her bir biraderin kaç kez oynandığı
values = np.zeros(n_bandits) # Her bir biraderin tahmini kazanma olasılığı
rewards = np.zeros(n_iterations) # Ödül geçmişi
selected_arms = np.zeros(n_iterations, dtype=int) # Kol seçim geçmişi
Python ile Gymnasium'da Reinforcement Learning

Etkileşim döngüsü

for i in range(n_iterations):
    arm = epsilon_greedy()

reward = np.random.rand() < true_bandit_probs[arm]
rewards[i] = reward selected_arms[i] = arm counts[arm] += 1
values[arm] += (reward - values[arm]) / counts[arm]
epsilon = max(min_epsilon, epsilon * epsilon_decay)
Python ile Gymnasium'da Reinforcement Learning

Seçimlerin analizi

selections_percentage = np.zeros((n_iterations, n_bandits))


Sürecin ilk adımını gösteren diyagram: (iterations, n_bandits) boyutunda, sıfırlarla dolu bir örnek dizi.

Python ile Gymnasium'da Reinforcement Learning

Seçimlerin analizi

selections_percentage = np.zeros((n_iterations, n_bandits))

for i in range(n_iterations): selections_percentage[i, selected_arms[i]] = 1

Sürecin ikinci adımını gösteren diyagram: her yinelemede seçilen kol dizi içinde 1 ile işaretlenir.

Python ile Gymnasium'da Reinforcement Learning

Seçimlerin analizi

selections_percentage = np.zeros((n_iterations, n_bandits))

for i in range(n_iterations): selections_percentage[i, selected_arms[i]] = 1
selections_percentage = np.cumsum(selections_percentage, axis=0) / np.arange(1, n_iterations + 1).reshape(-1, 1)

Sürecin son adımlarını gösteren diyagram: seçilen biraderlerin kümülatif toplamı alınır ve her yineleme sayısına bölünerek her koldaki seçim yüzdesi elde edilir.

Python ile Gymnasium'da Reinforcement Learning

Seçimlerin analizi

  Her birader için selections_percentage eğrisini gösteren görsel; yinelemeler arttıkça ajan, #2 numaralı biraderi daha çok seçmektedir.

for arm in range(n_bandits):
    plt.plot(selections_percentage[:, arm], label=f'Bandit #{arm+1}')
plt.xscale('log')
plt.title('Zaman İçinde Birader Eylem Seçimleri')
plt.xlabel('Bölüm Numarası')
plt.ylabel('Birader Seçim Yüzdesi (%)')
plt.legend()
plt.show()

for i, prob in enumerate(true_bandit_probs, 1): print(f"Bandit #{i} -> {prob:.2f}")
Birader #1 -> 0.37
Birader #2 -> 0.95
Birader #3 -> 0.73
Birader #4 -> 0.60
  • Ajan en yüksek olasılıklı biraderi seçmeyi öğrenir
Python ile Gymnasium'da Reinforcement Learning

Hadi pratik yapalım!

Python ile Gymnasium'da Reinforcement Learning

Preparing Video For Download...