Un VAE (autoencodeur variationnel) compresse chaque donnée en quelques nombres, puis la reconstruit. Contrairement à un autoencodeur classique, il organise cet espace compressé de façon régulière : un point tiré au hasard y donne une donnée nouvelle et crédible. Il sert à générer, à cartographier une base et à repérer les cas atypiques.
Un archiviste qui résume chaque dossier en deux coordonnées et range ces résumés sur un plan sans trou. N'importe quel point du plan correspond alors à un dossier plausible, même s'il n'a jamais existé.
Chaque image est traduite en une moyenne et une variance dans un petit espace, ici à 2 dimensions. L'encodeur ne donne pas un point précis mais une zone probable.
On tire un point dans cette zone, et le décodeur reconstruit l'image à partir de lui. L'erreur de reconstruction dit si le résumé a gardé l'essentiel.
Une seconde perte, la divergence de Kullback-Leibler, rapproche chaque zone d'une loi normale standard. L'espace n'a plus de trou : un point tiré au hasard donne une image crédible.
Des chiffres numérisés, chaque image formant une ligne de 64 intensités. Le VAE apprend sans utiliser les étiquettes.
Chaque image reçoit une erreur de reconstruction : les plus élevées signalent des chiffres mal formés, à envoyer en vérification humaine. Le décodeur génère aussi un chiffre nouveau à partir d'un point tiré au hasard.
On fait relire les images les plus atypiques et on compte la part réellement illisible ou ambiguë. On fixe ensuite le seuil selon la capacité de l'équipe de vérification.
Noms donnés pour le code PyTorch de la fiche.
Taille du résumé. 2 permet de dessiner la carte ; 10 à 50 reconstruit mieux. On choisit selon l'usage.
Plus il est fort, plus l'espace est régulier mais plus les reconstructions sont floues. Le VAE standard prend 1 ; les beta-VAE l'augmentent pour obtenir des dimensions plus lisibles.
Entropie croisée binaire pour des valeurs entre 0 et 1, comme les pixels du code ; erreur quadratique pour des valeurs continues. Ce choix change l'équilibre avec la pénalité KL.
Un réglage de la décision, pas du modèle : quelle part des images envoie-t-on en vérification ? On le fixe par un quantile, par exemple les 2 % les plus mal reconstruites.
# Formulaires manuscrits : VAE en Python
import pandas as pd
import torch
from torch import nn
chiffres = pd.read_csv("chiffres_manuscrits.csv")
X = torch.tensor(chiffres.drop(columns="chiffre").values / 16, dtype=torch.float32) # pixels entre 0 et 1
torch.manual_seed(42)
encodeur = nn.Sequential(nn.Linear(64, 128), nn.ReLU(), nn.Linear(128, 4)) # 2 moyennes + 2 log-variances
decodeur = nn.Sequential(nn.Linear(2, 128), nn.ReLU(), nn.Linear(128, 64), nn.Sigmoid())
opt = torch.optim.Adam(list(encodeur.parameters()) + list(decodeur.parameters()), lr=1e-3)
def pertes(x):
mu, logvar = encodeur(x).chunk(2, dim=1)
z = mu + torch.randn_like(mu) * torch.exp(0.5 * logvar) # tirage dans la zone (reparamétrisation)
reconstruction = nn.functional.binary_cross_entropy(decodeur(z), x, reduction="none").sum(1)
kl = -0.5 * (1 + logvar - mu ** 2 - logvar.exp()).sum(1) # écart à la loi normale standard
return reconstruction, kl
for epoque in range(100):
for lot in torch.randperm(len(X)).split(128):
reconstruction, kl = pertes(X[lot])
perte = (reconstruction + kl).mean()
opt.zero_grad(); perte.backward(); opt.step()
with torch.no_grad():
erreur = pertes(X)[0] # score d'atypie : erreur de reconstruction de chaque image
print("Chiffres des 10 images les plus atypiques :", chiffres["chiffre"].values[erreur.argsort()[-10:].numpy()])
nouveau = decodeur(torch.randn(1, 2)) * 16 # un chiffre inédit, tiré au hasard
print(nouveau.round().reshape(8, 8))
Les VAE se pratiquent en Python (PyTorch, Keras) : le package R keras3 le permet, mais l'usage reste rare en entreprise.
Un autoencodeur classique associe à chaque donnée un point précis de l'espace compressé, avec des trous entre les points : générer y est hasardeux. Le VAE associe une zone à chaque donnée et impose que ces zones remplissent l'espace régulièrement, ce qui permet de générer par simple tirage.
La perte de reconstruction favorise une moyenne des images plausibles, et la pénalité KL limite la précision du résumé. Le résultat ressemble à une image moyenne, donc floue. Les GAN et les modèles de diffusion produisent des images plus nettes.
Un tirage au hasard bloque normalement le calcul des gradients. L'astuce écrit le tirage comme moyenne plus écart-type multiplié par un bruit tiré à part : le réseau peut alors apprendre moyenne et écart-type par descente de gradient. C'est la ligne « z = mu + … » du code.
Compresse et reconstruit aussi, mais son espace compressé a des trous : on ne peut pas y générer de façon fiable.
Voir la fiche → l'autre générateurImages plus nettes, mais entraînement instable et aucun espace latent organisé par construction.
Voir la fiche → le successeurLes plus performants pour générer des images. Stable Diffusion débruite dans l'espace compressé d'un autoencodeur de ce type.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus