Réseau de neurones appliqué à des AI de jeux

a marqué ce sujet comme résolu.

Bonjour à tous, Je me documente en ce moment sur les réseaux de neurones. J'ai un peu compris le fonctionnement lorsque l'on a un ensemble d'exemples à disposition, on l'entraine, on modifie les poids des différents neurones ensuite en rétropropageant l'erreur etc…

Mais si on veut essayer d'optimiser une stratégie de jeu, on n'a pas d'exemple particulier, la seule donnée que l'on puisse avoir c'est si on a gagné ou non la partie à la fin. Dans ce cas là on ne peut directement propager en arrière une erreur. Y a t-il un moyen tout de meme (peut etre avec des algos génétiques) d'entrainer ce réseau de neurones ?

Merci d'avance pour la réponse

Imaginons un programme qui joue plus ou moins au hasard, ou avec un algorithme assez basique. Mais ce programme pourrait mémoriser toutes les parties jouées. Au bout de quelques millions de parties, une IA pourrait analyser les parties jouées, et pourrait en tirer des conclusions : Dans telle configuration, quand j'ai regroupé les pions sur une même flèche, j'ai gagné la majorité des parties. Alors que dans la même configuration, quand j'ai choisi l'autre option, j'ai perdu la majorité des parties.

Et le programme pourrait ainsi s'améliorer en analysant ses propres parties.

Ou en analysant des parties jouées par d'autres joueurs.

Bonjour, Non ça ne sort pas forcément du cadre des réseaux de neurones, cependant si tu découvre je te conseil de d'abord passer par l'analyse d'image qui sera plus naturelle.

AlphaGo (le programme qui poutre Lee Se-Dol, champion du monde de Go) utilise des réseaux de neurones (2). Il sont très très gros mais restent des réseaux de neurones. Je pense qu'appliqué a un jeu (random ou pas) ton réseau doit sortir le coup qu'il pense meilleur (avec une proba souvent, même si c'est de moins en moins fait pour des raisons de rapidité d'apprentissage). Du coup, il suffit de "simuler" des parties en indiquant le meilleur coup ou en faisant un apprentissage non supervisé et ça va marcher. Les performances dépendront de la qualité d'apprentissage, de la structure de ton réseau (quels neurones choisis tu ? Il en existe de dizaines (convolution, fonction d'aggrégation basique ou plus complexe, fonction d'évaluation sigmoid Negative LogLikelihood, ReLU…)).

@Vic Ce sont des notions assez complexes donc si tu ne t'entraine pas sur autre chose de plus naturelle tu ne pourras jamais réussir à le faire pour ton sujet.

En fait ma question principale c'est comment "indiquer le meilleur coup" ?

Ca dépend de chaque jeu. Choisis un jeu qui est relativement simple pour commencer (morpion par exemple). Tu fais un entrainement supervisé (en indiquant toi en tant qu'humain quel coup tu jouerais). Ton ensemble d'entrainement doit être suffisamment grand, varié et mélanger pour avoir un bon apprentissage. Ensuite tu vois ce que ça donne quand tu lui donne une situation

Merci pour la vidéo c'est intéressant. Ce qu'en j'en ai un peu retenu c'est qu'une méthode consiste à jouer en entier la partie. On pourrait ensuite regarder quelles tours ont le plus "influencés la partie" et selon que l'on a gagné ou non, corriger le réseau. Je vais regarder des choses plus simples pour commencer mais pensez vous que ce serait faisable ou vraiment trop difficile (je pensais sinon à le faire sur une décision d'achat au monopoly ce qui est peut etre plus simple…) ?

Oulah, ça me parait compliqué ^^

Pour commencer je te conseille de plutôt commencer par un jeu très simple, genre le morpion. Si tu as bien avancé tu pourrais faire les dames. Je pense que déjà si tu en arrives là tu auras une sacrée compétence. Je te conseil d'utiliser Torch (en Lua) ou Keras (en Python). Sauf si tu veux/dois mettre la main a la pâte en codant les algos où tu devrais utiliser Theano(en python). Pour ton rapport je te conseil de faire des trucs a la main avec Theano (ou numpy même) et t'amuser avec Torch/Keras pour le gros du projet, sinon tu n'y arriveras jamais et ce sera très très long

Bonjour, Je vais commencer par un morpion ça ne devrait pas être trop complexe. Mais je suis étonné que les dames ce soit plus facile à faire qu'un truc genre monopoly. Parce qu'en soit les dames faut utiliser des arbres de recherches et élaguer les branches après puis appliquer un réseau de neurones couplés… Enfin je vais y réfléchir. Merci pour vos conseils, je commence par un morpion et vous tiendrai au courant !

Les dames sont plus simples … parce qu'il n'y a pas de dé !

Aux dames, à chaque mouvement, le joueur a le choix entre 7 ou 8 mouvements…et c'est tout.

Au monopoly, le joueur n'a qu'une décision à prendre : acheter tel terrain ou non, acheter des maisons ou un hôtel, ou non. Mais le dé peut sortir un nombre entre 2 et 12… et les cartes chances//Caisse de communauté ont aussi un fort impact. Aux dames, si vous prenez la bonne décision, vous gagnez ( ou vous assurez le nul si l'adversaire joue aussi toujours les meilleurs coups) ; au monopoly, même si vous prenez à chaque fois la bonne décision, vous pouvez perdre.

Dans la video sur le go, le type expliquait qu'une des grandes difficultés du go, c'est d'évaluer la position. Au monopoly, la difficulté est comparable… mais pour d'autres raisons.

En fait, plutôt que le morpion, tu peux envisager le jeu de dames. Pourquoi ? Parce que tu vas pouvoir télécharger des centaines de parties jouées par des champions ( exemple :http://www.ffjd.fr/fichiers/parties/Cannes_2012.pdn ) … et donc tu vas pouvoir dire : en général , dans telle situation, ça s'est fini par une victoire des blancs…et dans telle autre situation , ça s'est généralement fini par un nul.. Et donc pas besoin de parcourir tout un arbre avec des millions de combinaisons, tu peux remplacer cela par une comparaison avec des situations déjà jouées. Pour ça, ca sous-entend de télécharger des milliers de parties…

Avant de pouvoir faire ça, je pense qu'il vaut mieux apprendre à manipuler les réseaux de neurones.

D'ailleurs, j'espère que tu as une très bonne carte graphique parce que sinon ça va être long. J'ai entrainer un réseau dans l'aprem. Le réseau n'est pas très grand et pourtant j'en ai eut pour 2h d'entrainement pour arriver a 50% (49.6%) de précision dans la classification.

Le processeur c'est bien quand tu as peu de calcul. Maintenant les cartes graphiques sont beaucoup plus puissantes que le processeur c'est donc plus intéressant de faire tourner les calculs matriciels (les gpus sont optimisés pour) dessus. C'est intéressant pour des réseaux un peu conséquent bien sûr :)

Bonjour ! J'ai fait un petit réseau de neurones tout débile qui étant donné 2 nombres a et b dit si a>b. Ca m'a l'air de plutôt fonctionner cf le résultat. C'était sympa ça m'a permis de réfléchir à l'implémentation.

Image utilisateur

Je voulais maintenant adapter au morpion et la question que je me posais concerne l'apprentissage : l'idée est de donner des grilles et de dire qui va gagner (évaluer la position) ou bien donner une grille et placer le prochain symbole ?

Je pense que les deux approches sont possibles. Je n'ai jamais fait mais j'aurais une approche différente. Je ferais une sorte de réseau récurrent qui boucle jusqu'à ce que la partie soit finie (d'ailleurs tu peux commencer par faire un réseau qui reconnait si la partie est finie ou non). Et a chaque fois tu sors un coup. Ensuite tu fais l'apprentissage par rétropropagation des erreurs :)

Bonjour ! J'ai fait un petit réseau de neurones tout débile qui étant donné 2 nombres a et b dit si a>b. Ca m'a l'air de plutôt fonctionner cf le résultat. C'était sympa ça m'a permis de réfléchir à l'implémentation.

Image utilisateur

t'as un bout de code quelque part ?

Je voulais maintenant adapter au morpion et la question que je me posais concerne l'apprentissage : l'idée est de donner des grilles et de dire qui va gagner (évaluer la position) ou bien donner une grille et placer le prochain symbole ?

victora914

D'accord merci. Mais du coup cela sort du cadre d'un réseau de neurones non ? Ou bien ce serait justement ce qui analyse ce qui fait une bonne partie ?

victora914

C’est un point délicat et qui dépend fortement du jeu auquel tu joues, aux échecs, on peut évaluer bêtement une position en comptant les pièces restantes (9 pts pour une dame, 4 pour une tour, 3 pour un cavalier ou un fou, 1 pour un pion par exemple), on peut ensuite passer à des choses plus subtiles : contrôle de ligne par une tour, fou au centre de l’échiquier, nombre de pièces en prise, pion proche de la promotion, etc. Au go c’est bien plus compliqué, il faut analyser les formes, avoir une bonne expérience de l’évolution d’une partie à partir d’une certaine position. Dans le cas d’alpha go, un autre réseau de neurone évalue les positions. Pour celui-ci l’entraînement est plus simple, on connaît l’issue de millions de parties.

Je ne me suis pas renseigné plus, mais peut être que le résultat d’un réseau permet l’entraînement du deuxième.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte