SCIENCES DE L'INGENIEUR

Niveau : Terminale générale, enseignement de spécialité SI

D
É
C
O
N
N
E
C
T
É

L'INTELLIGENCE ARTIFICIELLE

1. Qu’est-ce que l’ « Intelligence Artificielle » ?

Définition de l'intelligence

Petit Robert 1 : « Ensemble des fonctions mentales ayant pour objet la connaissance conceptuelle et rationnelle »

Définition pragmatique : « Ensemble des facultés intellectuelle de l’homme ».

Artificiel

Petit Robert 1 : « Produit par le travail de l'homme et non par la nature ».

Intelligence Artificielle

« Reproduction par le travail de l’homme des facultés intellectuelles de l’homme ! »

Petit Robert : « Ensemble de théories et de techniques mises en œuvre en vue de réaliser des machines capables de simuler l'intelligence humaine ».

2. Les bases du « Deep Learning »

Après avoir regardé la vidéo, répondre aux questions suivantes

  • Définir le « machine learning » ?
  • Le « deep learning » est un algorithme basé sur les réseaux de
  • Peut-on dire qu'il fonctionne comme un cerveau humain ?
  • Quel est le nom du premier modèle d'apprentissage du « deep learning » ?
  • Quelles sont les ressources dont a besoin l'IA pour bien fonctionner ?

3. Mise en application

ressources Learning Robots

Les activités vont êtes basées sur le robot AlphAI

3.1 Paramétrage

  • Lancez le logiciel en cliquant sur l'icône « AlphAI ».
  • Allumez le robot (l'interrupteur se trouve en dessous). Il effectue un petit mouvement puis clignote en blanc une fois qu'il est prêt à recevoir une connexion.
  • Notez le numéro du robot inscrit sur sa plaque du dessous.
  • Choisissez si vous voulez vous connecter en Wi-Fi où en Bluetooth (le Bluetooth est préférable lorsqu'il y a plus de 4 robots, ou si de nombreux réseaux Wi-Fi sont déjà présents dans la salle).
  • Connexion Wi-FiConnexion Bluetooth
  • Connectez l'ordinateur au Wi-Fi du robot: cherchez le réseau Wi-Fi qui commence par ALPHAI et se termine par le numéro de votre robot ; le mot de passe est identique au nom du Wifi
  • Dans le menu Outils, vérifiez que « wifi » est coché
  • Dans le menu Connexions > Bluetooth, sélectionnez dans la liste le nom (numéro) de votre robot.
  • Si votre robot n'est pas dans la liste, cliquez sur « Mon robot n’est pas dans la liste » et suivez les instructions. Il est alors ajouté à la liste où vous pouvez le sélectionner.
  • Cliquer sur le bouton « connexion » pour vous connecter au robot. Vous voyez apparaître son niveau de batterie en bas à droite.
  • Dans le menu « Paramètres », choisissez « Charger des paramètres d'exemple » et chargez la configuration « apprentissage supervisé - navigation avec caméra (course de robots) »

  • L'image de la caméra du robot apparaît en haut à gauche à l’écran. A droite apparaît un grand réseau de neurones artificiels. Dans le cadre de cette activité, il n’est pas nécessaire de comprendre les détails de ce réseau de neurones, mais il pourra être intéressant de donner quelques explications en conclusion.

3.2 Apprentissage supervisé

Il s'agit d'un apprentissage par imitation :

  • Le robot mémorise les exemples donnés par l'humain
  • Grâce à son programme d'apprentissage il modifie son "cerveau"
  • Il va reproduire les comportements dictés par l'humain
  • Il peut avoir un comportement inattendu lorsqu'il n'a pas été assez entrainé

ENTRAINEMENT DU ROBOT :

Charger la configuration Apprentissage supervisée - navigation avec camera (course de robots)

Vérifier que l'icone apprentissage est activée

C'est à vous de jouer ! Déplacez le robot en cliquant sur les flèches à droite ou en le contrôlant avec les flèches directionnelles du clavier. Ce n’est pas la peine de chercher à aller vite : le but est surtout de bien apprendre au robot à faire des tours dans le bon sens et sans se cogner aux murs.

(Remarque : si les flèches du clavier ne fonctionnent pas, cliquez d’abord sur une des flèches qui s'affiche à droite, puis réessayez les flèches du clavier)

Pendant la phase d'apprentissage, la vitesse n’est pas importante. Prenez le temps de bien choisir l’action adéquate à chaque fois. Faites attention à ne pas confondre la gauche et la droite du robot ! Apprenez au robot à rester loin de l'obstacle central pour éviter qu'il s'y coince lorsqu'il sera autonome.
Déplacez le robot à la main pour le mettre face à des obstacles et lui apprendre

TEST DE L'APPRENTISSAGE ET AMELIORATIONS

Après avoir fait quelques tours de l'arène, vous pouvez réactiver l'autonomie

Si votre robot est bien entrainé, il se mettra alors à faire des tours par lui-même ! Mais l'apprentissage n’est pas terminé ; même lorsque le robot se pilote lui-même, vous pouvez continuer de le commander en appuyant sur les flèches pendant qu'il se déplace. Par exemple, si le robot se coince contre Un mur et ne sait plus quoi faire, vous pouvez le débloquer en lui demandant de faire marche arrière.

Refaire une course officielle. Au top départ, tous les robots alignés sur la ligne de départ sont démarrés en mode autonome par leurs utilisateurs, qui n'ont plus le droit d'aider les robots en les pilotant. Si un robot se bloque, l'enseignant le remettra en course 5 seconde après le blocage

Lorsque votre robot agit normalement et de façon régulière, allez dans réseau pour sauver l'état du réseau et cliquez sur oui quand on vous demande de sauver la mémoire. Cela permet de sauvegarder votre entrainement sans tout recommencer du début s'il y a un problème.

COURSE DE ROBOTS

Une fois vos robots entraînés, organisez une compétition : placez les robots concurrents sur la ligne de départ. Les équipes appuient en même temps sur la touche « Autonome »

Pendant la course, seul le mode autonome est autorisé: les participants ne doivent pas donner d'instruction à leur robot. Un arbitre pourra déplacer les robots qui sont bloqués pendant plus de 5 secondes, pour leur permettre de continuer la course.

Synthèse

Nous avons utilisé ici un algorithme d'apprentissage supervisé. Cet algorithme est basé sur le réseau de neurones artificiels qui est affiché à l'écran (mais il existe d’autres types d’algorithmes qui ne sont pas basés sur des réseaux de neurones, par exemple l'algorithme des K plus proches voisins). Tous les algorithmes d'apprentissage supervisé fonctionnent de la manière suivante.

Dans un premier temps appelé entraînement, nous avons fourni des exemples de décisions à l'algorithme, c'est-à-dire à la fois des images de ce que voit la caméra du robot et les actions qu'il faut choisir lorsque la caméra voit ces images. Pendant l'entraînement, le réseau de neurones artificiels a été modifié par l’algorithme d'apprentissage (plus spécifiquement, certaines connexions ont été augmentées, d’autres diminuées, de sorte que le réseau de neurones devienne capable d'imiter les mêmes prises de décision).

Dans un second temps appelé utilisation, l'algorithme est capable de prendre de bonnes décisions sur de nouvelles images.

Nous avons vu que tous les robots n’ont pas appris la même chose, certains se sont mieux comportés pendant la course, d’autres moins bien. Comme tous les participants ont utilisé le même algorithme, nous voyons bien que la qualité des prises de décisions autonomes dépend de la qualité des données d'entraînement.

3.3 Algorithme des K plus proches voisins

Cete algorithme est basé sur le calcul mathématique de la distance entre deux points

Exemple :

Soient deux points a(xa,ya) et b(xb,yb))

La distance se calcule en appliquant la formule mathématique suivante :

Manipulation

  • Cliquer sur le bouton « connexion » pour vous connecter au robot.
  • Dans le menu Paramètres / Charger les paramètres d’exemple, chargez la configuration « Apprentissage supervisé - KNN caméra ».

Phase d'entrainement :

Désactivez le mode autonome du robot en cliquant sur l’icône

  • Dirigez le robot en cliquant sur les flèches à droite de l’écran, où grâce aux touches « flèches » du clavier. Tournez quand le robot est proche des murs et allez tout droit sinon. Vous pouvez aussi déplacer le robot à la main pour le mettre dans de nouvelles situations.

    Après chaque mouvement un nouveau point apparaît. La position de chaque point est déterminée par ses coordonnées (x ; y), l’abscisse x représentant la luminosité dans la zone de gauche et l’ordonnée y la luminosité dans la zone de droite. La couleur autour de chaque point est la couleur associée à l’action choisie (vert pour pivoter à droite, jaune pour en avant et rouge pour pivoter à gauche). Ces points sont les données d’entraînement. Cette phase est primordiale pour que l’IA fonctionne correctement. Si les données d’entraînement contiennent trop d’erreurs ou approximations, l’IA ne permettra pas d’avoir un résultat satisfaisant. Graphe obtenu après un bon entrainement du robot :

    La luminosité diminue lorsque le robot s’approche des murs. Normalement, si la zone de gauche est la plus sombre, il faut tourner à droite, et inversement.

    Lorsque vous aurez trois régions bien claires sur le graphique, arrêtez la phase d’entraînement et réactivez l’autonomie pour passer à la phase de test.

  • Phase de test

  • Après un court apprentissage, réactivez l’autonomie

  • Si le robot est bien entraîné, il saura éviter les bords par lui-même. Si au contraire il est mal entraîné ou la luminosité dans l’arène n’est pas homogène, les zones de couleur sur le graphique auront des contours plus irréguliers et le robot fera plus d’actions inappropriées.

    Programmation de l'algorithme des K plus proches voisins

  • Désactivez le bouton « Autonome ».
  • Dans l’onglet IA, sélectionnez « Algorithme - Code élève »

    ouvrira une nouvelle fenêtre vous demandant de nommer le fichier.
  • Après lui avoir donné un nom, le fichier apparaît dans l’explorateur Windows : ouvrez-le avec Notepad++
  • Ce code présente 3 fonctions déjà existantes : init, learn et take_decision. Ces fonctions seront appelées par le logiciel principal. Seule la fonction take_decision est importante pour ce TP.

  • Remarquez que quand vous vous déconnectez, un mini-robot simulé apparaît en bas à droite. Si vous le voulez, vous pouvez faire les questions ci-dessous avec ce mini-robot et revenir au vrai robot à la fin du TP ; mais vous pouvez aussi faire tout le TP en restant connecté au vrai robot : comme vous préférez !
  • Programmer le robot directement

    Avant de programmer une intelligence artificielle, commençons par comprendre le principe de la fonction take_decision. Vous allez pouvoir modifier cette fonction pour changer le comportement du robot : après chaque modification, sauvegardez votre code et cliquez sur le bouton « Réinitialiser l'IA ». Cette étape est à répéter pour chaque modification du code : sauver puis recharger le code.

    La fonction take_decision accepte un paramètre sensors de type list[float] et sa valeur de retour doit être un nombre entier (int).

    La liste sensors contient deux nombres décimaux qui représentent la vision du robot. Le premier nombre représente l’intensité lumineuse dans la partie gauche de l’image et le deuxième nombre représente l’intensité lumineuse dans la partie droite. La valeur de retour de la fonction doit être un nombre entier correspondant à une action possible pour le robot (tourner à gauche, tourner à droite, ou aller tout droit).

  • Ajoutez l’instruction print(sensors) à l’intérieur de la fonction. Sauvegardez, cliquez « Réinitialiser l’IA » dans le logiciel, et démarrez le robot. La valeur de sensors s’affiche maintenant dans la console (cliquer dans la barre des tâches sur l’icône pour afficher la console). Quelle est à peu près la valeur de sensors quand le robot est face à un mur ? quand il n’est pas face à un mur ? quand il y a un mur à sa gauche ou à sa droite ? Dans quel intervalle se trouvent donc les valeurs de sensors ?

  • Pour l’instant, la fonction take_decision renvoie la valeur 0. Quelle est l’action correspondant à ce nombre ? En modifiant cette valeur, trouver les nombres correspondants aux actions aller tout droit et tourner à droite.

  • Utilisez le paramètre sensors pour programmer un comportement cohérent du robot : « s’il n’y a pas de mur, je vais tout droit ; s’il y a un mur, je me tourne du côté le plus lumineux. »

  • Programmation de l'algorithme

  • Calcul de la distance

    Programmez une nouvelle fonction distance(a,b). Ses paramètres a et b sont deux listes de deux nombres décimaux (float), représentant les coordonnées (x,y) d’un point du graphique. Sa valeur de retour doit être la distance euclidienne entre ces deux points (de type float).

    Pour rappel, si a=[a1,a2] et b=[b1,b2]

    Alors la distance euclidienne entre ces deux points est :

    La racine carrée peut être utilisée en Python en important la bibliothèque math en haut du fichier :

    et s’écrit ainsi :

    L’opérateur carré peut être fait de la façon suivante :

  • Programmez la nouvelle fonction distance. Puis pour la tester, écrivez en-dessous :

  • Sauvez, chargez le code avec « Réinitialiser l’IA » et notez ci-dessous le résultat qui s’affiche dans la console :

    Calcul de toutes les distances

    Maintenant que vous disposez d’une fonction pour calculer une distance, écrivez une nouvelle fonction all_distances qui prend en paramètres un point a et une liste de points train_sensors, qui représente les données d’entrainement du robot.

    Cette fonction all_distances doit renvoyer la liste des distances entre le point a et chacun des points contenus dans la liste train_sensors. Pensez à utiliser la fonction distance pour calculer une distance entre deux points.

    Si la liste train_sensors est de longueur n = len(train_sensors), alors la valeur de retour doit aussi être une liste de longueur n.

  • Programmez la fonction all_distances, puis testez-la en ajoutant le code suivant en bas du fichier :

    Rechargez le code et recopiez votre résultat :

  • TROUVER LE PLUS PETIT ELEMENT D'UN TABLEAU

    Créez une fonction s’appelant find_minimum prenant comme unique paramètre une liste de nombres dlist (de type list[float] et renvoyant l’indice du premier plus petit élément (de type int).

  • Programmez et testez find_minimum avec le code suivant

    Notez le résultat :

  • LE PLUS PROCHE VOISIN

    Maintenant que nous avons toutes les fonctions nécessaires, nous allons pouvoir créer la fonction nearest_neighbor_decision qui accepte 3 paramètres : train_sensors, une liste de points représentant les données d’entraînement du robot ; train_decisions, une liste d’entiers représentant les actions associées à chacun des points de train_sensors ; et un point a, représentant les valeurs de luminosité fournies par la caméra. On rappelle qu’un point est représenté par une liste de deux nombres décimaux qui sont ses coordonnées.

    La fonction nearest_neighbor_decision doit (en 3 lignes) :

    1. Calculer les distances entre le point a et chacun des points de la liste train_sensors.
    2. Trouver l’indice de la plus petite de ces distances.
    3. Renvoyer l’action correspondant au point d’entrainement le plus proche du point a. Sa valeur de retour est donc un entier correspondant à un code d’action (tout droit, à droite ou à gauche).
  • Programmez et testez nearest_neighbor_decision avec le code suivant :

    Recopiez le résultat :

  • UTILISATION DE VOTRE ALGORITHME AVEC LE ROBOT

    Félicitations, vous avez programmé vous-mêmes l’algorithme des K plus proches voisins dans le cas K=1. Il ne vous reste plus qu’à l’utiliser dans le programme pour entraîner le robot.

    Pour cela, recopiez les lignes ci-dessous pour reprogrammer la fonction take_decision pour prendre les bonnes décisions, mais également learn pour se rappeler des données d’entraînement train_sensors et train_decisions qui seront créées au fur et à mesure dans le programme principal :

    Et à présent, vous pouvez entraîner votre robot !

    1. Rechargez votre code
    2. Désactivez l’autonomie du robot en cliquant sur l’icône
    3. Dirigez le robot en utilisant les flèches du clavier. Tournez quand le robot est proche des murs et allez tout droit sinon.
    4. Les tableaux train_sensors et train_decisions sont remplis automatiquement par le logiciel à chaque fois que vous donnez un ordre au robot en appuyant sur une flèche.

    5. Après un court apprentissage, réactivez l’autonomie
    6. Le robot navigue seul dans l’arène. Évite-t-il les murs par lui-même ?

    Conclusion

    Apprentissage Supervisé : En donnant au robot un jeu de données cohérent et un algorithme, il a été capable de généraliser sa prise de décision à des situations qu'il ne connaissait pas encore en se rapprochant des actions qu'il a mémorisées

    Algorithme du plus proche voisin En mettant en œuvre des algorithmes classiques comme le calcul d'une distance ou la recherche d'un minimum dans une liste, nous découvrons qu'il est possible de programmer soi-même un programme de machine learning.

    POUR ALLER PLUS LOIN

    UTILISER UNE VRAIE IMAGE CAMERA

    Pour pouvoir utiliser une image de meilleure résolution, il faut modifier notre fonction distance. En effet, celle-ci permet actuellement de calculer la distance entre deux points ayant chacun 2 coordonnées (puisque nous travaillions avec des images de 2 pixels). Il faut donc maintenant pouvoir calculer la distance entre deux images ayant un nombre plus grand de pixels (ce nombre de pixels devant être le même pour les deux images). Pour cela, on peut par exemple utiliser la fonction suivante :

    Prendre le temps de bien lire et comprendre cette fonction. Quel est son prototype ?

    Grâce à cette fonction, vous pouvez maintenant organiser une course de robots en utilisant leur caméra ! (Choisissez par exemple dans l’onglet Capteurs la résolution de caméra 16x12 et le pré-calcul « Luminance - Jaune/Bleu - Vert/Rouge »).

    K PLUS PROCHES VOISINS

    L’algorithme que vous avez écrit utilise le plus proche voisin pour prendre sa décision. Modifiez votre code pour qu’il prenne en compte la majorité des décisions prises entre un nombre k > l, k est un entier (int). La difficulté réside dans la modification de la fonction trouvant le minimum. Il faut maintenant qu’elle en trouve k et non juste 1.

    INTRODUCTION AUX RESEAUX DE NEURONES

    Chargez les paramètres d’exemple « Apprentissage supervisé, navigation avec caméra » et relancez un apprentissage. Quelles différences existe-t-il entre les deux algorithmes ?

    Fond : Texte : Tables :