Q-learning avec Neural Network comme approximation de fonction

11

J'essaie d'utiliser un réseau neuronal afin d'approximer la valeur Q dans l'apprentissage Q comme dans les questions sur l'apprentissage Q à l'aide des réseaux de neurones . Comme suggéré dans la première réponse, j'utilise une fonction d'activation linéaire pour la couche de sortie, tandis que j'utilise toujours la fonction d'activation sigmoïde dans les couches cachées (2, bien que je puisse changer cela plus tard). J'utilise également un NN unique qui renvoie une sortie pour chaque action Q(a) comme conseillé.

Cependant, l'algorithme est toujours divergent pour le simple problème d'équilibrage chariot-pôle. Donc, je crains que ma mise à jour Q soit incorrecte. Après l'initialisation, ce que j'ai fait à chaque étape est le suivant:

  • Calculez Qt(st) utilisant la propagation directe du NN pour toutes les actions.
  • Sélectionnez une nouvelle action, at , atterrissez dans un nouvel état st .
  • Calculez Qt(st+1) utilisant la propagation directe du NN pour toutes les actions.
  • Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)Qt(st,at)]atQt+1(s,at)=Qt(s,at)
  • Définissez le vecteur d'erreur sure=QtargetQt=Qt+1Qt
  • Rétropropage de l'erreur via le NN afin de mettre à jour les matrices de poids.

Quelqu'un pourrait-il me signaler où je me suis trompé?

En outre, pensez-vous que je devrais également inclure un terme de biais dans la couche d'entrée et la première couche cachée (c'est-à-dire pour les fonctions sigmoïdes)? Cela fera-t-il une difference?

Merci d'avance pour votre aide. Je peux aider à clarifier la question ou partager le code si nécessaire.

Enrico Anderlini
la source

Réponses:

9

Votre cible doit être juste

rt+1+γmaxaQ(st+1,a) .

Notez que votre terme d'erreur (qui est correct) pourrait alors être réécrit comme rt+1+γmaxaQ(st+1,a)Qt

qui est le terme entre crochets dans la formule de mise à jour. Cela sera multiplié par votre taux d'apprentissage NN et d'autres termes de rétropropagation pendant l'apprentissage, puis ajouté aux poids précédents, tout comme la formule de mise à jourQ

rcpinto
la source
Merci pour le tuyau! De cette façon, je peux éviter les erreurs numériques dans la valeur cible: comme vous le dites, il est inutile d'ajouter puis de soustraire . Qt
Enrico Anderlini
Cependant, mon apprentissage NN + Q ne converge toujours pas. Donc, si la méthode est correcte, je suppose que je vais juste essayer de jouer avec le taux d'apprentissage et le nombre de neurones dans la ou les couches cachées
Enrico Anderlini
1
Oui, vous devez le faire (essayez également d'utiliser la fonction de transfert ReLU). Mais notez que Q-Learning n'a aucune garantie de convergence avec l'approximation des fonctions. Si votre prochain essai ne fonctionne pas, vous voudrez peut-être essayer Advantage Learning. Et enfin, le problème pourrait être que vos données ne sont pas iid. Vous devez donc implémenter Experience Replay.
rcpinto
J'ai une extension à la question. Je comprends l'algorithme tel que mentionné dans la question, mais je suis confus quant aux termes et . Si la récompense pour le jeu n'est connue qu'à la fin du jeu (en cas de victoire ou de perte), comment devons-nous fournir la récompense pour une étape intermédiaire? Qt+1rt+1
Kanishka Ganguly du
1
Non, c'est zéro. Mais il sera lentement propagé par les valeurs Q vers les états précédents, car la valeur Q est une estimation des récompenses futures cumulatives .
rcpinto