Blog ENI : Toute la veille numérique !
🎁 Jusqu'au 25/12 : 1 commande de contenus en ligne
= 1 chance de gagner un cadeau*. Cliquez ici
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
  1. Livres et vidéos
  2. Python
  3. Python et l'intelligence artificielle
Extrait - Python Apprenez à développer des projets ludiques (3e édition)
Extraits du livre
Python Apprenez à développer des projets ludiques (3e édition)
2 avis
Revenir à la page d'achat du livre

Python et l'intelligence artificielle

Présentation

1. Historique

Pour présenter rapidement l’histoire de l’intelligence artificielle (IA), on peut faire ressortir trois grandes périodes :

  • 1950-1980 : les développeurs d’algorithmes d’IA se concentrent sur l’écriture de règles permettant à un ordinateur de prendre une décision. Ils essayent alors de traduire un schéma de réflexion en programme. L’ordinateur est utilisé comme un automate déroulant des règles préétablies afin d’aboutir à une décision. L’apogée de cette période correspond au boom des systèmes experts dans les années 1980 où on expliquait qu’un ordinateur pourrait bientôt offrir un même niveau de diagnostic qu’un médecin… Ce type de système peut cependant fonctionner correctement si la réflexion s’apparente à une forme de déduction logique. Vous trouvez encore des systèmes de ce type aujourd’hui, par exemple dans les critères d’attribution d’un prêt immobilier sur un site web : si l’emprunteur est en CDI depuis au moins 20 mois et si son apport est supérieur à 20 % du montant d’achat, alors un accord de principe est conclu. Cependant, à aucun moment l’ordinateur n’a de plus-value dans la partie intelligence. À ce niveau, il a un rôle passif, il exécute simplement les tests proposés et retourne un résultat.

  • 1980-2015 : cette fois, l’ordinateur essaye d’apprendre par lui-même à partir de données servant de référence. C’est l’époque du machine learning, c’est-à-dire de l’apprentissage automatique. Grâce à un outillage mathématique important et à une puissance de calcul accrue par le biais des GPU, c’est l’envolée et les performances sont au rendez-vous. Cette génération d’algorithmes a fait des percées importantes dans les domaines suivants :

  • reconnaissance vocale (Siri, Amazon Alexa, Google Now)

  • conduite autonome

  • ciblage publicitaire

  • capacité à répondre à une question posée en langage naturel

  • capacité à battre les meilleurs joueurs de go

  • reconnaissance de visages et classification d’images

  • 2017- ? : le programme AlphaGo créé en 2015 par la société DeepMind devient le premier programme à battre un joueur professionnel de go sur une grille de taille normale (19×19) sans handicap. Il s’agit d’une étape symboliquement forte puisque programmer une IA pour le jeu de go était un défi complexe de l’intelligence artificielle. Ce programme est une machinerie de luxe, mais utilisant toujours des parties de référence pour son apprentissage. Cependant, en 2017 lui succède le programme AlphaGo Zero qui atteint un niveau supérieur sans utiliser de base de connaissances et ceci en jouant uniquement contre lui-même. Il surpasse largement, toujours par auto-apprentissage, le niveau de tous les joueurs humains et logiciels, non seulement au go, mais aussi aux échecs. C’est...

Le problème de la classification d’images

1. Présentation

La classification d’images est un domaine qui a fait un bon faramineux au niveau des performances ces dernières années. On peut considérer aujourd’hui qu’un ordinateur sait reconnaître un objet si les conditions d’éclairage sont bonnes, si la prise de vue est bien cadrée et s’il n’y a pas d’éléments perturbants dans la scène, comme du brouillard ou une main qui viendrait occulter une partie du sujet. De tels résultats étaient encore impensables en l’an 2000.

Même si les applications restent encore timides, cela ouvre la voie pour des technologies encore balbutiantes, comme la conduite autonome. Si grâce au GPS, il est facile pour un ordinateur de choisir la bonne direction, il reste encore difficile pour une voiture autonome de conduire en pleine ville. Dans les années 1990, il nous semblait impossible que les ordinateurs puissent transcrire la parole humaine un jour et encore moins qu’ils arrivent à distinguer un chat d’un chien. Finalement, 25 ans plus tard seulement, ils font cela quasiment sans difficulté. Alors, il ne faut jamais dire jamais ! Surtout pas en informatique !

2. Image et données

Une image est représentée par une grille de pixels. Chaque pixel code une couleur sous la forme d’un triplé de trois valeurs : rouge, vert et bleu. Suivant les librairies d’image, les plages de valeurs sont dans l’intervalle [0,1] ou [0,255], ces représentations sont équivalentes. Ce qui est intéressant pour nous, c’est que toute image est intrinsèquement associée à une liste de chiffres.

images/08RI02.png

Afin qu’un réseau de neurones puisse traiter une banque d’images, il faut que l’ensemble des images soit de même résolution, c’est-à-dire par exemple : 20 x 20 pixels. Comme chaque pixel contient trois valeurs de couleur, nous avons donc un total de 20 x 20 x 3 = 1 200 valeurs. Ces valeurs constituent l’entrée de notre réseau.

3. Les banques d’images

Pour pouvoir apprendre, il faut que notre réseau de neurones utilise une base d’images servant de référence. Créer une base est un travail long et fastidieux. Heureusement pour nous, il y en a quelques-unes disponibles sur Internet :

  • CIFAR 10 :

  • Adresse officielle : https://www.cs.toronto.edu/~kriz/cifar.html

  • Base de 60 000 images - 50 000 images pour l’entraînement et 10 000 en réserve pour la validation

  • Résolution 32 x 32 pixels en couleur

  • 10 catégories (comme son nom l’indique) :

images/08RI03.png
  • MNIST :

  • Adresse officielle : http://yann.lecun.com/exdb/mnist/

  • Base de chiffres utilisée à l’origine pour créer les algorithmes de lecture des codes postaux sur les enveloppes

  • Base de 70 000 images - 60 000 images pour l’entraînement et 10 000 en réserve pour la validation

  • Résolution 28 x 28 pixels en niveaux de gris

  • 10 catégories pour les chiffres de 0 à 9 :

images/08RI04.png

Ce qui peut choquer, c’est la taille des images. À l’époque des mégapixels de nos téléphones...

L’intelligence artificielle pour les jeux

Il n’y a pas que les réseaux de neurones ! Dans le domaine du jeu vidéo, il existe d’autres problèmes, comme les calculs des déplacements des personnages ou la gestion de l’IA d’un jeu de stratégie, pour lesquels les meilleurs algorithmes ne sont pas forcément des algorithmes à base de réseau de neurones.

Nous allons reprendre le projet de jeu du morpion (voir le chapitre Les fonctions) et cette fois, nous allons lui donner une IA hors pair qui sera imbattable. C’est impressionnant !

1. Les fonctions disponibles

Vous pouvez trouver la source du projet à compléter en téléchargement depuis l’onglet Compléments sous le nom de fichier : IA et Jeu MorpionBase.py.

Le corrigé du projet est aussi disponible en téléchargement sous le nom de fichier : Pygame Morpion & Super IA.py.

Téléchargez et ouvrez le fichier MorpionBase.py de ce chapitre. Nous avons une version fonctionnelle du jeu avec une IA qui joue au hasard sur le terrain. Nous allons reprendre des fonctions qui seront utiles pour notre IA haut de gamme. La première fonction est celle qui détecte si un des deux joueurs a gagné :

def DetecteGagne(G): 
  for j in [1,2] : 
     for x in range(3): 
        if G[x][0] == G[x][1] == G[x][2] == j : return j 
     for y in range(3): 
        if G[0][y] == G[1][y] == G[2][y] == j : return j 
     if G[0][0] == G[1][1] == G[2][2] == j : return j 
     if G[0][2] == G[1][1] == G[2][0] == j : return j 
  return 0 

Cette fonction détecte un alignement de trois pions en diagonal, horizontal et vertical. Le joueur humain est codé avec la valeur 1, et le joueur IA avec la valeur 2. Si aucun des deux joueurs n’est gagnant, la fonction retourne 0. Nous avons aussi besoin d’une fonction qui détecte les cases disponibles pour le joueur IA :

def ListeCasesVide(G) : 
  L = [] 
  for x in range(3): 
     for y in range(3): 
        if G[x][y] == 0 : 
           L.append((x,y)) 
  return L 

Voici le programme complet qui va nous servir de point de départ :

# MORPION 
from tkinter import Tk, Canvas 
import random 
 
TAILLE = 300 
JEU = [ [0,0,0],[0,0,0],[0,0,0]] 
JOUEUR_IA = 2 
JOUEUR_HUMAIN = 1 
 
 
def AfficheGrille(c="black"): 
  canvas.create_line((100,0),(100,300),width=3,fill=c) 
  canvas.create_line((200,0),(200,300),width=3,fill=c) 
  canvas.create_line((0,100),(300,100),width=3,fill=c) 
  canvas.create_line((0,200),(300,200),width=3,fill=c) 
 
def AffichePions(): 
  for x in range(3): 
     for y in range(3): 
        xx = x * 100 
        yy = y * 100 
        A...