Comment gérer les mouvements invalides dans l'apprentissage par renforcement?


20

Je veux créer une IA qui peut jouer à cinq dans une rangée / gomoku. Comme je l'ai mentionné dans le titre, je veux utiliser l'apprentissage par renforcement pour cela.

J'utilise la méthode du gradient de politique , à savoir REINFORCE, avec la ligne de base. Pour l'approximation de la valeur et de la fonction politique, j'utilise un réseau neuronal . Il a des couches convolutives et entièrement connectées. Toutes les couches, à l'exception de la sortie, sont partagées. La couche de sortie de la stratégie a 8×8=64 (la taille de la carte) et un softmax sur eux. C'est donc stochastique. Mais que se passe-t-il si le réseau produit une probabilité très élevée pour un mouvement invalide? Un déplacement invalide se produit lorsque l'agent veut vérifier un carré contenant un "X" ou un "O". Je pense qu'il peut rester dans cet état de jeu.

Pourriez-vous recommander une solution à ce problème?

Ma conjecture est d'utiliser la méthode acteur-critique . Pour un coup invalide, nous devons donner une récompense négative et passer le tour à l'adversaire.

Réponses:


10

Ignorez simplement les mouvements invalides.

Pour l'exploration, il est probable que vous n'exécuterez pas simplement le mouvement avec la probabilité la plus élevée, mais que vous choisissiez plutôt des mouvements au hasard en fonction de la probabilité émise. Si vous ne punissez que des mouvements illégaux, ils conserveront une certaine probabilité (même faible) et seront donc exécutés de temps en temps (mais rarement). Ainsi, vous garderez toujours un agent qui effectue occasionnellement des mouvements illégaux.

Pour moi, il est plus logique de simplement mettre à zéro les probabilités de tous les mouvements illégaux et de renormaliser le vecteur de sortie avant de choisir votre mouvement.


Je vous remercie. probablement je n'étais pas clair mais j'ai choisi le mouvement au hasard par les probabilités produites. Je vais essayer votre conseil pour mettre à zéro la probabilité des mouvements illégaux et voir ce qui va se passer. Bonne journée.
Molnár István

8

Habituellement, les méthodes softmax dans les méthodes de gradient de politique utilisant une approximation de fonction linéaire utilisent la formule suivante pour calculer la probabilité de choisir l'action a . Ici, les poids sont θ , et les caractéristiques ϕ est fonction de l'état actuel s et une action de l'ensemble des actions A .

π(θ,a)=eθϕ(s,a)bAeθϕ(s,b)

Legal(A)

π(θ,a)=eθϕ(s,a)bLegal(A)eθϕ(s,b),aLegal(A)

In pseudocode the formula may look like this:

action_probs = Agent.getActionProbs(state)
legal_actions = filterLegalActions(state, action_probs)
best_legal_action = softmax(legal_actions)

Whether using linear or non-linear function approximation (your neural network), the idea is to only use the legal moves when computing your softmax. This method means that only valid moves will be given by the agent, which is good if you wanted to change your game later on, and that the difference in value between the limited choice in actions will be easier to discriminate by the agent. It will also be faster as the number of possible actions decreases.


Very useful. Thanks for posting both the equations and pseudocode!
DukeZhou

1
The maths and pseudocode do not match here. Softmax over the legal move probabilities will adjust the relative probabilities. E.g. (0.3, 0.4, 0.2, 0.1) filtered with first and third item removed would be (0.0, 0.8, 0.0, 0.2) with your formula, but would be (0.0, 0.57, 0.0, 0.42) using the pseudocode. The pseudocode needs to take the logits, prior to action probability calculations.
Neil Slater

4
How does one compute the gradient of the filtered version of Softmax? Seems like this would be necessary for backpropagation to work successfuly, yes?
brianberns

@brianberns Did you manage to find an answer? It seems like that would be the case to me but somehow in my toy example I'm only getting the right answer when using the log probabilities of the unfilitered softmax...
tryingtolearn

5

IMHO the idea of invalid moves is itself invalid. Imagine placing an "X" at coordinates (9, 9). You could consider it to be an invalid move and give it a negative reward. Absurd? Sure!

But in fact your invalid moves are just a relic of the representation (which itself is straightforward and fine). The best treatment of them is to exclude them completely from any computation.

This gets more apparent in chess:

  • In a positional representation, you might consider the move a1-a8, which only belongs in the game if there's a Rook or a Queen at a1 (and some other conditions hold).

  • In a different representation, you might consider the move Qb2. Again, this may or may not belong to the game. When the current player has no Queen, then it surely does not.

As the invalid moves are related to the representation rather than to the game, they should not be considered at all.


1
Bon point. Dans les jeux [M], qui sont joués sur Sudoku, les contraintes rendent de nombreuses positions (coordonnées + valeur) illégales après le premier placement. Il n'y a aucune valeur à considérer ces positions illégales du point de vue du placement, mais une couche stratégique importante reconnaît quels placements minimisent la valeur des positions restantes non jouées. (c'est-à-dire que si je place un 8 ici, cela empêche mon adversaire de placer un 8 dans cette ligne, cette colonne ou cette région. Essentiellement, "combien de positions stratégiques ce placement supprime-t-il du plateau de jeu?")
DukeZhou

5

J'ai récemment rencontré un problème similaire avec Démineur.

J'ai résolu le problème en ignorant complètement les mouvements illégaux / invalides.

  1. Use the Q-network to predict the Q-values for all of your actions (valid and invalid)
  2. Pre-process the Q-values by setting all of the invalid moves to a Q-value of zero/negative number (depends on your scenario)
  3. Use a policy of your choice to select an action from the refined Q-values (i.e. greedy or Boltzmann)
  4. Execute the selected action and resume your DQN logic

Hope this helps.


1
La seule chose que j'ajouterais à cela est que vous devez vous rappeler de faire un backprop sur le DQN lorsque vous définissez les valeurs Q pour les paires illégales (s, a) sur une grande valeur négative afin qu'il soit formé pour ne pas choisir cet état, action paires la prochaine fois.
SN

Mais je me demande ce que la définition de grandes valeurs Q cibles -ve fait pour la continuité ou la forme de la fonction de perte / erreur (affectant ainsi la recherche de gradient). Quelle a été votre expérience?
SN

1
@SN Je vois votre point. L'idée est de choisir l'action avec la valeur Q la plus élevée qui n'est pas une action non valide . Ensuite, vous exécutez cette action et utilisez cette action dans votre règle de mise à jour (c'est-à-dire entraînez votre DQN à favoriser cette action à long terme). Cela a pour effet d'augmenter les valeurs Q futures de l'action sélectionnée et donc de les rendre plus favorables. Cependant, cela ne fera PAS baisser la valeur Q des actions illégales, ce qui n'a pas d'importance car elles sont toujours filtrées (non prises en compte). Faites-moi savoir si vous souhaitez que je développe davantage avec un exemple. :)
Sanavesa

1
@Sanavesa a du sens, vous comptez essentiellement sur le DQN pour finalement apprendre quels sont les bons choix à travers l'école des coups durs. Mais dans les situations où il n'y a qu'un ou quelques choix juridiques, vous vous retrouverez avec un apprentissage très lent. L'approche que je propose est un moyen d'incorporer le domaine K dans le problème pour accélérer cet apprentissage. C'est aussi ce que je pensais que vous faisiez dans votre message d'origine où vous écriviez de "définir des mouvements invalides à une valeur Q de zéro / nombre négatif"
SN

1
@SNPrécisément! Les deux approches ont leurs mérites. Dépend de l'application s'il est plus facile d'apprendre les mouvements légaux ou simplement de les ignorer. Pour les grandes applications complexes, je pense qu'ignorer les mouvements invalides est beaucoup plus rapide pour l'agent à apprendre, mais ne me citez pas là-dessus.
Sanavesa
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.