Dubbel Q-inlärning

Reinforcement Learning med Gymnasium i Python

Fouad Trad

Machine Learning Engineer

Q-inlärning

  • Skattar den optimala handlingsvärdesfunktionen
  • Överskattar Q-värden genom att uppdatera baserat på max Q
  • Kan leda till suboptimal policyin lärning

 

Bild som visar den matematiska formeln för Q-inlärningens uppdateringsregel.

Reinforcement Learning med Gymnasium i Python

Dubbel Q-inlärning

  • Använder två Q-tabeller
  • Varje tabell uppdateras baserat på den andra
  • Minskar risken för överskattning av Q-värden

Bild som visar två Q-tabeller, Q0 och Q1, där varje tabell uppdateras baserat på den andra.

Reinforcement Learning med Gymnasium i Python

Uppdateringar vid dubbel Q-inlärning

  • Välj en tabell slumpmässigt

Bild som visar två Q-tabeller, Q0 och Q1, där varje tabell uppdateras baserat på den andra.

Reinforcement Learning med Gymnasium i Python

Uppdatering av Q0

Bild som visar två Q-tabeller, Q0 och Q1, där varje tabell uppdateras baserat på den andra.

Bild som visar hur man hittar den bästa nästa handlingen när Q0 uppdateras.

Bild som visar uppdateringsregeln för Q0.

Reinforcement Learning med Gymnasium i Python

Uppdatering av Q1

Bild som visar två Q-tabeller, Q0 och Q1, där varje tabell uppdateras baserat på den andra.

Bild som visar hur man hittar den bästa nästa handlingen när Q1 uppdateras.

Bild som visar uppdateringsregeln för Q1.

Reinforcement Learning med Gymnasium i Python

Dubbel Q-inlärning

Bild som visar två Q-tabeller, Q1 och Q2, där varje tabell uppdateras baserat på den andra.

  • Minskar överskattningsbias
  • Växlar mellan uppdateringar av Q0 och Q1
  • Båda tabellerna bidrar till inlärningsprocessen
Reinforcement Learning med Gymnasium i Python

Implementering med 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 som visar en agent som navigerar i Frozen Lake-miljön.

Reinforcement Learning med Gymnasium i Python

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

Bild som visar uppdateringsregeln för Q1.

Bild som visar uppdateringsregeln för Q2.

Reinforcement Learning med Gymnasium i Python

Träning

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 med Gymnasium i Python

Agentens policy

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 som visar den policy agenten lärt sig, med vilken handling som ska utföras i varje tillstånd.

Reinforcement Learning med Gymnasium i Python

Nu kör vi en övning!

Reinforcement Learning med Gymnasium i Python

Preparing Video For Download...