## Du Déterminisme au Probabilisme

Là où l'autoencodeur encode chaque donnée en un point fixe, le VAE l'encode en une **zone floue** : plutôt que d'un point précis dans l'espace latent, on obtient un nuage gaussien, ce qui garantit que l'espace entre les zones est navigable.

::: {.callout-note collapse="true"}
## 🔍 Détails techniques
Le passage à l'Autoencodeur Variationnel (VAE) marque une **transition paradigmatique** : l'encodeur ne produit plus un point fixe dans l'espace latent, mais les paramètres d'une **distribution de probabilité**. Ce saut conceptuel résout directement la fragmentation du manifold en remplaçant les coordonnées déterministes par des régions de confiance continues [@kassel_2026; @leclaire_nd].
:::

### L'Encodeur Probabiliste

Pluttôt qu'une adresse précise ("vous êtes au point 3,7"), l'encodeur du VAE donne un code postal avec un rayon (« vous êtes quelque part dans ce quartier de rayon $\sigma$ centré en $\mu$ ») — ce qui force le décodeur à bien fonctionner partout dans ce quartier.

::: {.callout-note collapse="true"}
## 🔍 Détails techniques
Dans un VAE, l'encodeur ne produit plus un vecteur $\mathbf{z}$ unique mais les paramètres $(\boldsymbol{\mu}, \boldsymbol{\sigma})$ d'une distribution gaussienne multivariée diagonale [@wikipedia_en_2026] :

$$q_\phi(\mathbf{z} | \mathbf{x}) = \mathcal{N}(\mathbf{z}; \boldsymbol{\mu}_\phi(\mathbf{x}), \text{diag}(\boldsymbol{\sigma}^2_\phi(\mathbf{x})))$$

Cette modélisation force chaque point de données $\mathbf{x}$ à être représenté non pas comme un point mais comme une **ellipsoïde gaussienne** dans l'espace latent. Le décodeur doit apprendre à reconstruire correctement n'importe quel point échantillonné dans cette ellipsoïde, ce qui contraint l'espace latent à être dense et continu [@bergmann_nd].
:::

::: {.callout-note appearance="simple" icon="false"}
## 🎯 Régions de Confiance Latentes

Conceptualisons chaque donnée $\mathbf{x}$ comme une "balle gaussienne" centrée en $\boldsymbol{\mu}$ avec un rayon proportionnel à $\boldsymbol{\sigma}$. L'entraînement établit un **contrat** entre encodeur et décodeur : l'encodeur s'engage à compacter l'information dans cette balle, le décodeur s'engage à produire une reconstruction valide pour *tout* point tiré dans cette balle. En forçant les balles à se recouvrir et à couvrir uniformément l'espace latent, le VAE crée un continuum naviguable — contrairement à l'AE classique où seuls les points encodés sont valides [@shi_nd].
:::

::: {.card .card-window .mb-4}

:::: {.card-header}
🕹️ AE vs VAE
::::

:::: {.card-control-row .sim-controls-row}
```{ojs}
//| echo: false
viewof vae_mode = Inputs.select(["AE (Déterministe)", "VAE (Probabiliste)"], {
  label: "Architecture :",
  value: "AE (Déterministe)"
})
viewof vae_alpha = Inputs.range([0, 1], {
  label: "Position dans l'espace latent (α)",
  value: 0.15, step: 0.01
})
```
::::

```{ojs}
//| echo: false
import { renderLatentInterpolation } from "../../assets/js/simulations/vae.js"
renderLatentInterpolation({ mode: vae_mode, alpha: vae_alpha })
```

:::

### L'Objectif ELBO

L'ELBO résoud un compromis : le terme de reconstruction pousse le modèle à mémoriser précisément (faire des petites zones), le terme KL le force à garder ces zones proches de l'origine et à ne pas s'effondrer en points (faire des zones suffisamment étales).

::: {.callout-note collapse="true"}
## 🔍 Détails mathématiques
L'entraînement du VAE repose sur la maximisation de l'**Evidence Lower Bound** (ELBO), qui arbitre le conflit entre deux termes antagonistes [@leclaire_nd; @nik55_2025] :

$$\mathcal{L}_{\text{ELBO}}(\theta, \phi) = \underbrace{\mathbb{E}_{q_\phi(\mathbf{z}|\mathbf{x})}\!\left[\log p_\theta(\mathbf{x}|\mathbf{z})\right]}_{\text{Terme de reconstruction}} - \underbrace{D_{\text{KL}}\!\left(q_\phi(\mathbf{z}|\mathbf{x}) \;\|\; p(\mathbf{z})\right)}_{\text{Terme de régularisation}}$$

* **Terme de reconstruction** : Maximise la log-vraisemblance de reconstruire $\mathbf{x}$ à partir d'un $\mathbf{z}$ échantillonné. Il pousse l'encodeur à produire des représentations informatives.

* **Terme de régularisation (Divergence KL)** : Mesure l'écart entre la distribution postérieure apprise $q_\phi(\mathbf{z}|\mathbf{x})$ et la distribution *a priori* $p(\mathbf{z}) = \mathcal{N}(\mathbf{0}, \mathbf{I})$. Il pousse les "balles gaussiennes" à rester proches de l'origine et à ne pas s'effondrer en points déterministes (ce qui reviendrait à un AE classique).

Cette tension est productive : le terme KL interdit à l'encodeur de "tricher" en mémorisant les données avec $\boldsymbol{\sigma} \to 0$, forçant une généralisation réelle.
:::

### Le $\beta$-VAE

En augmentant $\beta$, on serre davantage le corset sur l'espace latent : chaque dimension est forcée à contrôler un seul facteur de variation indépendant (rotation, couleur, échelle), au prix d'une reconstruction un peu moins fidèle.

::: {.callout-note collapse="true"}
## 🔍 Détails techniques
Une extension importante est le **$\beta$-VAE**, qui introduit un hyperparamètre $\beta > 1$ pondérant le terme KL [@burgess_2017] :

$$\mathcal{L}_{\beta\text{-VAE}} = \mathbb{E}_{q_\phi(\mathbf{z}|\mathbf{x})}\!\left[\log p_\theta(\mathbf{x}|\mathbf{z})\right] - \beta \cdot D_{\text{KL}}\!\left(q_\phi(\mathbf{z}|\mathbf{x}) \;\|\; p(\mathbf{z})\right)$$

Un $\beta$ élevé contraint davantage l'espace latent, favorisant le **disentanglement** : chaque dimension de $\mathbf{z}$ tend à contrôler un facteur de variation indépendant et interprétable (ex. : une dimension pour la rotation, une autre pour la couleur). Ce disentanglement est précieux pour la génération contrôlée mais se fait au détriment de la qualité de reconstruction [@burgess_2017].
:::

### Génération et Interpolation

Un VAE bien entraîné est un espace contigu : on peut tirer un point au hasard et obtenir une image valide, ou glisser progressivement entre deux images pour créer des transitions réalistes.

::: {.callout-note collapse="true"}
## 🔍 Détails techniques
Une fois entraîné, le VAE permet deux opérations fondamentales impossibles avec un AE classique :

1. **Génération** : Tirer $\mathbf{z} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})$ et décoder $\hat{\mathbf{x}} = g_\theta(\mathbf{z})$. La continuité de l'espace latent garantit la validité sémantique du résultat.

2. **Interpolation** : Encoder deux données $\mathbf{x}_a$ et $\mathbf{x}_b$ pour obtenir $\boldsymbol{\mu}_a$ et $\boldsymbol{\mu}_b$, puis décoder les points intermédiaires $\boldsymbol{\mu}_a + t(\boldsymbol{\mu}_b - \boldsymbol{\mu}_a)$ pour $t \in [0, 1]$. La trajectoire dans l'espace latent est sémantiquement cohérente — une interpolation entre un "4" et un "9" MNIST passe progressivement par des formes intermédiaires plausibles.
:::
