Backpropagation

L'algorithme qui permet aux réseaux de neurones d'apprendre

Qu'est-ce que la Rétropropagation ?

La backpropagation (rétropropagation du gradient) est l'algorithme fondamental qui permet aux réseaux de neurones d'apprendre à partir de leurs erreurs. C'est essentiellement un algorithme d'optimisation qui ajuste les poids du réseau pour minimiser l'erreur de prédiction.

📊

Mesure de l'erreur

Compare la prédiction avec la vraie réponse

🔄

Propagation inverse

Remonte l'erreur couche par couche

⚙️

Mise à jour des poids

Ajuste chaque poids proportionnellement à sa contribution à l'erreur

Étape 1 : Propagation Avant (Forward Pass)

Avant de corriger les erreurs, le réseau doit d'abord faire une prédiction.

Formules de Propagation Avant

Couche cachée :

$$z^{[1]} = W^{[1]} \cdot x + b^{[1]}$$

$$a^{[1]} = \sigma(z^{[1]})$$

Couche de sortie :

$$z^{[2]} = W^{[2]} \cdot a^{[1]} + b^{[2]}$$

$$\hat{y} = a^{[2]} = \sigma(z^{[2]})$$

Notation Utilisée

  • x : Vecteur d'entrée
  • W[l] : Matrice des poids de la couche l
  • b[l] : Vecteur de biais de la couche l
  • z[l] : Somme pondérée (avant activation)
  • a[l] : Activation (après fonction d'activation)
  • σ : Fonction d'activation (ex: sigmoid, ReLU)
  • ŷ : Prédiction du réseau
  • y : Vraie valeur (label)

Étape 2 : Calcul de l'Erreur (Loss Function)

La fonction de coût mesure la différence entre la prédiction et la vraie valeur.

Mean Squared Error (MSE)

$$L = \frac{1}{2}(y - \hat{y})^2$$

Cette fonction pénalise quadratiquement les erreurs, ce qui signifie que les grandes erreurs sont beaucoup plus coûteuses que les petites.

Binary Cross-Entropy

$$L = -[y \log(\hat{y}) + (1-y) \log(1-\hat{y})]$$

Utilisée pour la classification binaire, cette fonction pénalise les prédictions confiantes mais incorrectes.

Étape 3 : Calcul des Gradients

Le gradient indique dans quelle direction et de combien modifier chaque poids pour réduire l'erreur. On utilise la règle de la chaîne (chain rule) du calcul différentiel.

La Règle de la Chaîne

Pour calculer comment l'erreur change par rapport à un poids profond dans le réseau :

$$\frac{\partial L}{\partial W^{[1]}} = \frac{\partial L}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial z^{[2]}} \cdot \frac{\partial z^{[2]}}{\partial a^{[1]}} \cdot \frac{\partial a^{[1]}}{\partial z^{[1]}} \cdot \frac{\partial z^{[1]}}{\partial W^{[1]}}$$

Dérivées pour la Couche de Sortie

Avec MSE et sigmoid :

$$\frac{\partial L}{\partial z^{[2]}} = (a^{[2]} - y) \cdot \sigma'(z^{[2]})$$

$$\delta^{[2]} = (a^{[2]} - y) \cdot a^{[2]} \cdot (1 - a^{[2]})$$

Dérivées pour la Couche Cachée

$$\delta^{[1]} = (W^{[2]})^T \cdot \delta^{[2]} \odot \sigma'(z^{[1]})$$

Le symbole ⊙ représente le produit élément par élément (Hadamard product)

Gradients des Poids et Biais

$$\frac{\partial L}{\partial W^{[2]}} = \delta^{[2]} \cdot (a^{[1]})^T$$

$$\frac{\partial L}{\partial b^{[2]}} = \delta^{[2]}$$

$$\frac{\partial L}{\partial W^{[1]}} = \delta^{[1]} \cdot x^T$$

$$\frac{\partial L}{\partial b^{[1]}} = \delta^{[1]}$$

Étape 4 : Mise à Jour des Poids

Une fois les gradients calculés, on met à jour chaque poids dans la direction opposée au gradient (descente de gradient).

Règle de Mise à Jour

$$W^{[l]} := W^{[l]} - \alpha \frac{\partial L}{\partial W^{[l]}}$$

$$b^{[l]} := b^{[l]} - \alpha \frac{\partial L}{\partial b^{[l]}}$$

α (alpha) est le taux d'apprentissage (learning rate), un hyperparamètre crucial qui contrôle la taille des pas d'optimisation.

Impact du Taux d'Apprentissage

α trop petit

Apprentissage lent, convergence très longue

α optimal

Convergence rapide et stable

α trop grand

Oscillations, pas de convergence

Démonstration Interactive

Observez la backpropagation en action sur un réseau simple (2-3-1).

Forward Pass

Backward Pass

Métriques

Opérations Matricielles

Pour un réseau avec des couches de plusieurs neurones, on utilise l'algèbre matricielle.

Exemple : Couche avec 2 entrées, 3 neurones cachés

$$W^{[1]} = \begin{bmatrix} w_{11} & w_{12} \\ w_{21} & w_{22} \\ w_{31} & w_{32} \end{bmatrix}$$
×
$$x = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}$$
+
$$b^{[1]} = \begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix}$$
=
$$z^{[1]} = \begin{bmatrix} z_1 \\ z_2 \\ z_3 \end{bmatrix}$$

Dimensions des Matrices

  • W[1] : (3 × 2) - 3 neurones, 2 entrées
  • x : (2 × 1) - vecteur colonne
  • b[1] : (3 × 1) - un biais par neurone
  • z[1] : (3 × 1) - sortie avant activation

Gradient de la Matrice de Poids

Le gradient est calculé comme un produit externe (outer product) :

$$\frac{\partial L}{\partial W^{[1]}} = \delta^{[1]} \cdot (x)^T$$

$$\begin{bmatrix} \delta_1 \\ \delta_2 \\ \delta_3 \end{bmatrix}$$
×
$$\begin{bmatrix} x_1 & x_2 \end{bmatrix}$$
=
$$\begin{bmatrix} \delta_1 x_1 & \delta_1 x_2 \\ \delta_2 x_1 & \delta_2 x_2 \\ \delta_3 x_1 & \delta_3 x_2 \end{bmatrix}$$

Algorithme Complet

1

Initialisation

Initialiser W et b avec des valeurs aléatoires petites

2

Forward Pass

Calculer toutes les activations : z[l] = W[l]a[l-1] + b[l], puis a[l] = σ(z[l])

3

Calculer la Loss

L = fonction_de_cout(y, ŷ)

4

Backward Pass

Calculer tous les δ[l] en remontant depuis la sortie

5

Calculer les Gradients

∂L/∂W[l] et ∂L/∂b[l] pour chaque couche

6

Mettre à Jour

W[l] := W[l] - α·∂L/∂W[l]

7

Répéter

Retour à l'étape 2 pour l'échantillon suivant

Problèmes Courants et Solutions

🌊 Vanishing Gradient

Problème : Les gradients deviennent très petits dans les couches profondes.

Solutions :

  • Utiliser ReLU au lieu de sigmoid
  • Normalisation par batch
  • Connexions résiduelles (ResNet)

💥 Exploding Gradient

Problème : Les gradients deviennent très grands, causant des mises à jour instables.

Solutions :

  • Gradient clipping
  • Meilleure initialisation des poids
  • Réduire le learning rate

🐌 Convergence Lente

Problème : L'apprentissage prend trop de temps.

Solutions :

  • Optimiseurs avancés (Adam, RMSprop)
  • Mini-batch gradient descent
  • Learning rate adaptatif

📊 Overfitting

Problème : Le réseau mémorise les données d'entraînement.

Solutions :

  • Dropout
  • Régularisation L1/L2
  • Plus de données d'entraînement
  • Early stopping