Eine Einführung in die Methoden von Advantage Actor Critic: Spielen wir Sonic the Hedgehog!

Seit Beginn dieses Kurses haben wir zwei verschiedene Lernmethoden zur Verstärkung studiert:

  • Wertebasierte Methoden (Q-Learning, Deep Q-Learning): Hier lernen wir eine Wertefunktion , die jedes Zustandsaktionspaar einem Wert zuordnet. Dank dieser Methoden finden wir für jeden Staat die beste Maßnahme - die Maßnahme mit dem größten Wert. Dies funktioniert gut, wenn Sie eine begrenzte Anzahl von Aktionen haben.
  • Richtlinienbasierte Methoden (REINFORCE with Policy Gradients): Hier optimieren wir die Richtlinie direkt, ohne eine Wertefunktion zu verwenden. Dies ist nützlich, wenn der Aktionsraum kontinuierlich oder stochastisch ist. Das Hauptproblem besteht darin, eine gute Bewertungsfunktion zu finden, um zu berechnen, wie gut eine Richtlinie ist. Wir verwenden die Gesamtbelohnungen der Episode.

Beide Methoden haben jedoch große Nachteile. Aus diesem Grund werden wir heute eine neue Art der Reinforcement Learning-Methode untersuchen, die wir als „Hybridmethode“ bezeichnen können: Actor Critic . Wir werden zwei neuronale Netze verwenden:

  • ein Kritiker, der misst, wie gut die ergriffenen Maßnahmen sind (wertebasiert)
  • ein Akteur, der steuert, wie sich unser Agent verhält (richtlinienbasiert)

Die Beherrschung dieser Architektur ist wichtig, um die neuesten Algorithmen wie die Proximal Policy Optimization (auch bekannt als PPO) zu verstehen . PPO basiert auf Advantage Actor Critic.

Und Sie implementieren einen A2C-Agenten (Advantage Actor Critic), der lernt, Sonic the Hedgehog zu spielen!

Die Suche nach einem besseren Lernmodell

Das Problem mit Richtlinienverläufen

Die Policy Gradient-Methode hat ein großes Problem. Wir befinden uns in einer Situation in Monte Carlo und warten bis zum Ende der Episode, um die Belohnung zu berechnen. Wir können daraus schließen, dass alle Maßnahmen, die wir ergriffen haben, gut waren , wenn wir eine hohe Belohnung ( R (t) ) haben, auch wenn einige wirklich schlecht waren.

Wie wir in diesem Beispiel sehen können, werden alle Aktionen als gut gemittelt , selbst wenn A3 eine schlechte Aktion war (was zu negativen Belohnungen führte), da die Gesamtbelohnung wichtig war.

Infolgedessen, um eine optimale Politik zu haben,Wir brauchen viele Proben. Dies führt zu langsamem Lernen, da die Konvergenz viel Zeit in Anspruch nimmt.

Was ist, wenn wir stattdessen bei jedem Zeitschritt ein Update durchführen können?

Wir stellen vor: Actor Critic

Das Actor Critic-Modell ist eine bessere Score-Funktion. Anstatt wie in Monte Carlo REINFORCE bis zum Ende der Episode zu warten, führen wir bei jedem Schritt ein Update durch (TD Learning).

Da wir bei jedem Zeitschritt ein Update durchführen, können wir die Gesamtbelohnungen R (t) nicht verwenden. Stattdessen müssen wir ein kritisches Modell trainieren , das sich der Wertfunktion annähert (denken Sie daran, dass die Wertfunktion die maximal erwartete zukünftige Belohnung für einen Zustand und eine Aktion berechnet). Diese Wertefunktion ersetzt die Belohnungsfunktion im Richtlinienverlauf, die die Belohnungen erst am Ende der Episode berechnet.

Wie Actor Critic funktioniert

Stellen Sie sich vor, Sie spielen ein Videospiel mit einem Freund, der Ihnen Feedback gibt. Du bist der Schauspieler und dein Freund ist der Kritiker.

Zu Beginn wissen Sie nicht, wie man spielt, also versuchen Sie zufällig eine Aktion. Der Kritiker beobachtet Ihre Handlung und gibt Feedback.

Wenn Sie aus diesem Feedback lernen, aktualisieren Sie Ihre Richtlinien und können dieses Spiel besser spielen.

Auf der anderen Seite aktualisiert Ihr Freund (Kritiker) auch seine eigene Methode, um Feedback zu geben, damit es beim nächsten Mal besser sein kann.

Wie wir sehen können, besteht die Idee von Actor Critic darin, zwei neuronale Netze zu haben. Wir schätzen beide:

Beide laufen parallel.

Da wir zwei Modelle (Schauspieler und Kritiker) haben, die trainiert werden müssen, bedeutet dies, dass wir zwei Gewichte haben (? Für unsere Aktion und w für unsere Kritiker) , die separat optimiert werden müssen:

Der Schauspieler-Kritiker-Prozess

Bei jedem Zeitschritt t nehmen wir den aktuellen Zustand (St) aus der Umgebung und geben ihn als Eingabe an unseren Akteur und unseren Kritiker weiter.

Unsere Richtlinie übernimmt den Status, gibt eine Aktion (At) aus und erhält einen neuen Status (St + 1) und eine Belohnung (Rt + 1).

Danke für das:

  • Der Kritiker berechnet den Wert dieser Aktion in diesem Zustand
  • Der Akteur aktualisiert seine Richtlinienparameter (Gewichte) unter Verwendung dieses q-Werts

Dank seiner aktualisierten Parameter erzeugt der Akteur die nächste Aktion bei At + 1, wenn der neue Zustand St + 1 vorliegt. Der Kritiker aktualisiert dann seine Wertparameter:

A2C und A3C

Einführung der Vorteilsfunktion zur Stabilisierung des Lernens

Wie wir im Artikel über Verbesserungen beim Deep Q Learning gesehen haben, weisen wertbasierte Methoden eine hohe Variabilität auf.

Um dieses Problem zu verringern, haben wir über die Verwendung der Vorteilsfunktion anstelle der Wertfunktion gesprochen.

Die Vorteilsfunktion ist wie folgt definiert:

Diese Funktion zeigt die Verbesserung im Vergleich zum Durchschnitt der in diesem Zustand ergriffenen Maßnahmen an. Mit anderen Worten, diese Funktion berechnet die zusätzliche Belohnung, die ich bekomme, wenn ich diese Aktion ausführe. Die zusätzliche Belohnung ist die, die über den erwarteten Wert dieses Staates hinausgeht.

Wenn A (s, a)> 0: unser Gradient wird in diese Richtung gedrückt.

Wenn A (s, a) <0 ist (unsere Aktion ist schlechter als der Durchschnittswert dieses Zustands), wird unser Gradient in die entgegengesetzte Richtung gedrückt.

Das Problem bei der Implementierung dieser Vorteilsfunktion besteht darin, dass zwei Wertfunktionen erforderlich sind - Q (s, a) und V (s). Glücklicherweise können wir den TD-Fehler als guten Schätzer für die Vorteilsfunktion verwenden.

Zwei verschiedene Strategien: Asynchron oder Synchron

Wir haben zwei verschiedene Strategien, um einen Actor Critic-Agenten zu implementieren:

  • A2C (auch bekannt als Advantage Actor Critic)
  • A3C (auch bekannt als Asynchronous Advantage Actor Critic)

Aus diesem Grund werden wir mit A2C und nicht mit A3C arbeiten. Wenn Sie eine vollständige Implementierung von A3C sehen möchten, lesen Sie den hervorragenden A3C-Artikel von Arthur Juliani und die Doom-Implementierung.

In A3C verwenden wir keine Erfahrungswiedergabe, da dies viel Speicher erfordert. Stattdessen führen wir verschiedene Agenten asynchron parallel auf mehreren Instanzen der Umgebung aus. Jeder Worker (Kopie des Netzwerks) aktualisiert das globale Netzwerk asynchron.

Andererseits besteht der einzige Unterschied bei A2C darin, dass wir das globale Netzwerk synchron aktualisieren. Wir warten, bis alle Mitarbeiter ihre Ausbildung abgeschlossen und ihre Steigungen berechnet haben, um sie zu mitteln und unser globales Netzwerk zu aktualisieren.

Wählen Sie A2C oder A3C?

Das Problem von A3C wird in diesem großartigen Artikel erklärt. Aufgrund der Asynchronität von A3C spielen einige Worker (Kopien des Agenten) mit älteren Versionen der Parameter. Daher ist das aggregierende Update nicht optimal.

Aus diesem Grund wartet A2C darauf, dass jeder Akteur sein Erfahrungssegment beendet, bevor die globalen Parameter aktualisiert werden. Dann starten wir ein neues Erfahrungssegment neu, wobei alle parallelen Akteure dieselben neuen Parameter haben.

Infolgedessen wird das Training zusammenhängender und schneller.

Implementierung eines A2C-Agenten, der Sonic the Hedgehog spielt

A2C in der Praxis

In der Praxis bedeutet die Synchronität von A2C, wie in diesem Reddit-Beitrag erläutert, dass wir keine unterschiedlichen Versionen (unterschiedliche Worker) des A2C benötigen.

Jeder Mitarbeiter in A2C hat die gleichen Gewichte, da A2C im Gegensatz zu A3C alle Mitarbeiter gleichzeitig aktualisiert.

Tatsächlich erstellen wir mehrere Versionen von Umgebungen (sagen wir acht) und führen sie dann parallel aus.

Der Prozess wird der folgende sein:

  • Erstellt mithilfe der Multiprozessor-Bibliothek einen Vektor von n Umgebungen
  • Erstellt ein Runner-Objekt, das die verschiedenen Umgebungen behandelt und parallel ausgeführt wird.
  • Hat zwei Versionen des Netzwerks:
  1. step_model: generiert Erfahrungen aus Umgebungen
  2. train_model: das trainiert die erfahrungen.

Wenn der Läufer einen Schritt ausführt (Einzelschrittmodell), führt dies einen Schritt für jede der n Umgebungen aus. Dies gibt eine Menge Erfahrung aus.

Dann berechnen wir den Gradienten auf einmal mit train_model und unserer Erfahrung.

Schließlich aktualisieren wir das Schrittmodell mit den neuen Gewichten.

Denken Sie daran, dass das gleichzeitige Berechnen des Gradienten dasselbe ist wie das Sammeln von Daten, das Berechnen des Gradienten für jeden Mitarbeiter und das anschließende Mitteln. Warum? Denn das Summieren der Ableitungen (Summieren von Gradienten) ist dasselbe wie das Ableiten der Ableitungen der Summe . Aber die zweite ist eleganter und eine bessere Möglichkeit, die GPU zu verwenden.

A2C mit Sonic the Hedgehog

Nachdem wir nun verstanden haben, wie A2C im Allgemeinen funktioniert, können wir unseren A2C-Agenten implementieren, der Sonic spielt! Dieses Video zeigt den Verhaltensunterschied unseres Agenten zwischen 10 Minuten Training (links) und 10 Stunden Training (rechts).

Die Implementierung befindet sich hier im GitHub-Repo, und das Notizbuch erklärt die Implementierung. Ich gebe Ihnen das gespeicherte Modell, das mit ca. 10h + auf GPU trainiert wurde.

Diese Implementierung ist viel komplexer als die früheren Implementierungen. Wir beginnen mit der Implementierung modernster Algorithmen, daher müssen wir mit unserem Code immer effizienter arbeiten. Aus diesem Grund werden wir in dieser Implementierung den Code in verschiedene Objekte und Dateien aufteilen.

Das ist alles! Sie haben gerade einen Agenten erstellt, der lernt, Sonic the Hedgehog zu spielen. Das ist großartig! Wir können sehen, dass unser Agent nach 10 Stunden Training beispielsweise die Schleife nicht versteht, sodass wir eine stabilere Architektur verwenden müssen: PPO.

Nehmen Sie sich Zeit, um über alle Erfolge nachzudenken, die Sie seit dem ersten Kapitel dieses Kurses erzielt haben : Wir sind von einfachen Textspielen (OpenAI Taxi-v2) zu komplexen Spielen wie Doom und Sonic the Hedgehog übergegangen und haben immer leistungsfähigere Architekturen verwendet. Und das ist fantastisch!

Das nächste Mal erfahren wir mehr über Proximal Policy Gradients, die Architektur, die den OpenAI Retro Contest gewonnen hat. Wir werden unseren Agenten trainieren, Sonic the Hedgehog 2 und 3 zu spielen, und diesmal werden ganze Level beendet!

Vergessen Sie nicht, jeden Teil des Codes selbst zu implementieren. Es ist wirklich wichtig zu versuchen, den Code zu ändern, den ich Ihnen gegeben habe. Versuchen Sie, Epochen hinzuzufügen, die Architektur zu ändern, die Lernrate zu ändern und so weiter. Experimentieren ist der beste Weg zu lernen, also viel Spaß!

Wenn Ihnen mein Artikel gefallen hat, klicken Sie bitte auf? unten so oft, wie Ihnen der Artikel gefallen hat, damit andere Leute dies hier auf Medium sehen. Und vergiss nicht, mir zu folgen!

Dieser Artikel ist Teil meines Deep Reinforcement-Lernkurses mit TensorFlow? ️. Schauen Sie sich hier den Lehrplan an.

Wenn Sie irgendwelche Gedanken, Kommentare, Fragen haben, können Sie diese gerne unten kommentieren oder mir eine E-Mail senden: Hallo [at] simoninithomas [dot] com, oder twittern Sie mich @ThomasSimonini.

Deep Reinforcement Learning Course:

Wir machen eine Videoversion des Deep Reinforcement Learning Course mit Tensorflow ? Hier konzentrieren wir uns auf den Implementierungsteil mit Tensorflow.

Teil 1: Eine Einführung in das Reinforcement Learning

Teil 2: Mit Q-Learning tiefer in das Reinforcement Learning eintauchen

Teil 3: Eine Einführung in Deep Q-Learning: Lass uns Doom spielen

Teil 3+: Verbesserungen beim Deep Q-Lernen: Duellieren mit Double DQN, Priorisierte Erfahrungswiedergabe und feste Q-Ziele

Teil 4: Eine Einführung in Policy Gradients mit Doom und Cartpole

Teil 6: Proximal Policy Optimization (PPO) mit Sonic the Hedgehog 2 und 3

Teil 7: Neugiergetriebenes Lernen leicht gemacht Teil I.