2016-10-08 4 views
1

Also ich versuche, Deep Q-Learning-Algorithmus von Google DeepMind erstellt zu implementieren, und ich denke, ich habe einen ziemlich guten Hang davon jetzt. Aber es gibt immer noch eine (ziemlich wichtige) Sache, die ich nicht wirklich verstehe und ich hoffe, du könntest helfen.Wie zu implementieren Deep Q-Learning Gradientenabstieg

Hat yj nicht auf ein Doppelergebnis (Java) und den zweiten Teil an einer Matrix Q-Werte für jede Aktion im aktuellen Zustand in der folgenden Zeile (4 letzte Zeile in dem Algorithmus), enthaltend:


1


So wie kann ich sie voneinander subtrahieren.

Sollte ich yj eine Matrix von hier 2 außer ersetzen die aktuell ausgewählte Aktion mit

alle Daten enthalten enter image description here

Dies scheint nicht, wie die richtige Antwort und ich bin ein bisschen hier verloren Wie du siehst.


enter image description here

+1

Wie ich es sehe: der Q-Teil ist auch 1-dimensional, da seine Aktion a-priori auf irgendeine Aktion festgelegt ist. Schau dir den Pseudocode in deinem Beitrag an. '' 'a_t''' wird als einzelne Aktion ausgewählt, die die Q-Funktion maximiert. Später wird '' 'a_t''' zum Wiedergabespeicher hinzugefügt, wo es während des Abtastens in einem späteren Schritt zu' 'a_d''' wird (immer noch eine einzelne feste Aktion). – sascha

+0

@sascha Ja, ich dachte auch darüber nach, aber dann konnte ich nicht herausfinden, wie ich die Gewichte meines neuronalen Netzwerks aktualisieren konnte, da ich die Fehler für alle Ausgaben (Aktionen in diesem Fall) nicht berechnen sollte, um Gewichte zu aktualisieren ? Wenn ich jetzt mit diesem einen Fehler aktualisiere, werden alle Gewichtungen aktualisiert, als ob alle Ausgaben denselben Fehler hätten. Soll ich also eine Fehlermatrix erstellen, die überall sonst Nullen enthält, außer in dieser Aktion? Dann würde es nur die Gewichte aktualisieren, die diese Aktion beeinflussen, richtig? – Dope

+1

Lerne Lernverfahren von NNs. Das hat mit dem Q-Learning-Framework hier nichts zu tun! Typischerweise werden NNs von SGD trainiert (mit einigen Mini-Batch-Größen). Wenn Sie eine Minibatchgröße von 1 verwenden, werden auch alle Gewichtungen aktualisiert, obwohl Sie nur eine einzige Stichprobe von Millionen beobachten. So funktioniert das. Der Sinn des Q-Lernens besteht darin, dass sich der interne Zustand der Q-Funktion ändert und dieser Einfehler im Laufe der Zeit zu einem geringeren Fehler verschoben wird (modellfreies Lernen)! (Und in Bezug auf Ihren Nullansatz: Nein!) Nehmen Sie einfach diese eine Beispielaktion (aus dem Speicher) als ein Beispiel für einen SGD-Schritt. – sascha

Antwort

2

fand mich es eigentlich. (Gleich von Anfang an: D)

  1. Führen Sie einen Feedforward-Durchlauf für den aktuellen Status s durch, um vorhergesagte Q-Werte für alle Aktionen zu erhalten.
  2. Führen Sie einen Feedforward-Durchgang für den nächsten Zustand s 'durch und berechnen Sie maximale Gesamt-Netzwerkausgänge max a' Q (s ', a').
  3. Setzen Sie das Q-Wert-Ziel für die Aktion auf r + γmax a 'Q (s', a ') (verwenden Sie das in Schritt 2 berechnete Maximum). Setzen Sie für alle anderen Aktionen das Q-Wert-Ziel auf das gleiche wie ursprünglich von Schritt 1 zurückgegeben, wodurch der Fehler 0 für diese Ausgaben auftritt.
  4. Aktualisieren Sie die Gewichte mit Backpropagation.
+1

Das sieht gut aus! – sascha

Verwandte Themen