[PYTHON] J'ai essayé de faire d'Othello AI que j'ai appris 7,2 millions de mains par apprentissage profond avec Chainer

Cela fait longtemps, mais c'était incroyable qu'AlphaGo remporte le Champion du Monde trois fois de suite. Inspiré par ça, cette fois j'ai fait une IA pour Othello, le même jeu de société.

La raison pour laquelle j'ai choisi Othello est que je n'ai pas assez de ressources informatiques! !! Parce que. Dans le développement d'AlphaGo, 50 GPU représentent une quantité énorme de 3 semaines, mais c'est absolument impossible pour un tel individu. J'ai donc choisi Othello, qui a un petit go board et des règles simples.

J'ai parlé d'AlphaGo, mais la technologie utilisée est différente d'AlphaGo. AlphaGo combine un apprentissage profond supervisé, un apprentissage par renforcement profond et une exploration d'arbre de Monte Carlo, mais cette fois, nous n'utilisons que l'apprentissage profond supervisé. Il ne fonctionne pas bien, mais au contraire, l'algorithme est si simple que même ceux qui ne connaissent pas les deux derniers je viens d'entendre (je comprends l'apprentissage par renforcement profond, mais pas la recherche d'arbre de Monte Carlo), l'apprentissage en profondeur. Vous ne pouvez le comprendre qu'avec la connaissance de! Dans l'explication suivante, on suppose qu'il y a une certaine compréhension de l'apprentissage profond (j'ai lu l'apprentissage profond fait à partir de zéro).

Aperçu

J'ai utilisé les données du Site de l'Association Française d'Othello comme données de partition musicale d'Othello. Depuis que j'ai utilisé un format mystérieux appelé WTHOR, il était assez difficile de traiter les données.

Le réseau neuronal a utilisé l'état de la partition musicale (0: aucun, 1: pierre propre, 2: pierre de l'adversaire) pour les données d'entrée et la probabilité de chaque mouvement pour les données de sortie. Pour les données de l'enseignant, j'ai utilisé la position de la main que j'ai frappée. Je pense que c'est difficile à comprendre avec juste des mots, alors je vais vous montrer un diagramme.

説明1.png

Structure du réseau neuronal

Comme AlphaGo, j'ai utilisé uniquement la couche de convolution ** et non la couche entièrement connectée. En effet, la sortie est des données bidimensionnelles, il est donc préférable de la laisser sous la forme CNN. ** Softmax ** a été utilisé pour la couche de sortie, et Conv-> BN-> ReLU ** pour les autres couches. Il est recommandé d'introduire la normalisation par lots (BN) car l'apprentissage sera stable.

Apprentissage du réseau neuronal

Pour la fonction de perte, nous avons utilisé l'erreur d'entropie croisée pour orthodoxe. J'ai utilisé ** Adam ** comme algorithme d'optimisation. L'apprentissage est plus rapide et le résultat final est meilleur que SGD.

Code source

Le code source tant attendu est répertorié sur github. Voir le code source pour les paramètres détaillés.

Résultat d'apprentissage

La performance de l'IA est ... Il semble que les règles soient généralement comprises, mais malheureusement elles ne sont pas devenues très strictes. La cause a probablement été supervisée et n'a utilisé que l'apprentissage profond.

Cependant, en raison de contraintes de temps, je n'ai étudié que pendant environ deux heures et demie sur un PC avec seulement un processeur, donc il peut encore être plus fort.

Alors, ** Vous cherchez quelqu'un qui a un GPU! ** **

Cela pourrait être plus fort si vous étudiez avec GPU pendant environ une journée.

Recommended Posts

J'ai essayé de faire d'Othello AI que j'ai appris 7,2 millions de mains par apprentissage profond avec Chainer
J'ai essayé de mettre en œuvre un apprentissage en profondeur qui n'est pas profond avec uniquement NumPy
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Introduction ~
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Implémentation ~
J'ai essayé de rendre le deep learning évolutif avec Spark × Keras × Docker 2 Multi-host edition
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Battle Edition ~
J'ai essayé de créer un environnement d'apprentissage amélioré pour Othello avec Open AI gym
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer
J'ai essayé d'écrire dans un modèle de langage profondément appris
765 J'ai essayé d'identifier les trois familles professionnelles par CNN (avec Chainer 2.0.0)
J'ai essayé de classer Oba Hanana et Otani Emiri par apprentissage profond
J'ai refactoré "J'ai essayé de faire d'Othello AI lorsque les débutants en programmation ont étudié python"
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé de faire de l'IA pour Smash Bra
J'ai essayé de rendre mon propre code source compatible avec Chainer v2 alpha
[Python] J'ai essayé de créer une IA Shiritori qui améliore le vocabulaire grâce aux batailles
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
J'ai essayé d'implémenter Cifar10 avec la bibliothèque SONY Deep Learning NNabla [Nippon Hurray]
J'ai essayé de classer Hanana Oba et Emiri Otani par apprentissage profond (partie 2)
J'ai essayé le deep learning
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
J'ai essayé de créer une application OCR avec PySimpleGUI
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 16) J'ai essayé de créer SimpleConvNet avec Keras
J'ai essayé de prédire les courses de chevaux en faisant tout, de la collecte de données à l'apprentissage en profondeur
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 17) J'ai essayé de créer DeepConvNet avec Keras
J'ai essayé de faire de l'art créatif avec l'IA! J'ai programmé une nouveauté! (Article: Réseau Adversaire Créatif)
J'ai essayé de l'activer / de le désactiver en définissant "Créer un plug-in qui met en évidence les espaces pleine largeur avec Sublime Text 2".
[Python] J'ai essayé de faire une application qui calcule le salaire en fonction des heures de travail avec tkinter
J'ai essayé d'implémenter la détection d'anomalies par apprentissage de structure clairsemée
[1 hour challenge] J'ai essayé de créer un site de bonne aventure qui soit trop adapté à Python
J'ai essayé de classer MNIST par GNN (avec PyTorch géométrique)
Mayungo's Python Learning Episode 3: J'ai essayé d'imprimer des nombres
J'ai essayé de créer un générateur qui génère une classe conteneur C # à partir de CSV avec Python
Créez une IA qui identifie le visage de Zuckerberg grâce à l'apprentissage en profondeur ③ (Apprentissage des données)
J'ai capturé le projet Toho avec Deep Learning ... je le voulais.
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
DQN avec Chainer. J'ai essayé plusieurs apprentissages par renforcement d'affilée. (Deep Q Network, Q-Learning, Monte Carlo)
J'ai essayé de créer un langage original "PPAP Script" qui imagé PPAP (Pen Pineapple Appo Pen) avec Python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de faire une activité qui définit collectivement les informations de position
J'ai essayé de créer un système qui ne récupère que les tweets supprimés
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé d'implémenter la classification des phrases par Self Attention avec PyTorch
J'ai essayé un outil qui imite le modèle de Goch avec l'IA
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
Introduction au Deep Learning (2) - Essayez votre propre régression non linéaire avec Chainer-
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de faire une étrange citation pour Jojo avec LSTM
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
Faites de l'art ASCII avec l'apprentissage en profondeur
J'ai essayé l'apprentissage automatique avec liblinear
Apprentissage profond appris par l'implémentation 1 (édition de retour)