Autoencodeurs variationnels (VAE)
Perte ELBO, astuce de reparamétrisation, exploration de l’espace latent, génération d’images avec un VAE.
Autoencodeurs variationnels (VAE) est une leçon Learn AI with Python gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn AI with Python, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn AI with Python comprend 4 leçons au total.
De l'autoencodeur au VAE
Un autoencodeur classique apprend des points dispersés : en générer de nouveaux par échantillonnage produit donc des résultats incohérents. Un autoencodeur variationnel (VAE) apprend un espace latent lisse et continu dans lequel vous pouvez effectuer des échantillonnages, le transformant en véritable modèle génératif.
Encodage en une distribution
Au lieu de produire un seul point, l'encodeur d'un VAE produit une distribution pour chaque entrée : une mean mu et une log-variance log_var. Chaque entrée est associée à une petite région floue de l'espace latent, et non à un point unique.
class Encoder(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(784, 256)
self.fc_mu = nn.Linear(256, 64)
self.fc_logvar = nn.Linear(256, 64)Pourquoi mu et log_var ?
Nous prédisons log_var plutôt que la variance directement, car cette valeur peut être n'importe quel nombre réel, sans contrainte de positivité, et offre une meilleure stabilité numérique. L'exponentiation permet de retrouver la variance lorsque c'est nécessaire.
def forward(self, x):
h = torch.relu(self.fc(x))
return self.fc_mu(h), self.fc_logvar(h)Échantillonnage du latent z
Pour décoder, nous devons sample z à partir de la distribution prédite. Un tirage aléatoire naïf n'est pas différentiable, ce qui nous empêche de rétropropager le gradient à travers lui. L'astuce de reparamétrisation résout ce problème.
L'astuce de reparamétrisation
Réécrivez l'échantillon sous la forme z = mu + eps * exp(0.5 * log_var), où eps est un bruit aléatoire. Le hasard se trouve alors dans eps, qui n'a pas besoin de gradient, tandis que les gradients circulent à travers mu et log_var.
def reparameterize(mu, log_var):
std = torch.exp(0.5 * log_var)
eps = torch.randn_like(std)
return mu + eps * stdLe décodeur
Le décodeur prend le z échantillonné et reconstruit l'image, comme le ferait un décodeur d'autoencodeur classique. Il reconvertit les 64 dimensions en 784 pixels avec une sortie Sigmoid.
decoder = nn.Sequential(
nn.Linear(64, 256),
nn.ReLU(),
nn.Linear(256, 784),
nn.Sigmoid()
)Terme de perte de reconstruction
La première moitié de la perte du VAE concerne la reconstruction : elle mesure à quel point l'image décodée correspond à l'entrée. On utilise l'entropie croisée binaire (ou la MSE) sur l'ensemble des pixels.
recon_loss = nn.functional.binary_cross_entropy(
recon, x, reduction="sum"
)Terme de divergence KL
La seconde moitié est la divergence KL, qui rapproche chaque distribution encodée d'une loi normale standard. Elle régularise l'espace latent pour le rendre lisse et continu, ce qui permet la génération.
kl = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())Objectif ELBO
Les VAE maximisent l'ELBO (borne inférieure de l'évidence), ce qui revient à minimiser reconstruction + KL. La reconstruction rend les sorties fidèles ; la KL maintient un espace bien structuré. Tout l'enjeu consiste à équilibrer les deux.
loss = recon_loss + kl
loss.backward()Génération de nouvelles images
Comme l'espace latent correspond à une loi normale standard, vous pouvez générer des images entièrement nouvelles en échantillonnant z selon N(0,1), puis en le décodant, sans image d'entrée.
with torch.no_grad():
z = torch.randn(16, 64)
new_images = decoder(z) # 16 generated samplesPourquoi les VAE sont importants
Les VAE fournissent un espace latent lisse et fondé sur des principes, dans lequel vous pouvez interpoler et utiliser sample. Ils sont à la base de nombreuses techniques génératives et enseignent l'idée essentielle d'apprendre des distributions, et pas seulement des points.
Vérification rapide
Évaluez votre compréhension des VAE.
Récapitulatif : autoencodeurs variationnels
Vous avez appris le VAE : un encodeur produit mu et log_var, l'astuce de reparamétrisation z = mu + eps * exp(0.5 * log_var) rend l'échantillonnage différentiable, et la perte est ELBO = reconstruction + KL. Échantillonner z selon N(0,1), puis le décoder, permet de générer de nouvelles images.
Questions Fréquemment Posées
La leçon « Autoencodeurs variationnels (VAE) » est-elle gratuite ?
Oui — le texte complet de « Autoencodeurs variationnels (VAE) » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn AI with Python, passe à CoddyKit PRO. Le cours Learn AI with Python comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Autoencodeurs variationnels (VAE) » ?
Perte ELBO, astuce de reparamétrisation, exploration de l’espace latent, génération d’images avec un VAE. Tu pratiques Learn AI with Python avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn AI with Python ?
Aucune expérience préalable n'est requise. Learn AI with Python sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Autoencodeurs variationnels (VAE) » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn AI with Python ?
Oui. Chaque leçon Learn AI with Python inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Autoencodeurs pour l’apprentissage de représentations
- Autoencodeurs variationnels (VAE)
- GAN : générateur et discriminateur
- GAN conditionnels et transfert de style