Q-öğrenme

Python ile Gymnasium'da Reinforcement Learning

Fouad Trad

Machine Learning Engineer

Q-öğrenmeye giriş

  • Quality learning ifadesinin kısaltması
  • Modelden bağımsız teknik
  • Etkileşimle en iyi Q-tablosunu öğrenir

Q-tablosu başlatma, yapılacak eylemi seçme, çevreden ödül alma ve tabloyu güncelleme adımlarını gösteren diyagram. Ajan, belirli sayıda bölümden sonra yakınsamaya kadar bu döngüyü sürdürür.

Python ile Gymnasium'da Reinforcement Learning

Q-öğrenme vs. SARSA

SARSA

SARSA güncelleme kuralının matematiksel formülünü gösteren görsel.

  • Alınan eyleme göre günceller
  • On-policy öğrenici
Q-öğrenme

Q-öğrenme güncelleme kuralının matematiksel formülünü gösteren görsel.

  • Alınan eylemlerden bağımsız günceller
  • Off-policy öğrenici
Python ile Gymnasium'da Reinforcement Learning

Q-öğrenme uygulaması

env = gym.make("FrozenLake", is_slippery=True)

num_episodes = 1000 alpha = 0.1 gamma = 1
num_states, num_actions = env.observation_space.n, env.action_space.n Q = np.zeros((num_states, num_actions))
reward_per_random_episode = []
Python ile Gymnasium'da Reinforcement Learning

Q-öğrenme uygulaması

for episode in range(num_episodes):
    state, info = env.reset()
    terminated = False
    episode_reward = 0

while not terminated:
# Rastgele eylem seçimi action = env.action_space.sample()
# Eylemi uygula; yeni durumu ve ödülü gözlemle new_state, reward, terminated, truncated, info = env.step(action)
# Q-tablosunu güncelle update_q_table(state, action, new_state)
episode_reward += reward state = new_state
reward_per_random_episode.append(episode_reward)
Python ile Gymnasium'da Reinforcement Learning

Q-öğrenme güncellemesi

Q-öğrenme güncelleme kuralının matematiksel formülünü gösteren görsel.

def update_q_table(state, action, reward, new_state):

old_value = Q[state, action]
next_max = max(Q[new_state])
Q[state, action] = (1 - alpha) * old_value + alpha * (reward + gamma * next_max)
Python ile Gymnasium'da Reinforcement Learning

Politikayı kullanma

reward_per_learned_episode = []
policy = get_policy()

for episode in range(num_episodes): state, info = env.reset() terminated = False episode_reward = 0 while not terminated: # Öğrenilmiş Q-tablosuna göre en iyi eylemi seç action = policy[state] # Eylemi uygula ve yeni durumu gözlemle new_state, reward, terminated, truncated, info = env.step(action) state = new_state
episode_reward += reward
reward_per_learned_episode.append(episode_reward)
Python ile Gymnasium'da Reinforcement Learning

Q-öğrenme değerlendirmesi

import numpy as np
import matplotlib.pyplot as plt

avg_random_reward = np.mean(reward_per_random_episode) avg_learned_reward = np.mean(reward_per_learned_episode)
plt.bar(['Rastgele Politika', 'Öğrenilmiş Politika'], [avg_random_reward, avg_learned_reward], color=['blue', 'green']) plt.title('Bölüm Başına Ortalama Ödül') plt.ylabel('Ortalama Ödül') plt.show()

Öğrenilmiş politikanın getirisi (yaklaşık 0,26) rastgele politikadan (yaklaşık 0,01) çok daha yüksek olan çubuk grafiği.

Python ile Gymnasium'da Reinforcement Learning

Hadi pratik yapalım!

Python ile Gymnasium'da Reinforcement Learning

Preparing Video For Download...