Démystification mathématiques, le fonctionnement d’un réseau de neurones

Alors que le terme IA est utilisé dans une nombre croissant de contextes, et qu’il est de plus en plus difficile de le définir, je vous propose d’étudier l’une de ses technologies fondatrices : le réseau de neurones.

Le réseau de neurones est utilisé dans le « Machine Learning et le « Deep Learning », dans des algorithmes qui ont pour but de faire de l’apprentissage. L’objectif est pour l’algorithme de trouver des liens et tirer des généralités d’un grand set de données. Ces liens et généralités permettent à l’algorithme de réaliser des tâches sans avoir reçu d’instructions spécifiques de la part d’un humain au préalable.

Application: classification

Le dataset

Nous allons étudier comment un réseau de neurones peut être utilisé pour prédire si un animal est un chat ou un chien en connaissant la longueur de son poil et sa taille.

Le dataset que nous allons utiliser est fictif, et a 3 colonnes, comme vous pouvez le voir dans le tableau suivant:

Longueur du poilTailleAnimal
5.253.15chat
2.766.66chien
3.236.55chien
3.871.62chat
4.213.94chat

L’objectif de cette application est de permettre à l’ordinateur de prédire si l’animal considéré est un chien ou un chat, en ne connaissant que la longueur de son poil et sa taille.

Le dataset sera plus parlant si on le représente sur un graphique :

Graphique permetant de visualiser le dataset fictif que nous allons étudier

Quand on voir le graphique, pour nous, humains, il est facile de reconnaître que les chiens et les chats sont séparés en 2 groupes, et qu’il y a une claire séparation entre eux. Grâce à nos capacités visuelles et de lecture de graphique, répondre à ce problème est trivial. Mais la machine, comment s’y prends t’elle ?
Avec un réseau de neurones.

Le réseau de neurones

Pour l’instant, considérons le réseau de neurones comme une boite noire, nous l’ouvrirons dans un instant pour regarder dedans.

Voilà ce qu’on attend du réseau de neurones: lorsqu’on lui donne la longueur du poil et la taille d’un animal, il nous répond si c’est un chat ou un chien.

Le réseau de neurones travaille avec des chiffres, alors on va définir les chiffres d’entrée et de sortie comme suit:

  • x1 est la longueur du poil.
  • x2 est la taille.
  • r est la réponse du réseau de neurones.

La réponse du réseau de neurones r est un chiffre, sauf que notre objectif est que le réseau de neurones reconnaisse des chiens et des chats. On décide donc que si r >= 0 alors la réponse du réseau de neurones est « chat ». Si r < 0 alors la réponse est « chien ».

What’s in the box ?

Maintenant qu’on sait ce que le réseau de neurones nécessite en entrée et ce qu’on veut qu’il nous réponde en sortie, nous allons ouvrir la boite noire, pour voir ce qu’il y a dedans 😱

Il y a moins de choses que prévu dans cette boite noire 🤔.
C’est parce qu’on va utiliser un Perceptron… Une technologie historique, à l’origine du champ de recherche du machine learning.
Le perceptron peut être considéré comme un réseau de neurones à 1 seul neurones.

Dans la boite, on voit 2 choses:

  • w0, w1, w2, les poids du réseau de neurones.
  • la neurone, qui va traiter x1, x2, w0, w1, w2 pour donner r.

C’est au niveau de poids que va se faire la partie apprentissage de l’algorithme. Les poids sont initialisés à des valeurs quelconques, souvent aléatoires. Pour notre application, nous allons tous les définir à 1:
w0 = w1 = w2 = 1

Le neurone va utiliser x1, x2, w0, w1 et w2 pour calculer r. Pas de panique, le calcul est simple:
r = w0 + w1 * x1 + w2 * x2
En language naturel :
« Le neurone fait la somme de ses entrées (xi) multipliées par les poids qui leur sont associés (wi). Et w0, le biais, un poids qui n’est associé à aucune entrée. »

Donc avec les valeurs de poids actuels:
r = 1 + 1 * x1 + 1 * x2
r = 1 + x1 + x2

Les calculs

Maintenant qu’on a défini des poids et qu’on sait calculer r, on est capable de faire nos premières prédictions ! Elles seront sûrement mauvaises parce qu’on a donné des valeurs aléatoires aux poids w.

On va utiliser les animaux suivants pour faire nos prédictions:

Un chat Main Coon, un chien Doberman, un chien chiwawa à poil long et un chat Munchkin

Ce qui veut dire qu’on attend que le réseau de neurones donne les résultats suivants :

AnimalLongueur du poilTailleRésultat attendu
x1x2r
Chat Main Coon85>= 0
Chien Doberman16< 0
Chien Chiwawa25< 0
Chat Munchkin42>= 0

Vérifions si avec tous les poids w égaux à 1, les prédictions du réseau de neurones sont justes:

AnimalCalculRésultatRésultat juste ?
Chat Main Coonr=1+8+51414 >= 0 => Chat est juste
Chien Dobermanr=1 + 1 + 688 >= 0 => Chat n’est pas juste
Chien Chiwawar=1 + 2 + 588 >= 0 => Chat n’est juste
Chat Munchkinr=1 + 4 + 277 >= 0 => Chat est juste

On voit que pour l’instant, r est toujours supérieur à 0, donc le réseau de neurones réponds toujours « chat ». Ce n’est pas le résultat attendu.

C’est maintenant que vient la partie apprentissage, qui fait toute la force d’un réseau de neurones. L’apprentissage consiste à chercher quels sont les poids w qui permettent au réseau de neurones de donner le plus souvent possible une réponse juste. Grâce à des algorithmes capables de localiser quels poids sont les plus responsables pour l’erreur du réseau de neurones, l’apprentissage consiste à tester de nombreuses fois le réseau de neurones et modifier un petit peu les poids à chaque fois qu’il fait une erreur.

C’est un processus long qu’un ordinateur effectue grâce à des calculs matriciels très optimisés. Dans notre application, nous allons plutôt y aller au petit bonheur la chance.

Je propose d’utiliser les valeurs suivantes:
w0 = 1
w1 = 1
w2 = -1

Ce qui fait que le calcul du réseau de neurones est maintenant:
r = w0 + w1 * x1 + w2 * x2
r = 1 + 1 * x1 -1 * x2
r = 1 + x1 – x2

Testons à nouveau le réseau de neurones, avec ces nouveaux poids:

AnimalCalculRésultatRésultat juste ?
Chat Main Coonr=1+8-544>=0 => Chat est juste
Chien Dobermanr=1+1-6-4-4<0 => Chien est juste
Chien Chiwawar=1+2-5-2-2<0 => Chien est juste
Chat Munchkinr=1+4-235 >= 0 => Chat est juste

Tous les résultats sont justes !
C’est parce que notre problème est particulièrement simple qu’on a pu très vite trouver les bonnes valeurs de poids w.

On est certains qu’on a la bonne solution ?

Comme on a un problème simple, résolu par un réseau de neurones très simple… Après une toute petite démonstration mathématique, on arrive à montrer que le calcul de la neuronne donne en fait la distance de chaque point à la droite d’équation y = (-w0/w2)*x+(-w1/w2) = x+1.

À la question, est-ce que c’est la bonne solution ? En fait il y en a plusieurs des solutions, il existe plusieurs droites qui sépare les 2 groupes de points, on pourrait s’assurer d’avoir une meilleur solution si on avait un dataset avec plus de points, proche de la limite entre les 2 groupes.

Conclusion

Dans cette application, on a utilisé un réseau de neurones pour faire de la classification binaire. Ce qu’il faut retenir:

  • Un réseau de neurones à des entrées et des sorties.
  • Un réseau de neurones est défini par ses poids w.
  • L’apprentissage consiste à chercher les meilleures valeurs pour les poids w.
  • Un neurone fait la somme de ses entrées multipliées par le poids associé à cette entrée.

Une fois qu’on est familier avec ces concepts, imaginer ce qui se passe dans un réseau de neurones deviens plus abordables. Même si un réseau de neurones est de grande taille, avec plusieurs couches, le comportement de chaque neurone est celui que nous avons appliqué dans notre modèle.

Animation par 3 Blue 1 Brown : https://youtu.be/aircAruvnKk

Cette animation représente un réseau de neurones qui est capable de lire des chiffres manuscrits. Il a 4 couches, la première est la couche d’input, la dernière est la couche d’output. Chaque trait reliant 2 neurones représente un poids, il y en a en tout 13002 dans ce réseau de neurones. L’animation montre que l’on réalise les calculs des neurones dans l’ordre, couche par couche, jusqu’à arriver à la couche d’output qui exprime le résultat.

Si à la fin de cet article, vous pouvez regarder l’animation ci-dessus sans avoir l’impression que c’est de la magie noire, alors j’ai atteint mon objectif. Les modèles de génération d’images et les LLM comme Chat GPT sont évidemment beaucoup plus complexes et difficiles à comprendre. Mais vous pouvez quand même vous dire que même ces modèles compliqués sont une « simple » succession de calcul effectué par des « neurones », et que le résultat de ces modèles dépends de la qualité de leur entraînement… Tout comme pour notre petit modèle qui prédit si un animal est un chien ou un chat 😉

Partager l'article:

Autres articles