Bonne année 2022 !

Milky Way Inc.

Bon, les années se suivent et se ressemblent. La pandémie ne semble pas vouloir se calmer et notre vie est toujours chamboulée.

Pour ma part, mes projets sont complétements désorganisés et ma vie sociale au minimum syndical.

Malgré tout, j’ai l’espoir que cela s’améliore cette année car nous nous adaptons de mieux en mieux à cette situation et l’efficacité des traitements/vaccins anti-covid s’améliorent. Il faut aussi compter sur la contagiosité d’Omicron et sa relative faible virulence (selon nos données actuelles) pour espérer enfin s’approcher d’une immunité collective.

Et bien sûr, il n’y a pas que le covid. Il parait être un mal bien dérisoire face aux problématiques environnementales et climatiques. La conscience collective s’améliore sur ces sujets et les solutions possibles. Alors bien sûr, tout et tous ne pourront être sauvés et ça me désole au plus haut point mais je pressent les frémissements d’un réveil généralisé qui sauvera peut-être l’essentiel.

La gueule de bois va être très violente et la désintoxication douloureuse pour notre génération mais l’avenir des futures s’annonce meilleur.

Il nous reste nos rêves et nos imaginaires pour faire passer la pilule.

Donc cette année je vous souhaite une bonne santé évidement, une bonne louche de sagesse et un peu de rêverie contemplative.

C’est quoi un neurone artificiel ?

Illustration d'un neurone artificiel
A quoi ressemble un neurone artificiel ?

Maintenant que vous êtes des experts en intelligence artificielle (voir les épisodes précédents) on peut avancer encore plus profondément dans les méandres chaotique de cette obscure discipline.

L’étape suivante de notre voyage au long cours s’arrête à la station perceptron.

🤨

Le perceptron, je vous laisserai le soin de faire une recherche dessus mais en gros c’est le premier neurone artificiel.

Donc un neurone vous voyez ce que c’est ? Une sorte de cellule pieuvre avec plein de branches qui se connectent avec d’autre neurones. Le fonctionnement est “simple” (ouais rajoute beaucoup de guillemets 😠) : des signaux arrivent par l’intermédiaire des branches et selon l’intensité de ceux-ci, ils sont renvoyés vers d’autres neurones de manière plus ou moins intense. Un neurone, c’est une sorte de super transistor. Les signaux sont transmis de 2 façons, en partie par un courant électrique mais également par des éléments chimiques principalement au niveau des synapses (endroit où se fait la liaison entre 2 neurones). Plus un neurone est sollicité plus le signal est intensifié.

Illustration d'un neurone biologique
Un neurone

Et bien le neurone artificiel s’inspire du neurone biologique. Dans la même logique il reçoit des signaux plus ou moins forts, il pondère ces signaux et sous certaines conditions il renvoi un signal. La comparaison s’arrête là.

Comme on l’a vu dans l’introduction à l’intelligence artificielle, ici pas de chimie comme dans le neurone biologique mais des nombres et des formules mathématiques.

🤨 Mais du coup, concrètement ça ressemble à quoi ?

Concrètement, un neurone artificiel est juste un algorithme qui peut être traduit de différentes manières. La plupart du temps, c’est codé dans un langage informatique.

Entrons un peu plus dans les détails de cet algorithme qui, à l’origine, a été conçu pour des problématique de classification (😀 comme nos chats et chiens de notre introduction à l’intelligence artificielle). Détaillons ses étapes.

  1. Il effectue la somme pondérée des entrés qu’il reçoit.
  2. Cette somme est transmise à une fonction d’activation qui donne un résultat.

😨 C’est quoi une fonction d’activation ???

Pas d’inquiétude ! C’est juste une fonction qui transforme le résultat de la somme en résultat exploitable ou signifiant.

😡 Mouais ça m’aide pas beaucoup !

Reprenons l’exemple de nos chats et de nos chiens. Quel résultat on attend ?

🤔 Et bien « chat » ou « chien ».

Ok mais l’ordinateur ne comprend ni le mot « chat », ni le mot « chien » et ce ne peut pas être le résultat d’une opération mathématique.

🙄 Bah oui mais on fait comme la dernière fois, on dit que 1, c’est « chien » et 0, c’est « chat ».

Et bien voilà ! C’est ce que nous voulons ! Et c’est pas évident qu’on ai ce résultat avec notre somme pondérée. D’où l’utilité de notre fonction d’activation !

😮 Ooooh ok ! Et ça ressemble à quoi ?

Il y a plusieurs sorte de fonction d’activation en fonction de ce que l’on souhaite avoir comme résultat ou même en fonction du besoin d’efficacité algorithmique. Par exemple, on peut utiliser une fonction conditionnelle comme dans les articles précédents (résultat est égal à 1 si la somme est supérieur à un nombre et 0 dans le cas contraire) ou encore la fonction sigmoïde qui est une fonction mathématique dont les résultats sont compris entre 0 et 1.

illustration du schéma d'un neurone artificiel
Schéma du neurone artificiel.

Il temps de faire un peu de maths. Pour construire notre somme pondérée, il nous faut des nombres en entrée qu’on appelle features (La domination anglophonique est insurmontable) et que l’on note xi (pour les non matheux et ceux qui n’auraient pas compris, le petit i en indice indique simplement le numéro de la feature, si il y en a 10, i ira de 1 à 10), des poids (weight) que l’on note wi et on peut rajouter un biais (bias) qu’on notera w0.

Somme pondérée :

z=x_1*w_1+x_2*w_2+\text{...}+x_i*w_i+w_0

ou de manière plus concise avec le sigle mathématique « somme » (\sum_{}^{}

z=\sum_{i=0}^{n} x_i*w_i +w_0

Fonction d’activation (par exemple) :

y=sigmoid(z)

😥Les maths c’est pas trop mon truc… Je vois toujours pas comment ça marche concrètement !

Ok avec un exemple ce sera plus clair.

Reprenons nos histoires de poids et de tailles de moustaches de nos chats et chiens. Nos features (nos x) ce seront donc nos poids et taille de moustaches, soit 2 features (x1, x2)par animal. Les poids on va les mettre au hasard (dans un premier temps en tout cas) et… bah yapluka.

x_1 = 5 , x_2=10 , w_1=3 , w_2=-2 , w_0=2

z=5*3+10*-2+2=-3

y=sigmoid(-3)=0.05

🤨 Mais là on a pas 0 ou 1 comme prévu mais 0.05 !

Oui car on a utilisé la fonction sigmoid de manière un peu arbitraire. Mais le résultat est quand même exploitable. Il suffit de considérer le résultat comme une probabilité, en l’occurrence ici, la probabilité que notre animal soit un chien ou encore le pourcentage de chance que ce soit un chien. Si on multiplie le résultat par 100, on obtient le pourcentage. (0.05*100=5) Il y a 5% de chance que notre animal soit un chien… Autant dire que le neurone artificiel à classifier l’animal en tant que chat !

Voilà ! Maintenant vous savez ce qu’est un neurone artificiel. Bravo !

🤔 Attend… Et si le neurone s’est trompé ? Qu’est ce qu’on fait ?

Et bien, il suffit de changer la valeur des poids.

😒Ok… Et comment on change la valeur des poids ?

Ah ça c’est une autre histoire que l’on verra dans un autre article si vous êtes sage ^^

IA… Mais c’est koi ? (4)

Making an artificial intelligence

Bravo vous êtes arrivé au dernier niveau de cette petite (toute petite) introduction à l’intelligence artificielle. Pour ce dernier article, plus de math promis 😉 Cette fois on va s’amuser à programmer notre IA de détection de chat ou de chien. Dans le même esprit que précédemment, nous allons faire très très simple, pas besoin d’être un expert en code, c’est juste pour s’amuser. Nous allons faire ça en Python donc si vous voulez le faire faudra installer Python (https://www.python.org/) Pour écrire le code un simple éditeur de texte comme notepad fonctionne très bien. Je vous conseille Sublime Text (https://www.sublimetext.com/) par ce que j’aime bien et il y a des couleurs différentes de typo pour bien se repérer dans le code, c’est tout joli 😊 Cet article servira aussi d’introduction à la programmation.

Alors ready ?

Python est un langage informatique avec une syntaxe simple et intuitive, très flexible, c’est le candidat idéal pour débuter. Il y a plusieurs manières de programmer, nous allons pour notre cas créer un fichier python : ma_super_ia.py (.py est l’extension utiliser pour les fichiers Python vous l’aurez compris) avec tout notre code. On ouvre un nouveau fichier dans Sublime Text, on le renomme et on choisit la syntaxe Python (menu « View/Syntax/Python »). Maintenant on commencer notre code.

Bon avant de commencer faut peut être définir de façon clair ce que l’on veut faire non ? Ok, on veut pouvoir donner des poids et des tailles de moustaches à notre IA et quelle nous réponde si c’est un chat ou chien. Il faut aussi qu’elle s’entraine pour améliorer ses résultats sur les données qu’elle reçoit. Du coup elle doit pouvoir les stocker. On commence par quoi ? Hum… On est un libre, du coup c’est pas toujours évident de commencer. L’important c’est que le résultats corresponde à ce que l’on cherche à faire. Je vous propose de commencer par l’algorithme de classification.

De quoi l’IA à besoin pour classifier :

  • de la formule de la droite y = ax + b
  • d’un a et d’un b qu’on va arbitrairement choisir au début.
  • des données de poids et de tailles de moustaches

Première étape, définir a et b. En programmation, on appelle ça des variables et c’est très simple de les créer en python. Il suffit de donner un caractère ou même un mot, d’ajouter le signe = et de mettre la valeur que l’on veut. Attention, il y a des règles de syntaxe précises dont je ne vais pas parler ici (suffit de vérifier dans la doc Python si vous êtes curieux)

a = 2
b = 3

Voilà tout simplement. Nous avons stocker la valeur 2 et la valeur 3 dans le caractère a et le caractère b. On les appellera variable a et variable b.

Deuxième étape, écrire notre formule… En fait non, il y a un soucis, avant de définir des actions, formules sur des variables, encore faut il les définir. Si on écrit la formule y = a * x + b (la multiplication c’est * en Python et l’addition + tout simplement), la a et b on les a définit mais le x ? Python ne va pas comprendre. Au passage vous remarquerez que l’on peut attribuer des calculs à une variable (ici le y). Donc x c’est quoi ? Oui la taille de nos moustaches (enfin celles de notre animal). Comme c’est l’utilisateur qui doit donner l’information il nous faut une commande qui lui permet de renseigner cette information. Et magie, il y a une commande pour ça en Python : input(). Elle prend un paramètre entre les parenthèses qui est une chaine de caractères (une phrase quoi) et elle renvoi ce que l’utilisateur a entré. Là encore on va mettre tout ça dans une variable. Si vous voulez afficher ce que l’utilisateur à entré, vous pouvez utiliser la fonction Python print() qui peut afficher le contenu d’une variable. Voyons notre code :

moustaches = input("Merci de donner la taille des moustaches de votre animal")

print("Ce que l'utilisateur a entré :", moustaches)

Cette fois on a utilisé un mot pour définir notre variable plutôt qu’une simple lettre, c’est plus clair comme ça. Dans le print() vous pouvez mettre plusieurs variables ou même des valeurs et du texte (entre guillemets). Il faut veiller à séparer les différents éléments par une virgule. (Attention aux guillemets, le premier ouvre la phrase, le suivant la ferme, il ne faut donc pas en mettre au milieu de la phrase, si c’est obligatoire il faut mettre une barre oblique inversée devant ( \ » ) pour empêcher Python d’interpréter le «  comme la fin du texte)

Pour tester le code, il suffit de le lancer à partir d’un terminal de commande. Si vous êtes sous windows, taper cmd dans la barre de recherche, allez dans le dossier de votre code (pour se déplacer dans les dossier dans le terminal utilisez la commande cd (cd nom_du_dossier ou cd .. pour remonter l’arborescence) puis taper le nom de votre fichier. Il devrait se lancer.

Copie écran du terminal Windows où le code a été exécuté.
Exécution du programme dans le terminal de Windows

Bon jusque là tout va bien (j’espère que c’est le cas aussi pour vous). Maintenant on peut construire notre formule.

Hé attend ! Qu’est ce qui se passe si l’utilisateur entre n’importe quoi ? 😱

Bonne question, très bonne question même ! C’est un bon reflexe en programmation de toujours imaginer les cas tordus ^^ Dans cet exemple je vais considérer que le cas n’arrive jamais mais dans la réalité il faut absolument prendre en compte toutes les possibilités et par exemple vérifier ce que l’utilisateur entre et mettre un message d’erreur si les données ne sont pas celles qu’on attend.

Bon construisons notre formule.

y = a * int(moustaches) + b

Whaaaat ! C’est quoi ce int() ?!

Ah ça… c’est juste pour dire à Python que la valeur dans la variable moustaches est un nombre entier (integer en anglais) sinon il croit que c’est du texte et n’arrive pas à calculer.

Voilà pas très compliqué.

Maintenant, il nous faut calculer la différence entre le y et le poids de l’animal. Mince on a oublié de demander le poids à l’utilisateur !!! Bon maintenant qu’on sait faire ça va être facile.

poids = input("Merci de donner le poids de votre animal :")

print("Le poids de votre animal est de :", poids)

Et maintenant notre formule de comparaison. (on oubli pas de préciser que le poids est un nombre entier)

z = int(poids) - y

Troisième étape, déterminer la race de l’animal. Pour rappel, si z > 0 c’est un chien, et un chat sinon. Ici on a besoin d’une autre technique de programmation : la condition. Cette méthode a une syntaxe assez explicite (surtout pour les anglophone) : if … else …

if z > 0:
    print("C'est un chien.")
else:
    print("C'est un chat.")

Attention, l’indentation est très importante ici. Elle peut être de 2 ou 4 espaces (une tabulation) et ne pas oublier les : après if et else. On peut tester maintenant notre code 😀

Capture d'écran du terminal où le programme a été lancé.
Extrait du terminal avec les résultats du programme lancé

HOURRA !!! Ca marche !!!! C’est bôôôô ! … Mais elle apprend pas notre IA là ?

Oui ! Faut programmer ça. Aller on se lance.

Quatrième étape, créer une base de données de chats et de chiens.

Oula… ça parait bien compliqué ça !!

Pas d’inquiétude, on va faire simple. On va créer une nouvelle variable de type liste qui contiendra nos données. Une liste est une forme de variable spéciale pouvant contenir d’autres variables et on peut mettre des listes dans des listes comme des poupées russes. Notre liste contiendra les listes des valeurs pour chaque animal. Les valeurs à l’intérieur des listes sont séparées par des virgules et les listes sont indiquées par des crochets. Par exemple : la liste [1,2,3] contient les valeurs 1, 2 et 3. Pour nous la première valeur sera le poids, la seconde la taille des moustaches et enfin le label 0 ou 1 (chat ou chien).

bdd = [ [3, 8, 0], [8, 6, 1], [5, 10, 0], [12, 6, 1] ]

On arrive à la partie compliquée.

Comme si c’était pas déjà compliqué ! 😡

Vous inquiétez pas on y va doucement. Notre programme doit récupérer les données et les traitées. Comme on ne connait pas à l’avance la taille de la liste, il faut que le programme se débrouille pour itérer sur chaque éléments. Voilà grossièrement l’algorithme que nous allons mettre en place :

  1. Récupération de la première liste de la bdd ( [ 3, 8, 0 ] )
  2. Récupération des différentes valeurs de la liste et sauvegarde de ces valeurs dans des variables
  3. Calcul avec ces données
  4. Calcul de l’erreur avec le label
  5. Ajout de l’erreur à la somme des erreurs
  6. Récupération de la liste suivante dans bdd
  7. On recommence les étapes à partir de 2 jusqu’à la fin de la liste bdd
  8. Calcul de la moyenne des erreurs
  9. Mise à jour de la variable a selon la moyenne des erreurs.

Pour parcourir des listes en Python il y a une méthode simple : la boucle for. Voilà une exemple :

for animal in bdd:
    print(animal)

Voici comme elle fonctionne, d’abord elle récupère le premier élément de la liste bdd, elle met cet élément dans la variable animal puis effectue les actions décrites à l’intérieur (tous ce qui est indenté) ici elle affiche (print) la valeur de la la variable animal. Ensuite, elle passe au second élément de la liste, met dans la variable animal (l’ancienne valeur est écrasée) et ainsi de suite jusqu’à ce que la liste soit terminée.

Les boucles peuvent s’imbriquer les unes dans les autres (même si ce n’est pas trop conseillé de le faire pour des raisons d’efficacité de calculs).

Une autre possibilité est d’utiliser l’index des éléments car les listes sont ordonnées. L’index commence par 0, du coup si on tape bdd[0] on va récupérer les premier élément de la liste. Si on veut le troisième élément : bdd[2] et si on sort de la liste, Python va planter !

On sait parcourir notre bdd, il nous faut pouvoir gérer les erreurs maintenant. Le but étant de faire la moyenne des erreurs, il faut en faire la somme puis diviser par leur nombre. Pour incrémenter, c’est simple, il suffit de prendre notre nombre somme des erreurs puis de lui rajouter la valeur de l’erreur et d’attribuer ce résultats à notre variable somme. Voilà la syntaxe :

somme = somme + nombre

Hé ! mais là on ne sait pas le nombre d’erreurs pour faire la moyenne.

C’est vrai, on pourrait faire un nombre qui s’incrémente de 1 à chaque itération mais bon on sait que ce nombre correspond au nombre d’éléments de la liste bdd et évidement Python a une méthode pour avoir la taille d’une liste : len() (pour length en anglais)

Voilà on a tous ce qui nous faut pour faire notre boucle d’entrainement.

bdd = [ [3, 8, 0], [8, 6, 1], [5, 10, 0], [12, 6, 1] ]

somme_erreurs = 0

for animal in bdd:
	poids = animal[0]
	moustaches = animal[1]
	label = animal[2]

	y = a * moustaches + b
	z = poids - y
	if z > 0:
		classification = 1
	else:
		classification = 0

	erreur = classification - label
	somme_erreurs = somme_erreurs + erreur

moy_erreurs = somme_erreurs / len(bdd)

Voilà. Le point important, il faut créer la variable somme_erreurs avant de l’utiliser en incrémentation (avant d’entrer dans la boucle ici). C’est logique mais c’est une erreur classique.

Et maintenant on a presque fini 😊, il nous faut maintenant calculer le nouveau a pour modifier la pente de notre droite. Easy n’est ce pas ?

a = a + moy_erreurs

print("Notre nouveau a :", a)

Maintenant vous pouvez mettre à jour votre programme avec le nouveau a. C’est fini 😁

Euh… Attend, c’est l’arnaque là. On doit faire la mise à jour du code à la main ?! 😢 T’aurais pas un moyen d’automatiser ça ? 🥺

Bon ok, mais je vous explique rien😈

D’abord il faut créer un fichier texte a.txt avec juste la valeur au hasard de a. Ensuite il faut transformer le code comme ci-dessous au début.

file = open("a.txt", "r")

a = float(file.read())
b = 3

Enfin, la fin du code ressemble à ça :

a = a + moy_erreurs

file = open("a.txt", "w")

file.write(str(a))
file.close()

Et le résultat :

Affichage de l’exécution du programme dans le terminal

Je vous laisse vérifier que le fichier a.txt est bien actualisé.

Voilà c’est fini ! Ouf ! C’était un gros morceau. Vous êtes des génies maintenant et moi je peux aller me coucher😴

Notre série introductive à l’IA est maintenant terminée mais vous inquiétez pas, bientôt de nouveaux épisodes bien plus complexe maintenant que vous êtes des pros ^^

IA… Mais c’est koi ? (3)

Illustration de l'article
More and more AI retro-engineering

Vous êtes encore là ! Quel courage 🙂

Bon pour ceux qui déparquent, n’hésitez pas à lire les épisodes précédents, ça sera plus simple.

Attaquons maintenant un gros morceau conceptuel : l’apprentissage !

Bah oui, jusqu’à maintenant je vous ai dit « on fait ci », « on fait ça » mais c’est bien l’IA qui doit le faire, pas nous sinon aucun intérêt. Alors comment programmer l’autonomie d’apprentissage de notre IA ?

Première étape, et pour rappel, il nous faut modifier la position et l’orientation de la droite pour améliorer les résultats. Déterminons alors comment modifier notre courbe-droite mathématiquement. (l’ordinateur ne va comprendre si on lui parle en langage humain) Comment traduire « bouge la courbe vers le haut » ou « accentue la pente de la droite » en math ? Et bien c’est simple nous avons des paramètres (a et b dans notre exemple), a représente la pente de la droite et b sa position. Ainsi plus la valeur de a est élevée, plus la pente monte vite (Est-ce qu’une pente peut monter ??? bon on est pas là pour faire de la sémantique) et si la valeur est proche de zéro, moins la pente sera pentu. a peut être négatif, et dans ce cas la pente descend.

Illustration de l'effet de différentes valeurs de a sur la pente de la droite
Effet de a sur la pente de la droite (b fixe)

Du coup il suffit de demander à l’IA d’augmenter ou de diminuer les valeurs de a et de b selon le besoin.

Deuxième étape : déterminer si nos paramètres doivent augmenter ou diminuer. Pour l’exemple on va faire simple mais il faut garder à l’esprit que dans la pratique, les techniques sont beaucoup plus sophistiquées. Du coup on peut regarder comment l’IA interprète les résultats. Dans l’épisode précèdent on a décidé que si le résultat était négatif, la réponse est « chat » et « chien » dans le cas contraire. C’est bien mais du coup ça pose un petit soucis dans la comparaison avec les labels. Le plus simple c’est de prendre des nombres et comme ici le problème est binaire (chat ou chien) on peut utiliser 1 et 0. 1 c’est un chien, 0 c’est un chat. Du coup pour comparer avec les labels, c’est super simple, suffit de faire une soustraction. label – résultat. Si c’est 0, la classification est correcte, si c’est 1 ou -1, la classification est erronée. Et là vous voyez la magie ? … Non ? … Et bien on a 2 erreurs possibles (1 ou -1) de signes opposés, donc 2 manières de modifier notre droite !!! Magique !

Bon résumons :

  1. L’IA fait le calcul y = ax + b
  2. Elle compare y avec la donnée restante (le poids dans notre exemple) et obtient un nombre que nous appellerons z. poids – y = z
  3. Si z est négatif, l’IA répond 0 qui veut dire « chat » dans son langage. Sinon elle répond 1, « chien ».
  4. Ensuite elle compare au label des données. 3 résultats possibles résumés dans le tableau ci-dessous.
Résultat de l’IALABELCOMPARAISONERREUR
1 (chien)1 (chien)1 – 10
0 (chat)0 (chat)0 – 00
1 01 – 01
010 – 1-1
Calcul de l’erreur de classification de l’IA
  1. Maintenant c’est tout simple, l’IA modifie ses paramètres dans le sens de l’erreur. 0 pas de modification, 1 elle augmente la valeur de a donc la pente augmente et -1 elle diminue la valeur de a, la pente diminue (bon ça dépend aussi du signe de a on est d’accord) (Elle peut modifier b aussi mais ce n’est pas utile pour l’exemple et la compréhension)
animation de l'apprentissage de l'ia
Comment l’IA corrige ses erreurs

Est-ce que c’est fini ? Vous voyez pas un soucis ?

En l’état, notre IA s’adapte à chaque donnée de façon unique, du coup elle n’a pas une « vision » d’ensemble des données. Elle va s’adapter à une donnée puis à la suivante et ainsi de suite sans jamais, peut-être, trouver une position idéale pour l’ensemble des données. Du coup qu’est ce qu’on fait ? Et bien, on envoie toutes les données d’un coup !!! Puis on fait une moyenne des erreurs et c’est cette moyenne qui nous servira de base de mise à jour de nos paramètres.

Illustration d'un ensemble de données envoyé à une IA
Les données sont envoyées d’un coup à l’IA qui calcule une erreur moyenne pour actualiser la pente de la droite.

Voilà, c’est tout, vous avez tout compris, vous êtes des experts de l’IA maintenant. Bravo !

Mouais … Ca parait trop simple pour être vrai 😠

Bon ok, dans la pratique c’est bien plus complexe mais la base est là. Si vous me demandez comment ça se passe avec plus de features (c’est le petit nom qu’on donne aux différentes données) ou avec une courbe et pas une droite, je vous repondérai : Pareil… mais en plus complexe. Et puis si on veut des résultats optimisés au maximum il y a plein de techniques différentes mais encore une fois ce n’est pas le sujet. Si vous êtes curieux et patient, on y viendra.

Est-ce que ça vous dirait un peu de code maintenant ? Du très simple toujours mais avouez que vous mourrez d’envie de programmer cette IA et d’avoir le pouvoir de classifier les chats et les chiens selon leur taille de moustaches et leur poids !

Je vous propose de voir ça au prochain épisode.

IA… Mais c’est koi ?! (2)

Image illustrative
AI retro-engineering level 2

Allez on passe la seconde !

(si vous êtes toujours au point mort -> https://www.nonodamiens.fr/2021/01/30/ia-mais-cest-koi/)

On a vu que l’IA était en fait une formule de math que l’on modifie au cours d’un entrainement pour que ses résultats se rapprochent des résultats que l’on souhaite. Rentrons un peu plus en détail.

Tout d’abord il nous faut des données (exemple les tailles de moustaches et les poids de chats et de chiens) labelisées.

Moustaches Poids LABEL
12 cm3 kgChat
8 cm10 kgChien
Extrait des données

Les labels serviront à vérifier les résultats donnés par l’IA – formule de maths et les autres seront les valeurs données en entré à notre IA – formule de math. La formule doit également être constituée de paramètres qui pourront être modifiés pour changer les résultats dans le but encore une fois de se rapprocher de la réailité.

Je sens que j’en ai perdu certains…

On recommence par étapes :

  1. Je donne des données à ma formule de maths
  2. Elle fait un calcul et donne un résultat
  3. Je compare le résultat obtenu avec le label correspondant aux données
  4. Je modifie les paramètres de la formule en fonction de la différence constatée entre le résultat obtenu et celui attendu.
  5. Je recommence jusqu’à ce que je sois satisfait des résultats.

Alors ça va mieux ? C’est plus clair ? (du moins conceptuellement parlant)

Bon là on a pas beaucoup avancer depuis l’épisode 1… Il nous faut nous confronter aux maths !!!

Pas de panique, on va y aller lentement.

Tout d’abord il nous faut choisir une formule de math qui pourra marcher avec notre problème. Dans le premier épisode, nous avons représenté la formule sous la forme d’une courbe. Les courbes étant un peu trop compliquées à représenter mathématiquement pour nous, on va commencer par la courbe la plus simple : la droite. Notre IA ne sera pas très précise mais fonctionnera quand même.

Un peu de math

Quel est la formule d’une droite ?

y = ax + b

Pour ceux qui ne savent vraiment pas pourquoi on obtient des droites avec cette formule, une petite vidéo va aider.

Construire des droites en mathématique

Ok, on a notre formule. a et b sont nos paramètres que l’on peut modifier. x une des données d’entrée et y le résultat à exploiter pour créer la réponse.

Les étapes :

  1. On détermine au hasard des valeurs aux paramètres a et b (cela nous donne une droite au hasard)
  2. On calcul le y avec une de nos données que l’on a attribué à x
  3. On fait la différence entre y et la données qui nous reste et en fonction du signe du résultat on donne une réponse (« chat » ou « chien »)
  4. On compare avec le label correspondant à nos données.
  5. Si besoin, on modifie les paramètres a et b pour corriger la pente et la position de la droite.
  6. Et on recommence à partir de 2 (On attribue des paramètres au hasard qu’une seul fois !!)

Allez avec des petits dessins et un exemple concret ça sera plus clair ^^

Reprenons nos chats, chiens, poids et longueurs de moustaches. Générons des paramètres au hasard pour notre formule.

  1. Avec a = -2 et b = 10 la formule devient y = -2x + 10.
  2. Prenons un premier animal dont la taille des moustaches fait 3 cm et attribuons cette valeur à x
  3. y = -2*3 + 10 = 4
  4. Le poids de l’animal est de 5 kg. On compare avec le y (5 – 4 = 1 > 0)
  5. Quand le nombre obtenu est positif on décide que c’est un chien. C’est le cas ici.
  6. On compare avec le label des données. Zut c’était un chat.
  7. On modifie les paramètres un peu (faut pas aller trop vite) pour modifier la pente et la position de la droite pour se rapprocher du bon résultat. On peut mettre a = -1 et b = 5 pour obtenir le bon résultat (dans la réalité les modifications son généralement beaucoup plus fines mais là c’est pour l’exemple)
  8. On recommence avec d’autres données
  9. Une fois le taux de bonnes prédictions maximisé. On s’arrête et on sauvegarde notre formule pour de futurs prédictions sur des données fraiches non labélisées !
Graphique illustratif
Droite avec des paramètres fixés au hasard y = -1 * x + 10
Graphique illustratif
Droite avec les paramètres modifiés et optimisés y = 0.8 * x + 2
graphique illustrant la détection d'un chat par l'IA
Détection d’un chat

Voilà ! Ouf ! C’était un gros morceau. J’espère que ça devient de plus en plus clair dans vos petites têtes 😉

Bon nous n’avons fait qu’effleurer l’épiderme externe de l’IA mais la base est là ! Reste qu’il y a quelque chose qui n’est pas clair dans tout ça… Bah oui, ce n’est pas à nous de modifier les formules mais c’est au programme d’IA de manière automatique et autonome ! Comment il arrive à faire cet exploit ? Pour répondre à cette question il va nous falloir plonger encore plus loin dans les tréfonds des mathématiques… mais êtes-vous seulement prêt ?

A bientôt pour le prochain niveau !

IA… Mais c’est koi ?!

dessin d'illustration, un robot en démontage
AI retro-engineering

Tout le monde en parle à tort (tord ?) à travers mais concrètement de quoi on parle ?

Si tu te poses la question, il est temps d’éclairer les ténèbres dans lesquels tu te trouves. Tu vas tout comprendre facilement et tu pourras briller dans les diners mondains que tu fréquentes assidûment je le sais. Alors attache ta ceinture, c’est parti !

IA est l’acronyme d’Intelligence Artificielle, bon jusque là tu devrais toujours suivre. Il vient de l’anglais AI (artificial intelligence). « Artificiel », on comprend le concept, mais « intelligence », là ça devient plus compliqué. Et c’est peut être là le problème (s’il y en a un). Quand j’entends le mots « intelligence », la traduction qui me vient à l’esprit c’est : « capacité à raisonner » et clairement ce n’est pas vraiment encore le cas pour nos IA. Ce le sera peut-être un jour mais il faudra encore être patient. La définition la plus proche et pertinente serait plutôt « capacité d’apprendre ». Pour ma part je trouve le nom d’intelligence artificielle très vendeur mais assez éloigné de la réalité car aujourd’hui il faut bien l’avouer nos intelligences artificielles, malgré les exploits formidables qu’elles réalisent ne sont que des intelligences (très) faibles. Cela ne veut pas dire qu’elle ne sont pas déjà capable d’exploits surhumain.

Bon rentrons dans le vif du sujet !

Il y a beaucoup de sorte d’IA et je ne vais pas vous les expliquer ici mais elles ont toutes en commun une certaine capacité d’apprentissage sur des tâches hyper-spécifiques. Et c’est là leur faiblesse et leur force. Elle sont mono-tâche mais hyper-performantes (pas toujours en vérité) sur celle-ci grâce à un hyper-entrainement.

Oui mais concrètement c’est quoi ???

Pardon j’y arrive. Et bien c’est tout simplement une formule de mathématique !

Whaaaat ?

Oui, il n’y a rien de magique mais juste la puissance des maths. Encore une fois je ne rentre pas dans les détails mais en gros c’est une formule de maths que l’on adapte au fur et à mesure d’un entrainement pour rapprocher les résultats de observations réelles.

Bon je crois qu’il faut un exemple. Imaginons que nous souhaitions que notre IA sache différencier les chats des chiens. (je sais c’est d’une utilité stratégique, les chats cherchent à dominer le monde je vous rappelle !) Pour nous c’est une tâche facile à priori mais imaginons maintenant que nous ayons pour informations uniquement la longueur des moustaches et le poids de l’animal ! Ah vous faites moins les malins là ! Heureusement nous avons une ribambelle de petits stagiaires qui nous ont mesuré et pesé les pôves bêtes et nous avons plein de data.

Maintenant les étapes :

  1. Nous prenons un formule de math au hasard (pas tout à fait au hasard dans la réalité) qui prend 2 paramètres en entrée – la taille des moustaches et le poids – et un nombre en sortie entre 0 et 1. Nous décidons que les résultats supérieurs à 0,5 sont des chats et les autres des chiens.
  2. Nous lançons les calculs
  3. Nous comparons les résultats avec nos données et nous modifions un peu la formule de maths dans le but d’améliorer nos résultats
  4. Nous recommençons à partir de l’étape 2 tant que les résultats ne sont pas assez satisfaisant.
  5. Maintenant on peut donner de nouvelles tailles de moustaches et de nouveaux poids et on est assez confiant dans la capacité de la formule de maths de différencier les chats et les chiens.

Hé mais pourquoi on prend pas directement la bonne formule de math !?

Et bien parce qu’on la connait pas ! Et ce n’est pas un mathématicien expert qui doit la trouver mais un petit ordinateur qui ne sait que répéter des tâches simples. La subtilité va donc être de lui dire comment améliorer sa formule petit à petit par itération.

Voilou ! C’est tout simple. Allez des petits dessins pour illustrer tout ça.

graphique de répartition des chats et des chiens
Répartition des chats et des chiens en fonction de la taille de leurs moustaches et leur poids

Le problème revient à trouver une formule mathématique dont la courbe représentative séparera graphiquement les points chats des points chiens.

graphique de répartitions chats / chiens avec courbe de classification et indication des erreurs de classification
Différentiation des chats et des chiens en fonctions des valeurs d’une formule de mathématique quelconque (courbe bleue)

Avec une formule mathématique (plus ou moins) quelconque, il y a beaucoup d’erreur de classification.

graphique de répartition chats / chiens avec courbe de classification améliorée avec moins d'erreurs de classification
Détection des chats et des chiens en fonction des valeurs de la formule mathématique entrainée (courbe bleue)

En modifiant petit à petit la formule, la classification se fait plus précise et le nombre d’erreurs diminue. Au bout d’un certain temps, les résultats atteignent un niveau satisfaisant. L’IA est prête.

graphique illustrant les prédictions de l'IA
Détection d’un chien

Nous pouvons donner de nouvelles données à l’IA de tailles de moustaches et de poids. En fonction de la position de ces données – en dessous ou au dessus de la courbe – l’IA déterminera si les données correspondent à un chien ou un chat.

Alors C’est plus clair maintenant ?

Se pose maintenant des questions plus précises. Quels sont ces formules de math ? Comment nous pouvons modifier celles-ci pour améliorer les résultats ? Est-ce que cela sert juste à différencier des chats et des chiens ? Comment nous pouvons coder tout ça ? …

Il y a de quoi faire encore plein de petits articles. Alors à très vite si vous voulez continuer d’apprendre et de comprendre ce vaste domaine.

La menace IA !

illustration
Super scary cat recognition artificial intelligence

Avez-vous peur de l’Intelligence artificielle ?

En tout cas, j’ai l’impression qu’au fur et à mesure qu’elle s’installe dans nos vie nous avons de moins en moins peur d’elle. Et c’est tout à fait normal, l’inconnu c’est ce qui nous fait peur.

Aujourd’hui, l’IA se démocratise, de plus en plus de monde l’appréhende sans toujours bien comprendre ce qu’il y a derrière et du coup la menace semble s’éloigner. Il est vrai aussi que les peurs sont nourrit pas les médias et réseaux sociaux qui sont accaparés par un autre sujet ces derniers temps :

Afficher l’image source
c19

En tant que spécialiste de l’IA, de mon côté elle ne me fait pas peur, en tout cas pas encore du point vu intelligence. Néanmoins j’ai quelques inquiétudes sur son utilisations. L’IA est un outil puissant qui peut s’adapter à beaucoup de situations très différentes et comme tout outil elle peut être utilisée de façon pas toujours positive. Elle est d’ailleurs largement utilisée pour des problématiques qui n’ont pas l’objectif d’améliorer la condition humaine. Comme toutes nos technologies, elle reflète notre façon d’organiser la société.

Dans tous les cas, avant de juger de la pertinence d’un technologie et de son usage il est bon de la comprendre. Du coup je vais créer un nouveau groupe de post qui lui sera dédié. Avec je l’espère plein de contenu intéressant. Il y aura beaucoup de théorie mais rien de bien compliqué (je l’espère) et j’essayerai aussi de présenter des projets et des utilisations concrètes.

Voilà j’espère que cette série vous plaira.

Bonne année 2021 !

Love delivery service

Bon l’année 2020, je crois, nous sommes tous d’accord, nous pouvons l’oublier !

Du coup c’est parti pour l’année 2021 ! Hourra !

A vrai dire je n’ose pas souhaité quelque chose, il y a tellement d’incertitude et elle ne commence pas sous les meilleurs auspices… Du coup Je vous souhaite surtout de l’amour, plein d’amour, une tonne d’amour chacun. Et même si c’est un peu lourd et pas toujours facile à transmettre, si cela peut apporter un peu de réconfort et de chaleur, ça en vaut la chandelle !

Pour le reste on verra bien…

Panne éco


bande dessinée sur l'économieEt si les économistes n’avaient rien compris à l’économie ?

On peut se poser la question car finalement aucun économiste n’a jamais réussi à anticiper les crises. Or c’est bien ce que l’on demande à la science de mettre en place des modèles qui puissent expliquer et prédire les évènements.

Bon je suis d’accord, l’économie est une science sociale (et non pas « dure » ou « exacte ») avec toutes les approximations et incertitudes que cela entraine. Mais elle est la discipline qui conditionne le plus nos vies, alors que les économistes aient quasiment tout le temps tort c’est plus qu’embêtant.

Peut-être faut il y mettre un peu de science « pure » pour améliorer les modèles.

C’est un travail qu’à fait Jean-Marc Jancovici et je trouve son travail tout à fait pertinent.

Pour découvrir ses travaux : https://jancovici.com/

Selon lui, la principal erreur des économistes traditionnels est de ne pas prendre en compte les approvisionnements énergétiques et principalement de pétrole dans leurs modèles. Et il est pourtant assez facile de comprendre intuitivement que sans énergie il n’y a pas de production donc pas de croissance, peu importe la flexibilité du marché.

Du coup cela m’a inspiré cette petite bande-dessinée.

Climat

illustration de l'expression mettre la charrue avant les boeufsNous sommes à l’aube de la plus grande catastrophe pour l’humanité et peut être même la vie en général.

Entendons nous bien, l’humanité survivra probablement, la vie survivra sûrement mais l’important c’est de savoir COMBIEN survivront si nous n’agissons pas maintenant.

Je comprends que les fin de mois sont difficiles pour la majorité d’entre nous et que l’urgence c’est d’arriver à payer ses factures.

Mais c’est malheureusement faux, la véritable urgence c’est l’environnement et le climat. Tous les scientifiques le crient depuis des mois.

Que ferons nous quand il n’y aura plus de nourriture, que les déplacements de population seront massifs, que les maladies exploseront ?

Ce n’est pas une fatalité. La « bonne » nouvelle, c’est que moins on est riche moins on a d’impact sur le climat, la mauvaise c’est que la quasi totalité des habitants des pays « riches » vivent au dessus de ce que peu supporter la planète, les gens au smic compris et que du plus en plus de gens s’enrichissent dans le monde.

Aujourd’hui, les gouvernement nous proposent les mêmes recettes éculées qui ne fonctionnent plus. En un mot la croissance. Mais savez vous ce qu’est la croissance ? C’est l’augmentation des richesses d’un pays. Et comment on augmente les richesses : en produisant des biens. Mais c’est justement la production de biens qui nous a mis dans cette situation climatique !

Quelles solutions ?

La première chose c’est de baisser notre consommation, surtout des produits les plus polluants. Avez vous besoin du dernier téléphone portable ? D’une télé 4K ? De ce pantalon ? Avez vous besoin d’aller à Bali pour vos vacances ? Et cet ananas qui vient de l’autre bout du monde, peut-être un autre fruit sera tout aussi bon ?

Même si vous êtes prêt à ces sacrifices, il y a un autre soucis. Car baisse de la consommation = baisse de l’activité économique (plus de chômage, plus de pauvreté)

Vendre la croissance et la transition écologique est un mensonge malheureusement.

Il faut changer de programme, d’organisation et ce sont les riches qui doivent changer en premier, c’est eux qui ont l’impact le plus fort.

Tant qu’on priorisera la croissance par rapport au climat nous accepterons de sacrifier des millions de vies, c’est un fait.

Plus tôt nous agissons moins l’impact sera fort mais il sera là quand même.

Pour donner un petit ordre d’idée de la violence des changements climatiques en cours : Le dernier âge glaciaire, donc avec toute l’Europe recouverte d’un immense glacier, le niveau des mers 100 mètres plus bas, la manche que l’on peut traverser à pied c’est 5° de différence avec le climat actuel pour un changement climatique qui s’est déroulé sur des milliers d’années !

Aujourd’hui nous sommes déjà à 1° en à peine 100 ans et ça s’accélère à une vitesse jamais vu !!!!