Çift Q-öğrenme

Python ile Gymnasium'da Reinforcement Learning

Fouad Trad

Machine Learning Engineer

Q-öğrenme

  • En uygun eylem-değer fonksiyonunu tahmin eder
  • Maks Q’ya göre güncellediği için Q-değerlerini fazla tahmin eder
  • Alt-optimal politika öğrenimine yol açabilir

 

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

Python ile Gymnasium'da Reinforcement Learning

Çift Q-öğrenme

  • İki Q-tablosu kullanır
  • Her tablo diğeri temel alınarak güncellenir
  • Q-değerlerini fazla tahmin etme riskini azaltır

Q0 ve Q1 adlı iki Q-tablosunu ve her birinin diğerine göre güncellendiğini gösteren görsel.

Python ile Gymnasium'da Reinforcement Learning

Çift Q-öğrenme güncellemeleri

  • Rastgele bir tablo seçin

Q0 ve Q1 adlı iki Q-tablosunu ve her birinin diğerine göre güncellendiğini gösteren görsel.

Python ile Gymnasium'da Reinforcement Learning

Q0 güncellemesi

Q0 ve Q1 adlı iki Q-tablosunu ve her birinin diğerine göre güncellendiğini gösteren görsel.

Q0 güncellenirken en iyi bir sonraki eylemin nasıl bulunduğunu gösteren görsel.

Q0’ın güncelleme kuralını gösteren görsel.

Python ile Gymnasium'da Reinforcement Learning

Q1 güncellemesi

Q0 ve Q1 adlı iki Q-tablosunu ve her birinin diğerine göre güncellendiğini gösteren görsel.

Q1 güncellenirken en iyi bir sonraki eylemin nasıl bulunduğunu gösteren görsel.

Q1’in güncelleme kuralını gösteren görsel.

Python ile Gymnasium'da Reinforcement Learning

Çift Q-öğrenme

Q1 ve Q2 adlı iki Q-tablosunu ve her birinin diğerine göre güncellendiğini gösteren görsel.

  • Aşırı tahmin yanlılığını azaltır
  • Q0 ve Q1 güncellemeleri dönüşümlü yapılır
  • Her iki tablo da öğrenmeye katkı sağlar
Python ile Gymnasium'da Reinforcement Learning

Frozen Lake ile uygulama

env = gym.make('FrozenLake-v1', 
               is_slippery=False)

num_states = env.observation_space.n
n_actions = env.action_space.n
Q = [np.zeros((num_states, n_actions))] * 2

num_episodes = 1000 alpha = 0.5 gamma = 0.99

Ajanın Frozen Lake ortamında gezinmesini gösteren görsel.

Python ile Gymnasium'da Reinforcement Learning

update_q_tables() uygulaması

def update_q_tables(state, action, reward, next_state):
    # Rastgele bir Q-tablosu indeksi seçin (0 veya 1)
    i = np.random.randint(2)

# İlgili Q-tablosunu güncelleyin best_next_action = np.argmax(Q[i][next_state])
Q[i][state, action] = (1 - alpha) * Q[i][state, action] + alpha * (reward + gamma * Q[1-i][next_state, best_next_action])

Q1’in güncelleme kuralını gösteren görsel.

Q2’nin güncelleme kuralını gösteren görsel.

Python ile Gymnasium'da Reinforcement Learning

Eğitim

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

    while not terminated:
        action = np.random.choice(n_actions)  
        next_state, reward, terminated, truncated,  info = env.step(action)
        update_q_tables(state, action, reward, next_state)
        state = next_state

final_Q = (Q[0] + Q[1])/2 # VEYA final_Q = Q[0] + Q[1]
Python ile Gymnasium'da Reinforcement Learning

Ajanın politikası

policy = {state: np.argmax(final_Q[state]) 
          for state in range(num_states)}
print(policy)
{ 0: 1,  1: 0,  2: 0,  3: 0, 
  4: 1,  5: 0,  6: 1,  7: 0, 
  8: 2,  9: 1, 10: 1, 11: 0, 
 12: 0, 13: 2, 14: 2, 15: 0}

Ajansın öğrendiği politikayı, her durumda yapılacak eylemi gösteren görsel.

Python ile Gymnasium'da Reinforcement Learning

Hadi pratik yapalım!

Python ile Gymnasium'da Reinforcement Learning

Preparing Video For Download...