Les réseaux de neurones
Objectif du chapitre
Comme vous pouvez l’imaginer, les réseaux de neurones artificiels trouvent leur origine et leur inspiration dans les neurones biologiques, notamment dans les neurones humains. En effet, en plein milieu de la Seconde Guerre mondiale, en 1943, Warren McCulloch et Walter Pitts proposèrent une première formalisation du neurone. Une forme plus sophistiquée de ce formalisme a été introduite en 1957 par Frank Rosenblatt avec le modèle du perceptron. Outre les limites technologiques de l’époque, en 1969, Marvin Lee Minsky et Seymour Papert démontrent les limites théoriques des modèles de classification basés sur les réseaux de neurones à traiter les problèmes non linéaires. En conséquence de ces limites, technologiques et théoriques, les réseaux neuronaux ont été mis à l’écart pendant une bonne dizaine d’années.
En 1982, John Joseph Hopfield introduit un modèle de réseaux de neurones récurrents et, en 1986, le fameux modèle de perceptron multicouche basé sur la rétropropagation du gradient a été introduit par David Rumelhart. Une version similaire à ce dernier modèle a été introduite par Yann LeCun durant les années 1980. Suite à ces travaux, les réseaux...
Modélisation d’un neurone artificiel
Avant toute chose, il faut savoir que les modèles de neurones artificiels ne représentent pas fidèlement le fonctionnement des neurones biologiques. En effet, ces derniers présentent des structures complexes tant au niveau d’un neurone isolé qu’au niveau des interactions interneuronales. La tâche qui consiste à étudier le fonctionnement d’un cerveau, humain ou pas, reste encore et avant tout un travail exploratoire et difficile.
1. Le neurone biologique
Le neurone biologique a une structure similaire à celle représentée dans la figure 13-1 suivante :
Figure 13-1 : représentation d’un neurone biologique
Cette figure montre qu’un neurone est composé essentiellement des éléments suivants :
-
Les dendrites, qui servent d’interface en entrée pour un neurone. Concrètement, ces dendrites reçoivent l’influx nerveux provenant des autres neurones.
-
Le noyau, où ont lieu les réactions électrochimiques. En fonction de l’intensité des signaux qui arrivent à travers les dendrites, le noyau génère et envoie un influx nerveux électrique à travers l’axone.
-
L’axone joue le rôle de support de l’influx nerveux électrique qui sera transmis aux terminaisons synaptiques....
Architecture d’un réseau de neurones
La section précédente a montré qu’un neurone artificiel reçoit en entrée des données et, après avoir opéré une transformation sur ces données, il donne en sortie un résultat. Ce résultat peut être utilisé en entrée d’un neurone qui à son tour produira un autre résultat. Un réseau de neurones est constitué d’un ensemble de neurones répartis sur un ensemble de couches. L’architecture d’un réseau de neurones est déterminée par la nature des liens entre ses neurones et aussi la manière dont ils sont répartis.
La figure 13-4 suivante donne un exemple d’un réseau de neurones avec une couche d’entrée, deux couches cachées et une couche de sortie :
Figure 13-4 : un réseau de neurones avec deux couches cachées
Pour rendre plus simple la compréhension des notions qui vont être abordées dans la suite de ce chapitre, nous allons adopter les notations ci-dessous qui sont illustrées sur la figure 13-4.
-
Un réseau de neurones est constitué des couches avec . Le nombre de couches est donc égal à (L+1).
-
Chaque couche d’un réseau de neurones est associée à un ensemble de neurones .
-
Chaque neurone de la couche...
L’algorithme de rétropropagation
Le réseau de neurones avec rétropropagation est un algorithme itératif. Les étapes principales de cet algorithme se présentent comme suit :
Entrées : - Un ensemble d'observations
- Un ensemble de résultats
avec le résultat connu de l'observation
- Une fonction d'activation
avec le seuil d'activation
- Un réseau de neurones RN composé de L≥2 couches;
Une couche d'entrée he de sortie
et au moins une couche cachée
- Un taux d'apprentissage
Sorties : le réseau de neurones RN
avec les ensembles de poids ajustés.
a) Pour chaque couche avec i allant de 1 à L faire :
Initialisation aléatoire des poids
b) Répété jusqu'à ce qu'un critère d'arrêt soit atteint :
Pour chaque couple faire :
//Initialisation de la couche d'entrée
1- Affecter à chaque neurone j de la couche d'entrée
la valeur de ( la valeur de la variable j de )
//Propagation avant
2- Pour chaque couche avec i allant de 1 à L faire :
Pour chaque neurone de la couche faire :
- (q=le nombre de neurones de la
couche précédente (), = la valeur de la
kième entrée du neurone ). Pour k=0,
représente le biais du neurone et
...
Exemple d’un réseau de neurones avec Scikit-learn
Dans cet exemple, nous allons appliquer un réseau de neurones basé sur le principe de la rétropropagation abordé précédemment. Ce réseau de neurones a comme objectif d’apprendre à reconnaître les chiffres écrits à la main. Pour entraîner et tester le réseau de neurones de cet exemple, nous utilisons le jeu de données Digit inclus dans Scikit-learn. Ce jeu de données contient la définition de 1797 images ainsi que leurs libellés. Chacune de ces images est définie par une matrice de 8x8 valeurs.
Nous commençons par le chargement de tous les modules nécessaires à la réalisation de notre exemple avec le code ci-après qui est saisi dans une cellule d’un notebook Jupyter. Vous pouvez également utiliser le notebook multi_layer_perceptron_classifier situé dans le dossier Code de ce chapitre :
from sklearn import datasets
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import matplotlib.colors
La première instruction from sklearn import datasets permet d’importer le module datasets où est défini, entre autres, le jeu de données Digit. La deuxième instruction importe la classe MLPClassifier à partir du module sklearn.neural_network qui va nous permettre de définir notre réseau de neurones.
La fonction accuracy_score importée à partir de sklearn.metrics permet de mesurer la métrique de performance accuracy et les deux dernières instructions permettent d’importer les outils nécessaires pour réaliser des graphiques.
Le code suivant permet de charger le jeu de données Digit dans data.
data = datasets.load_digits()
dir(data)
L’instruction dir(data) permet d’afficher les propriétés du jeu de données data. Le résultat de cette instruction sera affiché comme suit :
['DESCR', 'data', 'feature_names', 'frame', 'images', 'target', 'target_names']
Les deux seules propriétés qui nous intéressent pour cet exemple sont les attributs suivants :...
Conclusion
Ce chapitre a introduit les concepts de base des réseaux de neurones. La structure formelle d’un neurone et la structure des réseaux de neurones ont été abordées dans un premier temps, puis l’algorithme de réseau de neurones avec rétropropagation a été expliqué à travers le déroulement d’un exemple complet d’une propagation avant et d’une propagation arrière de cet algorithme. Enfin, nous avons appliqué la bibliothèque Scikit-learn pour mettre en place un réseau de neurones pour la reconnaissance des chiffres à partir des images.