Mises à jour par lot en gradient de politique

Deep Reinforcement Learning en Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Mises à jour pas à pas vs par lot du gradient

Une grande boîte représentant un épisode.

Deep Reinforcement Learning en Python

Mises à jour pas à pas vs par lot du gradient

Dans la grande boîte, une plus petite apparaît, représentant l'étape 1. À l'intérieur, une autre boîte avec le texte « sélectionner une action ».

Deep Reinforcement Learning en Python

Mises à jour pas à pas vs par lot du gradient

Dans la boîte de l'étape 1, une autre petite boîte apparaît avec le texte « itérer l'environnement ».

Deep Reinforcement Learning en Python

Mises à jour pas à pas vs par lot du gradient

Sous la boîte de l'étape 1, une autre boîte avec les libellés « calculer la perte » et « descente de gradient ».

Deep Reinforcement Learning en Python

Mises à jour pas à pas vs par lot du gradient

Une paire de boîtes identiques apparaît pour la deuxième étape, avec le même contenu.

Deep Reinforcement Learning en Python

Mises à jour pas à pas vs par lot du gradient

Les étapes 3 et 4 apparaissent aussi.

Deep Reinforcement Learning en Python

Regrouper les mises à jour A2C / PPO

Une grande boîte d'épisode ; occupant la moitié de sa surface, une autre boîte « déroulement 1 » ; à l'intérieur, deux boîtes vides « étape 1 » et « étape 2 ».

Deep Reinforcement Learning en Python

Regrouper les mises à jour A2C / PPO

Dans la boîte de l'étape 1, les libellés « sélectionner une action » et « itérer l'environnement » apparaissent.

Deep Reinforcement Learning en Python

Regrouper les mises à jour A2C / PPO

Idem pour l'étape 2.

Deep Reinforcement Learning en Python

Regrouper les mises à jour A2C / PPO

Sous les boîtes des étapes 1 et 2, un seul libellé « calculer la perte » et un seul « descente de gradient ».

Deep Reinforcement Learning en Python

Regrouper les mises à jour A2C / PPO

La moitié restante de la zone d'épisode est occupée par un autre déroulement identique à deux étapes, « déroulement 2 ».

Deep Reinforcement Learning en Python

La boucle d'entraînement A2C avec mises à jour par lot

 

# Set rollout length
rollout_length = 10

# Initiate loss batches
actor_losses = torch.tensor([]) critic_losses = torch.tensor([])
  • Initialiser les lots de pertes
  • Parcourir les épisodes et étapes comme d'habitude

 

for episode in range(10):
  state, info = env.reset()
  done = False
  while not done:
    action, action_log_prob = select_action(actor, 
                                            state)                
    next_state, reward, terminated, truncated, _ = (
                                   env.step(action))
    done = terminated or truncated    
    actor_loss, critic_loss = calculate_losses(
        critic, action_log_prob, 
        reward, state, next_state, done)
    ...
Deep Reinforcement Learning en Python

La boucle d'entraînement A2C avec mises à jour par lot

  ...
  actor_losses = torch.cat((actor_losses, actor_loss))
  critic_losses = torch.cat((critic_losses, critic_loss))

# If rollout is full, update the networks if len(actor_losses) >= rollout_length:
actor_loss_batch = actor_losses.mean() critic_loss_batch = critic_losses.mean()
actor_optimizer.zero_grad() actor_loss_batch.backward() actor_optimizer.step() critic_optimizer.zero_grad() critic_loss_batch.backward() critic_optimizer.step()
actor_losses = torch.tensor([]) critic_losses = torch.tensor([])
state = next_state

 

  • Ajouter la perte d'étape aux lots de pertes
  • Quand le déroulement est plein :
    • Calculer la perte moyenne du lot avec .mean()
    • Effectuer la descente de gradient
    • Réinitialiser les lots de pertes
Deep Reinforcement Learning en Python

A2C / PPO avec plusieurs agents

 

Deux bandes horizontales représentent l'agent 1 et l'agent 2. Chaque agent vit respectivement 4 et 3 épisodes de durées variables. Dans chaque épisode, des boîtes d'étapes sont visibles comme aux diapositives précédentes. Sous les deux bandes, trois boîtes de déroulement couvrent chacune un intervalle de 8 étapes. Dans chaque déroulement, les libellés « calculer la perte » et « descente de gradient » sont visibles. En haut du graphique, une légende indique « longueur de déroulement : 8 étapes ; nombre d'agents : 2 ».

Deep Reinforcement Learning en Python

Déroulements et mini-lots

Deux bandes d'agents identiques à la diapositive précédente. Dessous, 3 boîtes de déroulement sont visibles, mais leur contenu a changé. Elles ont maintenant, en haut, une longue boîte « mélanger ». Dessous, elles sont divisées longitudinalement en 4 boîtes « mini-lot » ; dans chaque mini-lot : « calculer la perte » et « descente de gradient ». En haut, la légende indique : « Longueur de déroulement : 8 étapes ; taille de mini-lot : 4 (2x2) ; nombre d'agents : 2 ».

Deep Reinforcement Learning en Python

PPO avec plusieurs époques

Un dessin très semblable au précédent, sauf que les lots de déroulement sont aussi divisés verticalement en 4 zones : la première est « mélanger » ; la deuxième, une grande boîte « époque 1 » contenant 4 mini-lots en longueur ; la troisième, « remélanger » ; la dernière, « époque 2 », aussi avec 4 mini-lots. La légende dit : « Longueur de déroulement : 8 étapes ; taille de mini-lot : 4 (2x2) ; nombre d'agents : 2 ; nombre d'époques : 2 ».

Deep Reinforcement Learning en Python

Passons à la pratique !

Deep Reinforcement Learning en Python

Preparing Video For Download...