Double Q-learning

Reinforcement Learning met Gymnasium in Python

Fouad Trad

Machine Learning Engineer

Q-learning

  • Schat de optimale actie-waardefunctie
  • Overschatt Q-waarden door te updaten op basis van max Q
  • Kan tot suboptimale policy leiden

 

Afbeelding met de wiskundige formule van de Q-learning update-regel.

Reinforcement Learning met Gymnasium in Python

Double Q-learning

  • Behoudt twee Q-tabellen
  • Elke tabel wordt geüpdatet op basis van de ander
  • Vermindert risico op overschatte Q-waarden

Afbeelding met twee Q-tabellen, Q0 en Q1, die elk op basis van de ander worden geüpdatet.

Reinforcement Learning met Gymnasium in Python

Double Q-learning-updates

  • Kies willekeurig een tabel

Afbeelding met twee Q-tabellen, Q0 en Q1, die elk op basis van de ander worden geüpdatet.

Reinforcement Learning met Gymnasium in Python

Q0-update

Afbeelding met twee Q-tabellen, Q0 en Q1, die elk op basis van de ander worden geüpdatet.

Afbeelding die laat zien hoe je de beste volgende actie vindt bij het updaten van Q0.

Afbeelding met de update-regel van Q0.

Reinforcement Learning met Gymnasium in Python

Q1-update

Afbeelding met twee Q-tabellen, Q0 en Q1, die elk op basis van de ander worden geüpdatet.

Afbeelding die laat zien hoe je de beste volgende actie vindt bij het updaten van Q1.

Afbeelding met de update-regel van Q1.

Reinforcement Learning met Gymnasium in Python

Double Q-learning

Afbeelding met twee Q-tabellen, Q1 en Q2, die elk op basis van de ander worden geüpdatet.

  • Vermindert overschatting
  • Wisselt updates tussen Q0 en Q1 af
  • Beide tabellen dragen bij aan het leren
Reinforcement Learning met Gymnasium in Python

Implementatie met 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

Afbeelding van een agent die door de Frozen Lake-omgeving navigeert.

Reinforcement Learning met Gymnasium in Python

update_q_tables() implementeren

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])

Afbeelding met de update-regel van Q1.

Afbeelding met de update-regel van Q2.

Reinforcement Learning met Gymnasium in Python

Training

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 met Gymnasium in Python

Beleid van de agent

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}

Afbeelding met de door de agent geleerde policy, met de actie per toestand.

Reinforcement Learning met Gymnasium in Python

Laten we oefenen!

Reinforcement Learning met Gymnasium in Python

Preparing Video For Download...