Normalizing Flows
Les flots normalisants transforment un bruit simple en données complexes à travers des couches inversibles, ce qui permet à un même modèle de générer des échantillons et de calculer des vraisemblances exactes. Découvre leur fonctionnement.
Un flux normalisant est un modèle d'IA générative qui transforme une distribution de base simple, généralement une loi gaussienne standard, en une distribution de données complexe à l'aide d'une séquence de fonctions inversibles et différentiables. Comme chaque couche peut être parcourue en sens inverse et que son effet sur le volume est calculé exactement, un flux remplit deux fonctions que la plupart des modèles génératifs ne peuvent pas réunir : il génère de nouveaux échantillons en faisant passer du bruit vers l'avant à travers les couches, et calcule la vraisemblance exacte d'un point de données observé en le faisant remonter vers la distribution de base. Esteban Tabak et ses collègues ont formulé les flux pour l'estimation de densité en 2010 et 2013, puis Danilo Rezende et Shakir Mohamed de DeepMind ont introduit le terme dans l'apprentissage profond avec Variational Inference with Normalizing Flows à ICML 2015. « Normalisant » désigne la transformation de la distribution des données en une distribution normale, ou gaussienne, et n'a aucun lien avec la normalisation par lots.
La formule de changement de variable#
Si une fonction inversible f transforme un point de données x en un point latent z = f(x), la log-vraisemblance des données est log p(x) = log p_z(f(x)) + log |det J|, où J est la matrice jacobienne de f et son déterminant mesure l'ampleur de l'étirement ou de la contraction du volume autour de x par f. Pour une fonction générale à D variables, ce déterminant nécessite de l'ordre de D³ opérations, ce qui est beaucoup trop lent pour les images de plusieurs centaines de milliers de dimensions. Les couches de flux sont donc conçues avec des jacobiennes triangulaires, dont le déterminant est simplement le produit des éléments diagonaux. L'empilement de nombreuses couches de ce type compose leurs transformations et additionne leurs log-déterminants ; l'entraînement maximise directement la log-vraisemblance des données d'entraînement.
La couche de couplage affine de RealNVP est la conception classique. La moitié de l'entrée traverse la couche sans modification et alimente un petit réseau de neurones qui définit une échelle et un décalage pour l'autre moitié, comme dans cette couche PyTorch :
import torch
from torch import nn
torch.manual_seed(0)
# Affine coupling layer (RealNVP): x1 passes through unchanged and sets the scale and shift for x2
net = nn.Sequential(nn.Linear(2, 32), nn.Tanh(), nn.Linear(32, 4))
def coupling(x):
"""Map data x to z and return log|det J|, which is just the sum of the log-scales."""
x1, x2 = x.chunk(2, dim=-1)
log_s, t = net(x1).chunk(2, dim=-1)
return torch.cat([x1, x2 * log_s.exp() + t], dim=-1), log_s.sum(dim=-1)
x = torch.randn(4)
z, log_det = coupling(x)
jacobian = torch.autograd.functional.jacobian(lambda v: coupling(v)[0], x)
print(f"log|det J|: {log_det:.4f} from the formula, {torch.logdet(jacobian):.4f} from the full 4x4 Jacobian")
# Inverse: z1 equals x1, so the same scale and shift can be recomputed and undone
z1, z2 = z.chunk(2)
log_s, t = net(z1).chunk(2)
x_rec = torch.cat([z1, (z2 - t) * (-log_s).exp()])
print(f"Largest reconstruction error: {(x_rec - x).abs().max():.1e}")La formule simplifiée et la jacobienne complète donnent toutes deux un log-déterminant de 0.1489, et l'inverse restitue l'entrée avec une erreur maximale de 1.2e-07, due à l'arrondi float32. Le réseau à l'intérieur de la couche n'a jamais besoin d'être inversé, il peut donc être de complexité arbitraire.
Architectures de flux#
- Flux de couplage : NICE (2014) et RealNVP (2016) de Laurent Dinh et ses collègues alternent la moitié transformée ; Glow (2018) d'OpenAI a ajouté des convolutions 1 x 1 inversibles apprises et généré des visages réalistes en 256 x 256. L'échantillonnage et l'évaluation de densité sont tous deux rapides.
- Flux autorégressifs : Ils transforment chaque dimension en fonction des précédentes. Les flux autorégressifs masqués évaluent les densités en un seul passage, mais échantillonnent une dimension à la fois ; les flux autorégressifs inverses font l'inverse. TarFlow (2024) d'Apple empile des blocs transformeur autorégressifs sur des patches d'image et a été le premier flux autonome dont les échantillons rivalisaient en qualité avec ceux des modèles de diffusion.
- Flux continus : Ils définissent la transformation comme la solution d'une équation différentielle ordinaire, ce qui supprime les contraintes de conception des couches ; FFJORD (2018) suit l'évolution de la log-densité au moyen d'un estimateur de trace stochastique.
Applications#
- Détection d'anomalies : DifferNet (2021), CFLOW-AD et FastFlow ajustent des flux aux caractéristiques d'un réseau neuronal convolutif préentraîné sur des images de produits sans défaut, puis signalent comme défectueuses les images à faible vraisemblance. En 2021, FastFlow a annoncé une AUC de 99.4 % pour la détection d'anomalies sur le benchmark d'inspection industrielle MVTec AD.
- Synthèse vocale : WaveGlow (2018) de NVIDIA générait de la parole à partir de spectrogrammes mel en un seul passage parallèle.
- Échantillonnage scientifique : Les générateurs de Boltzmann (2019) de Frank Noé et ses collègues échantillonnent les états d'équilibre des molécules et des protéines, en utilisant la vraisemblance exacte pour réattribuer aux échantillons le poids de la véritable distribution physique.
Ces détecteurs modélisent les caractéristiques plutôt que les pixels pour une raison démontrée par Eric Nalisnick et ses collègues en 2019 : un modèle Glow entraîné sur des photos CIFAR-10 attribue une vraisemblance plus élevée à des images de chiffres de maisons SVHN qu'il n'a jamais vues. Cet échec a ensuite été attribué au fait que les flux modélisent davantage les corrélations locales entre pixels que le contenu des images. Pour la détection de défauts, l'entrée du flux peut être constituée d'incorporations provenant de n'importe quel backbone préentraîné : la méthode embed d'Ultralytics YOLO26 renvoie un vecteur de caractéristiques moyen-poolé par image, par défaut depuis la couche juste avant la tête de détection.
Flux normalisants et termes associés#
- Appariement de flux et flux rectifié : Ils entraînent un flux continu en régressant son champ de vitesse, sans calcul de log-déterminant pendant l'entraînement, et alimentent désormais de grands générateurs d'images.
- Autoencodeurs variationnels et modèles de diffusion : Ils s'entraînent sur une borne inférieure de la vraisemblance.
- GAN : Ils apprennent à tromper un discriminateur et ne fournissent aucune vraisemblance.
- Réseaux de flux génératifs (GFlowNets) : Ils partagent le mot « flux », mais construisent des objets discrets étape par étape, avec une probabilité proportionnelle à une récompense.










