Questions sur Q-Learning à l'aide de réseaux de neurones


14

J'ai implémenté Q-Learning comme décrit dans,

http://web.cs.swarthmore.edu/~meeden/cs81/s12/papers/MarkStevePaper.pdf

Afin d'env. Q (S, A) J'utilise une structure de réseau neuronal comme la suivante,

  • Sigmoïde d'activation
  • Entrées, nombre d'entrées + 1 pour les neurones d'action (toutes les entrées mises à l'échelle 0-1)
  • Sorties, sortie unique. Q-Value
  • N nombre de M couches cachées.
  • Méthode d'exploration aléatoire 0 <rand () <propExplore

À chaque itération d'apprentissage en utilisant la formule suivante,

entrez la description de l'image ici

Je calcule une valeur Q-Target puis calcule une erreur en utilisant,

error = QTarget - LastQValueReturnedFromNN

et propager l'erreur à travers le réseau de neurones.

Q1, suis-je sur la bonne voie? J'ai vu quelques articles qui implémentent un NN avec un neurone de sortie pour chaque action.

Q2, Ma fonction de récompense renvoie un nombre compris entre -1 et 1. Est-il correct de renvoyer un nombre compris entre -1 et 1 lorsque la fonction d'activation est sigmoïde (0 1)

Q3, D'après ma compréhension de cette méthode, avec suffisamment d'instances de formation, elle devrait être mise en quarantaine pour trouver une stratégie optimale? Lors de l'entraînement pour XOR, il l'apprend parfois après 2k itérations parfois, il n'apprendra même pas après 40k 50k itérations.


Par curiosité, comment avez-vous combiné l'entrée d'état avec l'entrée d'action, afin d'alimenter les deux en même temps sur le réseau? Avez-vous ce morceau de code accessible au public? Je vous remercie!
Pedro Lopes

Réponses:


9

Q1. Vous êtes définitivement sur la bonne voie, mais quelques changements pourraient vous aider énormément. Certaines personnes utilisent une unité de sortie par action afin de n'avoir à exécuter leur réseau qu'une seule fois pour la sélection des actions (vous devez exécuter votre réseau une fois pour chaque action possible). Mais cela ne devrait pas faire de différence en ce qui concerne l'apprentissage , et ne vaut la peine d'être mis en œuvre que si vous prévoyez d'augmenter considérablement votre modèle.

Q2. Généralement, les gens utilisent une fonction d'activation linéaire pour la dernière couche de leur réseau neuronal, en particulier pour l'apprentissage par renforcement. Il y a plusieurs raisons à cela, mais la plus pertinente est qu'une fonction d'activation linéaire vous permet de représenter la gamme complète de nombres réels comme sortie. Ainsi, même si vous ne connaissez pas les limites des récompenses pour votre tâche, vous êtes toujours assuré de pouvoir représenter cette plage.

Q3. Malheureusement, les garanties théoriques pour combiner les réseaux de neurones (et l'approximation des fonctions non linéaires en général) avec l'apprentissage par renforcement sont pratiquement inexistantes. Il existe quelques versions plus sophistiquées de l'apprentissage par renforcement (principalement du laboratoire de Sutton) qui peuvent faire les sortes de revendications de convergence que vous mentionnez, mais je n'ai jamais vraiment vu ces algorithmes appliqués `` à l'état sauvage ''. La raison en est que même si de grandes performances ne peuvent pas être promises, elles sont généralement obtenues dans la pratique, avec une attention appropriée aux hyper-paramètres et aux conditions initiales.

Un dernier point qui mérite d'être mentionné pour les réseaux de neurones en général: n'utilisez pas les fonctions d'activation sigmoïde pour les réseaux avec beaucoup de couches cachées! Ils sont maudits par le problème des «gradients disparaissants»; le signal d'erreur atteint à peine les couches précédentes (en regardant la dérivée de la fonction devrait expliquer pourquoi c'est le cas). Au lieu de cela, essayez d'utiliser des unités linéaires rectifiées (RELU) ou des unités «soft plus», car elles présentent généralement de bien meilleures performances dans les réseaux profonds.

Voir cet article pour une excellente mise en œuvre de réseaux de neurones formés à l'apprentissage par renforcement:

Mnih, Volodymyr et al. "Jouer à Atari avec un apprentissage par renforcement profond." arXiv preprint arXiv: 1312.5602 (2013).


0

Pour la fonction d'activation, maxout fonctionne également bien. Utiliser un bon entraîneur est crucial pour les réseaux profonds, j'avais essayé différents entraîneurs mais j'ai décidé de rester avec RMSprop et ça a l'air super!


1
Bienvenue sur le site, @ user3355911. C'est probablement trop clairsemé pour être une réponse ici. Pouvez-vous l'étendre et l'étoffer davantage?
gung - Réintégrer Monica
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.