Density Estimation Using Real-NVP
TL;DR¶
Real NVP (Real-valued Non-Volume Preserving) est un modèle génératif basé sur les normalizing flows qui apprend des transformations bijectives entre une distribution latente simple (gaussienne) et la distribution des données. L'innovation clé est l'utilisation de coupling layers affines : la transformation divise l'entrée en deux parties (x₁, x₂), où x₁ passe inchangé et x₂ subit une transformation affine dont les paramètres (scale s et translation t) sont des fonctions arbitrairement complexes de x₁. Cette conception permet un calcul exact et efficace du jacobien (triangulaire → déterminant = produit des diagonales) et une inversion triviale sans inverser les réseaux s et t. L'architecture multi-scale avec factorisation progressive réduit le coût computationnel et améliore les performances. Sur CIFAR-10, Real NVP atteint 3.49 bits/dim, surpassant NICE et les VAEs, avec génération d'échantillons de haute qualité et interpolation sémantique fluide dans l'espace latent.
Contexte¶
En 2016-2017, les modèles génératifs profonds sont dominés par trois approches principales :
GANs : Génèrent des échantillons de haute qualité mais souffrent d'instabilité d'entraînement, mode collapse, et n'offrent pas de densité de probabilité explicite. L'évaluation est difficile (FID, IS) et ne permet pas de comparaison avec d'autres types de modèles.
VAEs : Fournissent une borne inférieure (ELBO) sur la log-vraisemblance et un espace latent structuré, mais produisent des échantillons souvent flous à cause de l'objectif de reconstruction + prior matching. Le gap entre ELBO et vraie log-vraisemblance peut être significatif.
Autoregressive models (PixelCNN, WaveNet) : Permettent une estimation exacte de la densité et génèrent des échantillons de haute qualité, mais la génération est séquentielle (O(D) pour D dimensions), rendant l'échantillonnage très lent pour les images/audio.
NICE (Dinh et al., 2014) : Prédécesseur direct de Real NVP, utilisant des coupling layers additives (volume-preserving). Les transformations sont bijectives et le jacobien est trivial (det = 1), mais la contrainte de préservation du volume limite l'expressivité.
Normalizing flows : Cadre général permettant de transformer une distribution simple en distribution complexe via une séquence de transformations bijectives différentiables. La formule du changement de variable donne : log p(x) = log p(z) + log |det(∂z/∂x)|. Le défi est de concevoir des transformations expressives avec un jacobien facile à calculer.
Problème central : Comment concevoir des transformations bijectives qui sont : 1. Suffisamment expressives pour modéliser des distributions complexes 2. Efficaces à calculer (jacobien tractable) 3. Efficaces à inverser (pour l'échantillonnage)
Idées clés¶
-
Coupling layers affines : Diviser l'entrée x en deux parties (x₁, x₂) selon un masque. x₁ passe inchangé : y₁ = x₁. x₂ est transformé de manière affine : y₂ = x₂ ⊙ exp(s(x₁)) + t(x₁), où s et t sont des réseaux de neurones arbitraires. L'inversion est triviale : x₂ = (y₂ - t(y₁)) ⊙ exp(-s(y₁)). Le jacobien est triangulaire → det = exp(∑ s(x₁)).
-
Alternance des masques : Empiler plusieurs coupling layers en alternant quelles dimensions sont "copiées" vs "transformées". Cela garantit que toutes les dimensions sont éventuellement transformées de manière non-triviale. Les masques peuvent être spatiaux (checkerboard) ou par canaux.
-
Réseaux s et t arbitrairement complexes : Contrairement aux planar/radial flows où la forme de la transformation est contrainte, s et t peuvent être des CNNs profonds arbitraires. Ils n'ont pas besoin d'être inversibles car on ne les inverse jamais directement.
-
Architecture multi-scale : À chaque échelle, après quelques coupling layers, la moitié des dimensions est "factored out" vers l'espace latent final. Cela crée une structure hiérarchique où les features de bas niveau sont capturées tôt et les features de haut niveau plus tard. Réduit le coût computationnel (moins de dimensions à propager) et améliore le gradient flow.
-
Batch normalization comme bijection : La batch norm peut être vue comme une transformation bijective avec jacobien tractable. Utilisée entre coupling layers pour stabiliser l'entraînement. À l'inférence, les statistiques running sont utilisées.
-
Masques checkerboard et channel-wise : Pour les images, deux types de partitionnement : checkerboard (pixels alternés spatialement) et channel-wise (moitié des canaux). Squeeze operation (reshape spatial → canaux) permet d'alterner entre les deux.
-
Log-vraisemblance exacte : Contrairement aux VAEs (ELBO) ou GANs (pas de densité), Real NVP optimise directement la log-vraisemblance exacte des données. Permet une comparaison équitable en bits/dim avec d'autres modèles.
-
Dequantization : Pour les images discrètes (0-255), ajout de bruit uniforme pour éviter les pics de densité sur les valeurs discrètes. Sans cela, le modèle peut atteindre une log-vraisemblance infinie en plaçant des deltas sur les valeurs discrètes.
Méthode¶
Formulation mathématique¶
Changement de variable : Pour une bijection f : X → Z :
log p_X(x) = log p_Z(f(x)) + log |det(∂f(x)/∂x)|
Composition de bijections : f = f_L ∘ f_{L-1} ∘ ... ∘ f_1 :
log p_X(x) = log p_Z(z_L) + ∑_{l=1}^{L} log |det(∂f_l/∂z_{l-1})|
Coupling layer affine¶
Forward (x → y) :
y_{1:d} = x_{1:d}
y_{d+1:D} = x_{d+1:D} ⊙ exp(s(x_{1:d})) + t(x_{1:d})
Inverse (y → x) :
x_{1:d} = y_{1:d}
x_{d+1:D} = (y_{d+1:D} - t(y_{1:d})) ⊙ exp(-s(y_{1:d}))
Jacobien :
∂y/∂x = [I, 0; ∂y_{d+1:D}/∂x_{1:d}, diag(exp(s(x_{1:d})))]
Architecture pour images¶
Réseau ResNet pour s et t : - Input : moitié des canaux (ou pixels selon le masque) - Plusieurs blocs résiduels avec convolutions 3×3 - Batch normalization et ReLU - Output : deux tenseurs (s et t) de même taille que l'autre moitié
Structure multi-scale : 1. 3 coupling layers avec masque checkerboard 2. Squeeze : (H, W, C) → (H/2, W/2, 4C) 3. 3 coupling layers avec masque channel-wise 4. Factor out : moitié des canaux → z direct 5. Répéter 2-4 pour plusieurs échelles 6. Dernière échelle : pas de factor out
Squeeze operation : Réorganise les pixels 2×2 en 4 canaux, transformant (H, W, C) en (H/2, W/2, 4C). Permet d'alterner entre masques spatiaux et masques sur les canaux.
Entraînement¶
Objectif : Maximiser la log-vraisemblance (équivalent à minimiser les bits/dim) :
L = -E_{x~p_data}[log p_X(x)] = -E_{x~p_data}[log p_Z(f(x)) + log |det(∂f/∂x)|]
Prior : Gaussienne isotropique p_Z(z) = N(0, I) sur l'espace latent.
Dequantization : x_continuous = (x_discrete + U(0,1)) / 256, puis logit transform pour mapper [0,1] → ℝ.
Détails : - Optimiseur : Adam - Learning rate : 10⁻³ avec decay - Batch size : 64 - Data augmentation : horizontal flips, random crops
Résultats¶
Density estimation (bits/dim, plus bas = mieux)¶
| Modèle | CIFAR-10 | ImageNet 32×32 | ImageNet 64×64 |
|---|---|---|---|
| NICE | 4.48 | 4.36 | - |
| MADE | 4.70 | - | - |
| PixelCNN | 3.14 | 3.83 | 3.57 |
| VAE + IAF | 3.11 | - | - |
| Real NVP | 3.49 | 4.01 | 3.98 |
| Gated PixelCNN | 3.03 | 3.83 | 3.57 |
Real NVP surpasse NICE (+1 bit/dim) et les VAEs, mais reste en dessous des meilleurs modèles autorégressifs (PixelCNN).
Génération d'échantillons¶
Qualité visuelle : Les échantillons générés sont nets et cohérents, meilleurs que NICE et VAEs, comparables aux GANs sur certaines métriques.
Interpolation latente : L'interpolation linéaire entre deux points z₁ et z₂ dans l'espace latent produit des transitions sémantiquement fluides (changement progressif de pose, éclairage, identité pour les visages).
Manipulation de l'espace latent : Possibilité de faire de l'arithmétique vectorielle (homme avec lunettes - homme + femme = femme avec lunettes).
Comparaison avec autres flows¶
| Méthode | Expressivité | Coût Jacobien | Coût Inverse | Parallélisable |
|---|---|---|---|---|
| Planar flow | Faible | O(D) | Itératif | Oui |
| NICE | Moyenne | O(1) | O(1) | Oui |
| Real NVP | Haute | O(D) | O(1) | Oui |
| IAF | Haute | O(D) | O(D) | Non (sampling) |
| MAF | Haute | O(D) | O(D) | Non (density) |
Real NVP offre le meilleur compromis : haute expressivité, inversion efficace, et parallélisable dans les deux directions.
Limites¶
-
Performances inférieures aux modèles autorégressifs : Sur CIFAR-10, Real NVP (3.49 bits/dim) est significativement en dessous de PixelCNN++ (2.92 bits/dim). Les modèles autorégressifs capturent mieux les dépendances complexes grâce à leur factorisation conditionnelle exacte.
-
Architecture spécifique aux images : Les masques checkerboard/channel-wise et l'architecture multi-scale sont conçus pour les images 2D. Adapter à d'autres modalités (texte, audio, graphes) nécessite des redesigns significatifs.
-
Coût computationnel des réseaux s et t : Bien que le jacobien soit efficace, les réseaux s et t doivent être évalués pour chaque coupling layer. Pour des réseaux profonds, cela peut être coûteux, surtout avec de nombreuses couches de flow.
-
Demi des dimensions inchangées par layer : Chaque coupling layer laisse la moitié des dimensions intactes. Il faut empiler de nombreuses layers avec alternance de masques pour que toutes les dimensions interagissent suffisamment.
-
Choix du partitionnement : Le choix des masques (checkerboard vs channel-wise, ordre d'alternance) affecte les performances mais n'est pas bien compris théoriquement. Pas de principe guidant le design optimal.
-
Expressivité limitée par la structure bipartite : La transformation affine couple seulement deux groupes de variables. Des dépendances plus complexes (tous-à-tous) nécessitent de nombreuses layers empilées.
-
Pas de traitement explicite des structures : Contrairement aux convolutions (équivariance translation), les coupling layers n'ont pas d'inductive bias pour la structure spatiale au-delà des masques.
-
Dequantization nécessaire : Pour les données discrètes, l'ajout de bruit introduit un gap entre la vraisemblance du modèle continu et celle des données discrètes. Des approches comme les discrete flows sont nécessaires pour un traitement exact.
-
Température de sampling : Pour obtenir des échantillons visuellement plaisants, on utilise souvent une température < 1 (réduire la variance du prior), sacrifiant la diversité pour la qualité. Cela indique un gap entre la distribution apprise et la vraie distribution.
-
Pas de conditionnement natif : L'architecture de base est non-conditionnelle. Ajouter du conditionnement (classe, texte) nécessite des modifications (conditional batch norm, injection dans s/t).
Liens utiles¶
- PDF annoté: PDF annoté
- Article: Density Estimation Using Real-NVP (arXiv)
- ICLR 2017: OpenReview
- Code officiel: TensorFlow Models
- Tutorial: Normalizing Flows - Lilian Weng
Notes perso¶
Connexion avec d'autres approches¶
VAEs et flows : Les flows peuvent être utilisés comme posterior flexible dans les VAEs (VAE + IAF), combinant les avantages des deux : ELBO tractable + posterior expressif.
Diffusion et flows : Les modèles de diffusion (DDPM) peuvent être vus comme une limite continue de flows très profonds avec architecture spécifique. Score matching ≈ flow matching dans certaines formulations.
Autoregressive flows : MAF et IAF utilisent des transformations autorégressives. Équivalentes en expressivité à Real NVP mais avec trade-offs différents (density vs sampling efficiency).
Pourquoi Real NVP a été important¶
-
Premier flow vraiment scalable aux images : NICE était limité, Real NVP a montré que les flows pouvaient générer des images compétitives.
-
Architecture réutilisable : Les coupling layers affines sont devenus un building block standard, utilisé dans Glow, Flow++, et de nombreux travaux suivants.
-
Pont vers les applications : La possibilité d'avoir à la fois densité exacte ET échantillonnage efficace a ouvert des applications en compression, anomaly detection, et semi-supervised learning.
-
Inspiration pour d'autres domaines : L'idée des bijections apprises a influencé les travaux sur les équations différentielles neurales (Neural ODEs) et les flows continus.