S’il y a un algorithme qui fait parler de lui en ce moment, un algorithme que tout le monde veut afficher fièrement sur son CV, c’est bien celui du réseau de neurones (Neural Network). C’est l’algorithme de base qui se cache derrière le Deep Learning et les intelligences artificielles. Il est souvent utilisé pour les reconnaissances d’image et de voix. Mais sans aller jusque là, je vous propose de comprendre comment les réseaux de neurones fonctionnent pour pouvoir les utiliser. Alors accrochez vous, à la fin de l’article vous saurez comment ça marche.
Contrairement à ce que l’on pourrait penser, ce n’est pas une méthode récente. Elle a été initiée par Frank Rosenblatt en 1957 avec la création du perceptron. L’idée initiale était de créer une méthode d’apprentissage basée sur le fonctionnement du cerveau humain. Ces méthodes ont finalement dû attendre l’utilisation de machines plus puissantes pour se développer.
Qu’est ce qu’un Réseau de neurones (Neural Network) ?
C’est une méthode de machine learning que vous pourrez utiliser pour des problématiques de prédiction et de classement en particulier pour des phénomènes complexes à modéliser et/ou non linéaires.
Prenons un exemple, on cherche à prédire si un client appartient au groupe bleu (bleu=1, vert=0) en fonction de son ancienneté et de son panier moyen :
Les réseaux de neurones sont particulièrement utiles dans ce cas puisqu’il s’agit d’une problématique non linéairement séparable (plus simplement on ne peut pas séparer les 2 groupes avec une droite, vous pouvez essayer, c’est impossible). C’est là qu’est toute la force de cet algorithme, il va transformer les données en entrée afin que le problème devienne linéairement séparable. Et ce nouveau problème pourra alors facilement être résolu.
Un réseau de neurones ressemble à cela :

Un réseau de neurones se compose de neurones (logique non?), des synapses relient les neurones entre eux. On commence par une couche d’entrée dans laquelle chaque neurone correspond à une variable explicative (quantitative ou qualitative décomposée en indicatrices). Puis une ou plusieurs couches de neurones cachés et enfin une couche de neurone de sortie qui correspond à la variable prédite. Le nombre de neurones sur une couche peut varier, c’est le Data scientist qui détermine la structure du réseau. Les synapse qui relient chacun de ces neurones aux neurones de la couche suivante sont dotés de poids. La phase d’apprentissage du réseau va permettre d’optimiser ces poids pour que la valeur prédite soit la plus proche possible de la valeur à prédire. Si on zoom sur un neurone dans le détail voilà ce que ça donne (on y reviendra) :

Comment fonctionne l’algorithme des réseaux de neurones ?
Pour commencer il va falloir choisir le nombre de couches cachées et de neurones que l’on souhaite utiliser pour l’algorithme. C’est simple :
- plus on ajoute de couches,
- plus les calculs sont longs,
- plus la prédiction lors de la phase d’apprentissage sera performant et
- plus le risque de sur-apprentissage (un algorithme qui se généralise mal à de nouvelles données) est élevé.
Il faut donc trouver un juste milieu et choisir le bon nombre de neurones.
Pour notre exemple, nous allons tester une seule couche cachée avec 3 neurones.
On commence donc avec les 2 neurones en entrée qui sont ni plus ni moins que nos 2 variables en entrée : l’ancienneté et le panier moyen.

Construction de la 1ere couche cachée du réseau de neurones
Pour chaque neurones de la couche cachée, l’algorithme va calculer une combinaison linéaire des neurones précédents et va appliquer une fonction sigmoïde au résultat (1/(1+exp(-x))).

Voilà ce que ça donnerait par exemple pour le Neurone caché 1. Je n’affiche les coefficients que sur un seul neurone pour éviter que le schéma soit illisible. Mais l’algorithme calcule évidement tous les coefficients.
Par exemple vous avez ici la formule pour calculer le Neurone caché 1 de cet individu qui a une ancienneté de 36 mois et un panier moyen de 50€

On calcule de la même manière la valeur de chaque individu pour les 3 neurones de la couche cachée.
Il est temps de laisser tomber les variables initiales et de jeter un oeil aux valeurs des clients sur ces 3 neurones. On va utiliser les valeurs des neurones cachés comme nouvelles coordonnées. Comme nous avons utilisé 3 neurones, la représentation se fait en 3 dimensions (chaque dimension correspond à un des neurones de la couche cachée).

Résolution d’un problème linéairement séparable
On voit maintenant clairement que le problème est devenu linéairement séparable puisqu’on peut définir un plan (parce que nous sommes en 3 dimensions, en 2 dimensions ce serait une droite) qui sépare les clients des 2 groupes.

Le problème est donc devenu plus facile à résoudre. On va pouvoir ajouter le neurone de sortie qui fera quant à lui une combinaison linéaire des 3 Neurones cachés et appliquera la fonction sigmoïde au résultat.

En sortie on obtient une seule valeur pour chaque client, comprise entre 0 et 1. Rappelez vous, on cherche à connaitre la probabilité d’un client d’appartenir au groupe bleu. Plus la valeur en sortie est proche de 1 plus cette proba est élevée. Il ne nous reste donc plus qu’à classer les clients : Ceux qui ont une valeur supérieure à 0,5 seront tagués bleus et les autres seront verts.

J’ai un peu simplifié les choses en disant que l’algorithme déterminait des poids pour faire des combinaisons linéaires. Si vous vous demandez comment une telle prouesse peut se produire je vous donne quelques explications sur la méthode de backpropagation en bonus (si vous en avez marre et que le réseau de neurones vous a achevé, vous pouvez passer directement aux avantages et inconvénients je ne vous en voudrai pas).
Backpropagation : La méthode qui permet de calculer tous les poids du réseau de neurones
Etape 0 : Initialisation
Pour commencer on choisit aléatoirement tous les coefficients.

Etape 1 : Propagation avant
Pour chaque individu on calcule la valeur en sortie du réseau avec les poids actuels. Dans l’exemple on obtient 0,68 pour un individu dont la valeur à prédire est 1 (le client appartient au groupe bleu).

Etape 2 : Rétropropagation
On compare la valeur prédite (0,68 dans l’exemple) avec la valeur à prédire (1 dans l’exemple). L’étape de rétroporopagation va permettre de corriger les poids du neurone de sortie aux neurones précédents en calculant le gradient de l’erreur pour chaque neurone. Si vraiment vous voulez connaitre la formule exacte, jetez un coup d’oeil sur wikipedia.

On continue d’enchaîner les étapes 1 et 2 et on arrête quand la condition d’arrêt se réalise. Vous comprenez donc pourquoi l’algorithme peut devenir particulièrement long si vous multipliez le nombre de neurones.
A ce stade vous devez vous dire que c’est une méthode vraiment performante et vous avez raison. Voyons quels sont les avantages et les inconvénients de cette méthode :
Avantages :
- Traitement de problème variés et complexes, y compris non linéaires
- Peu sensible au bruit ou au manque de fiabilité des données
- Bonne performance
Inconvénients :
- Effet boîte noire, algorithmes plus difficiles à expliquer d’un point de vue métier (mais pas impossible). A ce sujet vous pouvez lire mon article sur LIME une librairie d’interprétabilité.
- Risque de sur-apprentissage
- Choix des paramètres initiaux
Les réseaux de neurones sont disponibles dans la plupart des outils d’analyse, je vous laisse donc tester 🙂
Vous avez lu cet article en entier? C’est que vous devez vraiment aimer ces sujets d’analyse de données… Abonnez-vous 😉 (menu à droite). A bientôt…
Bonjour ,
J’ai vraiment aimé votre article pas trop de théorie (approche basique et simple).
Ma question est la suivante : Dans le cas d’une régression en Réseaux de Neurone (Prédiction de valeur continue)
Comment on choisirai le nombre de neurones de sortie? et quel serait la fonction d’activation?
Merci d’avance
Bonjour,
Toute la puissance et la difficulté des réseaux de neurones sont là… il n’y a pas de règle précise qui permette de traiter tous les cas. Au contraire, il y a beaucoup de paramètres qui peuvent être ajustés avec les réseaux de neurones pour qu’ils répondent au mieux au problème.
On dit en général qu’il ne devrait pas y avoir plus de 2 fois le nombre de variables en entrée. Pour la fonction d’activation je ne connais malheureusement pas de règle guidant le choix. Il faut tester et ajuster. Vous pouvez utiliser pour ça la méthode Grid Search qui permet de tester plusieurs paramètres pour chercher un bon compromis.
Mais si vous trouvez des méthodes je suis preneuse aussi 🙂
Bonjour,
j’aimerais savoir comment choisir les poids w dans les réseuax de neurones,
Merci
Bonjour,
Avec la méthode de backpropagation les poids sont d’abord initialisés aléatoirement puis ils sont ajustés en fonction du gradient de l’erreur.
Ping : Classification bayésienne naïve comment ça marche? – Lovely Analytics
Ping : Workshop Machine Learning AWS D2SI Blog
Ping : Interprétez vos modèles avec LIME – Lovely Analytics
bonjour,
s’il vous plait aidez moi j’ai un mémoire sur les réseaux de neurones artificiels j’ai besoin de votre information .
merci d’avance .
bonne journée .
Bonjour,
Si vous avez une question précise, je peux essayer d’y répondre 🙂