1

Ich implementierte DQN in mountain car problem von Openai Gym. Dieses Problem ist besonders, da die positive Belohnung sehr spärlich ist. Also dachte ich über die Implementierung einer priorisierten Erfahrungswiedergabe nach, wie in dieser paper by google deep mind vorgeschlagen.priorisierte Erfahrung Wiederholung in tiefen Q-Learning

gibt es bestimmte Dinge, die mich verwirren:

  • , wie wir die Wiederholungsspeicher lagern. Ich bekomme das p i ist die Priorität des Übergangs und es gibt zwei Möglichkeiten, aber was ist das P (i)?
  • Wenn wir die angegebenen Regeln befolgen, ändert sich P (i) nicht jedes Mal, wenn eine Probe hinzugefügt wird.
  • Was bedeutet es, wenn es heißt "wir probieren nach dieser Wahrscheinlichkeitsverteilung". Was ist die Verteilung?
  • endlich, wie probieren wir daraus aus. Ich bekomme das, wenn wir es in einer Prioritätswarteschlange speichern, können wir direkt abtasten, aber wir speichern es tatsächlich in einem Summenbaum.

Dank im Voraus

Antwort

2
  • Nach dem Papier, gibt es zwei Möglichkeiten für Pi und Unterseite auf Ihrer Wahl Berechnung unterscheidet sich Ihre Implementierung. Ich nehme an, dass Sie die proportionale Priorisierung ausgewählt haben, dann sollten Sie die Datenstruktur "sum-tree" verwenden, um ein Paar von Transitionen und P (i) zu speichern. P (i) ist nur die normalisierte Version von Pi und zeigt, wie wichtig dieser Übergang ist oder mit anderen Worten, wie effektiv dieser Übergang für die Verbesserung Ihres Netzwerks ist. Wenn P (i) hoch ist, bedeutet dies, dass es für das Netzwerk so überraschend ist, dass es dem Netzwerk wirklich helfen kann, sich selbst abzustimmen.
  • Sie sollten jeden neuen Übergang mit der Unendlichkeitspriorität hinzufügen, um sicherzustellen, dass er mindestens einmal abgespielt wird und es nicht erforderlich ist, den gesamten Erfahrungswiederholspeicher für jeden neuen kommenden Übergang zu aktualisieren. Während des Erlebniswiederholungsprozesses wählen Sie einen Minibatch aus und aktualisieren die Wahrscheinlichkeit dieser Erlebnisse im Minibatch.
  • Jede Erfahrung hat eine Wahrscheinlichkeit, so dass alle Erfahrungen zusammen eine Verteilung machen und wir wählen unsere nächste Mini-Charge nach dieser Verteilung aus.
  • Sie können von Ihrem Summe Baum über diese Politik Probe:

    def retrieve(n, s): if n is leaf_node: return n if n.left.val >= s: return retrieve(n.left, s) else: return retrieve(n.right, s - n.left.val)

    ich den Code aus here genommen haben.

+0

immer noch nicht bekommen. ändert sich die Größe der Stapel nicht abhängig von s. wäre auch keine Prioritätswarteschlange eine bessere Idee zu verwenden –

+1

nennen wir Abruffunktion für jede Probe. Ich meine, wenn Sie eine Mini-Charge haben, deren Größe 32 ist, dann sollten Sie die Funktion 32 Mal aufrufen. Heap ist nicht geeignet, da dies die höchste Wahrscheinlichkeit in jedem Schritt ergibt und es keine Chance gibt, andere Erfahrungen auszuwählen, aber mit Hilfe des Summenbaums können alle Erfahrungen ausgewählt werden und sie können auch effizient aktualisiert werden. –

+0

danke. ich habe es erfolgreich verstanden und umgesetzt. nur eine letzte Sache, benutzen wir Summenbaum, um nur ein wenig Zufälligkeit einzuführen, sonst bin ich nicht in der Lage zu sehen, wie es besser ist, die Prioritätswarteschlange –