AccueilApprentissage automatique & Réseaux de neuronesRétropropagation

🔁 Rétropropagation

Simulateur interactif de rétropropagation : observez les deltas pulser en arrière à travers un petit MLP et les gradients mettre à jour chaque poids tandis que la frontière de décision se transforme.

Apprentissage automatique & Réseaux de neurones3DAvancé60 FPS
backpropagation ↗ Ouvrir en autonome

À propos de la rétropropagation dans les réseaux de neurones

La rétropropagation (Rumelhart, Hinton & Williams, 1986) est l'algorithme qui rend l'entraînement des réseaux de neurones profonds pratique. Elle applique la règle de la chaîne du calcul différentiel pour calculer efficacement le gradient de la fonction de perte par rapport à chaque poids du réseau en une seule passe arrière — comparé à l'approche naïve consistant à perturber chaque poids individuellement, qui coûterait O(W) passes avant pour W poids. L'idée est que les gradients peuvent être propagés en arrière couche par couche, chaque couche réutilisant les signaux δ (termes d'erreur) calculés par la couche au-dessus. La rétropropagation est le fondement de pratiquement tout système d'apprentissage profond moderne, des classificateurs d'images aux grands modèles de langage.

Cette simulation visualise un perceptron multicouche (MLP) avec une couche d'entrée, deux couches cachées de largeur ajustable H, et une sortie à deux classes. Vous pouvez parcourir pas à pas la passe avant (en observant les activations circuler de gauche à droite) et la passe arrière (en observant les signaux δ et les gradients de poids circuler de droite à gauche), choisir entre les activations ReLU, tanh, et sigmoïde, basculer entre les modes de sortie classification (softmax) et régression (linéaire), et dessiner votre propre ensemble de données sur le canvas avec plusieurs préréglages incluant XOR, spirales, et ensembles de données à deux lunes.

Questions fréquentes

Quel problème la rétropropagation résout-elle ?

Entraîner un réseau de neurones signifie trouver des poids W qui minimisent une fonction de perte L(W) — par exemple, l'entropie croisée pour la classification ou l'erreur quadratique moyenne pour la régression. La descente de gradient nécessite de calculer ∂L/∂w pour chaque poids w. Un réseau avec W poids aurait naïvement besoin de W + 1 passes avant pour estimer tous les gradients par différences finies. La rétropropagation utilise la règle de la chaîne pour calculer le gradient exact de L par rapport à tous les W poids en une seule passe avant et une seule passe arrière — réduisant le calcul de O(W²) à O(W).

Comment la règle de la chaîne fait-elle fonctionner la rétropropagation ?

La règle de la chaîne énonce que si z = f(y) et y = g(x), alors dz/dx = (dz/dy)(dy/dx). Dans un réseau avec des couches l = 1, …, L, la perte L dépend de la sortie ŷ qui dépend des activations dans la couche L–1, qui dépendent de la couche L–2, et ainsi de suite. La passe arrière calcule δ^(l) = (∂L/∂a^(l)), le « signal d'erreur » à la couche l, récursivement : δ^(l) = (W^(l+1))ᵀ δ^(l+1) ⊙ σ'(z^(l)), où σ' est la dérivée de la fonction d'activation. Le gradient du poids est alors ∂L/∂W^(l) = δ^(l) (a^(l-1))ᵀ.

Qu'est-ce que le problème du gradient qui disparaît ?

Avec des activations sigmoïde ou tanh, la dérivée σ'(z) est au plus 0,25 (sigmoïde) ou 1 (tanh à z = 0) et rétrécit vers zéro pour de grands |z|. Multiplier de nombreuses dérivées de ce type via la règle de la chaîne à travers L couches fait rétrécir exponentiellement les gradients dans les premières couches — un facteur de (0,25)^L par étape pour sigmoïde. Avec 10 couches, cela signifie que les gradients rétrécissent d'un facteur d'environ 10⁻⁶, rendant les poids des premières couches presque impossibles à entraîner. ReLU (σ'(z) = 1 pour z > 0) évite cela lors de la passe avant mais peut souffrir de « neurones morts » où z est toujours négatif.

Quelle est la différence entre SGD, descente de gradient par mini-lots, et descente de gradient par lot complet ?

La descente de gradient stochastique (SGD) met à jour les poids après chaque exemple d'entraînement unique — rapide mais bruitée. La descente de gradient par lot complet calcule le gradient exact sur l'ensemble de données entier avant de mettre à jour — stable mais lente pour de grands ensembles de données. La descente de gradient par mini-lots (la norme en apprentissage profond) utilise un sous-ensemble aléatoire de B exemples par mise à jour, moyennant le gradient sur le lot. Le mini-lot équilibre le bruit (qui aide à échapper aux minima locaux) avec l'efficacité computationnelle (les opérations matricielles sur les lots se parallélisent bien sur GPU). Cette simulation exécute un SGD à échantillon unique pour montrer clairement les mises à jour individuelles de poids.

Quelles sont les différences entre les activations ReLU, tanh, et sigmoïde ?

La sigmoïde σ(z) = 1/(1 + e^(–z)) compresse les sorties vers (0, 1) et était le choix original ; elle souffre de gradients qui disparaissent pour de grands |z|. Tanh(z) = (e^z – e^(–z))/(e^z + e^(–z)) mappe vers (–1, 1) et a des gradients plus forts près de zéro que sigmoïde, la rendant meilleure pour les couches cachées. ReLU(z) = max(0, z) est le choix moderne le plus populaire : il a un gradient constant de 1 pour z > 0 (pas de disparition), est peu coûteux en calcul, et produit des activations éparses. Leaky ReLU et GELU sont des variantes courantes qui corrigent le problème du « ReLU mourant ».

Qu'est-ce que le taux d'apprentissage et comment affecte-t-il l'entraînement ?

Le taux d'apprentissage η met à l'échelle chaque pas de gradient : W ← W – η ∂L/∂W. Un η trop grand fait osciller ou diverger la perte (dépassant le minimum) ; un η trop petit conduit à une convergence extrêmement lente. Les valeurs typiques vont de η = 10⁻⁴ à 10⁻¹. Le curseur de taux d'apprentissage dans cette simulation utilise une échelle logarithmique (10^x où x va de –3 à 0). Les optimiseurs modernes comme Adam adaptent η par paramètre en utilisant des estimations de moments, définissant efficacement un bon η automatiquement et nécessitant souvent beaucoup moins de réglage.

Que représentent les arêtes lumineuses pendant la passe arrière ?

La luminosité des arêtes pendant la passe arrière est proportionnelle à |∂L/∂w|, la valeur absolue du gradient pour ce poids. Les arêtes brillamment lumineuses apprennent rapidement — leurs poids sont mis à jour par un grand pas. Les arêtes sombres correspondent à un gradient presque nul, signifiant que ces poids changent à peine. Dans les réseaux profonds avec des activations sigmoïde, vous pouvez souvent voir que les premières couches ont des arêtes ternes (gradient qui disparaît) tandis que les couches suivantes brillent vivement — illustrant exactement pourquoi les réseaux profonds étaient difficiles à entraîner avant ReLU et la normalisation par lots.

Comment la frontière de décision est-elle visualisée ?

L'arrière-plan du canvas est codé en couleur par la prédiction de classe actuelle du réseau à chaque point : les régions rouges sont prédites comme classe 0, bleu comme classe 1, avec la saturation indiquant la confiance. Après chaque mise à jour de poids, cet arrière-plan est re-rendu en exécutant une passe avant à chaque pixel — ce qui est coûteux en calcul pour de grands réseaux, donc il est échantillonné sur une grille plus grossière et redimensionné. À mesure que l'entraînement progresse, vous pouvez observer la frontière de décision se tordre et s'affiner pour séparer les deux classes, se coinçant parfois dans un minimum local.

Quels ensembles de données sont disponibles et pourquoi sont-ils choisis ?

Les cinq préréglages testent différents aspects de l'expressivité du réseau : « 2 Gauss » (blobs linéairement séparables) peut être résolu même sans couches cachées ; « XOR » nécessite au moins une couche cachée car les classes ne sont pas linéairement séparables ; « Moons » et « Spirales » nécessitent que le réseau apprenne une frontière courbe, non convexe ; « 3 Cluster » teste la séparation multi-classes avec une sortie softmax. Les spirales sont un benchmark classique — un réseau entièrement connecté avec seulement deux unités cachées tanh peut les résoudre, alors qu'un classificateur linéaire ne le peut pas.

Qu'est-ce que la norme du gradient |∇| dans le panneau de statistiques ?

La norme du gradient |∇| = √(Σ (∂L/∂w)²) est la longueur euclidienne de tout le vecteur gradient concaténé à travers tous les poids. Une grande norme de gradient signifie que la surface de perte est raide et que le réseau est loin d'un minimum ; une très petite norme suggère une convergence ou un plateau. Surveiller |∇| est utile pour détecter les gradients explosifs (|∇| soudainement très grand) et les gradients qui disparaissent (|∇| proche de zéro tôt dans l'entraînement). L'écrêtage de gradient fixe une |∇| maximale autorisée pour stabiliser l'entraînement des réseaux récurrents.

Ce réseau peut-il apprendre la fonction XOR ?

Oui — XOR n'est pas linéairement séparable, ce qui signifie qu'aucune ligne unique ne peut séparer les quatre combinaisons d'entrée, donc un perceptron (sans couches cachées) échoue complètement. Un réseau avec au moins un neurone caché utilisant une activation non linéaire peut apprendre XOR exactement. L'article de 1986 de Rumelhart et al. a utilisé XOR comme démonstration clé que la rétropropagation permet aux unités cachées de développer des représentations internes utiles plutôt que d'être de simples intermédiaires. Avec η = 0,1 et des activations tanh, le réseau ici résout typiquement XOR en quelques centaines d'étapes SGD.

⚙ Sous le capot

Des pulsations δ circulent en arrière à travers un petit MLP : les gradients mettent en évidence les arêtes, les poids se mettent à jour, et la frontière de décision se transforme pour s'ajuster aux données.

Canvas 2DBackpropChain RuleMLPGradient Descent

3D · Moteur de rendu Three.js / WebGL · Cible 60 FPS · fonctionne entièrement côté client, sans installation

Qu'avez-vous trouvé ?

Ajouter des étapes de reproduction (facultatif)