Rétropropagation - Backpropagation

En apprentissage automatique , la rétropropagation ( backprop , BP ) est un algorithme largement utilisé pour l' entraînement des réseaux de neurones feedforward . Des généralisations de la rétropropagation existent pour d'autres réseaux de neurones artificiels (ANN) et pour les fonctions en général. Ces classes d'algorithmes sont toutes appelées de manière générique "rétropropagation". En ajustant un réseau de neurones , la rétropropagation calcule le gradient de la fonction de perte par rapport aux poids du réseau pour un seul exemple d'entrée-sortie, et le fait efficacement , contrairement à un calcul direct naïf du gradient par rapport à chaque poids individuellement. Cette efficacité permet d'utiliser des méthodes de gradient pour l'apprentissage de réseaux multicouches, en mettant à jour les poids pour minimiser les pertes ; la descente de gradient , ou des variantes telles que la descente de gradient stochastique , sont couramment utilisées. L'algorithme de rétropropagation fonctionne en calculant le gradient de la fonction de perte par rapport à chaque poids par la règle de la chaîne , en calculant le gradient couche par couche, en itérant en arrière à partir de la dernière couche pour éviter les calculs redondants des termes intermédiaires dans la règle de la chaîne ; c'est un exemple de programmation dynamique .

Le terme rétropropagation se réfère strictement uniquement à l'algorithme de calcul du gradient, et non à la manière dont le gradient est utilisé ; Cependant, le terme est souvent utilisé de manière lâche pour désigner l'ensemble de l'algorithme d'apprentissage, y compris la manière dont le gradient est utilisé, par exemple par descente de gradient stochastique. La rétropropagation généralise le calcul du gradient dans la règle delta , qui est la version monocouche de la rétropropagation, et est à son tour généralisée par différenciation automatique , où la rétropropagation est un cas particulier d' accumulation inverse (ou "mode inverse"). Le terme rétropropagation et son utilisation générale dans les réseaux de neurones ont été annoncés dans Rumelhart, Hinton & Williams (1986a) , puis élaborés et popularisés dans Rumelhart, Hinton & Williams (1986b) , mais la technique a été redécouverte de nombreuses fois indépendamment et a eu de nombreux prédécesseurs datant de aux années 1960; voir § Histoire . Un aperçu moderne est donné dans le manuel d' apprentissage en profondeur de Goodfellow, Bengio & Courville (2016) .

Aperçu

La rétropropagation calcule le gradient dans l' espace de poids d'un réseau de neurones à action directe, par rapport à une fonction de perte . Dénoter:

  • : entrée (vecteur de caractéristiques)
  • : sortie cible
    Pour la classification, la sortie sera un vecteur de probabilités de classe (par exemple, , et la sortie cible est une classe spécifique, codée par la variable one-hot / dummy (par exemple, ).
  • : fonction de perte ou "fonction de coût"
    Pour la classification, il s'agit généralement d' entropie croisée (XC, log loss ), tandis que pour la régression, il s'agit généralement de la perte d'erreur quadratique (SEL).
  • : le nombre de couches
  • : les poids entre la couche et , où est le poids entre le -ème nœud de la couche et le -ème nœud de la couche
  • : fonctions d'activation au niveau de la couche
    Pour la classification, la dernière couche est généralement la fonction logistique pour la classification binaire, et softmax (softargmax) pour la classification multi-classes, tandis que pour les couches cachées, il s'agissait traditionnellement d'une fonction sigmoïde (fonction logistique ou autres) sur chaque nœud (coordonnée), mais aujourd'hui c'est plus varié, le redresseur ( rampe , ReLU ) étant courant.

Dans la dérivation de la rétropropagation, d'autres quantités intermédiaires sont utilisées ; ils sont introduits selon les besoins ci-dessous. Les termes de biais ne sont pas traités spécialement, car ils correspondent à un poids avec une entrée fixe de 1. Aux fins de la rétropropagation, les fonctions de perte et d'activation spécifiques n'ont pas d'importance, tant qu'elles et leurs dérivées peuvent être évaluées efficacement.

Le réseau global est une combinaison de composition de fonctions et de multiplication matricielle :

Pour un ensemble d'apprentissage, il y aura un ensemble de paires d'entrées-sorties, . Pour chaque paire entrée-sortie dans l'ensemble d'apprentissage, la perte du modèle sur cette paire est le coût de la différence entre la sortie prédite et la sortie cible :

Notez la distinction : lors de l'évaluation du modèle, les poids sont fixes, tandis que les entrées varient (et la sortie cible peut être inconnue), et le réseau se termine par la couche de sortie (il n'inclut pas la fonction de perte). Pendant l'apprentissage du modèle, la paire entrée-sortie est fixe, tandis que les poids varient, et le réseau se termine par la fonction de perte.

La rétropropagation calcule le gradient pour une paire entrée-sortie fixe , où les poids peuvent varier. Chaque composante individuelle du gradient peut être calculée par la règle de la chaîne ; cependant, faire cela séparément pour chaque poids est inefficace. La rétropropagation calcule efficacement le gradient en évitant les calculs en double et en ne calculant pas de valeurs intermédiaires inutiles, en calculant le gradient de chaque couche - en particulier, le gradient de l' entrée pondérée de chaque couche, désigné par - d'arrière en avant.

Informellement, le point clé est que puisque la seule façon dont un poids affecte la perte est par son effet sur la couche suivante , et il le fait de manière linéaire , sont les seules données dont vous avez besoin pour calculer les gradients des poids à la couche , puis vous pouvez calculer la couche précédente et répéter récursivement. Cela évite l'inefficacité de deux manières. Premièrement, cela évite les doublons car lors du calcul du gradient au niveau de la couche , vous n'avez pas besoin de recalculer à chaque fois toutes les dérivées sur les couches ultérieures . Deuxièmement, il évite les calculs intermédiaires inutiles car à chaque étape il calcule directement le gradient des poids par rapport au résultat final (la perte), plutôt que de calculer inutilement les dérivées des valeurs des couches cachées par rapport aux changements de poids .

La rétropropagation peut s'exprimer pour les réseaux feedforward simples en termes de multiplication matricielle , ou plus généralement en termes de graphe adjoint .

Multiplication matricielle

Pour le cas de base d'un réseau feedforward, où les nœuds de chaque couche sont connectés uniquement aux nœuds de la couche immédiatement suivante (sans sauter aucune couche), et il existe une fonction de perte qui calcule une perte scalaire pour la sortie finale, la rétropropagation peut être compris simplement par multiplication matricielle. Essentiellement, la rétropropagation évalue l'expression de la dérivée de la fonction de coût comme un produit des dérivées entre chaque couche de droite à gauche – « vers l'arrière » – le gradient des poids entre chaque couche étant une simple modification des produits partiels (le « " erreur propagée à l'envers").

Etant donné une paire entrée-sortie , la perte est :

Pour calculer cela, on commence par l'entrée et on avance ; désignent l'entrée pondérée de chaque couche comme et la sortie de la couche comme l'activation . Pour la rétropropagation, l'activation ainsi que les dérivées (évaluées à ) doivent être mises en cache pour être utilisées lors de la passe arrière.

La dérivée de la perte en termes d'entrées est donnée par la règle de la chaîne ; notons que chaque terme est une dérivée totale , évaluée à la valeur du réseau (à chaque nœud) en entrée :

Ces termes sont : la dérivée de la fonction de perte ; les dérivées des fonctions d'activation ; et les matrices de poids :

Le gradient est la transposition de la dérivée de la sortie en fonction de l'entrée, donc les matrices sont transposées et l'ordre de multiplication est inversé, mais les entrées sont les mêmes :

La rétropropagation consiste alors essentiellement à évaluer cette expression de droite à gauche (de manière équivalente, en multipliant l'expression précédente pour la dérivée de gauche à droite), en calculant le gradient à chaque couche en chemin ; il y a une étape supplémentaire, car le gradient des poids n'est pas seulement une sous-expression : il y a une multiplication supplémentaire.

Introduisant la grandeur auxiliaire pour les produits partiels (multipliant de droite à gauche), interprétée comme "l'erreur au niveau " et définie comme le gradient des valeurs d'entrée au niveau :

Notons que c'est un vecteur, de longueur égale au nombre de nœuds du niveau ; chaque composante est interprétée comme le « coût attribuable à (la valeur de) ce nœud ».

Le gradient des poids en couche est alors :

Le facteur de est dû au fait que les poids entre niveau et niveau d' effet sont proportionnels aux entrées (activations) : les entrées sont fixes, les poids varient.

Le peut facilement être calculé récursivement comme :

Les gradients des poids peuvent ainsi être calculés en utilisant quelques multiplications matricielles pour chaque niveau ; c'est la rétropropagation.

Par rapport aux calculs naïfs vers l'avant (en utilisant pour l'illustration) :

il y a deux différences clés avec la rétropropagation :

  1. L'informatique en termes d' évite la multiplication en double évidente des couches et au-delà.
  2. Multiplier à partir de – propager l'erreur vers l'arrière – signifie que chaque étape multiplie simplement un vecteur ( ) par les matrices de poids et les dérivées d'activations . En revanche, la multiplication vers l'avant, à partir des changements d'une couche précédente, signifie que chaque multiplication multiplie une matrice par une matrice . Ceci est beaucoup plus coûteux et correspond au suivi de chaque chemin possible d'un changement dans une couche vers les changements dans la couche (pour multiplier par , avec des multiplications supplémentaires pour les dérivées des activations), ce qui calcule inutilement les quantités intermédiaires de la façon dont le poids les modifications affectent les valeurs des nœuds cachés.

Graphe adjoint

Pour des graphiques plus généraux, et d'autres variantes avancées, la rétropropagation peut être comprise en termes de différenciation automatique , où la rétropropagation est un cas particulier d' accumulation inverse (ou "mode inverse").

Intuition

Motivation

Le but de tout algorithme d' apprentissage supervisé est de trouver une fonction qui mappe au mieux un ensemble d'entrées à leur sortie correcte. La motivation de la rétropropagation est de former un réseau de neurones multicouches de manière à ce qu'il puisse apprendre les représentations internes appropriées pour lui permettre d'apprendre tout mappage arbitraire de l'entrée à la sortie.

L'apprentissage comme problème d'optimisation

Pour comprendre la dérivation mathématique de l'algorithme de rétropropagation, il est utile de développer d'abord une intuition sur la relation entre la sortie réelle d'un neurone et la sortie correcte pour un exemple d'entraînement particulier. Considérons un simple réseau de neurones avec deux unités d'entrée, une unité de sortie et aucune unité cachée, et dans lequel chaque neurone utilise une sortie linéaire (contrairement à la plupart des travaux sur les réseaux de neurones, dans lesquels le mappage des entrées aux sorties est non linéaire) qui est le somme pondérée de son entrée.

Un réseau de neurones simple avec deux unités d'entrée (chacune avec une seule entrée) et une unité de sortie (avec deux entrées)

Initialement, avant l'entraînement, les poids seront définis au hasard. Ensuite, le neurone apprend à partir d'exemples d'entraînement , qui dans ce cas consistent en un ensemble de tuples où et sont les entrées du réseau et t est la sortie correcte (la sortie que le réseau devrait produire compte tenu de ces entrées, lorsqu'il a été entraîné). Le réseau initial, étant donné et , calculera une sortie y qui diffère probablement de t (étant donné les poids aléatoires). Une fonction de perte est utilisée pour mesurer l'écart entre la sortie cible t et la sortie calculée y . Pour les problèmes d' analyse de régression , l'erreur quadratique peut être utilisée comme fonction de perte, pour la classification, l' entropie croisée catégorique peut être utilisée.

À titre d'exemple, considérons un problème de régression utilisant l'erreur quadratique comme une perte :

E est l'écart ou l'erreur.

Considérons le réseau sur un seul cas de formation : . Ainsi, l'entrée et sont respectivement 1 et 1 et la sortie correcte, t est 0. Maintenant, si la relation est tracée entre la sortie du réseau y sur l'axe horizontal et l'erreur E sur l'axe vertical, le résultat est une parabole. Le minimum de la parabole correspond à la sortie y qui minimise l'erreur E . Pour un seul cas d'apprentissage, le minimum touche également l'axe horizontal, ce qui signifie que l'erreur sera nulle et que le réseau peut produire une sortie y qui correspond exactement à la sortie cible t . Par conséquent, le problème de mappage des entrées aux sorties peut être réduit à un problème d'optimisation consistant à trouver une fonction qui produira l'erreur minimale.

Surface d'erreur d'un neurone linéaire pour un seul cas d'apprentissage

Cependant, la sortie d'un neurone dépend de la somme pondérée de toutes ses entrées :

où et sont les poids sur la connexion des unités d'entrée à l'unité de sortie. Par conséquent, l'erreur dépend également des poids entrants dans le neurone, qui sont finalement ce qui doit être modifié dans le réseau pour permettre l'apprentissage.

Dans cet exemple, lors de l'injection des données d'apprentissage, la fonction de perte devient

Ensuite, la fonction de perte prend la forme d'un cylindre parabolique dont la base est dirigée le long de . Étant donné que tous les ensembles de poids qui satisfont minimisent la fonction de perte, dans ce cas, des contraintes supplémentaires sont nécessaires pour converger vers une solution unique. Des contraintes supplémentaires pourraient être générées soit en fixant des conditions spécifiques aux poids, soit en injectant des données d'entraînement supplémentaires.

Un algorithme couramment utilisé pour trouver l'ensemble de poids qui minimise l'erreur est la descente de gradient . Par rétropropagation, la direction de descente la plus raide est calculée de la fonction de perte par rapport aux poids synaptiques actuels. Ensuite, les poids peuvent être modifiés le long de la direction de descente la plus raide, et l'erreur est minimisée de manière efficace.

Dérivation

La méthode de descente de gradient consiste à calculer la dérivée de la fonction de perte par rapport aux poids du réseau. Cela se fait normalement en utilisant la rétropropagation. En supposant un neurone de sortie, la fonction d'erreur au carré est

est la perte pour la sortie et la valeur cible ,
est la sortie cible pour un échantillon d'apprentissage, et
est la sortie réelle du neurone de sortie.

Pour chaque neurone , sa sortie est définie comme

où la fonction d'activation est non linéaire et dérivable (même si le ReLU n'est pas en un point). Une fonction d'activation historiquement utilisée est la fonction logistique :

qui a une dérivée commode de :

L'entrée d'un neurone est la somme pondérée des sorties des neurones précédents. Si le neurone se trouve dans la première couche après la couche d'entrée, les éléments de la couche d'entrée sont simplement les entrées du réseau. Le nombre d'unités d'entrée du neurone est . La variable désigne le poids entre le neurone de la couche précédente et le neurone de la couche actuelle.

Trouver la dérivée de l'erreur

Schéma d'un réseau de neurones artificiels pour illustrer la notation utilisée ici

Le calcul de la dérivée partielle de l'erreur par rapport à un poids se fait en utilisant deux fois la règle de la chaîne :

 

 

 

 

( équation 1 )

Dans le dernier facteur du membre de droite de ce qui précède, un seul terme de la somme dépend de , de sorte que

 

 

 

 

( équation 2 )

Si le neurone est dans la première couche après la couche d'entrée, est juste .

La dérivée de la sortie du neurone par rapport à son entrée est simplement la dérivée partielle de la fonction d'activation :

 

 

 

 

( équation 3 )

qui pour le cas de la fonction d'activation logistique est :

C'est la raison pour laquelle la rétropropagation nécessite que la fonction d'activation soit différentiable . (Cependant, la fonction d'activation ReLU , qui est indifférenciable à 0, est devenue assez populaire, par exemple dans AlexNet )

Le premier facteur est simple à évaluer si le neurone est dans la couche de sortie, car alors et

 

 

 

 

( équation 4 )

Si la moitié de l'erreur carrée est utilisée comme fonction de perte, nous pouvons la réécrire sous la forme

Cependant, si se trouve dans une couche interne arbitraire du réseau, trouver la dérivée par rapport à est moins évident.

Considérant comme une fonction avec les entrées étant tous les neurones recevant l'entrée du neurone ,

et en prenant la dérivée totale par rapport à , une expression récursive pour la dérivée est obtenue :

 

 

 

 

( équation 5 )

Par conséquent, la dérivée par rapport à peut être calculée si toutes les dérivées par rapport aux sorties de la couche suivante - celles les plus proches du neurone de sortie - sont connues. [Remarque, si l'un des neurones de l'ensemble n'était pas connecté à neuron , il serait indépendant de et la dérivée partielle correspondante sous la sommation s'évanouirait à 0.]

En substituant l' éq. 2 , Éq. 3 Éq.4 et Éq. 5 dans l' éq. 1 on obtient :

avec

si est la fonction logistique, et l'erreur est l'erreur au carré :

Pour mettre à jour le poids par descente de gradient, il faut choisir un taux d'apprentissage, . Le changement de poids doit refléter l'impact d'une augmentation ou d'une diminution de . Si , une augmentation des augmentations ; à l'inverse, si , une augmentation de diminue . Le nouveau s'ajoute à l'ancien poids, et le produit du taux d'apprentissage et du gradient, multiplié par des garanties qui changent d'une manière qui décroît toujours . En d'autres termes, dans l'équation immédiatement ci-dessous, change toujours de manière à diminuer :

Fonction de perte

La fonction de perte est une fonction qui mappe les valeurs d'une ou plusieurs variables sur un nombre réel représentant intuitivement un "coût" associé à ces valeurs. Pour la rétropropagation, la fonction de perte calcule la différence entre la sortie du réseau et sa sortie attendue, après qu'un exemple d'apprentissage s'est propagé à travers le réseau.

Hypothèses

L'expression mathématique de la fonction de perte doit remplir deux conditions pour qu'elle puisse éventuellement être utilisée en rétropropagation. La première est qu'elle peut être écrite sous la forme d'une moyenne sur des fonctions d'erreur , pour des exemples d'apprentissage individuels, . La raison de cette hypothèse est que l'algorithme de rétropropagation calcule le gradient de la fonction d'erreur pour un seul exemple d'apprentissage, qui doit être généralisé à la fonction d'erreur globale. La deuxième hypothèse est qu'il peut être écrit en fonction des sorties du réseau de neurones.

Exemple de fonction de perte

Soit des vecteurs dans .

Sélectionnez une fonction d'erreur mesurant la différence entre deux sorties. Le choix standard est le carré de la distance euclidienne entre les vecteurs et :

La fonction d'erreur sur les exemples d'apprentissage peut alors être écrite comme une moyenne des pertes sur des exemples individuels :

Limites

La descente de gradient peut trouver un minimum local au lieu du minimum global.
  • La descente de gradient avec rétropropagation n'est pas garantie pour trouver le minimum global de la fonction d'erreur, mais seulement un minimum local ; en outre, il a du mal à franchir les plateaux dans le paysage des fonctions d'erreur. Ce problème, causé par la non-convexité des fonctions d'erreur dans les réseaux de neurones, a longtemps été considéré comme un inconvénient majeur, mais Yann LeCun et al. soutiennent que dans de nombreux problèmes pratiques, ce n'est pas le cas.
  • L'apprentissage par rétropropagation ne nécessite pas de normalisation des vecteurs d'entrée ; cependant, la normalisation pourrait améliorer les performances.
  • La rétropropagation nécessite que les dérivées des fonctions d'activation soient connues au moment de la conception du réseau.

Histoire

Le terme rétropropagation et son utilisation générale dans les réseaux de neurones ont été annoncés dans Rumelhart, Hinton & Williams (1986a) , puis élaborés et popularisés dans Rumelhart, Hinton & Williams (1986b) , mais la technique a été redécouverte de nombreuses fois indépendamment et a eu de nombreux prédécesseurs datant de aux années 1960.

Les bases de la rétropropagation continue ont été dérivées dans le contexte de la théorie du contrôle par Henry J. Kelley en 1960 et par Arthur E. Bryson en 1961. Ils ont utilisé les principes de la programmation dynamique . En 1962, Stuart Dreyfus a publié une dérivation plus simple basée uniquement sur la règle de la chaîne . Bryson et Ho l'ont décrit comme une méthode d'optimisation de système dynamique en plusieurs étapes en 1969. La rétropropagation a été dérivée par plusieurs chercheurs au début des années 60 et mise en œuvre pour fonctionner sur des ordinateurs dès 1970 par Seppo Linnainmaa . Paul Werbos a été le premier aux États-Unis à proposer qu'il puisse être utilisé pour les réseaux neuronaux après l'avoir analysé en profondeur dans sa thèse de 1974. Bien qu'elle ne soit pas appliquée aux réseaux de neurones, Linnainmaa a publié en 1970 la méthode générale de différenciation automatique (AD). Bien que très controversé, certains scientifiques pensent que c'était en fait la première étape vers le développement d'un algorithme de rétro-propagation. En 1973, Dreyfus adapte les paramètres des contrôleurs au prorata des gradients d'erreur. En 1974, Werbos mentionna la possibilité d'appliquer ce principe aux réseaux de neurones artificiels, et en 1982 il appliqua la méthode AD de Linnainmaa aux fonctions non linéaires.

Plus tard, la méthode Werbos a été redécouverte et décrite en 1985 par Parker, et en 1986 par Rumelhart , Hinton et Williams . Rumelhart, Hinton et Williams ont montré expérimentalement que cette méthode peut générer des représentations internes utiles des données entrantes dans les couches cachées des réseaux de neurones. Yann LeCun a proposé la forme moderne de l'algorithme d'apprentissage par rétropropagation pour les réseaux de neurones dans sa thèse de doctorat en 1987. En 1993, Eric Wan a remporté un concours international de reconnaissance de formes par rétropropagation.

Au cours des années 2000, il est tombé en disgrâce, mais est revenu dans les années 2010, bénéficiant de systèmes informatiques puissants et bon marché basés sur GPU . Cela a été particulièrement le cas dans la recherche sur la reconnaissance vocale , la vision artificielle , le traitement du langage naturel et l'apprentissage de la structure du langage (dans lequel il a été utilisé pour expliquer une variété de phénomènes liés à l'apprentissage des langues première et seconde).

La rétropropagation d'erreurs a été suggérée pour expliquer les composants ERP du cerveau humain comme le N400 et le P600 .

Voir également

Remarques

Les références

Lectures complémentaires

Liens externes