Sortie de ML-Agents v2.0 : La formation aux comportements coopératifs complexes est désormais possible

Il y a environ un an, nous avons annoncé la sortie du package ML-Agents v1.0 Unity, qui a été vérifié pour la version 2020.2 de l'éditeur. Aujourd'hui, nous avons le plaisir d'annoncer la sortie de la version 2.0 du package ML-Agents Unity, actuellement en cours de vérification pour la version 2021.2 de l'éditeur. Au cours de l'année écoulée, nous avons apporté plus de quinze mises à jour importantes au projet ML-Agents GitHub, notamment des améliorations au flux de travail de l'utilisateur, de nouveaux algorithmes d'apprentissage et de nouvelles fonctionnalités, ainsi qu'une augmentation significative des performances. Dans ce billet de blog, nous mettrons l'accent sur trois développements essentiels : La capacité à former des comportements coopératifs, à permettre aux agents d'observer diverses entités dans leur environnement et à exploiter la paramétrisation des tâches pour soutenir la formation de tâches multiples. Ces avancées combinées rapprochent les agents ML de la prise en charge complète d'environnements coopératifs complexes.
Dans notre billet de blog de fin d'année 2020, nous avons présenté un bref résumé de tous les progrès réalisés depuis la publication de la version 1.0 en mai 2020 jusqu'au mois de décembre de la même année. Nous avons également présenté les trois principales améliorations algorithmiques sur lesquelles nous avions prévu de nous concentrer au cours du premier semestre 2021 : Le comportement coopératif multi-agents, la capacité d'un agent à observer un nombre variable d'entités, et l'établissement d'un modèle unique pour résoudre plusieurs tâches. Nous pouvons désormais affirmer avec fierté que ces trois améliorations majeures sont disponibles dans ML-Agents.
En plus de ces trois fonctionnalités, nous avons apporté les modifications suivantes à la version principale de ML-Agents :
Ajout d'un certain nombre de fonctionnalités qui faisaient auparavant partie de nos extensions compagnon extensions Unity - c'est-à-dire le composant Grid Sensors et les plateaux de jeu Match-3.
Amélioration de l'allocation de la mémoire pendant l'inférence. Dans certaines de nos scènes de démonstration, nous avons observé une réduction allant jusqu'à 98 %.
Suppression des API obsolètes et réduction de notre empreinte API. Ces ajustements révolutionnaires de l'API ont nécessité notre mise à niveau de la version 1.x à la version 2.0. Consultez nos notes de mise à jour et notre guide de migration pour plus de détails sur la mise à niveau en toute simplicité.
Dans la suite de ce billet, nous développerons les rôles des comportements coopératifs, de l'observation à longueur variable et de la paramétrisation des tâches, ainsi que deux améliorations progressives : Promotion des caractéristiques du paquet d'extensions et des performances globales. Nous ferons également le point sur notre offre ML-Agents Cloud et partagerons un aperçu de notre nouvel environnement de jeu passionnant qui mettra en évidence des comportements coopératifs complexes, avant sa sortie dans quelques semaines.
Dans de nombreux environnements, tels que les jeux multijoueurs comme Among Us, les joueurs doivent collaborer pour résoudre les tâches qui leur sont confiées. S'il était auparavant possible de former des agents ML avec plusieurs agents dans la scène, il n'était pas possible de définir des groupes d'agents spécifiques avec des objectifs mutuels jusqu'à la version 15 (mars 2020). ML-Agents prend désormais explicitement en charge l'apprentissage des comportements coopératifs. Ainsi, des groupes d'agents peuvent travailler à la réalisation d'un objectif commun, la réussite de chacun étant liée à celle de l'ensemble du groupe.
Dans ces scénarios, les agents reçoivent généralement des récompenses en tant que groupe. Ainsi, si une équipe d'agents gagne un match contre une équipe adverse, tout le monde est récompensé, même les agents qui n'ont pas directement contribué à cette victoire, ce qui rend difficile l'apprentissage autonome de ce qu'il faut faire. C'est pourquoi nous avons développé un nouvel entraîneur multi-agent (appelé MA-POCA pour Multi-Agent POsthumous Credit Assignment ; l'article arXiv complet sera bientôt disponible) pour entraîner un critique centralisé - un réseau neuronal qui agit comme un "coach" pour l'ensemble du groupe d'agents.
Grâce à cet ajout, vous pouvez continuer à récompenser l'équipe dans son ensemble, mais les agents apprendront également comment contribuer au mieux à leur réussite commune. Les agents peuvent même recevoir des récompenses individuelles, afin de rester motivés et de s'entraider pour atteindre leurs objectifs. Au cours d'un épisode, vous pouvez ajouter ou retirer des agents du groupe, par exemple lorsque des agents apparaissent ou meurent au cours d'un jeu. Si les agents sont retirés au milieu de l'épisode, ils seront toujours en mesure de comprendre si leurs actions ont contribué ou non à la victoire de l'équipe par la suite. Cela leur permet de faire passer le groupe en premier dans leurs actions, même s'ils finissent par se retirer du jeu en se sacrifiant ou en prenant d'autres décisions dans le cadre du jeu. En combinant MA-POCA avec l'auto-jeu, vous pouvez également former des équipes d'agents à jouer les uns contre les autres.
En outre, nous avons développé deux nouveaux environnements d'échantillonnage : Cooperative Push Block et Dungeon Escape. Le bloc Push coopératif présente une tâche qui nécessite l'intervention de plusieurs agents. La vidéo ci-dessous présente Dungeon Escape, dans lequel un agent doit tuer le dragon, le faisant disparaître au milieu de l'épisode, afin que ses coéquipiers puissent ramasser la clé et s'échapper du donjon.
Consultez notre documentation pour savoir comment mettre en œuvre des agents coopératifs dans votre projet.
L'une des fonctionnalités les plus fréquemment demandées pour la boîte à outils est de permettre aux personnages du jeu de réagir à un nombre variable d'entités. Dans les jeux vidéo, les personnages apprennent souvent à faire face à plusieurs ennemis ou objets à la fois. Pour répondre à cette demande, la version 15 (mars 2020) permet désormais de spécifier un tableau d'observations de longueur arbitraire appelé "tampon d'observation". Les agents peuvent apprendre à utiliser une mémoire tampon de taille arbitraire grâce à un module d'attention qui code et traite un nombre variable d'observations.
Le module d'attention est une excellente solution dans les situations où un personnage de jeu doit apprendre à éviter des projectiles, par exemple, mais où le nombre de projectiles dans la scène n'est pas fixe. Dans cette vidéo, chaque projectile est représenté par quatre valeurs : Deux pour le positionnement et deux pour la vitesse. Pour chaque projectile de la scène, ces quatre valeurs sont ajoutées à un tampon d'observations du projectile. L'agent peut alors apprendre à ignorer les projectiles qui ne sont pas sur une trajectoire de collision et à accorder une attention particulière aux projectiles les plus dangereux.
De plus, les agents peuvent apprendre l'importance des entités en fonction de leurs relations avec les autres entités de la scène. Par exemple, si les agents doivent apprendre à trier les tuiles par ordre croissant, ils seront en mesure de déterminer quelle tuile est la prochaine tuile correcte en se basant sur les informations de toutes les autres tuiles. Ce nouvel environnement, baptisé Sorter, est désormais disponible parmi nos exemples d'environnements que vous pouvez télécharger et utiliser pour commencer.
Consultez notre documentation pour savoir comment mettre en œuvre des observations de longueur variable dans votre projet.
Les personnages de jeux vidéo sont souvent confrontés à plusieurs tâches dans différents modes de jeu. L'une des façons de relever ce défi consiste à former plusieurs comportements séparément, puis à passer de l'un à l'autre. Toutefois, il est préférable de former un modèle unique capable d'effectuer plusieurs tâches à la fois. Après tout, un modèle unique réduit l'empreinte mémoire dans le jeu final et, par extension, raccourcit le temps d'apprentissage global puisque le modèle peut réutiliser certaines parties du réseau neuronal pour plusieurs tâches. À cette fin, nous avons ajouté la possibilité pour un modèle unique d'encoder plusieurs comportements à l'aide d'HyperNetworks dans notre dernière version(version 17).
Dans la pratique, nous utilisons un nouveau type d'observation appelé "signal d'objectif", ainsi qu'un petit réseau neuronal appelé "HyperNetwork", pour générer certains des poids d'un autre réseau neuronal plus grand. Ce réseau plus vaste est celui qui informe le comportement de l'agent et permet au réseau neuronal du comportement d'avoir des poids différents, en fonction de l'objectif de l'agent, tout en conservant certains éléments partagés entre les objectifs lorsque cela est nécessaire.
La vidéo suivante montre un agent en train de résoudre deux tâches présentes dans les exemples de ML-Agents(WallJump et PushBlock) en même temps. Si la couleur du fond est verte, l'agent doit pousser le bloc dans la zone verte. Mais si la case en haut à droite est verte, l'agent doit sauter par-dessus le mur sur la case verte.
Consultez notre documentation pour savoir comment mettre en œuvre le paramétrage des tâches à l'aide de signaux d'objectifs dans votre projet.

En novembre 2020, nous avons écrit sur la façon dont Eidos a développé un nouveau type de capteur dans les ML-Agents, appelé Grid Sensor. Cette implémentation de Grid Sensor a été ajoutée à notre paquetage d'extensions à l'époque, avant que nous n'itérions sur l'implémentation et que nous la promouvions dans cette dernière version du paquetage principal ML-Agents.
Dans la version 10 (novembre 2020) de ML-Agents, nous avons introduit un nouvel environnement Match-3 et ajouté des utilitaires à notre paquet d'extensions pour permettre l'entraînement de jeux Match-3. Depuis, nous nous sommes associés à Code Monkey pour publier un tutoriel vidéo. Comme pour Grid Sensors, nous avons intégré nos utilitaires d'entraînement aux jeux de Match-3 dans le package ML-Agents de notre dernière version.
Notre objectif est de continuer à améliorer les ML-Agents. Après avoir pris connaissance de vos commentaires sur la quantité de mémoire allouée pendant l'inférence, nous avons rapidement procédé à des réductions significatives de l'allocation. Le tableau ci-dessous montre une comparaison des métriques du ramassage des ordures (kilo-octets par étape de l'Académie) dans deux de nos scènes d'exemple entre les versions 1.0 (sortie en mai 2020) et 2.0 (sortie en avril 2021). Ces mesures excluent la mémoire utilisée par Barracuda (le moteur d'inférence Unity sur lequel ML-Agents s'appuie pour l'inférence multiplateforme) :

Dans notre article de blog sur la version 1.0, nous avons d'abord donné quelques détails sur le ML-Agents Cloud. Notre service ML-Agents Cloud vous permet de lancer plusieurs sessions de formation qui s'exécutent en parallèle sur notre infrastructure en nuage, afin que vous puissiez mener à bien votre expérimentation en temps voulu. Aujourd'hui, les fonctionnalités de base de ML-Agents Cloud vous permettent de.. :
Téléchargez vos jeux avec les ML-Agents implémentés (C#).
Démarrer, interrompre, reprendre et arrêter les expériences de formation. Vous pouvez lancer plusieurs expériences en même temps et exploiter des machines haut de gamme pour créer de nombreuses instances Unity simultanées pour chaque expérience d'apprentissage, tout cela dans des délais plus courts.
Téléchargez les résultats de plusieurs expériences de formation.
Pendant le reste de l'année 2021, nous prévoyons d'accélérer le développement de ML-Agents Cloud, sur la base des commentaires des clients Alpha. D'autres fonctionnalités permettront de visualiser les résultats, de gérer les expériences à partir d'une interface Web et d'exploiter le réglage des hyperparamètres. En fait, nous acceptons encore aujourd'hui des candidats au programme Alpha. Si vous souhaitez vous inscrire, veuillez le faire ici.
Dans ce billet, nous avons présenté trois améliorations fondamentales qui rapprochent les ML-Agents de la prise en charge de jeux coopératifs complexes. Nous avons démontré chacune de ces trois améliorations de manière isolée, et nous avons également discuté des exemples d'environnements récemment ajoutés à la boîte à outils. Ce que nous n'avons pas encore révélé, c'est un autre environnement de démonstration à venir, appelé Dodgeball. La balle au prisonnier est un jeu d'équipe contre équipe qui met en évidence la façon dont les trois fonctions fonctionnent ensemble. Les agents doivent raisonner dans des environnements complexes pour résoudre des modes multiples, coopérer avec leurs coéquipiers et observer les différentes entités d'une scène. Nous prévoyons de publier cet environnement dans les semaines à venir, en même temps qu'un autre article de blog dédié. En attendant, voici un aperçu de nos agents qui s'entraînent à jouer à la balle au prisonnier.
Au nom de toute l'équipe d'Unity ML-Agents, nous tenons à vous remercier de nous avoir accompagnés dans cette aventure et de nous avoir soutenus tout au long de ces années.
Si vous souhaitez travailler à cette intersection passionnante de l'apprentissage automatique et des jeux, nous recrutons pour plusieurs postes et vous encourageons à postuler ici.
Enfin, nous serions ravis de recevoir vos commentaires ! Pour tout commentaire concernant la boîte à outils Unity ML-Agents, veuillez répondre à l'enquête suivante ou nous envoyer un courriel à ml-agents@unity3d.com. Si vous rencontrez des problèmes, n'hésitez pas à nous contacter sur la page ML-Agents GitHub issues. Pour tout autre commentaire ou question d'ordre général, n'hésitez pas à nous en faire part sur les forums Unity ML-Agents.
