Stochastic Policy Gradients ist eine Methode aus dem Bereich des Deep Reinforcement Learning. Von selbstfahrenden Autos bis hin zu Robotern: Mit Stochastic Policy Gradients können wir einer künstlichen Intelligenz beibringen, in kontinuierlichen Aktionsräumen zu navigieren und zu handeln.
Dieses Tutorial ist der vierte Teil der Serie über Deep Reinforcement Learning. In diesem werde ich mich auf viele Grundlagen und Theorien aus den vorangegangenen Tutorials beziehen. Um die folgenden Erklärungen über Stochastic Policy Gradients besser verstehen zu können, empfehle ich Ihnen die letzten Teile dieser Serie nochmal zu rekapitulieren:
In „Deep Reinforcement Learning: Markov Decision Processes“ haben wir die mathematischen Grundlage diskutiert, die für dieses Tutorial sehr relevant sind. Im Tutorial „Deep Q-Learning“ und „Deep Double Q-Learning“ habe ich zwei Algorithmen vorgestellt, mit dem man einem KI-Agenten das Verhalten und die Lösung von Aufgaben in diskreten Aktionsräumen beibringen kann. Dieser Ansatz ist jedoch nicht frei von Mängeln, die möglicherweise zu einer geringeren Leistung des KI-Agenten führen können.
0. Einführung
Mit Deep Q-Learning und Deep (Double) Q-Learning sind wir in der Lage, eine KI in diskreten Aktionsräumen zu steuern, in denen die möglichen Aktionen so einfach sein können wie nach links oder rechts, nach oben oder unten zu gehen. Trotz dieser einfachen Möglichkeiten sind die KI-Agenten in der Lage, erstaunliche Aufgaben zu bewältigen, wie z. B. Atari-Spiele mit übermenschlicher Leistung zu spielen oder den weltbesten menschlichen Spieler im Brettspiel Go zu schlagen.
Viele reale Anwendungen des Verstärkungslernens, wie z. B. das Training von Robotern oder selbstfahrenden Autos, erfordern jedoch, dass ein Agent optimale Aktionen aus kontinuierlichen Räumen auswählt. Erläutern wir den Begriff des kontinuierlichen Aktionsraums anhand eines Beispiels.

Wenn Sie mit Ihrem Auto fahren und das Lenkrad drehen, können Sie steuern, wie stark Sie das Lenkrad drehen. Dies führt zu einem kontinuierlichen Aktionsraum: z. B. für jede positive reelle Zahl x in einem bestimmten Bereich: „Drehen Sie das Lenkrad um x Grad nach rechts“. Oder wie stark drückt man das Gaspedal? Auch das ist eine kontinuierliche Eingabe.
Zur Erinnerung: Kontinuierlicher Aktionsraum bedeutet, dass es (theoretisch) eine unendliche Anzahl von möglichen Aktionen gibt.
Tatsächlich sind die meisten Handlungen, die uns im wirklichen Leben begegnen werden, aus dem kontinuierlichen Handlungsraum. Deshalb ist es so wichtig zu verstehen, wie wir eine künstliche Intelligenz trainieren können, die eine Aktion auswählt, wenn es eine unendliche Anzahl von Möglichkeiten gibt.
Hier zeigen die Algorithmen von Stochastic Policy Gradients ihre Vorteile.
Wie kann man Stochastic Policy Gradients anwenden?

Dieses Beispiel von OpenAIs Gym „MountainCarContinuous„-Problem wurde mit Stochastic Policy Gradients gelöst, die in diesem Tutorial vorgestellt werden. Der gut dokumentierte Quellcode kann in meinem GitHub Repository nachgeschaut werden. Ich habe MountainCarContinuous als Beispiel gewählt, weil die Trainingszeit für dieses Problem sehr gering ist und Sie es selbst sehr schnell reproduzieren können. Wenn Sie nach dem Lesen dieses Artikels üben möchten, klonen Sie das Repository und führen Sie src/policy gradients/stochastic/ stochastic_pg.py aus, um den Algorithmus zu starten.
1. Stochastische Policy
In Markov-Entscheidungsprozessen habe ich den KI-Agenten als ein neuronales Netz vorgestellt, das mit der Umgebung (Computerspiel, Schachbrett, reales Leben usw.) interagiert, indem es die Zustände der Umgebung (Bildschirmpixel, Brettkonfiguration usw.) beobachtet und auf der Grundlage des aktuell beobachtbaren Zustands
Aktionen
vornimmt.

Für jede Aktion in einem Zustand
erhält der KI-Agent eine Belohnung (Reward). Die Höhe der Belohnung gibt dem Agenten Auskunft über die Qualität seiner Aktion in diesem bestimmten Zustand im Hinblick auf die Lösung des vorgegebenen Ziels, z. B. das Erlernen des Gehens oder das Gewinnen eines Computerspiels. Die Entscheidung darüber welche Aktion von dem KI-Agenten in welche Zustand ausgeführt werden soll, wird durch die sog. Policy
bestimmt.
In Markov-Entscheidungsprozessen führe ich die Policy als die Strategie von dem KI-Agenten ein, die seine Bewegung von einem Zustand zum nächsten Zustand
bestimmt, und zwar über die gesamte Abfolge aller möglichen Zustände
in der Umgebung.
In Deep Q-Learning folgt der Agent der Policy/Strategie . Diese Policy besagt, dass der KI-Agent in einem Zustand
eine Aktion ausführen muss, die dem höchsten Aktionswert
entspricht. Hierbei ist die Aktionswertfunktion
der erwartete Ertrag (Summe der Belohnungen über alle Zustände hinweg), den wir erhalten, wenn wir im Zustand
beginnen, eine Aktion
ausführen und dann der Strategie
folgen (vgl. Markov-Entscheidungsprozesse).
Dagegen besteht die Grundidee im Falle der stochastischen Policy darin, die Policy durch eine parametrische Wahrscheinlichkeitsverteilung darzustellen:


Ein Beispiel für die Policy als Wahrscheinlichkeitsverteilung wäre die Gauß-Verteilung bzw. Normalverteilung, bei der wir stochastisch eine Aktion als Stichprobe aus dieser Verteilung auswählen. In Abb. 1 stellt die Policy
eine solche Normalverteilung dar.
Die Form von (Mittelwert, Varianz, etc.) wird durch die Parameter
bestimmt. Für einen Zustand
und einen Satz von Parametern
wird die Aktion
für einen KI-Agenten stochastisch aus der Verteilung
gezogen. Dadurch wird die Aktion
zu einer kontinuierlichen Variablen.
Zur Erinnerung: Im Gegensatz zum Deep Q-Learning stellt die Policy jetzt eine direkte Abbildung/Funktion von einem Zustand
auf eine Aktion
dar:
.
Ein-Schritt-Verfahren
Doch wie lässt sich feststellen, ob die aktuelle Policy eine gute Strategie ist um die Aktionen eines KI-Agenten zu bestimmen? Zu diesem Zweck müssen wir eine Leistungsfunktion für
definieren, die wir als
bezeichnen. Diese Leistungsfunktion misst sozusagen die Qualität einer Policy
zur Bestimmung von Aktionen für einen KI-Agenten.
Betrachten wir einen einfachen Fall, in dem wir die Qualität/Leistung von nur für einen Schritt des KI-Agenten vom Zustand
zum nächsten Zustand
messen wollen. In diesem Fall können wir die Leistungsfunktion wie folgt definieren:

Die zweite Zeile in der Gleichung 2 ist nichts anderes als die Ausführung des Erwartungsoperators auf den erwarteten Aktionswert
für die Aktion
im Zustand
.
ist durch die Umgebung vorgegeben, in der sich der KI-Agent bewegt.
wird gemäß der Policy
bestimmt.
stellt die Belohnung für die Aktion
im Zustand
dar.
Bitte beachten Sie: ist der Ausdruck
bzw.
, aber nur für einen „Ein-Schritt-Prozess“
Es muss beachtet werden, dass beim Deep Reinforcement Learning die Umgebung, in der sich der KI-Agent befindet, stochastisch ist. Das bedeutet, dass das Ausführen einer Aktion nicht garantiert, dass der Agent in dem Zustand landet, den er beabsichtigt. Es liegt bis zu einem gewissen Grad an der Umgebung, zu entscheiden, wo der Agent tatsächlich landen wird.
Da der Aktionswert auch vom nächsten Zustand
abhängt (siehe Gl. 17 in Markov-Entscheidungsprozesse), müssen wir die Belohnung
über alle Übergangswahrscheinlichkeiten
vom Zustand
zum nächsten Zustand
mitteln. Weil
auch von der Aktion abhängt, müssen wir die Belohnung außerdem über alle möglichen
mitteln. All diese genannten Tatsachen sind in der zweiten Zeile in Gl. 2 dargestellt.
2. Stochastisches Policy-Gradienten-Theorem
Die Idee hinter den Policy-Gradienten ist, dass wir die Parameter der Policy
in Richtung einer größeren kumulativen Belohnung anpassen.
Nachdem wir nun die Leistung der Policy in Gl. 2 definiert haben, können wir fortfahren und diskutieren, wie die optimale Policy von dem neuronalen Netz gelernt werden kann. Weil die Policy
von den Parametern
abhängt (bei denen es sich in den meisten Fällen um die Gewichte und Biases eines neuronalen Netzes handelt), müssen wir optimale Parameter
finden, die die Leistung
maximieren.
Die Grundidee hinter der Policy-Gradienten-Methode besteht darin, die Parameter
der Policy
in die Richtung des Leistungsgradienten
anzupassen.
Wenn wir den Gradienten von berechnen, erhalten wir den folgenden Ausdruck:

Da wir die Parameter finden wollen, die die Leistung
maximieren, müssen wir
mittels Gradientenaufstiegs aktualisieren – im Gegensatz zum Gradientenabstieg, bei dem wir Parameter finden wollen, die eine vordefinierte Verlustfunktion minimieren.
Mehrstufiges Verfahren
Nachdem wir nun erfahren haben, wie die Policy für einen „Ein-Schritt-Prozess“ verbessert werden kann, können wir mit dem Fall fortfahren, in dem wir den Bewegungsprozess von einem KI-Agenten über die gesamte Abfolge von Zuständen hinweg betrachten.
Eigentlich ist dieser Fall gar nicht so schwierig, wenn wir uns vor Augen halten, dass die Summe der (diskontierten) Belohnungen, die Definition der Aktionswertfunktion darstellt. Daraus ergibt sich die folgende Definition von dem Policy-Gradienten für den mehrstufigen Prozess, wobei die einzelne erwartete Belohnung
durch die erwartete kumulative Belohnung (Summe der Belohnungen)
ersetzt wird.

3. Actor-Critic Algorithmen
Die Art der Algorithmen, die die Aktualisierungsregel gemäß Gl. 4 verwenden, werden als die sog. Actor-Critic Algorithmen bezeichnet. Die Policy wird dabei als „Actor“ bezeichnet, weil der Actor die Aktion bestimmt, die der KI-Agent in einem Zustand
ausführen muss. Auf der anderen Seite stellt die Aktionswert-Funktion
den „Critic“ dar. Der Critic
hat die Aufgabe die Aktion des Actors zu „kritisieren“, indem dieser der Aktion einen Qualitätswert
gibt.
Wie Sie in Gl. 4 sehen können, skaliert der Gradient von mit diesem Qualitätswert
. Ein hoher Qualitätswert deutet darauf hin, dass die durchgeführte Aktion
im Zustand
tatsächlich eine gute Wahl war und die Parameter
in Richtung des Gradienten der Leistungsfunktion
angepasst werden sollten.
Das Gegenteil gilt für einen kleinen Qualitätswert. In der Praxis können wir nicht im Voraus kennen. Daher müssen wir es durch eine Funktion
approximieren, die von den Parametern
abhängt. Im Allgemeinen kann
durch ein neuronales Netz geschätzt werden.

Daraus ergibt sich eine neue Definition für den Leistungsgradienten:

Zusammenfassend lässt sich sagen, dass ein stochastischer Policy-Gradient-Algorithmus versucht, zwei Dinge zu erreichen:
- Aktualisierung der Parameter
von dem „Actor“
in die Richtung des Gradienten der Leistung
- Aktualisierung der Parameter
von dem „Critic“, mittels TD-Learning, die ich in dem Tutorial über Deep Q-Learning eingeführt habe
Der gesamte Actor-Critic-Algorithmus kann durch den folgenden Pseudocode ausgedrückt werden:

Der entscheidende Teil des Algorithmus findet in der for-Schleife statt, die die Lebensdauer des KI-Agenten darstellt. Lassen Sie uns jeden Schritt genauer besprechen:
- Erhalte eine Belohnung
von der Umwelt, indem du eine Aktion
im Zustand
ausführst, und beobachte den neuen Zustand
- Angesichts dieses neuen Zustands
wird eine Aktion
stochastisch aus der Verteilung
gezogen
- Berechne die zeitlichen Differenz
unter Verwendung der alten
und
und der neuen
und
- Aktualisiere die Parameter
gemäß der Aktualisierungsregel beim TD-Learning (Bessere Alternative: Aktualisierung von
durch Minimierung des Abstands zwischen
und
mit regulären Gradientenabstiegsalgorithmen)
- Aktualisiere die Parameter
der Strategie
in Richtung des Gradienten der Leistung
- Setzen Sie den neuen Zustand
als alten Zustand
und die neue Aktion
als alte Aktion
- Beginn der Schleife von Anfang an, wenn der Prozess noch nicht beendet wurde
4. Verringerung der Varianz
Die einfache Implementierung von dem Actor-Critic-Algorithmus ist dafür bekannt, dass diese eine hohe Varianz aufweist. Eine Möglichkeit, diese Varianz zu reduzieren, besteht darin, von dem Aktionswert den Zustandswert
abzuziehen (vgl. Gl. 7). Der Zustandswert wurde in Markov-Entscheidungsprozessen als die erwartete Gesamtbelohnung definiert, die der KI-Agent erhält, wenn dieser seinen Fortschritt im Zustand
beginnt.

Dieser neue Ausdruck in Gl. 7 wird als sog. „Advantage“ (deutsch: Vorteil) definiert. Der Advantage kann in den Gradienten der Leistung
eingefügt werden, vgl. Gl. 8. Die Verwendung von dem Advantage-Term hat vielversprechende Ergebnisse bei der Verringerung der Varianz in dem Actor-Critic-Algorithmus gezeigt.

Auf der anderen Seite führt der Advantage-Term zu dem Problem, dass ein dritter Funktionsapproximator, wie ein neuronales Netz, erforderlich ist, um zu schätzen. Es kann jedoch gezeigt werden, dass der erwartete zeitliche Differenzfehler
von
(vgl. Gl. 9) nichts anderes als der Advantage-Term ist.

Dies lässt sich anhand einer Definition von zeigen, die den Erwartungswert von
darstellt. Durch Subtraktion des verbleibenden Terms
erhält man die vorherige Definition des Terms
(Gl. 10).

Schließlich können wir den zeitlichen Differenzfehler in den Gradienten von
einsetzen. Auf diese Weise schlagen wir zwei Fliegen mit einer Klappe:
- Wir reduzieren die Varianz des gesamten Algorithmus
- Gleichzeitig brauchen wir kein drittes neuronales Netz um
zu approximieren
