Dans les leçons précédentes, vous avez vu que les réseaux de neurones possèdent des poids, et que l'entraînement ajuste ces poids. Mais comment le réseau sait-il quels poids modifier, et de combien ? La réponse est la rétropropagation - l'algorithme le plus important de l'apprentissage profond moderne.
Andrej Karpathy la qualifie de « chose la plus importante à comprendre sur les réseaux de neurones ». Voyons pourquoi.
Lors d'une passe avant (forward pass), les données circulent de gauche à droite à travers le réseau :
La prédiction est ensuite comparée à la vraie réponse à l'aide d'une fonction de perte (abordée dans la leçon suivante). La perte est un nombre unique qui dit : « Voici à quel point tu te trompes. »
Imaginez que vous prépariez un gâteau et qu'il ait un goût affreux. Vous avez utilisé cinq ingrédients. La question est : quel ingrédient a le plus contribué au mauvais goût, et de combien ?
La rétropropagation répond exactement à cette question pour les réseaux de neurones. Elle attribue une responsabilité à chaque poids en demandant : « Si je modifie légèrement ce poids, de combien la perte change-t-elle ? »
Ce taux de variation est appelé un gradient, et il provient du calcul différentiel - plus précisément, de la dérivée.
Geoffrey Hinton, l'un des « parrains de l'IA », a déclaré que la rétropropagation est l'idée clé qui a rendu l'apprentissage profond praticable. Sans elle, entraîner des réseaux avec des millions de paramètres serait informatiquement impossible.
Les réseaux de neurones sont des chaînes d'opérations simples composées ensemble. La règle de la chaîne du calcul différentiel nous indique comment dériver des fonctions composées :
Sign in to join the discussion
Si
y = f(g(x)), alorsdy/dx = f'(g(x)) × g'(x).
Analogie du quotidien : Vous conduisez vers un magasin. Votre vitesse dépend de la force avec laquelle vous appuyez sur l'accélérateur. La position de l'accélérateur dépend du trafic. Pour savoir comment le trafic affecte votre vitesse, vous multipliez : (vitesse par pression de l'accélérateur) × (pression de l'accélérateur par condition de trafic). C'est la règle de la chaîne - multiplier les taux de variation locaux le long d'une chaîne.
La rétropropagation a été popularisée dans un article fondateur de 1986 par Rumelhart, Hinton et Williams, mais l'idée centrale de la différentiation automatique en mode inverse remonte aux années 1960.
Les frameworks modernes comme PyTorch construisent un graphe de calcul pendant la passe avant. Chaque opération - addition, multiplication, ReLU - devient un nœud. La rétropropagation parcourt ensuite ce graphe en sens inverse, en appliquant la règle de la chaîne à chaque nœud pour calculer les gradients.
Pensez-y comme un réseau fluvial. La perte est l'océan à l'extrémité. La rétropropagation remonte chaque affluent pour déterminer dans quelle mesure chaque source (poids) a contribué au débit final.
Supposons que L = (w × x - y)² avec w = 2, x = 3, y = 10.
w × x = 6, puis 6 - 10 = -4, puis (-4)² = 16. Perte = 16.dL/d(diff) = 2 × (-4) = -8, puis d(diff)/d(wx) = 1, donc dL/d(wx) = -8.d(wx)/dw = x = 3, donc dL/dw = -8 × 3 = -24.Le gradient de −24 nous indique : augmenter w diminuera la perte rapidement. C'est exactement le signal dont nous avons besoin pour nous améliorer.
Dans la règle de la chaîne, que fait-on avec les dérivées locales à chaque nœud ?
Dans un réseau profond, les gradients doivent traverser de nombreuses couches. Chaque couche multiplie le gradient par sa dérivée locale. Cela crée deux modes de défaillance dangereux :
Si les dérivées locales sont petites (par exemple, la fonction sigmoïde sature près de 0 ou 1), la multiplication répétée fait tendre les gradients vers zéro. Les premières couches apprennent à peine - elles ne reçoivent presque aucun signal. Ce problème a longtemps affecté les réseaux profonds.
Si les dérivées locales sont grandes, les gradients croissent de manière exponentielle. Les poids reçoivent des mises à jour énormes et le réseau devient instable, produisant des valeurs NaN.
La dérivée de ReLU est soit 0, soit 1 - elle ne réduit jamais le gradient lorsqu'elle est active. Pourquoi cette propriété simple a-t-elle pu être révolutionnaire pour l'entraînement des réseaux profonds ?
Les solutions modernes incluent :
Une fois que la rétropropagation a calculé chaque gradient, l'optimiseur (leçon suivante) met à jour chaque poids :
w_new = w_old - learning_rate × gradient
Le taux d'apprentissage contrôle la taille du pas. Trop grand et vous dépassez la cible ; trop petit et l'entraînement prend une éternité. Le gradient vous donne la direction ; le taux d'apprentissage vous dit de combien avancer.
Quelle est la cause des gradients évanescents dans les réseaux profonds ?
Chaque fois que ChatGPT améliore sa prédiction du mot suivant, chaque fois qu'une voiture autonome affine sa direction, la rétropropagation fonctionne en arrière-plan. C'est l'algorithme qui rend l'apprentissage par les erreurs mathématiquement précis.
Sans la rétropropagation, nous n'aurions aucun moyen efficace d'entraîner des réseaux avec des millions - voire des milliards - de paramètres.
Que nous indique un gradient à propos d'un poids ?
Karpathy souligne que la rétropropagation est « simplement l'application récursive de la règle de la chaîne ». Si vous comprenez la règle de la chaîne et les graphes de calcul, vous comprenez la rétropropagation. Quels autres systèmes complexes pourrait-on comprendre en les décomposant en éléments simples et composables ?