Intelligence artificielle

Comment construire votre propre DeepMind MuZero en Python – Applied Data Science

Comment construire votre propre DeepMind MuZero en Python - Applied Data Science


Comme indiqué dans les schémas ci-dessus, le nœud feuille est maintenant développé en créant de nouveaux nœuds enfants (un pour chaque action possible dans le jeu) et en attribuant à chaque nœud une priorité avant. Notez que MuZero ne vérifie pas laquelle de ces actions est légale ou si l'action aboutit à la fin du jeu (elle ne le peut pas), crée donc un nœud pour chaque action, qu'elle soit légale ou non.

Enfin, la valeur prédite par le réseau est renvoyée en arrière dans l’arbre, le long du chemin de recherche.

Remarquez comment la valeur est inversée en fonction de son tour (si le nœud feuille est positif pour le joueur qui doit jouer, il sera négatif pour l'autre joueur). En outre, puisque le réseau de prédiction prédit futur valeur, les récompenses collectées sur le chemin de recherche sont collectées et ajoutées à la valeur du nœud feuille réduit lorsqu’elles sont propagées dans l’arbre.

Rappelez-vous, puisque ce sont prédit Récompenses, plutôt que des récompenses réelles de l'environnement, la collection de récompenses est pertinente même pour un jeu comme les échecs, où les véritables récompenses ne sont attribuées qu'à la fin du jeu. MuZero joue son propre jeu imaginé, qui peut inclure des récompenses provisoires, même si le jeu sur lequel il est modelé ne le fait pas.

Ceci termine une simulation du processus SCTM.

Après nombre de simulations passe par l’arborescence, le processus s’arrête et une action est choisie en fonction du nombre de visites de chaque nœud enfant de la racine.

Pour les 30 premiers déplacements, le tempérament de softmax est défini sur 1, ce qui signifie que la probabilité de sélection pour chaque action est proportionnelle au nombre de fois où elle a été visitée. A partir du 30ème coup, l'action avec le nombre maximum de visites est sélectionnée.

softmax_sample: probabilité de sélectionner l’action «alpha» à partir du nœud racine (N correspond au nombre de visites)

Bien que le nombre de visites puisse sembler une mesure étrange pour la sélection de l'action finale, ce n'est pas vraiment le cas, car les critères de sélection d'UCB dans le processus des SCTM sont conçus pour passer plus de temps à explorer des actions qu'il considère vraiment comme des opportunités de grande valeur. , une fois qu'il a suffisamment exploré les alternatives au début du processus.

L'action choisie est ensuite appliquée au véritable environnement et les valeurs pertinentes sont ajoutées aux listes suivantes dans la liste. Jeuobjet.

  • game.rewards - une liste des vraies récompenses reçues à chaque tour du jeu
  • histoire.jeu - une liste des actions entreprises à chaque tour du jeu
  • game.child_visits - une liste des distributions de probabilité d'action du nœud racine à chaque tour du jeu
  • game.root_values - une liste de valeurs du nœud racine à chaque tour du jeu

Ces listes sont importantes car elles seront éventuellement utilisées pour construire les données d’entraînement pour les réseaux de neurones!

Ce processus se poursuit, créant à chaque tour un nouvel arbre SCTM et l’utilisant pour choisir une action jusqu’à la fin de la partie.

Toutes les données du jeu (récompenses, histoire, visites_enfant, valeurs_racine) est sauvegardé dans le tampon de rejeu et l’acteur est alors libre de commencer une nouvelle partie.

Phew.

Ce fut un tour d'horizon complet de la façon dont MuZero joue des jeux contre lui-même et enregistre les données du jeu dans un tampon. Maintenant pour la partie amusante…

La dernière ligne de la fonction d’entrée originale (rappelez-vous que?) Lance le train_network processus qui entraîne en permanence les réseaux de neurones en utilisant les données de la mémoire tampon de réexécution.

Il crée d'abord un nouveau Réseau object (qui stocke des instances initialisées de manière aléatoire des trois réseaux de neurones de MuZero) et définit le taux d’apprentissage en décroissance en fonction du nombre d’étapes d’entraînement terminées. Nous créons également l’optimiseur de descente de gradient qui calculera l’ampleur et la direction des mises à jour du poids à chaque étape de l’entraînement.

La dernière partie de cette fonction passe simplement en boucle entrainement (= 1.000.000 dans le papier, pour les échecs). À chaque étape, il échantillonne un lot de positions à partir du tampon de relecture et les utilise pour mettre à jour les réseaux, lesquels sont enregistrés dans le stockage toutes les checkpoint_interval lots (= 1000).

Il faut donc couvrir deux parties de la finale: comment MuZero crée un lot de données d’entraînement et comment l’utiliser pour mettre à jour les poids des trois réseaux de neurones.

La classe ReplayBuffer contient un sample_batch Méthode d'échantillonnage d'un lot d'observations dans la mémoire tampon:

Le défaut taille du lot La valeur de MuZero pour les échecs est 2048. Ce nombre de jeux est sélectionné dans le tampon et une position est choisie pour chaque.

Un seul lot est une liste de tuples, où chaque tuple est composé de trois éléments:

  • g.make_image (i) - l'observation à la position choisie
  • g.histoire[i:i + num_unroll_steps] - une liste des prochains num_unroll_steps actions entreprises après la position choisie (si elles existent)
  • g.make_target (i, num_unroll_steps, td_steps, g.to_play () - une liste des cibles qui seront utilisées pour former les réseaux de neurones. Plus précisément, voici une liste de tuples:valeur cible, target_reward et politique_cible.

Un schéma d'un exemple de lot est présenté ci-dessous, où num_unroll_steps = 5 (la valeur par défaut utilisée par MuZero):

Afficher plus

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Articles similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Fermer