Double Q-learning

Reinforcement Learning cu Gymnasium în Python

Fouad Trad

Machine Learning Engineer

Q-learning

  • Estimează funcția optimă de valoare a acțiunilor
  • Supraestimează valorile Q prin actualizarea bazată pe Q maxim
  • Poate duce la o politică suboptimală

 

Imagine cu formula matematică a regulii de actualizare Q-learning.

Reinforcement Learning cu Gymnasium în Python

Double Q-learning

  • Menține două tabele Q
  • Fiecare tabel este actualizat pe baza celuilalt
  • Reduce riscul de supraestimare a valorilor Q

Imagine cu două tabele Q, Q0 și Q1, fiecare actualizată pe baza celeilalte.

Reinforcement Learning cu Gymnasium în Python

Actualizările Double Q-learning

  • Selectează aleatoriu un tabel

Imagine cu două tabele Q, Q0 și Q1, fiecare actualizată pe baza celeilalte.

Reinforcement Learning cu Gymnasium în Python

Actualizarea Q0

Imagine cu două tabele Q, Q0 și Q1, fiecare actualizată pe baza celeilalte.

Imagine care arată cum se găsește cea mai bună acțiune următoare la actualizarea Q0.

Imagine cu regula de actualizare a lui Q0.

Reinforcement Learning cu Gymnasium în Python

Actualizarea Q1

Imagine cu două tabele Q, Q0 și Q1, fiecare actualizată pe baza celeilalte.

Imagine care arată cum se găsește cea mai bună acțiune următoare la actualizarea Q1.

Imagine cu regula de actualizare a lui Q1.

Reinforcement Learning cu Gymnasium în Python

Double Q-learning

Imagine cu două tabele Q, Q1 și Q2, fiecare actualizată pe baza celeilalte.

  • Reduce supraestimarea valorilor
  • Alternează între actualizările Q0 și Q1
  • Ambele tabele contribuie la procesul de învățare
Reinforcement Learning cu Gymnasium în Python

Implementare cu Frozen Lake

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

Imagine cu un agent care navighează în mediul Frozen Lake.

Reinforcement Learning cu Gymnasium în Python

Implementarea update_q_tables()

def update_q_tables(state, action, reward, next_state):
    # Select a random Q-table index (0 or 1)
    i = np.random.randint(2)

# Update the corresponding Q-table 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])

Imagine cu regula de actualizare a lui Q1.

Imagine cu regula de actualizare a lui Q2.

Reinforcement Learning cu Gymnasium în Python

Antrenare

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 # OR final_Q = Q[0] + Q[1]
Reinforcement Learning cu Gymnasium în Python

Politica agentului

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}

Imagine cu politica învățată de agent, indicând acțiunea de efectuat în fiecare stare.

Reinforcement Learning cu Gymnasium în Python

Să exersăm!

Reinforcement Learning cu Gymnasium în Python

Preparing Video For Download...