Also, ich beginne mal mit einer Wiederholung des Ablaufs, den ich in dem anderen RL-bezogenen Thread gepostet habe.
Einige kleine Präzisierungen bzgl. der Bezeichner habe ich vorgenommen. Außerdem habe ich noch den Parameter 'alpha' (=Schrittweite) eingeführt, er ist in der klassischen RL-Literatur vorgesehen. Man kann ihn auf 1 setzen, dann kommt wieder das raus, was ich vereinfachend im anderen Thread geschrieben hatte. Es macht aber bestimmt Sinn, diese Schrittweite alpha (als Konstante) in die Implementierung aufzunehmen, dann hat man noch einen weiteren Parameter zum Experimentieren.
- Der Agent legt im momentanen Zustand
s für jede darin mögliche Aktion
a den Input (momentaner Zustand s, Aktion a) an das Netz an an und holt sich aus dem Netz den Output
Q(s, a).
- Mit einer gewissen Wahrscheinlichkeit führt der Agent die Aktion mit dem höchsten Output
Qmax(s, a) aus ('Exploitation'). Mit der Restwahrscheinichkeit führt der Agent stattdessen eine zufällig gewählte Aktion aus ('Exploration'). Die ausgeführte Aktion
a wird gemerkt (im Speicher gehalten).
- Der Agent erreicht dadurch einen neuen Zustand
s' und erhält eine Belohnung
r. Achtung: 'Belohnung' kann auch ein negativer Wert sein.
- Der Agent legt im neu erreichten Zustand
s' wieder für jede mögliche Aktion den Input
(s', a') an und holt sich aus dem Netz den Output
Q(s', a').
- Der Wert der höchstwertigen Aktion
Qmax(s', a') wird gemerkt:
- Ein neues
Trainingsmuster wird abgelegt und zwar für
Inputs = [s, a],
Output = Q(s, a) + alpha * [r +gamma * Qmax(s', a') - Q(s, a)], wobei
alpha und
gamma zwischen 0 und 1 gewählt werden.
- Das neue Trainingsmuster wird dem bereits erarbeiteten Fundus von Trainingsmustern hinzugefügt und über alle Trainingsmuster ein Trainingsschritt durchgeführt (=
1x Teach Lesson)
- Ist die maximale Größe des Trainingssatzes erreicht (z.B. 50000 Muster), dann wird das
älteste Muster vom Trainingssatz
gelöscht.
- Das Ganze beginnt von vorne
Der Faktor '
gamma' führt dazu, dass der Agent nicht nur den erzielten momentanen Gewinn
r erlernt, sondern auch noch den (geschätzten) nächsten zu erreichenden Gewinn
Qmax(s', a') mit einbezieht. So pflanzt sich erzielter und zu erwartender zukünftiger Gewinn durch die Zustands-/Aktionspaare zurück fort. Ein höherer Wert von Gamma (Richtung 1) macht den Agenten 'weitsichtiger'. Ein niedriger Wert von Gamma führt dazu, dass der Agent mehr auf kurzfristige Gewinnerzielung trainiert wird.
Zu Beginn des Trainings sollte viel Exploration (also 'ausprobieren') stehen. Je schlauer der Agent wird, um so mehr kann man auf Exploitation (also Ausnutzung von erlerntem Wissen) umsatteln.
So, ich muss das hier jetzt erst mal posten und dann nochmal nachdenken, ob ich versuche, noch mehr dazu zu sagen, oder erst mal Feedback abwarte, nachdem alles 'gesackt' ist
Viele Grüße
Q(s, a) = Q(s, a) + alpha * [r + Gamma * Q'max - Q(s, a)']