Agenten für maschinelles Lernen bei Unity

Bild

Dieser Artikel über Agenten für maschinelles Lernen bei Unity wurde von Michael Lanham verfasst, einem technischen Innovator, aktiven Entwickler für Unity, Berater, Manager und Autor vieler Unity-Spiele, Grafikprojekte und Bücher.

Unity-Entwickler haben Unterstützung für maschinelles Lernen implementiert, insbesondere für das Verstärkungslernen, um DRL-SDKs (Deep Reinforcement Learning) für Spiele- und Simulationsentwickler zu erstellen. Glücklicherweise hat das Unity-Team unter der Leitung von Danny Lange erfolgreich eine zuverlässige und moderne DRL-Engine implementiert, die beeindruckende Ergebnisse liefern kann. Unity verwendet das PPO-Modell (Proximal Policy Optimization) als Grundlage für die DRL-Engine. Dieses Modell ist viel komplexer und kann sich in einigen Aspekten unterscheiden.

In diesem Artikel werde ich Ihnen die Tools und SDKs zum Erstellen von DRL-Agenten in Spielen und Simulationen vorstellen. Trotz der Neuheit und Leistungsfähigkeit dieses Tools ist es einfach zu bedienen und verfügt über zusätzliche Tools, mit denen Sie unterwegs Konzepte für maschinelles Lernen erlernen können. Um mit dem Tutorial arbeiten zu können, müssen Sie die Unity-Engine installieren.

Installieren Sie ML-Agents


In diesem Abschnitt werde ich kurz auf die Schritte eingehen, die zur Installation des ML-Agents SDK ausgeführt werden müssen. Dieses Material befindet sich noch in der Beta-Phase und kann von Version zu Version variieren. Befolgen Sie diese Schritte:

  1. Installieren Sie Git auf dem Computer. Es funktioniert über die Befehlszeile. Git ist ein sehr beliebtes Quellcodeverwaltungssystem, und im Internet gibt es viele Ressourcen zur plattformübergreifenden Installation und Verwendung von Git. Stellen Sie nach der Installation von Git sicher, dass es funktioniert, indem Sie einen Klon eines beliebigen Repositorys erstellen.
  2. Öffnen Sie eine Eingabeaufforderung oder eine reguläre Shell. Windows-Benutzer können das Anaconda-Fenster öffnen.
  3. Wechseln Sie in den Arbeitsordner, in dem Sie Ihren neuen Code ablegen möchten, und geben Sie den folgenden Befehl ein (Windows-Benutzer können C: \ ML-Agents auswählen):

      Git-Klon https://github.com/Unity-Technologies/ml-agents 
  4. Sie klonen also das ml-Agenten-Repository auf Ihrem Computer und erstellen einen neuen Ordner mit demselben Namen. Sie können dem Ordnernamen auch eine Versionsnummer hinzufügen. Die Einheit ändert sich, wie fast die gesamte Welt der künstlichen Intelligenz, zumindest vorerst ständig. Dies bedeutet, dass ständig neue Änderungen angezeigt werden. Zum Zeitpunkt des Schreibens klonen wir das Repository in den Ordner ml-agent.6:

      Git-Klon https://github.com/Unity-Technologies/ml-agents ml-Agents.6 
  5. Erstellen Sie eine neue virtuelle Umgebung für ml-Agenten und geben Sie Version 3.6 wie folgt an:

      #Fenster 
     conda create -n ml-agent python = 3.6
     
     #Mac
     Verwenden Sie die Dokumentation für Ihre bevorzugte Umgebung 
  6. Aktivieren Sie Ihre Umgebung erneut mit Anaconda:

      ml-Mittel aktivieren 
  7. Installieren Sie TensorFlow. In Anaconda kann dies mit dem folgenden Befehl erfolgen:

      pip install tensorflow == 1.7.1 
  8. Installieren Sie Python-Pakete. Geben Sie in Anaconda Folgendes ein:

    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 . 
  9. Sie installieren also alle erforderlichen Agents SDK-Pakete. Dies kann einige Minuten dauern. Schließen Sie das Fenster nicht, es wird sich bald als nützlich erweisen.

Deshalb haben wir das Unity Python SDK für ML-Agenten installiert und konfiguriert. Im nächsten Abschnitt erfahren Sie, wie Sie eine der vielen von Unity bereitgestellten Umgebungen einrichten und trainieren.

Agententraining


Jetzt können wir sofort zur Sache kommen und Beispiele untersuchen, die Deep Reinforcement Learning (DRL) verwenden. Glücklicherweise enthält das Toolkit des neuen Agenten mehrere Beispiele, um die Leistung des Motors zu demonstrieren. Öffnen Sie Unity oder Unity Hub und führen Sie die folgenden Schritte aus:

  1. Klicken Sie oben im Dialogfeld Projekt auf die Schaltfläche Projekt öffnen.
  2. Suchen Sie den UnitySDK-Projektordner und öffnen Sie ihn, wie im Screenshot gezeigt:


    Öffnen Sie das Unity SDK-Projekt
  3. Warten Sie, bis das Projekt geladen ist, und öffnen Sie dann das Projektfenster unten im Editor. Wenn ein Fenster geöffnet wird, in dem Sie aufgefordert werden, das Projekt zu aktualisieren, wählen Sie Ja oder fahren Sie fort. Derzeit ist der gesamte Agentencode abwärtskompatibel.
  4. Suchen und öffnen Sie die GridWorld-Szene wie im Screenshot gezeigt:


    Öffnen eines Beispiels einer GridWorld-Szene
  5. Wählen Sie das GridAcademy-Objekt im Hierarchiefenster aus.
  6. Gehen Sie zum Inspektorfenster und klicken Sie neben dem Feld Gehirn auf das Symbol, um den Dialog zur Gehirnauswahl zu öffnen:

  7. Wählen Sie das Gehirn des GridWorldPlayer aus. Dieses Gehirn gehört dem Spieler, dh der Spieler (Sie) kann das Spiel steuern.
  8. Klicken Sie oben im Editor auf die Schaltfläche Wiedergabe und beobachten Sie die Umgebung. Da das Spiel jetzt so eingerichtet ist, dass es den Spieler steuert, können Sie den Würfel mit den WASD-Tasten bewegen. Die Aufgabe besteht darin, den blauen Würfel auf das grüne + Symbol zu verschieben und dabei das rote X zu vermeiden.

Mach es dir im Spiel bequem. Beachten Sie, dass das Spiel nur für einen bestimmten Zeitraum funktioniert und nicht rundenbasiert ist. Im nächsten Abschnitt erfahren Sie, wie Sie dieses Beispiel mit dem DRL-Agenten ausführen.

Was ist im Gehirn?


Einer der erstaunlichen Aspekte der ML-Agents-Plattform ist die Möglichkeit, schnell und einfach vom Player-Management zum AI / Agent-Management zu wechseln. Dafür verwendet Unity das Konzept eines „Gehirns“. Das Gehirn kann entweder vom Spieler oder vom Agenten (Lernhirn) gesteuert werden. Das Erstaunlichste ist, dass Sie das Spiel zusammenstellen und als Spieler testen und dann unter der Kontrolle eines RL-Agenten geben können. Dank dessen kann jedes geschriebene Spiel mit ein wenig Aufwand mithilfe von KI gesteuert werden.

Das Einrichten und Starten des RL-Agententrainings in Unity ist recht einfach. Unity verwendet externes Python, um ein Modell des lernenden Gehirns zu erstellen. Die Verwendung von Python ist sehr sinnvoll, da bereits mehrere DL-Bibliotheken (Deep Learning) darauf aufgebaut sind. Führen Sie die folgenden Schritte aus, um den Agenten in GridWorld zu schulen:

  1. Wählen Sie GridAcademy erneut aus und wählen Sie das GridWorldLearning-Gehirn im Feld Brains anstelle von GridWorldPlayer aus:


    Wechseln zu GridWorldLearning Brain
  2. Aktivieren Sie das Kontrollkästchen rechts. Dieser einfache Parameter gibt an, dass das Gehirn extern gesteuert werden kann. Diese Option muss aktiviert sein.
  3. Wählen Sie das trueAgent-Objekt im Hierarchiefenster aus und ändern Sie dann im Inspektorfenster die Brain-Eigenschaft in der Grid Agent-Komponente in das GridWorldLearning-Gehirn:


    GridWorldLearning-Gehirnjob für Agent
  4. In diesem Beispiel benötigen sowohl Academy als auch Agent dasselbe GridWorldLearning-Gehirn. Wechseln Sie zum Fenster Anaconda oder Python und wählen Sie den Ordner ML-Agents / ml-Agents.
  5. Führen Sie den folgenden Befehl in einem Anaconda- oder Python-Fenster in der virtuellen Umgebung von ml-agent aus:

      mlagents-learn config / Trainer_config.yaml --run-id = firstRun --train 
  6. Dadurch werden das Unity PPO-Schulungsmodell und ein Beispielagent mit der angegebenen Konfiguration gestartet. Ab einem bestimmten Punkt werden Sie im Eingabeaufforderungsfenster aufgefordert, den Unity-Editor mit der geladenen Umgebung zu starten.
  7. Klicken Sie im Unity-Editor auf Wiedergabe, um die GridWorld-Umgebung zu starten. Bald darauf sollten Sie Agententraining und Ausgabe im Python-Skriptfenster sehen:


    Ausführen von GridWorld im Lernmodus
  8. Beachten Sie, dass das mlagents-learn-Skript ein Python-Code ist, der ein RL-Modell zum Ausführen eines Agenten erstellt. Wie Sie der Ausgabe des Skripts entnehmen können, müssen mehrere Parameter (Hyperparameter) konfiguriert werden.
  9. Lassen Sie den Agenten einige tausend Iterationen lernen und feststellen, wie schnell er lernt. Das hier verwendete interne Modell namens PPO hat sich als sehr effektives Lernmodell für viele verschiedene Aufgaben erwiesen und eignet sich sehr gut für die Spieleentwicklung. Mit ausreichend leistungsfähiger Ausrüstung kann ein Agent idealerweise in weniger als einer Stunde lernen.

Lassen Sie den Agenten weiter lernen und erkunden Sie andere Möglichkeiten, um den Lernprozess des Agenten zu verfolgen, wie im nächsten Abschnitt dargestellt.

Lernüberwachung mit TensorBoard


Die Schulung eines Agenten mithilfe des RL-Modells oder eines DL-Modells ist oft eine entmutigende Aufgabe und erfordert Liebe zum Detail. Glücklicherweise verfügt TensorFlow über eine Reihe von Diagrammtools namens TensorBoard, mit denen Sie Ihren Lernprozess überwachen können. Führen Sie die folgenden Schritte aus, um TensorBoard zu starten:

  1. Öffnen Sie ein Anaconda- oder Python-Fenster. Aktivieren Sie die virtuelle Umgebung der ml-Agenten. Schließen Sie nicht das Fenster, in dem das Trainingsmodell ausgeführt wird. Wir brauchen es, um fortzufahren.
  2. Gehen Sie zum Ordner ML-Agents / ml-Agents und führen Sie den folgenden Befehl aus:

      tensorboard --logdir = Zusammenfassungen 
  3. Deshalb starten wir TensorBoard auf unserem eigenen integrierten Webserver. Sie können die Seite unter der nach dem vorherigen Befehl angezeigten URL laden.
  4. Geben Sie die URL für das TensorBoard wie im Fenster gezeigt ein oder geben Sie localhost: 6006 oder machinename: 6006 in den Browser ein. Nach ungefähr einer Stunde sollten Sie so etwas sehen:


    TensorBoard-Diagrammfenster
  5. Der vorherige Screenshot zeigt Diagramme, von denen jedes einen eigenen Aspekt des Trainings zeigt. Um zu verstehen, wie unser Agent geschult ist, müssen Sie sich mit jedem dieser Diagramme befassen. Daher analysieren wir die Ergebnisse der einzelnen Abschnitte:

  • Umgebung: Dieser Abschnitt zeigt, wie sich der Agent in der gesamten Umgebung manifestiert. Unten finden Sie eine detailliertere Ansicht der Diagramme mit dem bevorzugten Trend:


Ein detailliertes Bild der Grafiken des Abschnitts Umwelt

  • Kumulative Belohnung: Dies ist die Gesamtbelohnung, die den Agenten maximiert. Normalerweise ist es notwendig, dass es zunimmt, aber aus irgendeinem Grund kann es abnehmen. Es ist immer am besten, die Belohnungen zwischen 1 und -1 zu maximieren. Wenn die Zeitplanprämien diesen Bereich überschreiten, muss dies ebenfalls behoben werden.
  • Episodenlänge: Wenn dieser Wert abnimmt, ist dies normalerweise ein gutes Zeichen. Je kürzer die Episoden, desto mehr Training. Beachten Sie jedoch, dass sich die Länge der Episoden bei Bedarf erhöhen kann, sodass das Bild möglicherweise anders ist.
  • Lektion: Diese Tabelle macht deutlich, in welcher Lektion sich der Agent befindet. Es ist für das Lernen im Lehrplan gedacht.
  • Verluste: Dieser Abschnitt zeigt Diagramme, die die berechneten Verluste oder Kosten für die Police und den Wert darstellen. Unten sehen Sie einen Screenshot dieses Abschnitts mit Pfeilen, die auf die optimalen Einstellungen zeigen:


    Verluste und bevorzugte Ausbildung

  • Richtlinienverlust: Dieses Diagramm bestimmt das Ausmaß der Richtlinienänderung im Laufe der Zeit. Politik ist ein Element, das Handlungen definiert, und im Allgemeinen sollte dieser Zeitplan nach unten tendieren, um zu zeigen, dass die Politik bessere Entscheidungen trifft.
  • Wertverlust: Dies ist der durchschnittliche Verlust der Wertfunktion. Im Wesentlichen wird modelliert, wie gut der Agent den Wert seines nächsten Zustands vorhersagt. Dieser Wert sollte zunächst steigen und nach Stabilisierung der Vergütung sinken.
  • Politik: Um die Qualität der Maßnahmen in PPO zu bewerten, wird das Konzept der Politik verwendet, nicht das Modell. Der folgende Screenshot zeigt die Richtliniendiagramme und den bevorzugten Trend:


    Richtliniendiagramme und bevorzugte Trends
  • Entropie: Diese Grafik zeigt die Größe des Forschungsagenten. Dieser Wert muss reduziert werden, da der Agent mehr über die Umgebung erfährt und weniger Forschung benötigt.
  • Lernrate: In diesem Fall sollte dieser Wert allmählich linear abnehmen.
  • Wertschätzung: Dies ist der Durchschnittswert, den alle Agentenstaaten besucht haben. Um das erhöhte Wissen eines Agenten widerzuspiegeln, muss dieser Wert wachsen und sich dann stabilisieren.

6. Lassen Sie den Agenten bis zum Abschluss laufen und schließen Sie das TensorBoard nicht.
7. Kehren Sie zum Anaconda / Python-Fenster zurück, in dem das Gehirn trainiert wurde, und führen Sie den folgenden Befehl aus:

  mlagents-learn config / Trainer_config.yaml --run-id = secondRun --train 

8. Sie werden erneut aufgefordert, im Editor auf Wiedergabe zu klicken. so mach es. Lassen Sie den Agenten mit dem Training beginnen und führen Sie mehrere Sitzungen durch. Beobachten Sie dabei das TensorBoard-Fenster und beachten Sie, wie secondRun in Diagrammen angezeigt wird. Sie können diesen Agenten bis zur Fertigstellung laufen lassen, aber Sie können ihn auf Wunsch stoppen.

In früheren Versionen von ML-Agents mussten Sie zuerst die ausführbare Unity-Datei als Lernumgebung für das Spiel erstellen und dann ausführen. Pythons äußeres Gehirn hätte genauso funktionieren sollen. Diese Methode machte es sehr schwierig, Probleme im Code oder im Spiel zu debuggen. Bei der neuen Technik wurden alle diese Schwierigkeiten beseitigt.

Nachdem wir gesehen haben, wie einfach es ist, einen Agenten einzurichten und zu schulen, fahren wir mit dem nächsten Abschnitt fort, in dem wir lernen, wie Sie einen Agenten ohne das externe Python-Gehirn ausführen und direkt in Unity ausführen.

Agentenstart


Python-Training ist großartig, aber Sie können es nicht in einem echten Spiel verwenden. Im Idealfall möchten wir ein TensorFlow-Diagramm erstellen und in Unity verwenden. Glücklicherweise wurde die TensorFlowSharp-Bibliothek erstellt, mit der .NET TensorFlow-Grafiken verwenden kann. Auf diese Weise können wir Offline-TFModels-Modelle erstellen und später in das Spiel einfügen. Leider können wir nur trainierte Modelle verwenden, aber nicht so trainieren, zumindest noch nicht.

Lassen Sie uns anhand des Beispiels des Diagramms, das wir gerade für die GridWorld-Umgebung trainiert haben, sehen, wie dies funktioniert. Verwenden Sie es als inneres Gehirn in der Einheit. Befolgen Sie die Schritte im folgenden Abschnitt, um Ihr inneres Gehirn einzurichten und zu verwenden:

  1. Laden Sie hier das TFSharp-Plugin herunter
  2. Wählen Sie im Editor-Menü die Option Assets | Paket importieren | Benutzerdefiniertes Paket ...
  3. Suchen Sie das soeben heruntergeladene Asset-Paket und laden Sie das Plugin mithilfe der Importdialoge in das Projekt.
  4. Wählen Sie im Menü Bearbeiten | Projekteinstellungen. Das Fenster Einstellungen wird geöffnet (erscheint in Version 2018.3).
  5. Suchen Sie in den Player-Optionen nach den Zeichen "Symbole definieren" und ändern Sie den Text in "ENABLE_TENSORFLOW". Aktivieren Sie außerdem den Befehl "Unsicheren Code zulassen" (siehe Abbildung):


    Setzen des Flags ENABLE_TENSORFLOW
  6. Suchen Sie das GridWorldAcademy-Objekt im Hierarchiefenster und stellen Sie sicher, dass es Brains | verwendet GridWorldLearning. Deaktivieren Sie die Option Steuerung im Abschnitt Gehirn des Grid Academy-Skripts.
  7. Suchen Sie das GridWorldLearning-Gehirn im Ordner Assets / Examples / GridWorld / Brains und stellen Sie sicher, dass der Parameter Model im Inspector-Fenster festgelegt ist (siehe Abbildung):


    Modellaufgabe für das Gehirn
  8. GridWorldLearning sollte bereits als Modell festgelegt sein. In diesem Beispiel verwenden wir das TFModel, das mit dem GridWorld-Beispiel geliefert wird.
  9. Klicken Sie auf Wiedergabe, um den Editor zu starten und zu sehen, wie der Agent den Cube verwaltet.

Wir starten jetzt die vorgefertigte Unity-Umgebung. Im nächsten Abschnitt lernen wir, wie man das Gehirn benutzt, das wir im vorherigen Abschnitt trainiert haben.

Geschulte Gehirnbelastung


Alle Unity-Beispiele verfügen über vorab trainierte Gehirne, mit denen Beispiele untersucht werden können. Natürlich möchten wir in der Lage sein, unsere eigenen TF-Diagramme in Unity zu laden und auszuführen. Gehen Sie folgendermaßen vor, um ein trainiertes Diagramm zu laden:

  1. Wechseln Sie in den Ordner ML-Agents / ml-agent / models / firstRun-0. In diesem Ordner befindet sich die Datei GridWorldLearning.bytes. Ziehen Sie diese Datei in den Ordner Project / Assets / ML-Agents / Examples / GridWorld / TFModels im Unity-Editor:


    Ziehen eines Byte-Diagramms in Unity
  2. Daher importieren wir das Diagramm als Ressource in das Unity-Projekt und benennen es in GridWorldLearning 1 um. Die Engine führt dies aus, da das Standardmodell bereits denselben Namen hat.
  3. Suchen Sie GridWorldLearning im Ordner brain, wählen Sie es im Inspektorfenster aus und ziehen Sie das neue Modell GridWorldLearning 1 in das Feld Modell der Parameter Brain Parameters:


    Laden des Gehirns in das Feld Graph Model
  4. Zu diesem Zeitpunkt müssen wir keine weiteren Parameter ändern, sondern müssen besonders darauf achten, wie das Gehirn konfiguriert ist. Im Moment reichen die Standardeinstellungen.
  5. Klicken Sie im Unity-Editor auf "Spielen" und sehen Sie, wie sich der Agent erfolgreich im Spiel bewegt.
  6. Der Erfolg des Agenten im Spiel hängt von der Zeit seines Trainings ab. Wenn Sie ihm erlauben, die Schulung abzuschließen, ähnelt der Agent einem vollständig geschulten Unity-Agenten.

Source: https://habr.com/ru/post/de454612/


All Articles