Lösen von Aufgaben mit geringer Belohnung mit Curiosity

ARTHUR JULIANI / UNITY TECHNOLOGIESContributor
Jun 26, 2018|7 Min.
Lösen von Aufgaben mit geringer Belohnung mit Curiosity
Diese Website wurde aus praktischen Gründen für Sie maschinell übersetzt. Die Richtigkeit und Zuverlässigkeit des übersetzten Inhalts kann von uns nicht gewährleistet werden. Sollten Sie Zweifel an der Richtigkeit des übersetzten Inhalts haben, schauen Sie sich bitte die offizielle englische Version der Website an.

Wir haben gerade die neue Version des ML-Agents-Toolkits (v0.4)veröffentlicht und eine der neuen Funktionen, die wir gerne mit allen teilen möchten, ist die Möglichkeit, Agenten mit einer zusätzlichen, auf Neugier basierenden intrinsischen Belohnung zu trainieren.

Da es bei dieser Funktion viel zu erklären gibt, wollte ich einen zusätzlichen Blog-Beitrag dazu schreiben. Im Wesentlichen gibt es jetzt eine einfache Möglichkeit, Agenten zu ermutigen, die Umgebung effektiver zu erkunden, wenn die Belohnungen selten und spärlich verteilt sind. Dies können die Agenten erreichen, indem sie sich selbst eine Belohnung geben, die davon abhängt, wie überrascht sie über das Ergebnis ihrer Aktionen sind. In diesem Beitrag erkläre ich, wie dieses neue System funktioniert, und zeige dann, wie wir es verwenden können, um unserem Agenten bei der Lösung einer Aufgabe zu helfen, die für einen herkömmlichen Reinforcement Learning (RL)-Algorithmus viel schwieriger zu lösen wäre.

Erkundung durch Neugier

Beim bestärkenden Lernen besteht das primäre Lernsignal in der Belohnung: einem Skalarwert, der dem Agenten nach jeder von ihm getroffenen Entscheidung bereitgestellt wird. Diese Belohnung wird normalerweise von der Umgebung selbst bereitgestellt und vom Ersteller der Umgebung festgelegt. Diese Belohnungen entsprechen oft Dingen wie +1,0 für das Erreichen des Ziels, -1,0 für das Sterben usw. Wir können diese Art der Belohnung als extrinsisch betrachten, da sie von außerhalb des Agenten kommt. Wenn es extrinsische Belohnungen gibt, bedeutet das, dass es auch intrinsische geben muss. Intrinsische Belohnungen werden nicht von der Umgebung bereitgestellt, sondern basierend auf bestimmten Kriterien vom Agenten selbst generiert. Natürlich reicht nicht jede intrinsische Belohnung aus. Wir wollen intrinsische Belohnungen, die letztlich einem bestimmten Zweck dienen, beispielsweise eine Verhaltensänderung des Agenten, sodass dieser in Zukunft noch größere extrinsische Belohnungen erhält oder die Welt intensiver erkundet, als er es sonst getan hätte. Das Streben nach diesen intrinsischen Belohnungen wird bei Menschen und anderen Säugetieren oft als intrinsische Motivation bezeichnet und ist eng mit unserem Handlungsgefühl verknüpft.

Forscher auf dem Gebiet des bestärkenden Lernens haben sich viele Gedanken über die Entwicklung guter Systeme zur Bereitstellung intrinsischer Belohnungen für Agenten gemacht, die ihnen eine ähnliche Motivation verleihen, wie wir sie bei Agenten in der Natur vorfinden. Ein beliebter Ansatz besteht darin, dem Agenten Neugier zu vermitteln und ihn danach zu belohnen, wie sehr er von der Welt um ihn herum überrascht ist. Wenn man darüber nachdenkt, wie ein kleines Baby die Welt kennenlernt, dann verfolgt es kein bestimmtes Ziel, sondern spielt und erkundet die Welt eher, weil es etwas Neues erlebt. Man kann sagen, dass das Kind neugierig ist. Die Idee hinter der durch Neugier getriebenen Erkundung besteht darin, unseren Agenten diese Art Motivation zu vermitteln. Wenn der Agent dafür belohnt wird, dass er Zustände erreicht, die ihn überraschen, dann wird er Strategien erlernen, um die Umgebung zu erkunden und immer mehr überraschende Zustände zu finden. Unterwegs wird der Agent hoffentlich auch die äußere Belohnung entdecken, wie etwa eine entfernte Zielposition in einem Labyrinth oder eine knappe Ressource in einer Landschaft.

Wir haben uns entschieden, einen bestimmten solchen Ansatz aus einer kürzlich im letzten Jahr von Deepak Pathak und seinen Kollegen in Berkeley veröffentlichten Arbeit umzusetzen. Der Titel lautet „Curiosity-driven Exploration by Self-supervised Prediction“ (Durch Neugier getriebene Exploration durch selbstüberwachte Vorhersage). Wenn Sie an allen Einzelheiten interessiert sind, können Sie das Dokument hier lesen. In dem Papier formulieren die Autoren die Idee der Neugier auf kluge und verallgemeinerbare Weise. Sie schlagen vor, zwei separate neuronale Netzwerke zu trainieren: ein Vorwärts- und ein Inversmodell. Das inverse Modell wird trainiert, um die aktuelle und die nächste vom Agenten empfangene Beobachtung zu übernehmen, sie beide mit einem einzigen Encoder zu kodieren und das Ergebnis zu verwenden, um die Aktion vorherzusagen, die zwischen dem Auftreten der beiden Beobachtungen ausgeführt wurde. Das Vorwärtsmodell wird dann trainiert, die codierte aktuelle Beobachtung und Aktion zu übernehmen und die codierte nächste Beobachtung vorherzusagen. Der Unterschied zwischen den vorhergesagten und den tatsächlichen Kodierungen wird dann als intrinsische Belohnung verwendet und dem Agenten übermittelt. Ein größerer Unterschied bedeutet eine größere Überraschung, was wiederum eine größere intrinsische Belohnung bedeutet.

Durch die gemeinsame Verwendung dieser beiden Modelle werden mit der Belohnung nicht nur überraschende Dinge erfasst, sondern insbesondere überraschende Dinge, über die der Agent aufgrund seiner Aktionen Kontrolle hat. Ihr Ansatz ermöglicht es einem Agenten, der ohne äußere Belohnungen trainiert wurde , in Super Mario Bros allein aufgrund seiner intrinsischen Belohnung Fortschritte zu machen . Unten finden Sie ein Diagramm aus dem Dokument, in dem der Vorgang erläutert wird.

Bild
Diagramm, das das Intrinsic Curiosity-Modul zeigt. Weiße Kästchen entsprechen der Eingabe. Blaue Kästen entsprechen den Schichten und Ausgaben des neuronalen Netzwerks. Ausgefüllte blaue Linien entsprechen dem Aktivierungsfluss im Netzwerk. Grüne gepunktete Linien entsprechen den Vergleichen, die zur Verlustberechnung verwendet werden. Das grüne Kästchen entspricht der Berechnung der intrinsischen Belohnung.
Pyramidenumgebung

Um die Neugier zu testen, reicht keine gewöhnliche Umgebung aus. Die meisten der Beispielumgebungen, die wir mit v0.3 des ML-Agents-Toolkits veröffentlicht haben, enthalten relativ dichte Belohnungen, die von Neugier oder anderen Methoden zur Verbesserung der Erkundung nicht viel profitieren würden. Um die neu entdeckte Neugier unseres Agenten auf die Probe zu stellen, haben wir eine neue, spärliche, lohnende Umgebung namens „Pyramiden“ geschaffen. Darin gibt es nur eine einzige Belohnung und der Agent wird sie bei zufälligen Erkundungen nur selten finden. In dieser Umgebung nimmt unser Agent die Form des bekannten blauen Würfels aus einigen unserer vorherigen Umgebungenan. Der Agent kann sich vorwärts oder rückwärts bewegen und nach links oder rechts abbiegen. Außerdem hat er über eine Reihe von Raycasts von der Vorderseite des Würfels Zugriff auf eine Ansicht der umgebenden Welt.

Bild
Ein Agent, der die Umgebung mithilfe von Raycasts beobachtet (hier zur Veranschaulichung schwarz dargestellt)

Dieser Agent wird in einen geschlossenen Raum mit neun Zimmern abgesetzt. Einer dieser Räume enthält einen zufällig positionierten Schalter, während die anderen zufällig platzierte, unbewegliche Steinpyramiden enthalten. Wenn der Agent mit dem Schalter interagiert, indem er mit ihm kollidiert, wechselt die Farbe des Schalters von Rot auf Grün. Zusammen mit dieser Farbänderung wird dann zufällig eine Pyramide aus beweglichen Sandsteinen in einem der vielen Räume der Umgebung erzeugt. Auf der Spitze dieser Pyramide befindet sich ein einzelner goldener Ziegelstein. Wenn der Agent mit diesem Stein kollidiert, erhält der Agent +2 externe Belohnung. Der Trick besteht darin, dass es keine Zwischenbelohnungen gibt, wenn man in neue Räume zieht, den Schalter umlegt oder den Turm umwirft. Der Agent muss lernen, diese Sequenz ohne weitere Hilfe auszuführen.

Bild
Mit PPO+Curiosity trainierter Agent bewegt sich nach der Interaktion mit dem Schalter zur Pyramide.

Agenten, die mit einer einfachen Proximal Policy Optimization (PPO, unserem Standard-RL-Algorithmus in ML-Agents) trainiert wurden, schneiden bei dieser Aufgabe schlecht ab und erreichen selbst nach 200.000 Schritten oft nicht mehr als den Zufall (durchschnittliche Belohnung von -1).

Im Gegensatz dazu lösen Agenten, die mit PPO und der durch Neugier getriebenen intrinsischen Belohnung trainiert wurden, das Problem durchgängig innerhalb von 200.000 Episoden und oft sogar in der Hälfte der Zeit.

Bild
Kumulative extrinsische Belohnung im Laufe der Zeit für PPO+Curiosity-Agent (blau) und PPO-Agent (rot). Gemittelt jeweils über fünf Läufe.

Wir haben uns auch Agenten angesehen, die nur mit dem intrinsischen Belohnungssignal trainiert wurden. Obwohl sie nicht lernen, die Aufgabe zu lösen, erlernen sie eine qualitativ interessantere Strategie, die es ihnen ermöglicht, sich zwischen mehreren Räumen zu bewegen, im Vergleich zur ausschließlich extrinsischen Strategie, bei der sich der Agent in kleinen Kreisen innerhalb eines einzigen Raums bewegt.

Curiosity mit PPO nutzen

Wenn Sie Curiosity zum Trainieren von Agenten in Ihren Umgebungen nutzen möchten, können Sie dies ganz einfach aktivieren. Holen Sie sich zunächst die neueste Version des ML-Agents-Toolkitsund fügen Sie dann die folgende Zeile zur Hyperparameterdatei des Gehirns hinzu, das Sie trainieren möchten: „use_curiosity: true“. Von dort aus können Sie den Trainingsvorgang wie gewohnt starten. Wenn Sie TensorBoard verwenden, werden Sie feststellen, dass jetzt einige neue Metriken verfolgt werden. Hierzu gehören der Vorwärts- und Rückwärtsmodellverlust sowie die kumulative intrinsische Belohnung pro Episode.

Es hilft nicht in allen Situationen, die Neugier Ihres Agenten zu wecken. Insbesondere wenn Ihre Umgebung bereits eine dichte Belohnungsfunktion enthält, wie z. B. unsere Crawler- und Walker-Umgebungen, in denen nach den meisten Aktionen eine Belohnung ungleich Null empfangen wird, werden Sie möglicherweise keine großen Verbesserungen feststellen. Wenn Ihre Umgebung nur spärliche Belohnungen enthält, können Sie durch das Hinzufügen intrinsischer Belohnungen diese Aufgaben mithilfe von Reinforcement Learning von unlösbaren in leicht lösbare verwandeln. Dies ist insbesondere dann sinnvoll, wenn es um einfache Belohnungen wie Gewinnen/Verlieren oder Erledigen/Nichterfüllen von Aufgaben geht.

---

Wenn Sie die Curiosity-Funktion verwenden, würde ich gerne von Ihren Erfahrungen hören. Sie können uns gerne über unsere GitHub-Issues-Seiteerreichen oder uns direkt eine E-Mail an ml-agents@unity3d.comsenden. Viel Spaß beim Training!