Ich habe Googles DeepMind Atari -Papier gelesen und versuche es Um das Konzept der „Erfahrungswiedergabe“ zu verstehen. Die Erfahrungswiedergabe wird in vielen anderen Lernpapieren zur Verstärkung (insbesondere im AlphaGo-Papier) erwähnt. Daher möchte ich verstehen, wie es funktioniert. Nachfolgend einige Auszüge.

Zuerst verwendeten wir einen biologisch inspirierten Mechanismus, der als Erfahrungswiedergabe bezeichnet wird und die Daten randomisiert, wodurch Korrelationen in der Beobachtungssequenz entfernt und Änderungen in der Datenverteilung geglättet werden.

Das Papier geht dann wie folgt vor:

Während andere stabile Methoden zum Trainieren neuronaler Netze existieren In der Umgebung des Verstärkungslernens, wie beispielsweise der neuronalen angepassten Q-Iteration, umfassen diese Methoden das wiederholte Training von Netzwerken de novo Hunderten von Iterationen. Folglich sind diese Methoden im Gegensatz zu unserem Algorithmus zu ineffizient, um mit großen neuronalen Netzen erfolgreich eingesetzt zu werden. Wir parametrisieren eine Näherungswertfunktion $ Q (s, a; \ theta_i) $ unter Verwendung des in 1 gezeigten tiefen Faltungs-Neuronalen Netzwerks, in dem $ \ theta_i $ sind die Parameter (dh Gewichte) des Q-Netzwerks bei Iteration $ i $ . Um eine Erfahrungswiedergabe durchzuführen, speichern wir die Erfahrungen des Agenten $ e_t = (s_t, a_t, r_t, s_ {t + 1}) $ zu jedem Zeitschritt $ t $ in einem Datensatz $ D_t = \ {e_1, \ dots, e_t \} $ Beim Lernen wenden wir Q-Learning-Updates auf Erfahrungsbeispiele (oder Mini-Batches) an. $ (s, a, r, s „) \ sim U (D) $ , gleichmäßig zufällig aus dem Pool der gelagerten Proben gezogen. Das Q-Learning-Update bei der Iteration $ i $ verwendet die folgende Verlustfunktion:

$$ L_i (\ theta_i) = \ mathbb {E} _ {(s, a, r, s „) \ sim U (D)} \ left [\ left (r + \ gamma \ max_ {a“} Q (s „, a „; \ theta_i ^ -) – Q (s, a; \ theta_i) \ right) ^ 2 \ right] $$

Was ist Erfahrungswiederholung und was sind ihre Vorteile für Laien?

Antwort

Der Schlüsselteil des Der zitierte Text lautet:

Um eine Erfahrungswiedergabe durchzuführen, speichern wir die Erfahrungen des Agenten $ e_t = (s_t, a_t, r_t, s_ {t + 1} ) $

Dies bedeutet, dass das System die ermittelten Daten speichert, anstatt Q-Learning für Status- / Aktionspaare auszuführen, wie sie während der Simulation oder der tatsächlichen Erfahrung auftreten [Zustand, Aktion, Belohnung, nächster Zustand] – normalerweise in einer großen Tabelle. Beachten Sie, dass hierdurch keine zugeordneten Werte gespeichert werden. Dies sind die Rohdaten, die später in die Berechnung der Aktionswerte einfließen.

Die Lernphase ist dann logisch vom Sammeln von Erfahrungen getrennt und basiert auf der Entnahme von Zufallsstichproben aus dieser Tabelle. Sie möchten die beiden Prozesse – Handeln und Lernen – immer noch miteinander verschachteln, da die Verbesserung der Richtlinie zu unterschiedlichen Verhaltensweisen führt, bei denen Aktionen untersucht werden sollten, die den optimalen näher kommen, und Sie möchten daraus lernen. Sie können dies jedoch nach Belieben aufteilen – z. Machen Sie einen Schritt, lernen Sie aus drei zufälligen vorherigen Schritten usw. Die Q-Learning-Ziele verwenden bei der Verwendung der Erfahrungswiedergabe dieselben Ziele wie die Online-Version, daher gibt es dafür keine neue Formel. Die angegebene Verlustformel ist auch die, die Sie für DQN ohne Erfahrungswiedergabe verwenden würden. Der Unterschied besteht nur darin, welche s, a, r, s „, a“ Sie eingeben.

In DQN unterhielt das DeepMind-Team auch zwei Netzwerke und wechselte, welches war Lernen und welche man aktuelle Aktionswertschätzungen als „Bootstraps“ einspeist. Dies trug zur Stabilität des Algorithmus bei Verwendung eines nichtlinearen Funktionsapproximators bei. Dafür steht der Balken in $ {\ theta} ^ {\ overline {\ space}} _ i $ – er bezeichnet die alternative eingefrorene Version der Gewichte.

Vorteile der Wiedergabe von Erfahrungen:

  • Effizientere Nutzung früherer Erfahrungen durch mehrmaliges Lernen. Dies ist der Schlüssel, wenn das Sammeln von Erfahrungen aus der Praxis kostspielig ist und Sie sie voll ausnutzen können Die Q-Learning-Aktualisierungen sind inkrementell und konvergieren nicht schnell. Daher sind mehrere Durchgänge mit denselben Daten von Vorteil, insbesondere wenn die unmittelbaren Ergebnisse (Belohnung, nächster Status) bei demselben Status und Aktionspaar nur geringfügig voneinander abweichen.

  • Besseres Konvergenzverhalten beim Trainieren eines Funktionsapproximators. Dies liegt zum Teil daran, dass die Daten eher den in iid angenommenen Daten entsprechen die meisten überwachten Lernkonvergenznachweise.

Nachteil der Erfahrungswiedergabe:

  • Es ist schwieriger, mehrstufige Lernalgorithmen wie Q ($ \ lambda $) zu verwenden. Dies kann angepasst werden, um bessere Lernkurven zu erzielen, indem zwischen Bias (aufgrund von Bootstrapping) und Varianz (aufgrund von Verzögerungen und Zufälligkeiten bei Langzeitergebnissen) ausgeglichen wird. Mehrstufiger DQN mit Erfahrungswiedergabe DQN ist eine der Erweiterungen, die im Artikel Rainbow: Kombinieren von Verbesserungen beim Deep Reinforcement Learning behandelt werden.

Der in DQN verwendete Ansatz ist kurz , beschrieben von David Silver in Teilen dieser Videovorlesung (um 01:17 Uhr: 00, aber sehenswerte Abschnitte davor). Ich empfehle, die gesamte Serie anzuschauen, bei der es sich um einen Abschlusskurs zum Thema Verstärkungslernen handelt, wenn Sie Zeit haben.

Kommentare

  • Lassen Sie ‚ sagen, dass wir uns während des Trainings in einem Bundesstaat befinden und eine Aktion gemäß der epsilon-gierigen Richtlinie durchführen und dass Sie in einem anderen Bundesstaat landen. So erhalten Sie Belohnungen und den nächsten Zustand. Hier kann die Belohnung die Punktzahl des Spiels sein und die Zustände können die Pixelmuster auf dem Bildschirm sein. Und dann nehmen wir den Fehler zwischen unserem Funktions-Approximator und dem Wert, den wir von der gierigen Richtlinie erhalten haben, erneut unter Verwendung des bereits eingefrorenen Funktions-Approximators. Mit der Erfahrungswiedergabe bei der Optimierung des Approximators nehmen wir jedoch einen zufälligen Aktionsdatensatz. Habe ich recht?
  • @ShamaneSiriwardhana: Ja, ich denke du hast recht. Es sind genau die gleichen Daten aus der realen Flugbahn, aber anstatt nur aus dem letzten Schritt zu lernen, speichern Sie sie in einer großen Tabelle und probieren aus dieser Tabelle (normalerweise mehrere Proben mit einem Speicher von 1000 vorherigen Schritten zur Auswahl ). Wenn Sie weitere Erläuterungen benötigen, stellen Sie möglicherweise eine Frage auf der Website.
  • Ja, ich habe das Papier noch einmal durchgesehen. Es heißt auch, dass diese Methode auch das Lernen außerhalb der Politik verbessern kann. Denn beim Q-Lernen mit Handeln gemäß der epsilon-gierigen Richtlinie funktionieren die Aktualisierungswerte jedoch gemäß der gierigen Richtlinie. Wenn also unsere neuronalen Netzparameter bei jedem Zeitschritt durch Mini-Batch-Statistiken aktualisiert werden, was vor allem nicht mit der genauen Zeitschrittstatistik zusammenhängt, sondern was zuvor passiert ist, hilft dies auch, die Daten nicht zu korrelieren ‚ Ich habe das Rainbow-Papier durchgesehen und ‚ keine speziellen Kommentare zur Verwendung eines speziellen Tricks zum Kombinieren von Erfahrungswiedergabe und Multi- Schritt Methode. Außerdem habe ich ‚ gehört, dass es mehr unmöglich ist, eine mehrstufige Methode mit einer Erfahrungswiedergabe zu kombinieren, aber warum nicht einfach zufällig n aufeinanderfolgende Erfahrungen anstelle von 1 aus der Erfahrungswiedergabe auswählen, sondern aus der Wiederholung dass zwischen jeder n-Erfahrung keine Korrelationen gefunden wurden? Ist ‚ nicht diese mehrstufige Erfahrungswiedergabe?
  • @NeilSlater Warum ist es “ schwieriger, Multi- zu verwenden? Schrittlernalgorithmen „? Was hast du gemeint?

Antwort

Der Algorithmus (oder zumindest eine Version davon, wie in implementiert Das Coursera RL-Schlusssteinprojekt ) lautet wie folgt:

  1. Erstellen Sie einen Wiederholungspuffer, in dem der letzte #buffer_size SARS (Staat, Aktion, Belohnung, neuer Staat) Erfahrungen.

  2. Führen Sie Ihren Agenten aus und lassen Sie ihn Erfahrungen im Wiedergabepuffer sammeln, bis er (der Puffer) mindestens #batch_size Erfahrungen hat .

    • Sie können Aktionen gemäß einer bestimmten Richtlinie (z. B. Soft-Max für diskreten Aktionsbereich, Gauß für kontinuierliches usw.) über Ihrem $ auswählen \ hat {Q} (s, a; \ theta) $ -Funktionsschätzer.
  3. Sobald er #batch_size oder mehr:

    • erstellt eine Kopie des Funktionsschätzers ( $ \ hat {Q} (s, a; \ theta) $ ) zum aktuellen Zeitpunkt, dh eine Kopie der Gewichte $ \ theta $ – die Sie „einfrieren“ und nicht aktualisieren, und verwenden Sie, um die „wahren“ Zustände zu berechnen. $ \ hat {Q} (s „, a“; \ theta) $ . Führen Sie für Updates:

      1. Beispiel #batch_size Erfahrungen aus dem Wiedergabepuffer.

      2. Verwenden Sie die Stichprobenerfahrungen, um pr Führen Sie eine Stapelaktualisierung Ihres Funktionsschätzers durch (z. in Q-Learning, wobei $ \ hat {Q} (s, a) = $ Neuronales Netzwerk – Aktualisieren Sie die Gewichte des Netzwerks). Verwenden Sie die eingefrorenen Gewichte als „wahre“ Aktionswertfunktion, verbessern Sie jedoch die nicht eingefrorene Funktion weiter.

    • Tun Sie dies, bis Sie einen Endzustand erreichen.

    • Vergessen Sie nicht, die neuen Erfahrungen ständig an den Wiederholungspuffer anzuhängen.

  4. Führen Sie so viele Episoden aus, wie Sie benötigen.

Was ich unter „wahr“ verstehe: Jede Erfahrung kann als „überwachtes“ Lernduo betrachtet werden, bei dem Sie eine wahre Wertfunktion haben $ Q (s, a) $ und ein Funktionsschätzer $ \ hat {Q} (s, a) $ . Ihr Ziel ist es, den Wertfehler zu reduzieren, z. $ \ sum (Q (s, a) – \ hat {Q} (s, a)) ^ 2 $ . Da Sie wahrscheinlich keinen Zugriff auf die Aktionswerte true haben, verwenden Sie stattdessen eine verbesserte Bootstrap-Version des letzten Schätzers Unter Berücksichtigung der neuen Erfahrung und Belohnung. Beim Q-Learning ist der „wahre“ Aktionswert $ Q (s, a) = R_ {t + 1} + \ gamma \ max_ {a „} \ hat {Q} (s“, a „; \ theta) $ wobei $ R $ die Belohnung und $ \ gamma $ ist der Rabattfaktor.

Hier ist ein Auszug aus dem Code:

def agent_step(self, reward, state): action = self.policy(state) terminal = 0 self.replay_buffer.append(self.last_state, self.last_action, reward, terminal, state) if self.replay_buffer.size() > self.replay_buffer.minibatch_size: current_q = deepcopy(self.network) for _ in range(self.num_replay): experiences = self.replay_buffer.sample() optimize_network(experiences, self.discount, self.optimizer, self.network, current_q, self.tau) self.last_state = state self.last_action = action return action 

Schreibe einen Kommentar

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