Politik-Gradienten in Keras
Ich habe versucht, ein Modell aufzubauen, mit dem "Tiefen Q-Learning', wo ich eine große Anzahl von Aktionen (2908). Nach einigen begrenzten Erfolg bei der Verwendung von standard DQN:
(https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf), Beschloss ich, etwas mehr Forschung zu tun, weil ich dachte, die action der Raum war zu groß, um eine effiziente exploration.
Dann entdeckte ich dieses Papier: https://arxiv.org/pdf/1512.07679.pdf, wo Sie einen Akteur-Kritiker-Modell und policy-Verläufe, die dann führte mich zu: https://arxiv.org/pdf/1602.01783.pdf wo Sie use policy Gradienten sehr viel bessere Ergebnisse, dann DQN insgesamt.
Habe ich fand ein paar Webseiten, wo Sie umgesetzt haben, Politik Gradienten in Keras, https://yanpanlau.github.io/2016/10/11/Torcs-Keras.html und https://oshearesearch.com/index.php/2016/06/14/kerlym-a-deep-reinforcement-learning-toolbox-in-keras/ aber ich bin verwirrt, wie Sie umgesetzt werden. In der ehemaligen (und wenn ich Zeitungen Lesen) wie es scheint, statt ein input-und ein output-paar für die Akteur-Netzwerk-stellen Sie die Verläufe für alle GEWICHTE und verwenden Sie dann das Netzwerk zu aktualisieren, in der Erwägung, dass im letzteren Sie berechnen Sie einfach eine Eingabe-Ausgabe-paar.
Habe ich einfach nur verwirrt mich? Ich soll nur die Ausbildung des Netzwerks durch eine Eingabe-Ausgabe-paar und verwenden Sie die standard - 'fit', oder muss ich etwas besonderes tun? Wenn letzteres, wie mache ich es mit der Theano backend? (die obigen Beispiele verwenden TensorFlow).
- Haben Sie gesehen, github.com/matthiasplappert/keras-rl ?
- Ein Grund für das Inverkehrbringen nicht in der Zustand-Aktion-Paare ist, dass es dauert eine lange Zeit, wenn Sie eine große Anzahl von Aktionen. Stattdessen ist es oft hilfreich, das Netzwerk vorherzusagen, werden die Werte aller Aktionen auf einmal und dann machen Sie Ihre Aktion nach Auswahl
Du musst angemeldet sein, um einen Kommentar abzugeben.
TL;DR
Problem
Beim spielen,
benötigt der agent eine Politik, die im Grunde eine Funktion, die maps ein Staat in eine Richtlinie, die eine Wahrscheinlichkeit für jede Aktion. So, der agent wählt eine Aktion gemäß der geltenden Richtlinie.
ich.e, Politik = f(Zustand)
, Wenn die Ausbildung,
Politik Verlauf nicht eine Verlust-Funktion. Stattdessen versucht es zu maximieren die erwartete Rendite belohnt. Und müssen wir berechnen den Gradienten der log(action_prob) * Vorteil
Ich gehe davon aus, dass so etwas
Zusammenfassung
Brauchen wir zwei Funktionen
Wissen Sie bereits, es ist nicht so einfach zu implementieren wie typische Klassifikation von Problemen, wo man nur das Modell.kompilieren(...) -> Modell.fit(X, y)
Jedoch
Um vollständig nutzen zu können, Keras, Sie sollte bequem sein mit Definition der benutzerdefinierten Verlust-Funktionen und-Verläufen. Dies ist im Grunde der gleiche Ansatz, der Autor des ersteren nahm.
Lesen Sie mehr Dokumentationen von Keras funktionalen API und keras.backend
Plus, es gibt viele, viele Arten von Politik Verläufe.
Referenzen
Den scheinbar widersprüchlichen Implementierungen, denen Sie begegnen, sind beide gültig-Implementierungen. Sie sind zwei gleichwertige Möglichkeiten zwei, die Richtlinie umzusetzen Verläufe.
In der Vanille-Umsetzung, berechnen Sie den Gradienten der policy-Netzwerk-w.r.t. Belohnungen und direkt update der GEWICHTE in Richtung des Gradienten. Dies würde verlangen, dass Sie die beschriebenen Schritte von Mo K.
Die zweite option ist wohl eine bequemere Umsetzung für autodiff frameworks wie keras/tensorflow. Die Idee ist die Implementierung einer input-output - (Zustand, Aktion) - Funktion wie das betreute lernen, aber mit einem Verlust der Funktion, die die Steigung ist identisch mit der politischen Verlauf. Für eine softmax-Politik, das bedeutet einfach, vorherzusagen, die "wahre action" und die Multiplikation der (cross-entropy) der Verlust, der mit den beobachteten Renditen/Vorteil. Aleksis Pirinen hat einige nützliche Hinweise zu diesem [1].
Den geänderten Verlust-Funktion für option 2 in Keras sieht wie folgt aus:
wo 'Aktion' ist die wahre Handlung der episode (y), action_probs ist die vorhergesagte Wahrscheinlichkeit (y*). Dieses basiert auf einem anderen stackoverflow-Frage [2].
Referenzen