# Auto-encodeur variationnel

En apprentissage automatique, un auto-encodeur variationnel (ou VAE de l'anglais variational auto encoder) est une architecture de réseau de neurones artificiels introduite en 2013 par D. Kingma et M. Welling, appartenant aux familles des modèles graphiques probabilistes et des méthodes bayésiennes variationnelles.
Les VAE sont souvent rapprochés des autoencodeurs$^,$ dont ils sont une évolution. Leur utilisation et leur formulation mathématiques sont cependant différentes.
Les auto-encodeurs variationnels permettent de formuler un problème d'inférence statistique (par exemple, déduire la valeur d'une variable aléatoire à partir d'une autre variable aléatoire) en un problème d'optimisation statistique (c'est-à-dire trouver les valeurs de paramètres qui minimisent une fonction objectif). Ils représentent une fonction associant à une valeur d'entrée une distribution latente multivariée, qui n'est pas directement observée mais déduite depuis un modèle mathématique à partir de la distribution d'autres variables. Bien que ce type de modèle ait été initialement conçu pour l'apprentissage non supervisé, son efficacité a été prouvée pour l'apprentissage semi-supervisé$^,$ et l'apprentissage supervisé.

## Architecture

Dans un VAE, les données d'entrée sont échantillonnées à partir d'une distribution paramétrée (la distribution a priori, en termes d'inférence bayésienne), et l'encodeur et le décodeur sont entraînés conjointement de sorte que la sortie minimise une erreur de reconstruction dans le sens de la divergence de Kullback-Leibler entre la distribution paramétrique postérieure et la vraie distribution a posteriori$^,$.

## Formulation

On note $\mathbf {x}$ le vecteur contenant l'ensemble des variables observées que l'on souhaite modéliser. Ce vecteur est une variable aléatoire, caractérisé par une distribution de probabilité inconnue $P(\mathbf {x} )$, que l'on souhaite approximer par une distribution paramétrée $p_{\theta }$ ayant pour paramètres $\theta$.
On introduit alors un vecteur aléatoire $\mathbf {z}$ distribué conjointement avec $\mathbf {x}$ (c'est-à-dire dont la loi de probabilité n'est pas indépendante de celle de $\mathbf {x}$). Ce vecteur $\mathbf {z}$ représente un encodage latent de $\mathbf {x}$, que l'on ne peut observer directement.
On exprime alors la distribution $p_{\theta }$ via la loi de probablitié marginale sur $\mathbf {z}$, ce qui donne alors:
    $p_{\theta }(\mathbf {x} )=\int _{\mathbf {z} }p_{\theta }(\mathbf {x,z} )\,d\mathbf {z} ,$
où $p_{\theta }(\mathbf {x,z} )$ représente la distribution conjointe sous $p_{\theta }$ des données observables $\mathbf {x}$ et de leur représentation latente $\mathbf {z}$. Selon la formule des probabilités composées, l'équation peut être réécrite comme
    $p_{\theta }(\mathbf {x} )=\int _{\mathbf {z} }p_{\theta }(\mathbf {x\mid z} )p_{\theta }(\mathbf {z} )\,d\mathbf {z}$
Dans l'auto-encodeur variationnel classique, on fait l'hypothèse que $\mathbf {z}$ est un vecteur à valeur réelles de dimension finie, et $p_{\theta }(\mathbf {x|z} )$ suit une loi normale. Par conséquent, $p_{\theta }(\mathbf {x} )$ est un mélange de distributions gaussiennes.
On peut voir les relations entre les données d'entrée et leur représentation latente comme un problème d'inférence bayésienne avec
* $p_{\theta }(\mathbf {z} )$ représente la distribution probabilité a priori dans l'espace latent
* $p_{\theta }(\mathbf {x} \mid \mathbf {z} )$ représente la vraisemblance
* $p_{\theta }(\mathbf {z} \mid \mathbf {x} )$ représente la distribution de probabilité a posteriori
Malheureusement, le calcul de $p_{\theta }(\mathbf {x} )$ est au mieux coûteux, et dans la plupart des cas, impossible. Pour résoudre ce problème, il est nécessaire d'introduire une autre fonction $q_{\Phi }$ pour approximer la distribution a posteriori :
    $q_{\Phi }(\mathbf {z\mid x} )\approx p_{\theta }(\mathbf {z\mid x} )$
où $\Phi$ est l'ensemble des paramètres de $q$ .
Ainsi le problème est formulé pour pouvoir être appliqué dans une architecture de réseau de neurones auto-encodeur, dans lequel la distribution de vraisemblance conditionnelle $p_{\theta }(\mathbf {x} \mid \mathbf {z} )$ est représentée par un décodeur probabiliste, tandis que la distribution a posteriori approchée $q_{\Phi }(\mathbf {z} \mid \mathbf {x} )$ est représentée par un codeur probabiliste. La mise en œuvre d'un VAE consistera donc à calculer les valeurs optimales des paramètres $\theta$ et $\Phi$ par un apprentissage automatique.

## Fonction de perte ELBO

Comme dans tout problème d'apprentissage profond, il est nécessaire de définir une fonction de perte différentiable afin de mettre à jour les poids du réseau par rétropropagation lors de l'apprentissage.
Pour les auto-encodeurs variationnels, l'idée est de minimiser conjointement les paramètres du modèle génératif $\theta$ pour réduire l'erreur de reconstruction entre l'entrée et la sortie, et $\Phi$ pour avoir $q_{\Phi }(\mathbf {z\mid x} )$, la distribution postérieure approchée, le plus près possible de $p_{\theta }(\mathbf {z} \mid \mathbf {x} )$, la vraie distribution de probabilité a posteriori.
Comme fonction de coût pour la reconstruction, l'erreur quadratique moyenne et l'entropie croisée sont souvent utilisées.
Pour la fonction de coût de distance entre les deux distributions, la divergence inverse de Kullback – Leibler $D_{KL}(q_{\Phi }(\mathbf {z\mid x} )\parallel p_{\theta }(\mathbf {z\mid x} ))$ est un bon choix pour pousser $q_{\Phi }(\mathbf {z\mid x} )$ en dessous de $p_{\theta }(\mathbf {z} \mid \mathbf {x} )$$^,$.

## Reparamétrisation

Pour rendre la formulation ELBO adaptée à des fins d'apprentissage, il est nécessaire de modifier légèrement la formulation du problème et la structure du VAE.
L'échantillonnage stochastique est l'opération non différentiable par laquelle il est possible d'échantillonner à partir de l'espace latent et d'alimenter le décodeur probabiliste.
L'hypothèse principale sur l'espace latent est qu'il peut être considéré comme un ensemble de distributions gaussiennes multivariées, et peut donc être décrit comme
    $\mathbf {z} \sim q_{\Phi }(\mathbf {z} \mid \mathbf {x} )={\mathcal {N}}({\boldsymbol {\mu }},{\boldsymbol {\sigma }}^{2})$ . Le schéma d'un auto-encodeur variationnel après l'astuce de reparamétrisation.
Étant donné ${\boldsymbol {\varepsilon }}\sim {\mathcal {N}}(0,{\boldsymbol {I}})$ et $\odot$ défini comme le produit élément par élément, l'astuce de reparamétrisation modifie l'équation ci-dessus comme
    $\mathbf {z} ={\boldsymbol {\mu }}+{\boldsymbol {\sigma }}\odot {\boldsymbol {\varepsilon }}.$
Grâce à cette transformation (qui peut être étendue à des distributions non gaussiennes), le VAE devient entraînable et le codeur probabiliste doit apprendre à mapper une représentation compressée de l'entrée dans les deux vecteurs latents ${\boldsymbol {\mu }}$ et ${\boldsymbol {\sigma }}$, tandis que la stochasticité reste exclue du processus de mise à jour et est injectée dans l'espace latent en tant qu'entrée externe via le vecteur aléatoire ${\boldsymbol {\varepsilon }}$ .