Comprendre Rétropropagation
Un réseau de neurones est une composition profondément imbriquée de fonctions : chaque couche prend la sortie de la précédente, applique une transformation linéaire et une non-linéarité, et transmet le résultat. Pour l’entraîner par descente de gradient, il faut la dérivée partielle de la perte finale par rapport à chaque poids individuel, y compris ceux enfouis plusieurs couches plus loin. La rétropropagation est la procédure qui les calcule.
Le mécanisme est la règle de dérivation en chaîne, appliquée systématiquement. Une passe avant fait circuler l’entrée dans le réseau et enregistre les valeurs intermédiaires de chaque couche. La passe arrière part ensuite de la perte et remonte vers l’entrée : à chaque couche elle reçoit la dérivée de la perte par rapport à la sortie de cette couche, et s’en sert pour calculer deux choses, la dérivée par rapport aux poids de la couche (ce dont l’optimiseur a besoin) et la dérivée par rapport à son entrée (transmise à la couche précédente).
L’efficacité est toute la raison d’être de l’algorithme. Estimer séparément chacune d’un million de dérivées partielles, en perturbant un poids à la fois et en réexécutant le réseau, demanderait un million de passes avant. La rétropropagation réutilise les quantités intermédiaires partagées et obtient chaque gradient en un seul balayage arrière dont le coût est comparable à la passe avant. Sans cette réduction, entraîner des réseaux de taille moderne serait arithmétiquement impossible.
L’attribution est réellement stratifiée. Le travail de 1986 de Rumelhart, Hinton et Williams est ce qui a porté la méthode à l’attention du domaine et déclenché le renouveau connexionniste, mais la technique sous-jacente, la différentiation automatique en mode inverse appliquée à des réseaux en couches, avait été dérivée indépendamment par plusieurs auteurs antérieurs. Il est plus juste de décrire 1986 comme le moment où la rétropropagation est devenue largement connue que comme celui de son invention.
Comment calculer
∂L/∂w⁽ˡ⁾ = δ⁽ˡ⁾ · (a⁽ˡ⁻¹⁾)ᵀ, where δ⁽ˡ⁾ = (W⁽ˡ⁺¹⁾)ᵀ δ⁽ˡ⁺¹⁾ ⊙ σ′(z⁽ˡ⁾)
où
- L
- la perte à minimiser
- w⁽ˡ⁾, W⁽ˡ⁾
- les poids de la couche l
- a⁽ˡ⁻¹⁾
- l’activation produite par la couche précédente
- z⁽ˡ⁾
- la pré-activation entrant dans la couche l
- δ⁽ˡ⁾
- le signal d’erreur à la couche l, propagé à rebours
- σ′
- la dérivée de la fonction d’activation
- ⊙
- la multiplication élément par élément (de Hadamard)
Exemple : Rétropropagation
Considérez une chaîne triviale à deux couches où la perte dépend de b, b dépend de a, et a dépend du poids w. La règle de dérivation en chaîne donne ∂L/∂w = (∂L/∂b)(∂b/∂a)(∂a/∂w) : le gradient est un produit de dérivées locales le long du chemin.
La rétropropagation calcule cela de droite à gauche. Elle évalue d’abord ∂L/∂b à la sortie, puis multiplie par ∂b/∂a pour obtenir ∂L/∂a, puis par ∂a/∂w pour obtenir le gradient de w. Chaque résultat intermédiaire est réutilisé plutôt que recalculé, et dans un vrai réseau où plusieurs chemins convergent vers un nœud, les contributions arrivant de tous les chemins en aval sont sommées.
Cet ordonnancement est aussi la source du problème de disparition du gradient. Comme le gradient est un produit de nombreuses dérivées locales, si ces facteurs sont systématiquement inférieurs à un, le produit décroît exponentiellement avec la profondeur et les premières couches ne reçoivent presque aucun signal. Des activations comme la ReLU, et des dispositifs architecturaux comme les connexions résiduelles, existent en grande partie pour garder ce produit bien conditionné.
Questions fréquentes
La rétropropagation est-elle la même chose que la descente de gradient ?
Non, et la distinction compte. La rétropropagation calcule les gradients ; la descente de gradient décide quoi en faire. Vous pourriez fournir la sortie de la rétropropagation à n’importe quel optimiseur fondé sur le gradient, comme Adam ou le momentum, et ce serait toujours la rétropropagation qui fournirait les dérivées.
Pourquoi la rétropropagation a-t-elle besoin des valeurs de la passe avant ?
La dérivée locale de chaque couche dépend en général des valeurs qui l’ont traversée. C’est pourquoi les cadriciels conservent les activations intermédiaires pendant la passe avant, et pourquoi la mémoire utilisée croît avec la profondeur du réseau et la taille du lot à l’entraînement, mais pas à l’inférence.
Qu’est-ce que le problème de disparition du gradient ?
Comme la rétropropagation multiplie les dérivées locales à travers les couches, de petits facteurs se composent. Dans les réseaux profonds à activations saturantes, cela pousse les gradients des premières couches vers zéro, si bien que ces couches n’apprennent presque pas. Les activations ReLU, une initialisation soignée, les couches de normalisation et les connexions résiduelles sont les remèdes standard.
En résumé
La rétropropagation est la raison pour laquelle l’apprentissage profond est calculable : elle transforme la recherche de millions de dérivées partielles en un unique balayage arrière organisé de la règle de dérivation en chaîne. Toute procédure d’entraînement fondée sur le gradient en dépend.