fr.wikipedia.org

Perceptron multicouche — Wikipédia

  • ️Tue Jan 01 1957

Un article de Wikipédia, l'encyclopédie libre.

En intelligence artificielle, plus précisément en apprentissage automatique, le perceptron multicouche (multilayer perceptron MLP en anglais) est un type de réseau neuronal artificiel organisé en plusieurs couches. Un perceptron multicouche possède au moins trois couches : une couche d'entrée, au moins une couche cachée, et une couche de sortie. Chaque couche est constituée d'un nombre (potentiellement différent) de neurones. L'information circule de la couche d'entrée vers la couche de sortie uniquement : il s'agit donc d'un réseau à propagation directe (feedforward). Les neurones de la dernière couche sont les sorties du système global.

Le perceptron a été inventé en 1957 par Frank Rosenblatt au Cornell Aeronautical Laboratory[1],[2]. Dans cette première version le perceptron était alors mono-couche et n'avait qu'une seule sortie à laquelle toutes les entrées étaient connectées.

Un perceptron qui calcule le OU logique.

Les premiers perceptrons étaient constitués d'une unique couche. On pouvait calculer le OU logique avec un perceptron. Par contre, les premiers perceptrons n'étaient pas capables de résoudre des problèmes non linéaires comme le OU exclusif (XOR). Cette limitation fut supprimée au travers de la rétropropagation[3] du gradient de l'erreur dans les systèmes multicouches, proposé par Paul Werbos (en) en 1974 et mis au point douze années plus tard, en 1986 par David Rumelhart (en).

Dans le perceptron multicouche à rétropropagation, les neurones d'une couche sont reliés à la totalité des neurones des couches adjacentes. Ces liaisons sont soumises à un coefficient altérant l'effet de l'information sur le neurone de destination. Ainsi, le poids de chacune de ces liaisons est l'élément clef du fonctionnement du réseau : la mise en place d'un perceptron multicouche pour résoudre un problème passe donc par la détermination des meilleurs poids applicables à chacune des connexions inter-neuronales. Ici, cette détermination s'effectue au travers d'un algorithme de rétropropagation.

Les sorties de chaque neurone de cette couche sont envoyées à la couche suivante, appelée couche cachée, où elles sont combinées et transformées par des fonctions d'activation non linéaires. Cette couche cachée peut avoir un nombre quelconque de neurones, et peut être composée de plusieurs sous-couches si nécessaire.

Un perceptron multi-couche qui calcule le OU exclusif (XOR).

La figure à droite montre un perceptron multi-couche qui calcule le OU exclusif (XOR). C'est un réseau à trois couches. La couche d'entrée possède deux neurones : {\displaystyle x} et {\displaystyle y}. La couche cachée possède 3 neurones. La dernière couche est la couche de sortie et possède un neurone de sortie.

Expliquons le passage des valeurs d'une couche avec {\displaystyle n} valeurs à la couche suivante avec {\displaystyle m} valeurs[4]. On note {\displaystyle x=(x_{1},\dots ,x_{n})} l'entrée, c'est-à-dire le vecteur de taille {\displaystyle n} des valeurs prises à une certaine couche. On note {\displaystyle y=(y_{1},\dots ,y_{m})} le vecteur de taille {\displaystyle m} des valeurs prises à la couche suivante.

On note {\displaystyle W} la matrice des poids des connections entre deux couches successives. Cette matrice est de taille {\displaystyle m\times n}, avec {\displaystyle m} lignes et {\displaystyle n} colonnes. A à la ligne {\displaystyle i}, colonne {\displaystyle j}, on trouve le poids {\displaystyle w_{ij}} entre l'entrée {\displaystyle x_{j}} et la sortie {\displaystyle y_{i}}. On note {\displaystyle B} le vecteur des biais ajoutés aux moyennes pondérés des entrées de chaque couches :

{\displaystyle W={\begin{pmatrix}w_{11}&\cdots &w_{1n}\\\vdots &\ddots &\vdots \\w_{m1}&\cdots &w_{mn}\end{pmatrix}}{\text{ et }}B={\begin{pmatrix}b_{1}\\\vdots \\b_{m}\end{pmatrix}}}

L'entrée {\displaystyle x} est propagé à la couche suivante en faisant la moyenne pondéré par les poids de {\displaystyle W} à laquelle on ajoute les biais {\displaystyle B}. Autrement la sortie {\displaystyle y} est donnée par la formule :{\displaystyle y=\sigma (Wx+B)}{\displaystyle \sigma } est une fonction d'activation, comme par exemple la fonction sigmoïde, ou la fonction ReLU. Autrement dit, la valeur dans le {\displaystyle j}-ème neurone de la couche suivante vaut :

{\displaystyle y_{i}=\sigma (\sum _{j=1}^{n}w_{ij}x_{j}+b_{i})}

En connaissant la valeur attendue {\textstyle e_{i}} à la sortie d'un perceptron pour des entrées données, on peut calculer l'écart avec la prédiction grâce à une fonction objectif {\displaystyle \operatorname {C} }[5], le plus souvent l'erreur quadratique moyenne (abrégée {\displaystyle \operatorname {MSE} })[6], telle que :

{\displaystyle \operatorname {MSE} (e_{i},y_{i})={\frac {1}{n}}\sum _{i=0}^{n}\left(y_{i}-e_{i}\right)^{2}} ;

Cette fonction n'est pas linéaire, et sa dérivée est plus grande si la prédiction est éloignée de la valeur attendue, permettant ainsi un apprentissage plus rapide[7]. Au contraire, l'erreur moyenne absolue ({\displaystyle \operatorname {MAE} }) a une dérivée constante, et donc un taux d'apprentissage qui ne varie pas[8] :

{\displaystyle \operatorname {MAE} (e_{i},y_{i})={\frac {1}{n}}\sum _{i=0}^{n}\left|y_{i}-e_{i}\right|} ;

En minimisant ces fonctions objectif, les prédictions gagnent en précision[9].

Durant la phase d'apprentissage, après avoir calculé les erreurs du réseau de neurones, il est nécessaire de les corriger afin d'améliorer ses performances. Pour minimiser ces erreurs – et donc la fonction objectif –, l'algorithme du gradient est le plus souvent utilisé[10]. Le gradient {\displaystyle \nabla } est calculé afin de connaître la variation de la fonction objectif par rapport aux paramètres {\displaystyle \theta }[11]. Il permet ensuite de modifier ces paramètres proportionnellement à leur impact sur la précision de la prédiction, dans le but d'atteindre après plusieurs itérations le minimum global de la fonction objectif.

La modification des paramètres {\displaystyle \theta } à un instant {\displaystyle t} se fait tel que :

{\displaystyle \theta _{t+1}=\theta _{t}-\alpha \nabla C,}

avec {\textstyle \alpha } un scalaire, le taux d'apprentissage, et {\textstyle \nabla C} le gradient de la fonction objectif[12]. L'algorithme du gradient permet donc de trouver les paramètres {\displaystyle \theta } du réseau tel que la somme des erreurs faites par les prédictions sur des données d'entrainement {\displaystyle X} soit la plus faible possible, c'est-à-dire que :

{\displaystyle C_{X}(\theta )=\min _{\theta }C_{X}(\theta ).}

Le gradient se calcule avec la dérivée partielle de la fonction objectif par rapport à chacun des paramètres[13]. Lorsqu'il y a plusieurs paramètres à optimiser, il est exprimé comme un vecteur, parfois noté {\textstyle {\vec {\nabla }}}, puis ajouté au vecteur {\textstyle \theta } des paramètres, après avoir été multiplié par le taux d'apprentissage. Le gradient indique la direction vers le maximum de la fonction objectif, et son opposé mène donc vers le minimum[14],[15]. Son expression est donc :

{\displaystyle \nabla C_{X}(\theta )={\begin{pmatrix}{\dfrac {\partial C}{\partial \theta _{1}}}&{\dfrac {\partial C}{\partial \theta _{2}}}&{\dfrac {\partial C}{\partial \theta _{3}}}&\cdots \end{pmatrix}}^{T}}

Soit {\textstyle \nabla _{i}} le gradient sur un perceptron de la couche {\textstyle k}, alors l'ensemble des gradients de cette couche peuvent être stockés et manipulés dans une matrice jacobienne {\textstyle J_{k}}[16], c'est-à-dire une matrice contenant les dérivées partielles de la fonction objectif vectorielle sur toute la couche [17], avec :

{\displaystyle J_{k}={\begin{pmatrix}\nabla _{1}\\\nabla _{2}\\\nabla _{3}\\\vdots \\\nabla _{m}\end{pmatrix}}={\begin{pmatrix}{\dfrac {\partial C}{\partial \theta _{1,1}}}&\cdots &{\dfrac {\partial C}{\partial \theta _{1,n}}}\\\vdots &\ddots &\vdots \\{\dfrac {\partial C}{\partial \theta _{m,1}}}&\cdots &{\dfrac {\partial C}{\partial \theta _{m,n}}}\end{pmatrix}}}

{\displaystyle \nabla C={\frac {\partial C}{\partial \theta _{ij}}}} ;

En utilisant le théorème de dérivation des fonctions composées, la variation de la fonction objectif par rapport à l'un des poids est[18] :

{\displaystyle \nabla C={\frac {\partial C}{\partial w}}={\frac {\partial o}{\partial w}}{\frac {\partial y}{\partial o}}{\frac {\partial C}{\partial y}}} ;

Avec {\displaystyle \partial y/\partial o} la dérivée partielle de la fonction d'activation, et {\displaystyle \partial C/\partial y} la dérivée partielle de la fonction objectif par rapport à la prédiction finale {\displaystyle y}. En développant et en utilisant la règle de dérivation des sommes {\displaystyle {\frac {d}{dx}}\sum _{i}x_{i}=\sum _{i}{\frac {d}{dx}}x_{i}} :

{\displaystyle {\frac {\partial C}{\partial y_{i}}}={\frac {\partial }{\partial y_{i}}}\left({\frac {1}{n}}\sum _{i=0}^{n}(y_{i}-e_{i})^{2}\right)=2(y_{i}-e_{i})} ;
{\displaystyle {\frac {\partial y}{\partial o}}=y(1-y)}, si la fonction sigmoïde sert d'activation, ou {\displaystyle {\frac {\partial y}{\partial o}}=1-y^{2}} pour la tangente hyperbolique ;
{\displaystyle {\frac {\partial o}{\partial w}}=y_{i-1}} ;

L'apprentissage s'arrête lorsque les paramètres convergent vers des valeurs, et que la dérivée de la fonction objectif vaut 0.

  1. Présentation d'un motif d'entraînement au réseau.
  2. Comparaison de la sortie du réseau avec la sortie ciblée.
  3. Calcul de l'erreur en sortie de chacun des neurones du réseau.
  4. Calcul, pour chacun des neurones, de la valeur de sortie qui aurait été correcte.
  5. Définition de l'augmentation ou de la diminution nécessaire pour obtenir cette valeur (erreur locale).
  6. Ajustement du poids de chaque connexion vers l'erreur locale la plus faible.
  7. Attribution d'un blâme à tous les neurones précédents.
  8. Recommencer à partir de l'étape 4, sur les neurones précédents en utilisant le blâme comme erreur.
  1. (en) Frank Rosenblatt, « The Perceptron, A perceiving and recognizing automaton », Cornell Aeronautical Laboratory,‎ janvier 1957 (lire en ligne Accès libre [PDF]).
  2. Frank Rosenblatt, « The Perceptron: A Probabilistic Model For Information Storage And Organization in the Brain », Psychological Review, vol. 65, no 6,‎ 1958, p. 386–408 (PMID 13602029, DOI 10.1037/h0042519, S2CID 12781225, CiteSeerx 10.1.1.588.3775)
  3. Rumelhart, D. E., Hinton, McClelland, and Williams, R. J. (1986), ―Learning Internal Representations by Error Propagation‖ Parallel Distributed Processing: Explorations in the Microstructure of Cognition
  4. Introduction au Machine Learning, 14 juin 2023 (lire en ligne)
  5. (en) Shiva Verma, « Understanding different Loss Functions for Neural Networks. », sur Medium, 23 avril 2020 (consulté le 13 mars 2021)
  6. (en) Mohammed Zeeshan Mulla, « Cost, Activation, Loss Function|| Neural Network|| Deep Learning. What are these? », sur Medium, 5 mai 2020 (consulté le 13 mars 2021)
  7. (en-US) « Mean Squared Error: Definition and Example », sur Statistics How To (consulté le 13 mars 2021)
  8. (en) Prince Grover, « 5 Regression Loss Functions All Machine Learners Should Know », sur Medium, 31 décembre 2020 (consulté le 13 mars 2021)
  9. (en) Shuyu Luo, « Optimization: Loss Function Under the Hood (Part I) », sur Medium, 14 octobre 2018 (consulté le 13 mars 2021)
  10. (en) Niklas Donges, « Gradient Descent: An Introduction to 1 of Machine Learning’s Most Popular Algorithms », sur Built In, 16 juin 2019 (consulté le 28 mars 2021)
  11. (en) Nikil Reddy, « How Does the Gradient Descent Algorithm Work in Machine Learning? », sur Analytics Vidhya, 2 octobre 2020 (consulté le 28 mars 2021)
  12. (en-US) Imad Dabbura, « Gradient Descent Algorithm and Its Variants », sur Imad Dabbura, 21 décembre 2017 (consulté le 28 mars 2021)
  13. (en) Towards AI Team, « Gradient Descent for Machine Learning (ML) 101 with Python Tutorial », sur Medium, 8 janvier 2021 (consulté le 1er avril 2021)
  14. (en) Anjana Yadav, « Why we move opposite to gradients in Gradient Descent?? », sur Medium, 20 février 2020 (consulté le 1er avril 2021)
  15. (en) Shikhar Goswami, « Why direction of steepest descent is always opposite to the gradient of loss function? », sur Medium, 23 juin 2020 (consulté le 1er avril 2021)
  16. (en) Matthew Barnett, « A Primer on Matrix Calculus, Part 2: Jacobians and other fun - LessWrong », sur Less Wrong, 15 août 2019 (consulté le 1er avril 2021)
  17. (en) Julien Herzen, « Computing the Jacobian matrix of a neural network in Python », sur Medium, 19 novembre 2018 (consulté le 1er avril 2021)
  18. (en) Chi-Feng Wang, « Calculating Gradient Descent Manually », sur Medium, 25 octobre 2018 (consulté le 14 mars 2021)
  • Marc Parizeau, Réseaux de Neurones (Le perceptron multicouche et son algorithme de retropropagation des erreurs), Université Laval, Laval, 2004, 272 p.
  • Fabien Tschirhart (dir. Alain Lioret), Réseaux de neurones formels appliqués à l'Intelligence Artificielle et au jeu, ESGI (mémoire de master de recherche en multimédia et animation numérique), Paris, 2009, 121 p. [mémoire en ligne (page consultée le 8 novembre 2010)]

v · m

Paradigmes d'apprentissage
Problèmes
Apprentissage supervisé
Classement
Régression
Prédiction structurée
Réseau de neurones artificiels
Apprentissage non supervisé et auto-supervisé
Clustering
Réduction de dimensions
IA générative et Modèle génératif
Métaheuristique d'optimisation
Théorie
Logiciels