Niveau : Terminale générale, enseignement de spécialité SI
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 ».
Petit Robert 1 : « Produit par le travail de l'homme et non par la nature ».
« 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 ».
Après avoir regardé la vidéo, répondre aux questions suivantes
ressources Learning Robots
Les activités vont êtes basées sur le robot AlphAI
Connexion Wi-Fi | Connexion Bluetooth |
---|---|
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.
Il s'agit d'un apprentissage par imitation :
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)
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.
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.
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
Phase d'entrainement :
Désactivez le mode autonome du robot en cliquant sur l’icône
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
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.
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).
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
?
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.
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) :
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 !
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.
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 ?
L'apprentissage par renforcement consiste à laisser le robot apprendre de ses expériences grâce à un système de récompenses et de pénalités.
paramètres
(en haut à gauche de l'écran), cliquez sur charger des
paramètres d'exemple, puis sélectionnez Edition manuelle - Bloqué vs. Mouvement
apprentissage
et
exploration
activez édition manuelle
et cliquez sur
réinitialiser IA
Maintenant que vous avez compris comment le robot a la possibilité de « choisir » ses actions (grâce aux connexions), nous allons voir comment le robot est capable d'apprendre quelles sont les bonnes actions à choisir afin de maximiser ses récompenses.
Activer les bons paramètres pour permettre au robot d'apprendre quelles sont les meilleures actions.
édition manuelle
et à la place activez
apprentissage
puis cliquez sur réinitialiser
l'IA : cela initialise des connexions au hasard.apprentissage
pour
l’arrêter et réactivez autonome pour que le robot se conduise tout seul : se comporte-til
comme attendu ?
Si ce n'est pas le cas, réactivez l'apprentissage pour réentraîner le robot.exploration
dans la barre inférieure et observez
comment se passe l'apprentissage. Que fait ce paramètre ? Appelez-nous pour nous faire
part de vos réflexions.Vous avez observé que l'apprentissage modifie les connexions dans le réseau de neurone. Continuez les étapes suivantes pour en comprendre tous les détails et arriver à l'équation. Vous pouvez également aller directement à la partie Il| pour commencer les apprentissages avec caméra et revenir à cette étape à la fin s’il vous reste du temps.
L’algorithme utilisé ici est le Q-learning qui repose sur une table de valeurs représentée dans la figure ci-dessous. Cette table sert à déterminer à partir d’un calcul mathématique, quelle action sera utilisée à la prochaine étape. Les colonnes représentent les actions possibles et les lignes font référence aux états possibles. Quant aux valeurs, elles correspondent aux poids des connexions entre état et action.
On note a, l’action effectuée à l'instant t, s, l’état dans lequel on se trouve à ce même instant t et Q(st, at) la valeur de la table de Q-learning pour ces 2 paramètres. Enfin, on note rt+1, la récompense immédiate reçue après cette action at dans l’état st.
Dans ce cas, le calcul de la nouvelle valeur de la connexion revient à : Q(st, at) = rt+1. En effet, nous ne tenons pas compte du phénomène d'actualisation.
Essayez un apprentissage avec ces valeurs des paramètres. Que se passe-t-il ?
Ce qui donne après factorisation :
Obtient-on de meilleurs apprentissages ? Voyez-vous quelque chose qui manque encore?
Ce qui donne après factorisation :
Avec a* la meilleure action (celle rapportant la plus grande récompense) une fois arrivé dans le nouvel état swsub>t+1.
Maintenant que vous savez comment le robot adapte ses connexions pour aller choisir les actions les plus pertinentes, nous allons ajouter une caméra au robot pour qu'il puisse apprendre à anticiper les obstacles !
Mais attention, avant de pouvoir utiliser la caméra, il va falloir d’abord découvrir de nouveaux paramètres !
Etablir les paramètres corrects pour de bons apprentissages avec la caméra.
Relancez l'apprentissage. Comme précédemment l'algorithme d'apprentissage apprend les valeurs correctes des actions, mais le calcul de ces valeurs devient beaucoup plus complexe puisqu'il dépend d’un grand nombre de connexions. Appelez-nous pour en discuter avec nous.
Apprentissage par renforcement - Evitement d'obstacles.
Voici ci-dessous les réglages que nous vous conseillons pour l'onglet IA : vous pourrez aussi en essayer d’autres !
Contenu
sous licence
Sources AlphAI
MAJ par Pascal HASSENFORDER le 08/01/2022