haben wir untersucht, wie man Reinforcement Studying (RL) mithilfe von Funktionsnäherung über die tabellarische Einstellung hinaus erweitern kann. Dadurch konnten wir zwar zustandsübergreifend verallgemeinern, doch unsere Experimente offenbarten auch eine wichtige Einschränkung: In einfachen Umgebungen wie GridWorld können Näherungsmethoden Schwierigkeiten haben, die Stabilität und Effizienz tabellarischer Ansätze zu erreichen. Der Hauptgrund dafür ist, dass das Erlernen einer guten Darstellung selbst ein schwieriges Downside ist – eines, das die Vorteile der Verallgemeinerung überwiegen kann, wenn der Zustandsraum noch relativ klein ist.

Um die Leistungsfähigkeit der Funktionsnäherung wirklich auszuschöpfen, müssen wir daher zu Umgebungen übergehen, in denen tabellarische Methoden nicht mehr praktikabel sind. Dies führt uns natürlich dazu Multiplayer-Spielewo der Zustandsraum kombinatorisch wächst und Generalisierung unabdingbar wird – und passt gleichzeitig perfekt in diese Beitragsreihe, da es uns bisher nicht gelungen ist, sinnvolles Verhalten in komplexeren Mehrspielerumgebungen zu lernen. In diesem Beitrag gehen wir diesen Schritt, indem wir das klassische Spiel „Vier verbinden“ betrachten und untersuchen, wie man mithilfe dessen starke Richtlinien erlernt Tiefes Q-Studying.

Von Sarsa bis Deep Q-Studying

Um diese Aufgabe zu bewältigen, erweitern wir unser Rahmenwerk um mehrere wichtige Dimensionen.

Zuerst bewegen wir uns von On-line-Updates zu einem Batch-Trainingsaufbau. In unserem frühere Implementierung von Sarsawir haben das Modell nach jedem Übergang aktualisiert. Obwohl dieser Ansatz dem ursprünglichen Algorithmus (1) treu bleibt, ist er rechentechnisch ineffizient: Jeder Optimierungsschritt verursacht nicht triviale Kosten, und moderne {Hardware} – insbesondere GPUs – ist für die Verarbeitung von Stapeln mit nur geringfügigem zusätzlichem Overhead ausgelegt.

Um dieses Downside anzugehen, führen wir ein Wiedergabepuffer. Anstatt sofort zu aktualisieren, speichern wir Übergänge, sobald sie auftreten – entweder bis zu einer festen Kapazität oder, in unserem Fall, bis ein oder mehrere Spiele beendet sind. Anschließend führen wir eine Batch-Aktualisierung dieser gesammelten Erfahrungen durch. Dies verbessert nicht nur die Recheneffizienz, sondern stabilisiert auch das Lernen, indem die Varianz einzelner Aktualisierungen verringert wird.

An diesem Punkt findet ein wichtiger konzeptioneller Wandel statt. Indem wir Erfahrungen aus der Vergangenheit nutzen, anstatt uns strikt an die aktuellen Richtlinien zu halten, entfernen wir uns von Sarsa – einem on-policy Methode – hin Q-Studyingwas ist Off-Coverage. Obwohl wir Q-Studying hier nicht offiziell in der Funktionsnäherungseinstellung wieder eingeführt haben, ist die Erweiterung von tabellarischer Fall ist weitgehend unkompliziert. Diese Kombination aus Wiederholungspuffern und Q-Studying bildet die Grundlage von Tiefe Q-Netzwerke (DQNs)populär gemacht von DeepMind in ihrer bahnbrechenden Arbeit über Atari-Spiele (2).

Zum Schluss wenden wir uns an Skalierbarkeit. Reinforcement Studying ist von Natur aus datenhungrig, daher ist eine Steigerung des Durchsatzes von entscheidender Bedeutung. Zu diesem Zweck implementieren wir a vektorisierter Umgebungswrapper Dadurch können wir mehrere Spiele von Join 4 parallel simulieren. Konkret: ein einziger Anruf an step(a) Verarbeitet jetzt eine Reihe von Aktionen und erweitert alle Umgebungen gleichzeitig.

In der Praxis ist es jedoch nicht trivial, in Python echte Parallelität zu erreichen. Die World Interpreter Lock (GIL) stellt sicher, dass jeweils nur ein Thread Python-Bytecode ausführt, was die Wirksamkeit von Multithreading für CPU-gebundene Arbeitslasten wie Umgebungsschritte einschränkt. Wir experimentierten auch mit Multi-Processing, stellten jedoch fest, dass der zusätzliche Overhead (z. B. Kommunikation zwischen Prozessen) die Vorteile unserer Umgebung weitgehend zunichte machte. Für den interessierten Leser empfehle ich ein früherer Beitrag von mir.

Trotz dieser Einschränkungen führt die Kombination aus Batch-Updates und Umgebungsvektorisierung zu einer erheblichen Verbesserung des Durchsatzes, wodurch die Leistung auf ca 50–100 Spiele professional Sekunde.

Durchführung

In diesem Beitrag verzichte ich bewusst darauf, zu sehr ins Element auf die Umgebungsvektorisierung einzugehen und konzentriere mich stattdessen auf die RL-Aspekte. Das liegt zum Teil daran, dass die Vektorisierung selbst „nur“ ein Implementierungsdetail ist – aber auch daran, dass unser aktuelles Setup ehrlich gesagt nicht supreme ist. Ein Großteil davon ist auf Einschränkungen zurückzuführen, die durch die von uns verwendete PettingZoo-Umgebung entstehen.

In zukünftigen Beiträgen werden wir verschiedene Umgebungen erkunden und dieses Thema mit einem stärkeren Schwerpunkt noch einmal aufgreifen Skalierbarkeit– ein entscheidender Aspekt des modernen Reinforcement Studying. Für eine ausführlichere Diskussion darüber, wie wir Mehrspielerumgebungen strukturieren, Agenten verwalten und einen Gegnerpool pflegen, verweise ich auf meinen früheren Beitrag Mehrspieler-RL. Das hier verwendete vektorisierte Setup ist lediglich eine Erweiterung dieses Frameworks auf mehrere parallel laufende Spiele. Die vollständige Implementierung ist wie immer auf verfügbar GitHub.

Q-Studying erneut aufgreifen

Lassen Sie uns noch einmal kurz auf Q-Studying eingehen und es mit unserer Implementierung verknüpfen.

Die Kernaktualisierungsregel ist gegeben durch:

Im Gegensatz zu Sarsa, das die im nächsten Zustand tatsächlich durchgeführte Aktion verwendet, verwendet Q-Studying a max. Betreiber über alle möglichen nächsten Aktionen. Das macht es Off-Coverageda die Aktualisierung nicht von der Verhaltensrichtlinie abhängt, die zum Generieren der Daten verwendet wird. In der Praxis führt dies häufig zu einer schnelleren Verbreitung von Wertinformationen, insbesondere in deterministischen Umgebungen wie Brettspielen.

In Kombination mit neuronalen Netzen wird dieser Ansatz üblicherweise als bezeichnet Tiefes Q-Studying. Anstatt eine Wertetabelle zu führen, trainieren wir ein neuronales Netzwerk Qθ(S,A)Q_theta(s,a) um die Aktionswertfunktion anzunähern. Die Aktualisierung wird dann als Regressionsproblem implementiert, wodurch die Differenz zwischen der aktuellen Schätzung und einem Bootstrapping-Ziel minimiert wird:

In unserer Implementierung entspricht dies direkt dem batch_update Funktion. Angesichts einer Reihe von Übergängen (S,A,R,S,Erledigt)(s, a, r, s‘, textual content{completed})berechnen wir zunächst die vorhergesagten Q-Werte für die ergriffenen Maßnahmen:

q = self.q(batch.states, ...)
q_sa = q.collect(1, batch.actions.unsqueeze(1)).squeeze(1)

Als nächstes konstruieren wir das Ziel unter Verwendung des maximalen Q-Werts des nächsten Zustands. Da in Join 4 nicht alle Aktionen authorized sind, wenden wir eine Maske an, um sicherzustellen, dass nur gültige Züge berücksichtigt werden:

q_next = self.q(batch.next_states, ...)
q_next_masked = q_next.masked_fill(~authorized, float("-inf"))
max_next = q_next_masked.max(dim=1).values

Schließlich kombinieren wir die Belohnung und den reduzierten Wert des nächsten Zustands und achten dabei darauf, die Endzustände korrekt zu behandeln:

goal = batch.rewards + gamma * (~batch.dones).float() * max_next

Das Netzwerk wird dann trainiert, indem der Huber-Verlust (eine robustere Variante des mittleren quadratischen Fehlers) minimiert wird:

loss = F.smooth_l1_loss(q_sa, goal)

Diese stapelbasierte Formulierung ermöglicht es uns, Erfahrungen aus mehreren parallelen Spielen effizient wiederzuverwenden, was für die Skalierung auf komplexere Umgebungen von entscheidender Bedeutung ist. Gleichzeitig wird eine zentrale Herausforderung des Deep Q-Studying hervorgehoben: Die Ziele selbst hängen vom aktuellen Netzwerk ab, was zu Instabilität während des Trainings führen kann.

Als zusätzliche Referenz bietet das offizielle PyTorch-Tutorial zu Deep Q-Studying eine hilfreiche ergänzende Perspektive.

Ergebnisse

Nachdem dies geklärt ist, wenden wir uns den Ergebnissen zu. Um sie ins rechte Licht zu rücken, erinnern wir uns zunächst daran, wie die tabellarische Methoden für diese Aufgabe durchgeführt. Nach 100.000 Schritten lagen die meisten Richtlinien hinsichtlich der Erfolgsquote immer noch dicht beieinander. Insbesondere wird sogar eine Zufallspolitik grob erreicht 50 % GewinnquoteDies deutet darauf hin, dass es keiner der erlernten Strategien gelungen ist, den Zufall auf sinnvolle Weise zu übertreffen.

Bild vom Autor

Im folgenden Experiment konzentrieren wir uns auf zwei Agenten: unseren DQN und eine zufällige Basislinie. Aufgrund des zuvor eingeführten „Zoo“-Setups handelt es sich beim DQN nicht um eine einzelne feste Richtlinie, sondern um eine Pool sich entwickelnder Wirkstoffe. Wir fügen kontinuierlich neue Versionen hinzu und beschneiden schwächere, wodurch die Gesamtstärke des Gegnerpools schrittweise erhöht wird.

Dies hat eine wichtige Implikation für die Interpretation der Metriken:
Die Gewinnrate von „DQN vs. DQN“ schwankt natürlich 50 %da Agenten ähnlicher Stärke gegeneinander konkurrieren. Ein aussagekräftigeres Sign ist daher die Leistung des Zufallspolitik. Wenn sich der DQN verbessert, sollte der zufällige Agent seltener gewinnen.

Schauen wir uns vor diesem Hintergrund die Leistungskurve an:

Bild vom Autor

Wir beobachten mehrere interessante Effekte. Am bemerkenswertesten ist die Gewinnrate der Zufallsrichtlinie fällt deutlich schneller ab als in der tabellarischen Einstellung – ein klarer Beweis dafür, dass der DQN tatsächlich das Spiel lernt. Allerdings nach ca eine Million Schrittedie Verbesserungsplateaus, wobei die Zufallspolitik immer noch ungefähr gewinnt 20 % der Spiele.

Um besser zu verstehen, was dies in der Praxis bedeutet, können wir die erlernte Richtlinie anhand eines menschlichen Spielers bewerten. Im folgenden Beispiel übernehme ich die Rolle des roten Spielers, der zuerst startet:

Bild vom Autor

Das Ergebnis ist durchaus aufschlussreich. Der Agent hat es offensichtlich gelernt offensiv spielen– es verfolgt aktiv seinen eigenen Vierer in Folge. Allerdings hat es Probleme damit defensives Spieleinfache Bedrohungen des Gegners nicht antizipieren und abwehren.

Das ist wahrscheinlich eine kleine Enttäuschung, aber: Wir werden darauf zurückkommen. In zukünftigen Beiträgen werden wir lernen, wie wir besser skalieren, schneller lernen und Menschen (in vielen Dingen) schlagen können. Das Schreiben dieser Beitragsreihe über Suttons großartiges Buch warfare eine erstaunliche Reise (obwohl noch einige Beiträge übrig sind) – aber wir sind einfach über den sehr allgemeinen Rahmen hinausgewachsen, mit dem wir begonnen haben, um alle verfügbaren Algorithmen in Suttons Buch vorzustellen, die sowohl tabellarische als auch Näherungslösungsmethoden abdecken. Deshalb ist Spezialisierung der richtige Weg – und in Zukunft werden wir genau das tun und hocheffiziente, maßgeschneiderte Methoden für verschiedene Probleme schreiben.

Abschluss

In diesem Beitrag sind wir vom tabellarischen Sarsa zum Tiefes Q-StudyingEinführung von Wiedergabepuffern, Batch-Updates und Funktionsnäherung. Wir haben dies auf Join 4 angewendet, ein Mehrspielerspiel, das wir zuvor nicht mit tabellarischen Methoden lösen konnten, mit einem klaren Ergebnis: Unser Agent bleibt nicht mehr auf der Zufallsebene hängen – er lernt, verbessert sich und übertrifft eine Zufallsrichtlinie kontinuierlich.

Aber genauso wichtig ist, dass wir auch die Grenzen sehen.

Selbst nach umfangreichem Coaching stagniert der Agent und weist immer noch deutliche Schwächen auf – vor allem im Defensivspiel. Dabei geht es nicht nur um „mehr Ausbildung“. Im Mehrspielermodus wird das Downside selbst noch schwieriger: Die Gegner entwickeln sich weiter, die Umgebung ist nicht mehr stationär und die Lernziele verschieben sich ständig.

Hier beginnt die eigentliche Herausforderung.

Bis zu diesem Punkt hat unser Rahmenwerk – in lockerer Anlehnung an (1) – Allgemeingültigkeit und Klarheit in den Vordergrund gestellt. Aber um weiter zu gehen, reicht das nicht mehr aus. Leistung erfordert Spezialisierung.

In den nächsten Beiträgen folgen wir zunächst weiter (1) – und konzentrieren uns dann genau darauf: schnellere, stabilere und skalierbarere Systeme aufzubauen – und über einfache Grundlinien hinaus hin zu Agenten zu gelangen, die wirklich konkurrieren können.

Weitere Beiträge dieser Serie

Referenzen

(1) http://incompleteideas.internet/e-book/RLbook2020.pdf

(2) https://arxiv.org/abs/1312.5602

Von admin

Schreibe einen Kommentar

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