Double Q-Learning

Reinforcement Learning mit Gymnasium in Python

Fouad Trad

Machine Learning Engineer

Q-Learning

  • Schätzt die optimale Aktions-Wert-Funktion
  • Überschätzt Q-Werte, da auf max Q aktualisiert wird
  • Kann zu suboptimaler Policy führen

 

Bild mit der mathematischen Formel der Q-Learning-Aktualisierungsregel.

Reinforcement Learning mit Gymnasium in Python

Double Q-Learning

  • Verwendet zwei Q-Tabellen
  • Jede Tabelle wird anhand der anderen aktualisiert
  • Verringert das Risiko der Überschätzung von Q-Werten

Bild mit zwei Q-Tabellen, Q0 und Q1, die jeweils anhand der anderen aktualisiert werden.

Reinforcement Learning mit Gymnasium in Python

Double Q-Learning: Updates

  • Zufällig eine Tabelle wählen

Bild mit zwei Q-Tabellen, Q0 und Q1, die jeweils anhand der anderen aktualisiert werden.

Reinforcement Learning mit Gymnasium in Python

Update von Q0

Bild mit zwei Q-Tabellen, Q0 und Q1, die jeweils anhand der anderen aktualisiert werden.

Bild: Beste nächste Aktion beim Aktualisieren von Q0 finden.

Bild: Aktualisierungsregel für Q0.

Reinforcement Learning mit Gymnasium in Python

Update von Q1

Bild mit zwei Q-Tabellen, Q0 und Q1, die jeweils anhand der anderen aktualisiert werden.

Bild: Beste nächste Aktion beim Aktualisieren von Q1 finden.

Bild: Aktualisierungsregel für Q1.

Reinforcement Learning mit Gymnasium in Python

Double Q-Learning

Bild mit zwei Q-Tabellen, Q1 und Q2, die jeweils anhand der anderen aktualisiert werden.

  • Verringert Überschätzungs-Bias
  • Wechselt zwischen Updates von Q0 und Q1
  • Beide Tabellen tragen zum Lernen bei
Reinforcement Learning mit Gymnasium in Python

Implementierung mit 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

Bild eines Agents, der die Frozen-Lake-Umgebung durchläuft.

Reinforcement Learning mit Gymnasium in Python

update_q_tables() implementieren

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

Bild der Aktualisierungsregel von Q1.

Bild der Aktualisierungsregel von Q2.

Reinforcement Learning mit 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 mit Gymnasium in Python

Policy des Agents

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}

Bild der vom Agent gelernten Policy mit der Aktion pro Zustand.

Reinforcement Learning mit Gymnasium in Python

Lass uns üben!

Reinforcement Learning mit Gymnasium in Python

Preparing Video For Download...