Q-Learning-Werte überschreiten den Schwellenwert
Bei dem Versuch, Q-Learning zu implementieren, trat ein Problem auf, bei dem die Zustandsaktionswerte den Schwellenwert überschritten Grenzen einer Gleitkommavariablen mit doppelter Genauigkeit. Die ursprüngliche Implementierung führte dieses Problem auf die Verwendung von agent.prevState anstelle eines Status-Aktions-Tupels zurück. Als Grundursache wurde jedoch die Berechnung von prevScore identifiziert.
Das Problem verstehen
Q-Learning aktualisiert den Wert von Q(s, a) basierend auf Formel:
Q(s, a) = Q(s, a) + (LearningRate * (prevScore + (DiscountFactor * reward) - Q(s, a)))
Der entscheidende Aspekt ist, dass prevScore die Belohnung für die vorherige Zustandsaktion darstellt, nicht den Q-Wert. In der ersten Implementierung enthielt prevScore den Q-Wert des vorherigen Schritts anstelle der Belohnung selbst, was zu überhöhten Werten führte, die das Gleitkomma-Limit überschritten.
Auflösung
Durch die Überarbeitung von prevScore, um die wahre Belohnung für den vorherigen Schritt zu erhalten, verhielt sich der Lernprozess wie beabsichtigt. Der Maximalwert nach 2 Mio. Episoden verringerte sich erheblich und das Modell zeigte während des Spiels ein angemessenes Verhalten.
Die Rolle der Belohnung
Es ist wichtig, den Einfluss der Belohnungsfunktion zu beachten beim verstärkenden Lernen. Das Ziel besteht darin, die erwartete Gesamtvergütung zu maximieren. Wenn für jeden Zeitschritt eine Belohnung gegeben wird, begünstigt der Algorithmus eine Verlängerung des Spiels, was zu zu hohen Q-Werten führt. In diesem Beispiel ermutigte die Einführung einer negativen Belohnung für jeden Zeitschritt den Agenten, den Sieg anzustreben und die Q-Werte in angemessene Grenzen zu bringen.
Das obige ist der detaillierte Inhalt vonWarum explodieren meine Q-Learning-Werte? Eine Geschichte über überhöhte Belohnungen und Floating-Point-Limits.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!