Réseaux de neurones comment ça marche ?

lovelyanalytics Réseaux de neuronesS’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 des réseaux 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.

Mais alors… qu’est ce que c’est et comment ça marche?
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 :
lovelyanalytics reseaux neurones 1

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.

Qu’est ce qu’un réseau de neurones ?
Ça ressemble à ça :
Schema reseau de neurones

Un réseau de neurones est composé de neurones (logique non?), reliés entre eux par des synapses. 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) :

Details réseau 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.

lovelyanalytics reseaux neurones 2

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))).

lovelyanalytics reseaux neurones 3.png

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 (On voit un peu plus lon comment sont calculés 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€

lovelyanalytics reseaux neurones 4

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).

lovelyanalytics reseaux neurones 5.png

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.

lovelyanalytics reseaux neurones 6.png

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.

lovelyanalytics reseaux neurones 7

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.

lovelyanalytics reseaux neurones 8

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

Etape 0 : Initialisation 

Pour commencer on choisit aléatoirement tous les coefficients. lovelyanalytics Backpropagation 1Etape 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).

lovelyanalytics Backpropagation 2

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.

lovelyanalytics Backpropagation 3

Tant que la condition d’arrêt n’est pas réalisée, on continue d’enchaîner les étapes 1 et 2. 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)
  • 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…

4 commentaires sur « Réseaux de neurones comment ça marche ? »

  1. 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

    J'aime

    1. 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 🙂

      J'aime

    1. 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.

      J'aime

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s