Advantage Actor Critic

Deep Reinforcement Learning en Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Pourquoi l'Actor Critic ?

 

  • Limites de REINFORCE :

    • Grande variance
    • Faible efficacité d'échantillonnage
  • Les méthodes Actor Critic ajoutent un réseau critique, permettant l'apprentissage par différence temporelle (TD)

Un grand rectangle intitulé « agent »; à l'intérieur, deux rectangles plus petits intitulés « actor » et « critic ».

Deep Reinforcement Learning en Python

L'intuition derrière les méthodes Actor Critic

Des étudiant·e·s discutent autour d'une table, avec des livres et des stylos.

 

  • Réseau « actor » :

    • Prend des décisions
    • Ne peut pas les évaluer
  • Réseau « critic » :

    • Donne une rétroaction à chaque étape
Deep Reinforcement Learning en Python

Le réseau Critic

 

  • Le « critic » approxime la fonction de valeur d'état

Représentation du réseau critique : l'état en entrée et la fonction Valeur en sortie ; un seul nœud de sortie.

  • Juge l'action $a_t$ selon l'avantage ou l'erreur TD

 

class Critic(nn.Module):
    def __init__(self, state_size):
        super(Critic, self).__init__()
        self.fc1 = nn.Linear(state_size, 64)
        self.fc2 = nn.Linear(64, 1)

def forward(self, state): x = torch.relu(self.fc1(torch.tensor(state))) value = self.fc2(x) return value
critic_network = Critic(8)
Deep Reinforcement Learning en Python

La dynamique Actor Critic

 

  • À chaque étape :
    • L'actor choisit une action (comme le réseau de politique dans REINFORCE)

En haut : un grand rectangle « agent »; à l'intérieur, deux rectangles « actor » et « critic ». En bas : un rectangle séparé « environment ».

Deep Reinforcement Learning en Python

La dynamique Actor Critic

 

  • À chaque étape :
    • L'actor choisit une action (comme le réseau de politique dans REINFORCE)
    • Le critic observe la récompense et l'état

Une flèche rouge « action » va de l'actor vers l'environnement.

Deep Reinforcement Learning en Python

La dynamique Actor Critic

 

  • À chaque étape :
    • L'actor choisit une action (comme le réseau de politique dans REINFORCE)
    • Le critic observe la récompense et l'état
    • Le critic évalue l'erreur TD
    • Actor et Critic utilisent l'erreur TD pour mettre à jour les poids

Deux flèches rouges, « State » et « Reward », vont de l'environnement vers le Critic.

Deep Reinforcement Learning en Python

La dynamique Actor Critic

 

  • À chaque étape :
    • L'actor choisit une action (comme le réseau de politique dans REINFORCE)
    • Le critic observe la récompense et l'état
    • Le critic évalue l'erreur TD
    • Actor et Critic utilisent l'erreur TD pour mettre à jour les poids
    • L'actor mis à jour observe le nouvel état

Une flèche « TD error » va du Critic vers l'Actor.

Deep Reinforcement Learning en Python

La dynamique Actor Critic

 

  • À chaque étape :
    • L'actor choisit une action (comme le réseau de politique dans REINFORCE)
    • Le critic observe la récompense et l'état
    • Le critic évalue l'erreur TD
    • Actor et Critic utilisent l'erreur TD pour mettre à jour les poids
    • L'actor mis à jour observe le nouvel état
  • … on recommence

La flèche « State » va maintenant aussi vers l'Actor.

Deep Reinforcement Learning en Python

Les pertes A2C

 

Critic

La fonction de perte du critic. Utilisez l'erreur TD au carré pour le critic : Lc(theta c) = ((r_t + gamma * V theta c (s t + 1)) - V theta c) au carré

  • Perte du critic : erreur TD au carré

 

Actor

La fonction de perte de l'actor. On peut montrer qu'à chaque étape t, on peut utiliser : L(theta) égal au moins le log-proba de l'action multiplié par l'erreur TD ou l'avantage.

  • L'erreur TD reflète l'évaluation du critic
  • Augmenter la probabilité des actions avec erreur TD positive
Deep Reinforcement Learning en Python

Calcul des pertes

 

def calculate_losses(critic_network, action_log_prob, 
                     reward, state, next_state, done):

# Le critic fournit les estimations de valeur d'état value = critic_network(state)
next_value = critic_network(next_state)
td_target = (reward + gamma * next_value * (1-done))
td_error = td_target - value
# Appliquer les formules des pertes actor et critic actor_loss = -action_log_prob * td_error.detach()
critic_loss = td_error ** 2
return actor_loss, critic_loss

 

 

  • Calculer l'erreur TD
  • Calculer la perte de l'actor
    • Utiliser .detach() pour empêcher la propagation du gradient vers les poids du critic
  • Calculer la perte du critic
Deep Reinforcement Learning en Python

La boucle d'entraînement Actor Critic

for episode in range(10):
  state, info = env.reset()
  done = False
  while not done:

# Sélectionner une action action, action_log_prob = select_action(actor, state)
next_state, reward, terminated, truncated, _ = env.step(action) done = terminated or truncated
# Calculer les pertes actor_loss, critic_loss = calculate_losses(critic, action_log_prob, reward, state, next_state, done)
# Mettre à jour l'actor actor_optimizer.zero_grad(); actor_loss.backward(); actor_optimizer.step()
# Mettre à jour le critic critic_optimizer.zero_grad(); critic_loss.backward(); critic_optimizer.step()
state = next_state
Deep Reinforcement Learning en Python

Passons à la pratique !

Deep Reinforcement Learning en Python

Preparing Video For Download...