## Le problème du gradient (Vanishing / Exploding)

Dans un réseau très profond, le message d'erreur peut se perdre en route : soit il s'atténue à chaque étape jusqu'à disparaître (la **disparition du gradient**, comme un chuchotement répété 10 fois), soit il s'amplifie de manière démesurée jusqu'à tout saturer (l'**explosion du gradient**, comme un cri amplifié à chaque relais).

L'entraînement des réseaux profonds se heurte souvent à ce que l'on pourrait qualifier de "stabilité instable". Lors de la phase de rétropropagation, la multiplication successive des gradients à travers les nombreuses couches du réseau peut mener à des phénomènes critiques : leur disparition ou leur explosion [@Sun2025; @Geeks_VanishingGradients; @Wiki_VanishingGradient].

* **Le mécanisme du gradient (Vanishing & Exploding) :** Lors de la rétropropagation, calculer les gradients des premières couches nécessite de multiplier les dérivées des fonctions d'activation et les poids des couches suivantes en cascade (règle de la chaîne).
  * **Disparition (Vanishing) :** Si ces termes sont inférieurs à 1 (ex: avec la fonction Sigmoïde), le produit tend exponentiellement vers zéro, bloquant l'apprentissage des premières couches [@RisingScholars_Sigmoid].
  * **Explosion (Exploding) :** Si ces termes sont supérieurs à 1, le produit grandit de manière exponentielle, rendant les mises à jour chaotiques et déstabilisant le modèle [@Geeks_VanishingGradients; @Geeks_GradientClipping].

::: {.callout-note collapse="true"}
## 🔢 Formulation mathématique du problème

Dans un réseau à $L$ couches, le gradient de la perte par rapport à un poids $w^1$ de la première couche s'exprime sous la forme d'un produit :

$$\frac{\partial \mathcal{L}}{\partial w^1} = \frac{\partial \mathcal{L}}{\partial a^L} \cdot \left( \prod_{k=2}^{L} w^k \sigma'(z^{k-1}) \right) \sigma'(z^1) x^0$$

Si $\forall k, |w^k \sigma'(z^{k-1})| < 1$, alors le terme de produit $\prod_{k=2}^{L}$ tend vers $0$ lorsque $L$ augmente (gradients évanescents).
Si $\forall k, |w^k \sigma'(z^{k-1})| > 1$, alors ce terme grandit exponentiellement (gradients explosifs).
:::

* **Illustration par la transmission de la parole :**
  * **Évanouissement :** Si 10 personnes se chuchotent un message en divisant le volume par deux à chaque étape (dérivée de $0.5$), la dernière personne recevra $0.5^{10} \approx 0.001$ du signal initial. Le message devient inaudible.
  * **Explosion :** Si chaque personne double le volume reçu (dérivée de $2$), la dernière personne émettra un signal $2^{10} = 1024$ fois plus fort. Le message est saturé et déformé.

```{ojs}
//| panel: input
//| echo: false
// 1. Curseur de contrôle interactif
viewof deriv = Inputs.range([0.1, 2.5], {
  value: 0.8,
  step: 0.1,
  label: "Valeur de la dérivée locale :"
})

```

```{ojs}
//| echo: false
import { renderGradientFlowStatus } from "../../assets/js/simulations/learning-curves.js"
renderGradientFlowStatus(deriv)
```

```{ojs}
//| echo: false
import { renderGradientFlowPlot } from "../../assets/js/simulations/learning-curves.js"
renderGradientFlowPlot(Plot, deriv)
```
