ML-Agents spielt DodgeBall

Im letzten Blogbeitrag von ML-Agents haben wir neue Funktionen für die Erstellung kooperativer Verhaltensweisen mit Reinforcement Learning angekündigt. Wir freuen uns, Ihnen heute eine neue Umgebung vorstellen zu können, die zeigt, was ML-Agenten leisten können. DodgeBall ist ein Shooter-ähnlicher Wettbewerb, bei dem die Agenten in Eliminierungs- oder Capture the Flag-Runden gegeneinander antreten. Die Umgebung ist quelloffen, also schauen Sie sich unbedingt das Repo an.
Der kürzlich hinzugefügte MA-POCA-Algorithmus in ML-Agents ermöglicht es jedem, kooperative Verhaltensweisen für Gruppen von Agenten zu trainieren. Dieser neuartige Algorithmus ist eine Implementierung des zentralisierten Lernens mit dezentraler Ausführung. Ein zentraler Kritiker (neuronales Netz) verarbeitet die Zustände aller Agenten in der Gruppe, um einzuschätzen, wie gut die Agenten arbeiten, während mehrere dezentrale Akteure (einer pro Agent) die Agenten kontrollieren. Dies ermöglicht es jedem Agenten, Entscheidungen nur auf der Grundlage dessen zu treffen, was er lokal wahrnimmt, und gleichzeitig zu bewerten, wie gut sein Verhalten im Kontext der gesamten Gruppe ist. Das nachstehende Diagramm veranschaulicht das zentralisierte Lernen und die dezentralisierte Ausführung von MA-POCA.

Eine der Neuerungen des MA-POCA-Algorithmus besteht darin, dass er eine spezielle Art von neuronaler Netzarchitektur verwendet, die als Aufmerksamkeitsnetze bezeichnet werden und eine nicht festgelegte Anzahl von Eingaben verarbeiten können. Das bedeutet, dass der zentralisierte Kritiker eine beliebige Anzahl von Agenten bearbeiten kann, weshalb MA-POCA besonders gut für kooperatives Verhalten in Spielen geeignet ist. So können Agenten jederzeit zu einer Gruppe hinzugefügt oder aus ihr entfernt werden - genau wie Charaktere in Videospielen eliminiert werden oder mitten in einem Teamkampf auftauchen können. Das MA-POCA ist auch so konzipiert, dass Agenten Entscheidungen zum Nutzen des Teams treffen können, selbst wenn dies zu ihrem eigenen Nachteil ist. Dieses altruistische Verhalten ist mit einem handcodierten Verhalten schwer zu erreichen, kann aber auf der Grundlage der Nützlichkeit der letzten Aktion eines Agenten für den Gesamterfolg der Gruppe erlernt werden. Schließlich gehen viele Algorithmen des verstärkenden Lernens mit mehreren Agenten davon aus, dass alle Agenten ihre nächste Aktion zur gleichen Zeit wählen, aber in realen Spielen mit zahlreichen Agenten ist es in der Regel besser, sie ihre Entscheidungen zu unterschiedlichen Zeiten treffen zu lassen, um Frame-Drop zu vermeiden. Aus diesem Grund geht MA-POCA nicht von diesen Annahmen aus und funktioniert auch dann, wenn die Entscheidungen der Agenten einer Gruppe nicht übereinstimmen. Damit wir Ihnen zeigen können, wie gut MA-POCA in Spielen funktioniert, haben wir die DodgeBall-Umgebung geschaffen - ein unterhaltsames Team-gegen-Team-Spiel mit einer vollständig mit ML-Agenten trainierten KI.
Die DodgeBall-Umgebung ist ein Third-Person-Shooter, bei dem die Spieler versuchen, so viele Bälle wie möglich aufzusammeln und sie dann auf ihre Gegner zu werfen. Es umfasst zwei Spielmodi: Eliminierung und Capture the Flag. Bei der Eliminierung versucht jede Gruppe, alle Mitglieder der anderen Gruppe zu eliminieren - zwei Treffer und sie sind raus. Bei Capture the Flag versuchen die Spieler, die Flagge des anderen Teams zu stehlen und zu ihrem Stützpunkt zurückzubringen (sie können nur punkten, wenn ihre eigene Flagge noch sicher in ihrem Stützpunkt ist). Wird man in diesem Modus von einem Ball getroffen, lässt man die Flagge fallen und ist für zehn Sekunden betäubt, bevor man zur Basis zurückkehrt. In beiden Modi können die Spieler bis zu vier Bälle halten, den ankommenden Bällen ausweichen und durch Hecken laufen.
Beim Verstärkungslernen beobachten die Agenten ihre Umgebung und führen Aktionen aus, um eine Belohnung zu maximieren. Die Beobachtungen, Aktionen und Belohnungen für das Training von Agenten im Völkerballspiel werden im Folgenden beschrieben.
In DodgeBall beobachten die Agenten ihre Umgebung mit Hilfe der folgenden drei Informationsquellen:
- Strahlenübertragungen: Mit Raycasts können die Agenten spüren, wie die Welt um sie herum aussieht. Die Agenten nutzen diese Informationen, um die Bälle aufzuspüren und zu greifen, Mauern zu umgehen und ihre Gegner anzuvisieren. Verschiedene Strahlensätze - unten durch unterschiedliche Farben dargestellt - werden verwendet, um verschiedene Objektklassen zu erkennen.

- Staatliche Daten: Diese Informationen umfassen die Position des Agenten, die Anzahl der Bälle, die er gerade hält, die Anzahl der Treffer, die er einstecken kann, bevor er eliminiert wird, sowie Informationen über die Flaggen im Modus "Capture the Flag". Die Agenten nutzen diese Informationen, um Strategien zu entwickeln und ihre Gewinnchancen zu bestimmen.
- Andere Agenten geben Daten an: Diese Informationen umfassen die Position und den Gesundheitszustand der Teamkollegen des Agenten und ob einer von ihnen eine Flagge trägt. Da die Anzahl der Agenten nicht festgelegt ist (Agenten können jederzeit ausgeschieden werden), verwenden wir einen Puffersensor für Agenten, um eine variable Anzahl von Beobachtungen zu verarbeiten. Hier bezieht sich die Anzahl der Beobachtungen auf die Anzahl der noch im Spiel befindlichen Mitspieler.
Die DodgeBall-Umgebung nutzt auch hybride Aktionen, die eine Mischung aus kontinuierlichen und diskreten Aktionen sind. Der Agent hat drei fortlaufende Aktionen für die Bewegung: Eine davon ist die Vorwärtsbewegung, eine andere die Seitwärtsbewegung und die letzte die Drehung. Gleichzeitig gibt es zwei diskrete Aktionen: Einer wirft einen Ball, ein anderer rennt. Dieser Aktionsraum entspricht den Aktionen, die ein menschlicher Spieler in den beiden Szenarien "Capture the Flag" und "Elimination" durchführen kann.
In der Zwischenzeit sorgen wir absichtlich dafür, dass die Belohnungen, die die Agenten erhalten, eher einfach sind. Wir geben eine große, endgültige Belohnung für Sieg und Niederlage und einige Zwischenbelohnungen für das Erlernen des Spiels.
Für die Eliminierung:
- Die Agenten erhalten eine Belohnung von +0,1, wenn sie einen Gegner mit einem Ball treffen.
- Die Mannschaft erhält +1, wenn sie das Spiel gewinnt (alle Gegner eliminiert), oder -1, wenn sie verliert.
- Das siegreiche Team erhält außerdem einen Zeitbonus für den schnellen Sieg in Höhe von 1 (verbleibende Zeit) / (maximale Zeit).
Für Capture the Flag:
- Die Agenten erhalten eine Belohnung von +0,02, wenn sie einen Gegner mit einem Ball treffen.
- Die Mannschaft erhält +2, wenn sie das Spiel gewinnt (und die gegnerische Flagge in die Basis zurückbringt), oder -1, wenn sie verliert.
Es ist zwar verlockend, den Agenten viele kleine Belohnungen zu geben, um sie zu erwünschtem Verhalten zu ermutigen, aber wir müssen vermeiden, den Agenten zu sehr vorzuschreiben, welche Strategie sie verfolgen sollen. Wenn wir zum Beispiel eine Belohnung für das Aufsammeln von Bällen in der Elimination geben würden, könnten sich die Agenten ausschließlich auf das Aufsammeln von Bällen konzentrieren, anstatt ihre Gegner zu schlagen. Indem wir unsere Belohnungen so "spärlich" wie möglich gestalten, können die Agenten ihre eigenen Strategien im Spiel entdecken, auch wenn sich dadurch die Trainingszeit verlängert.
Da es so viele verschiedene mögliche Gewinnstrategien gibt, die den Agenten diese Belohnungen einbringen können, mussten wir herausfinden, wie das optimale Verhalten aussehen würde. Wäre es zum Beispiel die beste Strategie, die Bälle zu horten oder sie so zu platzieren, dass man sie später bequem greifen kann? Wäre es klug, als Team zusammenzubleiben oder sich zu verteilen, um den Feind schneller zu finden? Die Antworten auf diese Fragen hingen von den Entscheidungen ab, die wir beim Spieldesign getroffen haben: Wenn die Bälle knapp waren, hielten die Agenten sie länger fest, um zu verhindern, dass die Feinde sie bekommen. Wenn die Agenten jederzeit wissen könnten, wo sich der Feind aufhält, würden sie so oft wie möglich als Gruppe zusammenbleiben. Das heißt, wenn wir Änderungen am Spiel vornehmen wollten, mussten wir keine Codeänderungen an der KI vornehmen. Wir haben einfach ein neues Verhalten antrainiert, das sich an die neue Umgebung anpasst.
Verglichen mit dem Training eines einzelnen Agenten zur Lösung einer Aufgabe ist es komplexer, eine Gruppe von Agenten zur Zusammenarbeit zu trainieren. Um die Verwaltung einer Gruppe von Agenten zu erleichtern, haben wir das Skript DodgeBallGameController.cs erstellt. Dieses Skript dient dazu, den Spielplatz zu initialisieren und zurückzusetzen (dies beinhaltet das Spawnen der Bälle und das Zurücksetzen der Positionen der Agenten). Es ordnet Agenten ihrer SimpleMultiAgentGroup zu und verwaltet die Belohnungen, die jede Gruppe erhält. Das Skript "DodgeBallGameController.cs" behandelt beispielsweise einen Agenten, der einen anderen mit einem Ball trifft, folgendermaßen.

Bei diesem Code erhält der Ballwerfer eine kleine Belohnung, wenn er einen Gegner trifft - aber erst wenn der letzte Gegner eliminiert ist, wird die ganze Gruppe für ihre gemeinsame Anstrengung belohnt.
MA-POCA behandelt Bearbeiter in einer SimpleMultiAgentGroup anders als einzelne Bearbeiter. MA-POCA fasst ihre Beobachtungen zusammen, um zentral zu trainieren. Es verwaltet auch die Belohnungen, die die gesamte Gruppe erhält, zusätzlich zu den individuellen Belohnungen - unabhängig davon, wie viele Agenten der Gruppe beitreten oder sie verlassen. Sie können die kumulativen Belohnungen, die Agenten als Gruppe erhalten, in TensorBoard überwachen.
Da es sich sowohl bei Elimination als auch bei Capture the Flag um gegnerische Spiele handelt, haben wir MA-POCA mit dem Selbstspiel kombiniert, um Agenten gegen ältere Versionen von sich selbst antreten zu lassen und zu lernen, wie man sie besiegt. Wie bei jedem Selbstspiel in ML-Agenten können wir den Lernfortschritt der Agenten überwachen, indem wir sicherstellen, dass die ELO weiter steigt. Nach zig Millionen von Schritten können die Agenten so gut spielen wie jeder von uns.

Dieses Video zeigt, wie die Agenten beim Erlernen des Eliminationsspiels mit der Zeit vorankommen. Sie können sehen, dass die Agenten schon früh in der Ausbildung schießen lernen, aber schlecht zielen können und dazu neigen, wahllos zu schießen. Nach 40 Millionen Zeitschritten hat sich die Zielgenauigkeit der Agenten verbessert, auch wenn sie immer noch etwas wahllos umherwandern, in der Hoffnung, auf einen Feind zu treffen. Wenn sie auf einen Gegner treffen, treten sie in der Regel im direkten Duell gegen ihn an. Nach weiteren 120 Millionen Zeitschritten des Trainings werden die Agenten schließlich wesentlich aggressiver und selbstbewusster und entwickeln ausgeklügelte Strategien, wie z. B. das gemeinsame Eindringen in feindliches Gebiet.
Und hier sind die Agenten, die lernen, wie man "Capture the Flag" spielt: Zu Beginn des Trainings, bei 14 Millionen Schritten, lernen die Agenten, sich gegenseitig zu erschießen, ohne die Flagge tatsächlich zu erobern. Bei 30 Millionen lernen die Agenten, wie sie die feindliche Flagge einsammeln und zur Basis zurückkehren können, aber abgesehen von dem Agenten, der die Flagge trägt, ist nicht klar, welchen Beitrag die anderen Agenten leisten. Bei 80 Millionen Zeitschritten weisen die Agenten jedoch interessante Strategien auf.
Agenten, die nicht die feindliche Flagge halten, bewachen manchmal ihren eigenen Stützpunkt, jagen einen Feind, der ihre Flagge hat, oder warten im gegnerischen Stützpunkt auf die Rückkehr des Flaggenträgers, um ihn mit Bällen zu bewerfen. Wenn sie eine Fahne haben, kann der Agent an seinem eigenen Stützpunkt warten, bis seine Mitspieler die Fahne holen können, damit sie punkten können. Das folgende Video zeigt einige der interessanten emergenten Strategien, die die Agenten gelernt haben. Beachten Sie, dass wir diese Verhaltensweisen nie explizit festgelegt haben - sie wurden im Laufe von Hunderten von Iterationen des Selbstspiels gelernt.
Die DodgeBall-Umgebung ist Open Source und steht hier zum Download bereit. Wir würden uns freuen, wenn Sie es ausprobieren würden. Wenn Sie an dieser spannenden Schnittstelle zwischen maschinellem Lernen und Spielen arbeiten möchten, stellen wir mehrere Stellen ein und laden Sie ein, sich hier zu bewerben.
Und schließlich würden wir gerne Ihr Feedback hören. Für jegliches Feedback zum Unity ML-Agents Toolkit füllen Sie bitte die folgende Umfrage aus oder senden Sie uns direkt eine E-Mail an ml-agents@unity3d.com. Wenn Sie auf Probleme stoßen, zögern Sie nicht, uns auf der ML-Agents GitHub issues Seite zu kontaktieren. Wenn Sie weitere allgemeine Kommentare oder Fragen haben, lassen Sie es uns bitte in den Unity ML-Agents-Foren wissen.
