Cet article sur les agents d'apprentissage automatique chez Unity a Ă©tĂ© Ă©crit par Michael Lanham, un innovateur technique, dĂ©veloppeur actif pour Unity, consultant, gestionnaire et auteur de nombreux jeux, projets graphiques et livres Unity.Les dĂ©veloppeurs Unity ont implĂ©mentĂ© la prise en charge de l'apprentissage automatique, et en particulier de l'apprentissage par renforcement pour la crĂ©ation de SDK d'apprentissage par renforcement profond (DRL) pour les dĂ©veloppeurs de jeux et de simulation. Heureusement, l'Ă©quipe Unity, dirigĂ©e par Danny Lange, a rĂ©ussi Ă mettre en Ćuvre un moteur DRL fiable et moderne capable de fournir des rĂ©sultats impressionnants. Unity utilise le modĂšle d'optimisation de politique proximale (PPO) comme base du moteur DRL; ce modĂšle est beaucoup plus complexe et peut diffĂ©rer Ă certains Ă©gards.
Dans cet article, je vais vous présenter les outils et les SDK pour créer des agents DRL dans les jeux et les simulations. Malgré la nouveauté et la puissance de cet outil, il est facile à utiliser et il dispose d'outils auxiliaires qui vous permettent d'apprendre des concepts d'apprentissage automatique en déplacement. Pour travailler avec le didacticiel, vous devez installer le moteur Unity.
Installer des agents ML
Dans cette section, je parlerai briĂšvement des Ă©tapes Ă suivre pour installer le SDK ML-Agents. Ce matĂ©riel est toujours en version bĂȘta et peut varier d'une version Ă l'autre. Suivez ces Ă©tapes:
- Installez Git sur l'ordinateur; Cela fonctionne à partir de la ligne de commande. Git est un systÚme de gestion de code source trÚs populaire, et il existe de nombreuses ressources sur Internet concernant l'installation et l'utilisation de Git sur toutes les plateformes. AprÚs avoir installé Git, assurez-vous que cela fonctionne en créant un clone de n'importe quel référentiel.
- Ouvrez une invite de commande ou un shell standard. Les utilisateurs de Windows peuvent ouvrir la fenĂȘtre Anaconda.
- Accédez au dossier de travail dans lequel vous souhaitez placer votre nouveau code et entrez la commande suivante (les utilisateurs Windows peuvent sélectionner C: \ ML-Agents):
git clone https://github.com/Unity-Technologies/ml-agents
- Vous clonez donc le rĂ©fĂ©rentiel ml-agents sur votre ordinateur et crĂ©ez un nouveau dossier du mĂȘme nom. Vous pouvez Ă©galement ajouter un numĂ©ro de version au nom du dossier. L'unitĂ©, comme presque tout le monde de l'intelligence artificielle, est en constante Ă©volution, du moins pour l'instant. Cela signifie que de nouveaux changements apparaissent constamment. Au moment de l'Ă©criture, nous clonons le rĂ©fĂ©rentiel dans le dossier ml-agents.6:
git clone https://github.com/Unity-Technologies/ml-agents ml-agents.6
- Créez un nouvel environnement virtuel pour ml-agents et spécifiez la version 3.6, comme ceci:
#Windows
conda create -n ml-agents python = 3,6
#Mac
Utilisez la documentation de votre environnement préféré
- Réactivez votre environnement avec Anaconda:
activer les agents ml
- Installez TensorFlow. Dans Anaconda, cela peut ĂȘtre fait avec la commande suivante:
pip install tensorflow == 1.7.1
- Installez les packages Python. Dans Anaconda, entrez les informations suivantes:
cd ML-Agents #from root folder cd ml-agents or cd ml-agents.6 #for example cd ml-agents pip install -e . or pip3 install -e .
- Vous installez donc tous les packages SDK d'agents nĂ©cessaires; cela peut prendre plusieurs minutes. Ne fermez pas la fenĂȘtre, elle vous sera bientĂŽt utile.
Nous avons donc installé et configuré le SDK Unity Python pour ML-Agents. Dans la section suivante, nous apprendrons comment configurer et former l'un des nombreux environnements fournis par Unity.
Formation d'agent
Nous pouvons maintenant passer immédiatement aux choses sérieuses et explorer des exemples qui utilisent l'apprentissage par renforcement profond (DRL). Heureusement, il existe plusieurs exemples dans la boßte à outils du nouvel agent pour démontrer la puissance du moteur. Ouvrez Unity ou Unity Hub et procédez comme suit:
- Cliquez sur le bouton Ouvrir un projet en haut de la boĂźte de dialogue Projet.
- Localisez et ouvrez le dossier du projet UnitySDK, comme indiqué dans la capture d'écran:
Ouvrez le projet Unity SDK - Attendez que le projet se charge, puis ouvrez la fenĂȘtre Projet en bas de l'Ă©diteur. Si une fenĂȘtre s'ouvre vous demandant de mettre Ă jour le projet, sĂ©lectionnez oui ou continuez. Actuellement, tout le code d'agent est rĂ©trocompatible.
- Localisez et ouvrez la scÚne GridWorld comme indiqué dans la capture d'écran:
Ouverture d'un exemple de scĂšne GridWorld - SĂ©lectionnez l'objet GridAcademy dans la fenĂȘtre HiĂ©rarchie.
- AccĂ©dez Ă la fenĂȘtre Inspecteur et Ă cĂŽtĂ© du champ Cerveau, cliquez sur l'icĂŽne pour ouvrir la boĂźte de dialogue de sĂ©lection du cerveau:
- Sélectionnez le cerveau du GridWorldPlayer. Ce cerveau appartient au joueur, c'est-à -dire que le joueur (vous) peut contrÎler le jeu.
- Cliquez sur le bouton Lecture en haut de l'éditeur et observez l'environnement. Le jeu étant désormais configuré pour contrÎler le joueur, vous pouvez utiliser les touches WASD pour déplacer le cube. La tùche consiste à déplacer le cube bleu vers le symbole vert +, tout en évitant le X rouge.
Mettez-vous à l'aise dans le jeu. Notez que le jeu ne fonctionne que pendant une certaine période de temps et n'est pas au tour par tour. Dans la section suivante, nous apprendrons comment exécuter cet exemple avec l'agent DRL.
Qu'y a-t-il dans le cerveau?
L'un des aspects Ă©tonnants de la plate-forme ML-Agents est la possibilitĂ© de passer rapidement et facilement de la gestion des joueurs Ă la gestion de l'IA / des agents. Pour cela, Unity utilise le concept de «cerveau». Le cerveau peut ĂȘtre contrĂŽlĂ© soit par le joueur, soit par l'agent (cerveau apprenant). La chose la plus Ă©tonnante est que vous pouvez assembler le jeu et le tester en tant que joueur, puis le donner sous le contrĂŽle d'un agent RL. GrĂące Ă cela, tout jeu Ă©crit avec un peu d'effort peut ĂȘtre fait pour ĂȘtre contrĂŽlĂ© Ă l'aide de l'IA.
Le processus de configuration et de démarrage de la formation d'agent RL dans Unity est assez simple. Unity utilise Python externe pour construire un modÚle du cerveau apprenant. L'utilisation de Python a beaucoup de sens car il existe déjà plusieurs bibliothÚques d'apprentissage profond (DL) construites autour de lui. Pour former l'agent dans GridWorld, procédez comme suit:
- Sélectionnez à nouveau GridAcademy et sélectionnez GridWorldLearning dans le champ Brains au lieu de GridWorldPlayer:
Passer Ă l'utilisation de GridWorldLearning Brain - Cochez la case ContrĂŽle Ă droite. Ce paramĂštre simple indique que le cerveau peut ĂȘtre contrĂŽlĂ© de l'extĂ©rieur. Cette option doit ĂȘtre activĂ©e.
- SĂ©lectionnez l'objet trueAgent dans la fenĂȘtre HiĂ©rarchie, puis dans la fenĂȘtre Inspecteur, changez la propriĂ©tĂ© Brain dans le composant Grid Agent en GridWorldLearning brain:
GridWorldLearning emploi de cerveau pour agent - Dans cet exemple, nous avons besoin Ă la fois de l'AcadĂ©mie et de l'Agent pour utiliser le mĂȘme cerveau GridWorldLearning. Basculez vers la fenĂȘtre Anaconda ou Python et sĂ©lectionnez le dossier ML-Agents / ml-agents.
- ExĂ©cutez la commande suivante dans une fenĂȘtre Anaconda ou Python Ă l'aide de l'environnement virtuel ml-agents:
mlagents-learn config / trainer_config.yaml --run-id = firstRun --train
- Cela lancera le modĂšle de formation Unity PPO et un exemple d'agent avec la configuration spĂ©cifiĂ©e. Ă un certain moment, la fenĂȘtre d'invite de commandes vous demandera de dĂ©marrer l'Ă©diteur Unity avec l'environnement chargĂ©.
- Cliquez sur Lecture dans l'Ă©diteur Unity pour lancer l'environnement GridWorld. Peu de temps aprĂšs, vous devriez voir la formation de l'agent et la sortie vers la fenĂȘtre de script Python:
ExĂ©cuter GridWorld en mode d'apprentissage - Notez que le script mlagents-learn est un code Python qui construit un modĂšle RL pour exĂ©cuter un agent. Comme vous pouvez le voir sur la sortie du script, plusieurs paramĂštres (hyperparamĂštres) doivent ĂȘtre configurĂ©s.
- Laissez l'agent apprendre quelques milliers d'itĂ©rations et notez Ă quelle vitesse il apprend. Le modĂšle interne utilisĂ© ici appelĂ© PPO s'est avĂ©rĂ© ĂȘtre un modĂšle d'apprentissage trĂšs efficace pour de nombreuses tĂąches diffĂ©rentes, et il est trĂšs bien adaptĂ© au dĂ©veloppement de jeux. Avec un Ă©quipement suffisamment puissant, un agent peut idĂ©alement apprendre en moins d'une heure.
Laissez lâagent apprendre davantage et explorez dâautres moyens de suivre le processus dâapprentissage de lâagent, comme indiquĂ© dans la section suivante.
Surveillance de l'apprentissage avec TensorBoard
La formation d'un agent à l'aide du modÚle RL ou de tout modÚle DL est souvent une tùche ardue et nécessite une attention aux détails. Heureusement, TensorFlow dispose d'un ensemble d'outils graphiques appelés TensorBoard que vous pouvez utiliser pour surveiller votre processus d'apprentissage. Suivez ces étapes pour démarrer TensorBoard:
- Ouvrez une fenĂȘtre Anaconda ou Python. Activez l'environnement virtuel ml-agents. Ne fermez pas la fenĂȘtre dans laquelle le modĂšle de formation s'exĂ©cute; nous en avons besoin pour continuer.
- Accédez au dossier ML-Agents / ml-agents et exécutez la commande suivante:
tensorboard --logdir = résumés
- Nous lançons donc TensorBoard sur notre propre serveur Web intégré. Vous pouvez charger la page en utilisant l'URL indiquée aprÚs la commande précédente.
- Saisissez l'URL du TensorBoard comme indiquĂ© dans la fenĂȘtre ou saisissez localhost: 6006 ou machinename: 6006 dans le navigateur. AprĂšs environ une heure, vous devriez voir quelque chose comme ceci:
FenĂȘtre de graphique TensorBoard - La capture d'Ă©cran prĂ©cĂ©dente montre des graphiques, chacun affichant un aspect distinct de la formation. Pour comprendre comment notre agent est formĂ©, vous devez traiter chacun de ces graphiques, nous analyserons donc les rĂ©sultats de chaque section:
- Environnement: cette section montre comment l'agent se manifeste dans l'environnement dans son ensemble. Voici une vue plus détaillée des graphiques avec la tendance préférée:
Une image dĂ©taillĂ©e des graphiques de la section Environnement- RĂ©compense cumulative: il s'agit de la rĂ©compense totale qui maximise l'agent. Habituellement, il est nĂ©cessaire qu'il augmente, mais pour une raison quelconque, il peut diminuer. Il est toujours prĂ©fĂ©rable de maximiser les rĂ©compenses entre 1 et -1. Si les rĂ©compenses de calendrier dĂ©passent cette plage, cela doit Ă©galement ĂȘtre corrigĂ©.
- DurĂ©e de l'Ă©pisode: si cette valeur diminue, c'est gĂ©nĂ©ralement un bon signe. En fin de compte, plus les Ă©pisodes sont courts, plus l'entraĂźnement est important. Cependant, gardez Ă l'esprit que si nĂ©cessaire, la durĂ©e des Ă©pisodes peut augmenter, de sorte que l'image peut ĂȘtre diffĂ©rente.
- Leçon: ce tableau indique clairement dans quelle leçon l'agent se trouve; Il est destiné à l'apprentissage du curriculum.
- Pertes: cette section présente des graphiques représentant les pertes ou les coûts calculés pour la police et la valeur. Voici une capture d'écran de cette section avec des flÚches pointant vers les paramÚtres optimaux:
Pertes et formation préférée
- Perte de police: ce graphique détermine la quantité de changement de police au fil du temps. La politique est un élément qui définit les actions, et dans le cas général, ce calendrier devrait tendre à la baisse, montrant que la politique prend de meilleures décisions.
- Perte de valeur: il s'agit de la perte moyenne de la fonction de valeur. En substance, il modélise la façon dont l'agent prédit la valeur de son prochain état. Initialement, cette valeur devrait augmenter et aprÚs stabilisation de la rémunération, elle devrait diminuer.
- Politique: pour évaluer la qualité des actions en PPO, le concept de politique est utilisé, pas un modÚle. La capture d'écran ci-dessous montre les graphiques de politique et la tendance préférée:
Graphiques des politiques et tendances privilĂ©giĂ©es - Entropie: ce graphique montre l'ampleur de l'agent de recherche. Cette valeur doit ĂȘtre rĂ©duite, car l'agent en apprend plus sur l'environnement et a besoin de moins de recherches.
- Taux d'apprentissage: dans ce cas, cette valeur devrait diminuer progressivement de façon linéaire.
- Estimation de la valeur: il s'agit de la valeur moyenne visitĂ©e par tous les Ătats agents. Pour reflĂ©ter les connaissances accrues dâun agent, cette valeur doit croĂźtre puis se stabiliser.
6. Laissez l'agent en cours d'exécution jusqu'à la fin et ne fermez pas le TensorBoard.
7. Revenez Ă la fenĂȘtre Anaconda / Python qui a entraĂźnĂ© le cerveau et exĂ©cutez cette commande:
mlagents-learn config / trainer_config.yaml --run-id = secondRun --train
8. Il vous sera Ă nouveau demandĂ© de cliquer sur Lecture dans l'Ă©diteur; faites-le. Laissez l'agent commencer la formation et effectuez plusieurs sĂ©ances. Dans le processus, regardez la fenĂȘtre TensorBoard et notez comment secondRun est affichĂ© sur les graphiques. Vous pouvez laisser cet agent s'exĂ©cuter jusqu'Ă son terme, mais vous pouvez l'arrĂȘter si vous le souhaitez.
Dans les versions prĂ©cĂ©dentes de ML-Agents, vous deviez d'abord crĂ©er l'exĂ©cutable Unity comme environnement d'apprentissage pour le jeu, puis l'exĂ©cuter. Le cerveau extĂ©rieur de Python aurait dĂ» fonctionner de la mĂȘme maniĂšre. Cette mĂ©thode a rendu trĂšs difficile le dĂ©bogage des problĂšmes dans le code ou dans le jeu. Dans la nouvelle technique, toutes ces difficultĂ©s ont Ă©tĂ© Ă©liminĂ©es.
Maintenant que nous avons vu à quel point il est facile de configurer et de former l'agent, nous allons passer à la section suivante, dans laquelle nous allons apprendre à exécuter l'agent sans le cerveau externe Python et à l'exécuter directement dans Unity.
Lancement d'agent
La formation en Python est géniale, mais vous ne pouvez pas l'utiliser dans un vrai jeu. Idéalement, nous aimerions créer un graphique TensorFlow et l'utiliser dans Unity. Heureusement, la bibliothÚque TensorFlowSharp a été créée qui permet à .NET d'utiliser les graphiques TensorFlow. Cela nous permet de créer des modÚles TFModels hors ligne, puis de les injecter dans le jeu. Malheureusement, nous ne pouvons utiliser que des modÚles formés, mais pas les former de cette façon, du moins pas encore.
Voyons comment cela fonctionne, en utilisant l'exemple du graphique que nous venons de former pour l'environnement GridWorld; utilisez-le comme un cerveau intérieur dans Unity. Suivez les étapes de la section suivante pour configurer et utiliser votre cerveau intérieur:
- Téléchargez le plugin TFSharp ici
- Dans le menu de l'éditeur, sélectionnez Actifs | Importer un package | Forfait personnalisé ...
- Recherchez le package d'actifs que vous venez de télécharger et utilisez les boßtes de dialogue d'importation pour charger le plugin dans le projet.
- Dans le menu, sĂ©lectionnez Modifier | ParamĂštres du projet. La fenĂȘtre ParamĂštres s'ouvre (apparue dans la version 2018.3)
- Recherchez les caractÚres Scripting Define Symbols dans les options du lecteur et modifiez le texte en ENABLE_TENSORFLOW, et activez également le code Allow Unsafe, comme indiqué dans la capture d'écran:
DĂ©finition de l'indicateur ENABLE_TENSORFLOW - Recherchez l'objet GridWorldAcademy dans la fenĂȘtre HiĂ©rarchie et assurez-vous qu'il utilise Brains | GridWorldLearning. DĂ©sactivez l'option Control dans la section Brains du script Grid Academy.
- Recherchez le cerveau GridWorldLearning dans le dossier Assets / Examples / GridWorld / Brains et assurez-vous que le paramĂštre Model dans la fenĂȘtre Inspector est dĂ©fini, comme indiquĂ© dans la capture d'Ă©cran:
TĂąche modĂšle pour le cerveau - GridWorldLearning doit dĂ©jĂ ĂȘtre dĂ©fini comme modĂšle. Dans cet exemple, nous utilisons le TFModel fourni avec l'exemple GridWorld.
- Cliquez sur Lecture pour démarrer l'éditeur et voir comment l'agent gÚre le cube.
Nous lançons maintenant l'environnement pré-formé Unity. Dans la section suivante, nous apprendrons à utiliser le cerveau que nous avons formé dans la section précédente.
Chargement du cerveau formé
Tous les exemples Unity ont des cerveaux prĂ©-formĂ©s qui peuvent ĂȘtre utilisĂ©s pour Ă©tudier des exemples. Bien sĂ»r, nous voulons pouvoir charger nos propres graphiques TF dans Unity et les exĂ©cuter. Pour charger un graphique entraĂźnĂ©, procĂ©dez comme suit:
- Accédez au dossier ML-Agents / ml-agents / models / firstRun-0. à l'intérieur de ce dossier se trouve le fichier GridWorldLearning.bytes. Faites glisser ce fichier dans le dossier Project / Assets / ML-Agents / Examples / GridWorld / TFModels à l'intérieur de l'éditeur Unity:
Faire glisser un graphique d'octets dans Unity - Nous importons donc le graphique dans le projet Unity en tant que ressource et le renommons en GridWorldLearning 1. Le moteur le fait car le modĂšle par dĂ©faut porte dĂ©jĂ le mĂȘme nom.
- Recherchez GridWorldLearning dans le dossier cerveau, sĂ©lectionnez-le dans la fenĂȘtre Inspecteur et faites glisser le nouveau modĂšle GridWorldLearning 1 dans le champ ModĂšle des paramĂštres du cerveau:
Chargement du cerveau dans le champ Graph Model - Ă ce stade, nous n'avons pas besoin de modifier d'autres paramĂštres, mais portons une attention particuliĂšre Ă la configuration du cerveau. Pour l'instant, les paramĂštres standard feront l'affaire.
- Cliquez sur Jouer dans l'éditeur Unity et voyez comment l'agent se déplace avec succÚs dans le jeu.
- Le succÚs de l'agent dans le jeu dépend du temps de sa formation. Si vous lui permettez de suivre la formation, l'agent sera similaire à un agent Unity parfaitement formé.