Valeurs Q-Learning dépassant le seuil
Dans une tentative de mise en œuvre de Q-Learning, un problème est survenu lorsque les valeurs d'état-action dépassaient le seuil limites d’une variable à virgule flottante double précision. L'implémentation initiale attribuait ce problème à l'utilisation de agent.prevState au lieu d'un tuple état-action. Cependant, la cause première a été identifiée comme étant le calcul du prevScore.
Comprendre le problème
Q-Learning met à jour la valeur de Q(s, a) en fonction du formule :
Q(s, a) = Q(s, a) + (LearningRate * (prevScore + (DiscountFactor * reward) - Q(s, a)))
L'aspect crucial est que prevScore représente la récompense pour l'action d'état précédente, pas la valeur Q. Dans la mise en œuvre initiale, prevScore contenait la valeur Q de l'étape précédente au lieu de la récompense elle-même, ce qui entraînait des valeurs gonflées qui dépassaient la limite en virgule flottante.
Résolution
En révisant prevScore pour conserver la véritable récompense de l'étape précédente, le processus d'apprentissage s'est comporté comme prévu. La valeur maximale après 2 millions d'épisodes a été considérablement réduite et le modèle a montré un comportement raisonnable pendant le jeu.
Le rôle de la récompense
Il est important de noter l'influence de la fonction de récompense en apprentissage par renforcement. L’objectif est de maximiser la récompense totale attendue. Si une récompense est donnée pour chaque pas de temps, l’algorithme favorisera la prolongation du jeu, conduisant à des valeurs Q trop élevées. Dans cet exemple, l'introduction d'une récompense négative pour chaque pas de temps a encouragé l'agent à viser la victoire, ramenant les valeurs Q dans des limites appropriées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!