hintergrundbild

Stochastic Policy Gradients

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.

self-driving car


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?

mountain-car

Dieses Beispiel von OpenAIs GymMountainCarContinuous„-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 s der Umgebung (Bildschirmpixel, Brettkonfiguration usw.) beobachtet und auf der Grundlage des aktuell beobachtbaren Zustands s Aktionen a vornimmt.

Schematische Darstellung des Deep Reinforcement Learning
Abb. 1 Schematische Darstellung des Deep Reinforcement Learning.

Für jede Aktion a in einem Zustand s 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 \pi bestimmt.

In Markov-Entscheidungsprozessen führe ich die Policy als die Strategie von dem KI-Agenten ein, die seine Bewegung von einem Zustand s zum nächsten Zustand s' bestimmt, und zwar über die gesamte Abfolge aller möglichen Zustände s_1, …, s_n in der Umgebung.

In Deep Q-Learning folgt der Agent der Policy/Strategie \pi. Diese Policy besagt, dass der KI-Agent in einem Zustand s eine Aktion ausführen muss, die dem höchsten Aktionswert Q(s,a) entspricht. Hierbei ist die Aktionswertfunktion Q(s,a) der erwartete Ertrag (Summe der Belohnungen über alle Zustände hinweg), den wir erhalten, wenn wir im Zustand s beginnen, eine Aktion a ausführen und dann der Strategie \pi folgen (vgl. Markov-Entscheidungsprozesse).

Dagegen besteht die Grundidee im Falle der stochastischen Policy darin, die Policy durch eine parametrische Wahrscheinlichkeitsverteilung darzustellen:

Stochastische Policy als Wahrscheinlichkeitsverteilung.
Gl. 1 Stochastische Policy als Wahrscheinlichkeitsverteilung.
Abb.1 Ziehen einer Aktion a aus der Policy, die in diesem Fall eine Normalverteilung ist.

Ein Beispiel für die Policy als Wahrscheinlichkeitsverteilung wäre die Gauß-Verteilung bzw. Normalverteilung, bei der wir stochastisch eine Aktion a als Stichprobe aus dieser Verteilung auswählen. In Abb. 1 stellt die Policy \pi(a|s) eine solche Normalverteilung dar.

Die Form von \pi(a|s) (Mittelwert, Varianz, etc.) wird durch die Parameter \theta bestimmt. Für einen Zustand s und einen Satz von Parametern \theta wird die Aktion a für einen KI-Agenten stochastisch aus der Verteilung \pi(a|s) gezogen. Dadurch wird die Aktion a zu einer kontinuierlichen Variablen.

Zur Erinnerung: Im Gegensatz zum Deep Q-Learning stellt die Policy \pi jetzt eine direkte Abbildung/Funktion von einem Zustand s auf eine Aktion a dar: \pi: s \mapsto a.

Ein-Schritt-Verfahren

Doch wie lässt sich feststellen, ob die aktuelle Policy \pi eine gute Strategie ist um die Aktionen eines KI-Agenten zu bestimmen? Zu diesem Zweck müssen wir eine Leistungsfunktion für \pi definieren, die wir als J(θ) bezeichnen. Diese Leistungsfunktion misst sozusagen die Qualität einer Policy \pi zur Bestimmung von Aktionen für einen KI-Agenten.

Betrachten wir einen einfachen Fall, in dem wir die Qualität/Leistung von \pi nur für einen Schritt des KI-Agenten vom Zustand s zum nächsten Zustand s' messen wollen. In diesem Fall können wir die Leistungsfunktion wie folgt definieren:

Def. der Leistungsfunktion.
Gl. 2 Def. der Leistungsfunktion für einen einzlenen Schritt des Agenten

Die zweite Zeile in der Gleichung 2 ist nichts anderes als die Ausführung des Erwartungsoperators \mathbb{E} auf den erwarteten Aktionswert r(s,a) für die Aktion a im Zustand s. s ist durch die Umgebung vorgegeben, in der sich der KI-Agent bewegt. a wird gemäß der Policy \pi bestimmt. R^{a}_s stellt die Belohnung für die Aktion a im Zustand s dar.

Bitte beachten Sie: r(s,a) ist der Ausdruck Q(s,a) bzw. q(s,a), 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 r(s,a) auch vom nächsten Zustand s' abhängt (siehe Gl. 17 in Markov-Entscheidungsprozesse), müssen wir die Belohnung R^{a}_s über alle Übergangswahrscheinlichkeiten p(s):=p(s→s') vom Zustand s zum nächsten Zustand s' mitteln. Weil R^{a}_s auch von der Aktion abhängt, müssen wir die Belohnung außerdem über alle möglichen π(a,s) 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 \theta der Policy \pi_{\theta} in Richtung einer größeren kumulativen Belohnung anpassen.

Nachdem wir nun die Leistung der Policy \pi_{\theta} 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 \pi_{\theta} 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 J(\theta) maximieren.

Die Grundidee hinter der Policy-Gradienten-Methode besteht darin, die Parameter θ der Policy \pi_{\theta} in die Richtung des Leistungsgradienten \nabla_{\theta}J(\theta) anzupassen.

Wenn wir den Gradienten von J(θ) berechnen, erhalten wir den folgenden Ausdruck:

Der Gradient der Leistungsfunktion
Gl. 3 Der Gradient der Leistungsfunktion für das Ein-Schritt-Verfahren

Da wir die Parameter θ finden wollen, die die Leistung J(\theta) maximieren, müssen wir θ mittels Gradientenaufstiegs aktualisierenim 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 Q(s,a) darstellt. Daraus ergibt sich die folgende Definition von dem Policy-Gradienten für den mehrstufigen Prozess, wobei die einzelne erwartete Belohnung r(s,a) durch die erwartete kumulative Belohnung (Summe der Belohnungen) Q_{\pi}(s,a) ersetzt wird.

Der Gradient der Leistungsfunktion für den mehrstufigen Prozess.
Gl. 4 Der Gradient der Leistungsfunktion für den mehrstufigen Prozess.

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 π(a|s)_{\theta} wird dabei als „Actor“ bezeichnet, weil der Actor die Aktion bestimmt, die der KI-Agent in einem Zustand s ausführen muss. Auf der anderen Seite stellt die Aktionswert-Funktion Q(s,a)_{\theta} den „Critic“ dar. Der Critic Q(s,a) _{\theta} hat die Aufgabe die Aktion des Actors zu „kritisieren“, indem dieser der Aktion einen Qualitätswert Q gibt.

Wie Sie in Gl. 4 sehen können, skaliert der Gradient von J(θ) mit diesem Qualitätswert Q(s,a) _{\theta}. Ein hoher Qualitätswert deutet darauf hin, dass die durchgeführte Aktion a im Zustand s tatsächlich eine gute Wahl war und die Parameter θ in Richtung des Gradienten der Leistungsfunktion \nabla_{\theta}J(\pi_{\theta}) angepasst werden sollten.

Das Gegenteil gilt für einen kleinen Qualitätswert. In der Praxis können wir Q(s,a)_{\pi_{\theta}} nicht im Voraus kennen. Daher müssen wir es durch eine Funktion Q_w(s,a) approximieren, die von den Parametern w abhängt. Im Allgemeinen kann Q_w(s,a) durch ein neuronales Netz geschätzt werden.

Schätzung der Action-Value-Funktion
Gl. 5 Schätzung der Action-Value-Funktion.


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

Neue Def. des Leistungsgradienten.
Gl. 6 Neue Def. des 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 J(θ)
  • Aktualisierung der Parameter w 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:

Actor-Critic Pseudoalgorithmus
Actor-Critic Pseudoalgorithmus.


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 R von der Umwelt, indem du eine Aktion a im Zustand s ausführst, und beobachte den neuen Zustand s'
  • Angesichts dieses neuen Zustands s' wird eine Aktion a' stochastisch aus der Verteilung π gezogen
  • Berechne die zeitlichen Differenz \delta unter Verwendung der alten s und a und der neuen s' und a'
  • Aktualisiere die Parameter w gemäß der Aktualisierungsregel beim TD-Learning (Bessere Alternative: Aktualisierung von w durch Minimierung des Abstands zwischen r+ γQ_w(s',a') und Q_w(s,a) mit regulären Gradientenabstiegsalgorithmen)
  • Aktualisiere die Parameter θ der Strategie \pi in Richtung des Gradienten der Leistung J(θ)
  • Setzen Sie den neuen Zustand s' als alten Zustand s und die neue Aktion a' als alte Aktion a
  • 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 Q(s,a) den Zustandswert V(s) 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 s beginnt.

Definition des "Vorteils" A.
Gl. 7 Definition des „Vorteils“ A.

Dieser neue Ausdruck in Gl. 7 wird als sog. „Advantage“ (deutsch: Vorteil) A_{\pi} definiert. Der Advantage kann in den Gradienten der Leistung \nabla_{\theta}J(\theta) 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.

Der "Vorteil" A wird in den Gradienten der Policy eingefügt
Gl. 8 Der „Vorteil“ A wird in den Gradienten der Policy eingefügt.


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

Zeitlicher Differenzfehler von V(s).
Gl. 9 Zeitlicher Differenzfehler von V(s).

Dies lässt sich anhand einer Definition von Q(s,a) zeigen, die den Erwartungswert von r+γV(s') darstellt. Durch Subtraktion des verbleibenden Terms V(s) erhält man die vorherige Definition des Terms A_{\pi_{\theta}} (Gl. 10).

Vorteil ist gleich dem erwarteten TD-Fehler von V(s)
Gl. 10 Vorteil ist gleich dem erwarteten TD-Fehler von V(s).

Schließlich können wir den zeitlichen Differenzfehler \delta_{\pi_{\tehta}} in den Gradienten von J(\theta) 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 A_{\pi_{\theta}} zu approximieren
Gl. 11 Die finale Form des Leistungsgradienten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert