Modèles et plateformes d’IA

Comprendre les modèles de diffusion : une plongée en profondeur dans l’IA générative

mm
Understanding Diffusion Models: A Deep Dive into Generative AI

Les modèles de diffusion ont émergé comme une approche puissante dans l’IA générative, produisant des résultats de pointe dans la génération d’images, d’audio et de vidéos. Dans cet article technique en profondeur, nous allons explorer comment les modèles de diffusion fonctionnent, leurs innovations clés et pourquoi ils sont devenus si réussis. Nous allons couvrir les fondements mathématiques, le processus d’entraînement, les algorithmes d’échantillonnage et les applications de pointe de cette nouvelle technologie excitante.

Introduction aux modèles de diffusion

Les modèles de diffusion sont une classe de modèles génératifs qui apprennent à débruir graduellement les données en inversant un processus de diffusion. L’idée de base est de commencer avec du bruit pur et d’itérer pour l’affiner en un échantillon de haute qualité à partir de la distribution cible.

Cette approche a été inspirée par la thermodynamique non équilibre – plus précisément, le processus d’inversion de la diffusion pour récupérer la structure. Dans le contexte de l’apprentissage automatique, on peut penser à cela comme à l’apprentissage de l’inversion de l’ajout progressif de bruit aux données.

Certains avantages clés des modèles de diffusion incluent:

  • Qualité d’image de pointe, dépassant les GAN dans de nombreux cas
  • Entraînement stable sans dynamique adverse
  • Fortement parallélisable
  • Architecture flexible – n’importe quel modèle qui mappe les entrées aux sorties de la même dimensionnalité peut être utilisé
  • Fondements théoriques solides

Plongeons plus en profondeur dans le fonctionnement des modèles de diffusion.

Source: Song et al.

Source: Song et al.

Les équations différentielles stochastiques régissent les processus avant et arrière dans les modèles de diffusion. L’équation différentielle stochastique avant ajoute du bruit aux données, les transformant progressivement en une distribution de bruit. L’équation différentielle stochastique arrière, guidée par une fonction de score apprise, supprime progressivement le bruit, conduisant à la génération d’images réalistes à partir de bruit aléatoire. Cette approche est clé pour atteindre des performances génératives de haute qualité dans les espaces d’état continus.

Le processus de diffusion avant

Le processus de diffusion avant commence avec un point de données x₀ échantillonné à partir de la distribution de données réelle, et ajoute progressivement du bruit gaussien sur T étapes temporelles pour produire des versions de plus en plus bruyantes x₁, x₂, …, xT.

À chaque étape temporelle t, on ajoute une petite quantité de bruit selon:

x_t = √(1 - β_t) * x_{t-1} + √(β_t) * ε

Où:

  • β_t est un calendrier de variance qui contrôle la quantité de bruit ajoutée à chaque étape
  • ε est un bruit gaussien aléatoire

Ce processus se poursuit jusqu’à ce que xT soit presque pur bruit gaussien.

Mathématiquement, on peut le décrire comme une chaîne de Markov:

q(x_t | x_{t-1}) = N(x_t; √(1 - β_t) * x_{t-1}, β_t * I)

Où N désigne une distribution gaussienne.

Le calendrier β_t est généralement choisi pour être petit pour les premières étapes temporelles et augmenter avec le temps. Les choix courants incluent des calendriers linéaires, cosinus ou sigmoïdaux.

Le processus de diffusion arrière

L’objectif d’un modèle de diffusion est d’apprendre l’inverse de ce processus – de commencer avec du bruit pur xT et de débruir progressivement pour récupérer un échantillon propre x₀.

On modèle ce processus arrière comme:

p_θ(x_{t-1} | x_t) = N(x_{t-1}; μ_θ(x_t, t), σ_θ^2(x_t, t))

Où μ_θ et σ_θ^2 sont des fonctions apprises (généralement des réseaux de neurones) paramétrées par θ.

L’innovation clé est que nous n’avons pas besoin de modéliser explicitement la distribution arrière complète. Au lieu de cela, nous pouvons la paramétrer en termes du processus avant, que nous connaissons.

Plus précisément, on peut montrer que la moyenne arrière optimale μ* est:

μ* = 1/√(1 - β_t) * (x_t - β_t/√(1 - α_t) * ε_θ(x_t, t))

Où:

  • α_t = 1 – β_t
  • ε_θ est un réseau de prédiction de bruit appris

Cela nous donne un objectif simple – entraîner un réseau de neurones ε_θ pour prédire le bruit ajouté à chaque étape.

Objectif d’entraînement

L’objectif d’entraînement pour les modèles de diffusion peut être dérivé de l’inférence variationnelle. Après quelques simplifications, nous arrivons à une perte L2 simple:

L = E_t,x₀,ε [ ||ε - ε_θ(x_t, t)||² ]

Où:

  • t est échantillonné de manière uniforme de 1 à T
  • x₀ est échantillonné à partir des données d’entraînement
  • ε est échantillonné à partir d’un bruit gaussien
  • x_t est construit en ajoutant du bruit à x₀ selon le processus avant

En d’autres termes, nous entraînons le modèle pour prédire le bruit ajouté à chaque étape temporelle.

Architecture du modèle

L’architecture U-Net est centrale dans l’étape de débruitage du modèle de diffusion. Elle présente une structure encodeur-décodeur avec des connexions de saut qui aident à préserver les détails fins pendant le processus de reconstruction. L’encodeur échantillonne progressivement l’image d’entrée tout en capturant des fonctionnalités de haut niveau, et le décodeur échantillonne les fonctionnalités encodées pour reconstruire l’image. Cette architecture est particulièrement efficace pour les tâches nécessitant une localisation précise, telles que la segmentation d’images.

Le réseau de prédiction de bruit ε_θ peut utiliser n’importe quelle architecture qui mappe les entrées aux sorties de la même dimensionnalité. Les architectures de style U-Net sont un choix populaire, en particulier pour les tâches de génération d’images.

Une architecture typique pourrait ressembler à:


<p>class DiffusionUNet(nn.Module):
def __init__(self):
super().__init__()</p>

<p># Downsampling
self.down1 = UNetBlock(3, 64)
self.down2 = UNetBlock(64, 128)
self.down3 = UNetBlock(128, 256)</p>

<p># Bottleneck
self.bottleneck = UNetBlock(256, 512)</p>

<p># Upsampling
self.up3 = UNetBlock(512, 256)
self.up2 = UNetBlock(256, 128)
self.up1 = UNetBlock(128, 64)</p>

# Output
self.out = nn.Conv2d(64, 3, 1)

<p>def forward(self, x, t):
# Embed timestep
t_emb = self.time_embedding(t)</p>

<p># Downsample
d1 = self.down1(x, t_emb)
d2 = self.down2(d1, t_emb)
d3 = self.down3(d2, t_emb)</p>

<p># Bottleneck
bottleneck = self.bottleneck(d3, t_emb)</p>

<p># Upsample
u3 = self.up3(torch.cat([bottleneck, d3], dim=1), t_emb)
u2 = self.up2(torch.cat([u3, d2], dim=1), t_emb)
u1 = self.up1(torch.cat([u2, d1], dim=1), t_emb)</p>

# Output
return self.out(u1)

Les composants clés sont:

  • Architecture de style U-Net avec des connexions de saut
  • Intégration du temps pour conditionner sur l’étape temporelle
  • Profondeur et largeur flexibles

Algorithme d’échantillonnage

Une fois que nous avons entraîné notre réseau de prédiction de bruit ε_θ, nous pouvons l’utiliser pour générer de nouveaux échantillons. L’algorithme d’échantillonnage de base est:

  1. Commencer avec du bruit gaussien pur xT
  2. Pour t = T à 1:
    • Prédire le bruit: ε_θ(x_t, t)
    • Calculer la moyenne: μ = 1/√(1-β_t) * (x_t - β_t/√(1-α_t) * ε_θ(x_t, t))
    • Échantillonner: x_{t-1} ~ N(μ, σ_t^2 * I)
  3. Retourner x₀

Ce processus débruite progressivement l’échantillon, guidé par notre réseau de prédiction de bruit appris.

Dans la pratique, il existe diverses techniques d’échantillonnage qui peuvent améliorer la qualité ou la vitesse:

  • Échantillonnage DDIM: Une variante déterministe qui permet moins d’étapes d’échantillonnage
  • Échantillonnage ancestral: Intègre la variance apprise σ_θ^2
  • Échantillonnage tronqué: S’arrête plus tôt pour une génération plus rapide

Voici une mise en œuvre de base de l’algorithme d’échantillonnage:


<p>def sample(model, n_samples, device):
# Commencer avec du bruit
x = torch.randn(n_samples, 3, 32, 32).to(device)</p>

<p>for t in reversed(range(1000)):
# Ajouter du bruit pour créer x_t
t_batch = torch.full((n_samples,), t, device=device)
noise = torch.randn_like(x)
x_t = add_noise(x, noise, t)</p>

<p># Prédire et supprimer le bruit
pred_noise = model(x_t, t_batch)
x = remove_noise(x_t, pred_noise, t)</p>

<p># Ajouter du bruit pour l'étape suivante (sauf à t=0)
if t &gt; 0:
noise = torch.randn_like(x)
x = add_noise(x, noise, t-1)</p>

return x

Les mathématiques derrière les modèles de diffusion

Pour vraiment comprendre les modèles de diffusion, il est crucial de creuser plus en profondeur dans les mathématiques qui les sous-tendent. Plongeons dans certains concepts clés en détail:

Chaîne de Markov et équations différentielles stochastiques

Le processus de diffusion avant dans les modèles de diffusion peut être vu comme une chaîne de Markov ou, dans la limite continue, comme une équation différentielle stochastique (EDS). La formulation EDS fournit un puissant cadre théorique pour analyser et étendre les modèles de diffusion.

L’EDS avant peut être écrite comme:

dx = f(x,t)dt + g(t)dw

Où:

  • f(x,t) est le terme de dérive
  • g(t) est le coefficient de diffusion
  • dw est un processus de Wiener (mouvement brownien)

Différents choix de f et g conduisent à différents types de processus de diffusion. Par exemple:

  • Explosion de variance (VE) EDS: dx = √(d/dt σ²(t)) dw
  • Préservation de variance (VP) EDS: dx = -0,5 β(t)xdt + √(β(t)) dw

Comprendre ces EDS nous permet de dériver des stratégies d’échantillonnage optimales et d’étendre les modèles de diffusion à de nouveaux domaines.

Appariement de score et appariement de score de débruitage

Le lien entre les modèles de diffusion et l’appariement de score fournit une autre perspective précieuse. La fonction de score est définie comme le gradient de la densité de probabilité logarithmique:

s(x) = ∇x log p(x)

L’appariement de score de débruitage vise à estimer cette fonction de score en entraînant un modèle pour débruir légèrement des points de données perturbés. Cet objectif se révèle être équivalent à l’objectif d’entraînement du modèle de diffusion dans la limite continue.

Ce lien nous permet d’exploiter des techniques issues de la modélisation générative basée sur les scores, telles que la dynamique de Langevin annealée pour l’échantillonnage.

Techniques d’entraînement avancées

Échantillonnage d’importance

L’entraînement standard du modèle de diffusion échantillonne les étapes temporelles de manière uniforme. Cependant, toutes les étapes temporelles ne sont pas également importantes pour l’apprentissage. Les techniques d’échantillonnage d’importance peuvent être utilisées pour se concentrer sur les étapes temporelles les plus informatives.

Une approche consiste à utiliser une distribution non uniforme sur les étapes temporelles, pondérée par la norme L2 attendue de la fonction de score:

p(t) ∝ E[||s(x_t, t)||²]

Cela peut conduire à un entraînement plus rapide et à une meilleure qualité d’échantillonnage.

Distillation progressive

La distillation progressive est une technique pour créer des modèles d’échantillonnage plus rapides sans sacrifier la qualité. Le processus fonctionne comme suit:

  1. Entraîner un modèle de diffusion de base avec de nombreuses étapes temporelles (par exemple 1000)
  2. Créer un modèle étudiant avec moins d’étapes temporelles (par exemple 100)
  3. Entraîner l’étudiant pour correspondre au processus de débruitage du modèle de base
  4. Répéter les étapes 2-3, en réduisant progressivement les étapes temporelles

Cela permet une génération de haute qualité avec nettement moins d’étapes de débruitage.

Innovations architecturales

Modèles de diffusion basés sur les transformateurs

Alors que les architectures U-Net ont été populaires pour les modèles de diffusion d’images, des travaux récents ont exploré l’utilisation d’architectures de transformateurs. Les transformateurs offrent plusieurs avantages potentiels:

  • Meilleure gestion des dépendances à longue portée
  • Mécanismes de conditionnement plus flexibles
  • Plus facile à mettre à l’échelle pour des tailles de modèles plus grandes

Des modèles comme DiT (Diffusion Transformers) ont montré des résultats prometteurs, offrant potentiellement un chemin vers une génération encore plus de haute qualité.

Modèles de diffusion hiérarchiques

Les modèles de diffusion hiérarchiques génèrent des données à plusieurs échelles, permettant à la fois la cohérence globale et les détails fins. Le processus implique généralement:

  1. Générer une sortie à basse résolution
  2. Rééchantillonner et raffiner progressivement

Cette approche peut être particulièrement efficace pour la génération d’images haute résolution ou pour la génération de contenu à longue portée.

Sujets avancés

Guidage sans classeur

Le guidage sans classeur est une technique pour améliorer la qualité et la contrôlabilité des échantillons. L’idée clé est d’entraîner deux modèles de diffusion:

  1. Un modèle inconditionnel p(x_t)
  2. Un modèle conditionnel p(x_t | y) où y est certaines informations de conditionnement (par exemple, une invite de texte)

Pendant l’échantillonnage, on interpole entre ces modèles:

ε_θ = (1 + w) * ε_θ(x_t | y) - w * ε_θ(x_t)

Où w > 0 est une échelle de guidage qui contrôle à quel point mettre l’accent sur le modèle conditionnel.

Cela permet un conditionnement plus fort sans avoir à réentraîner le modèle. Cela a été crucial pour le succès de modèles d’image-à-texte comme DALL-E 2 et Stable Diffusion.

Diffusion latente

Le modèle de diffusion latente (LDM) implique le codage des données d’entrée dans un espace latent où se déroule le processus de diffusion. Le modèle ajoute progressivement du bruit à la représentation latente de l’image, conduisant à la génération d’une version bruyante, qui est ensuite débruitée à l’aide d’une architecture U-Net. L’U-Net, guidé par des mécanismes d’attention croisée, intègre les informations de diverses sources de conditionnement comme des cartes sémantiques, du texte et des représentations d’images, finalement reconstruisant l’image dans l’espace de pixels. Ce processus est crucial pour générer des images de haute qualité avec une structure contrôlée et des attributs souhaités.

Cela offre plusieurs avantages:

  • Entraînement et échantillonnage plus rapides
  • Meilleure gestion des images haute résolution
  • Plus facile à incorporer le conditionnement

Le processus fonctionne comme suit:

  1. Entraîner un auto-encodeur pour compresser les images dans un espace latent
  2. Entraîner un modèle de diffusion dans cet espace latent
  3. Pour la génération, échantillonner dans l’espace latent et décoder en pixels

Cette approche a été très réussie, alimentant des modèles comme Stable Diffusion.

Modèles de cohérence

Les modèles de cohérence sont une innovation récente visant à améliorer la vitesse et la qualité des modèles de diffusion. L’idée clé est d’entraîner un seul modèle capable de mapper n’importe quel niveau de bruit directement vers la sortie finale, plutôt que de nécessiter un débruitage itératif.

Ceci est réalisé via une fonction de perte soigneusement conçue qui impose la cohérence entre les prédictions à différents niveaux de bruit. Le résultat est un modèle capable de générer des échantillons de haute qualité en une seule passe avant, accélérant considérablement l’inférence.

Conseils pratiques pour l’entraînement des modèles de diffusion

L’entraînement de modèles de diffusion de haute qualité peut être difficile. Voici quelques conseils pratiques pour améliorer la stabilité et les résultats de l’entraînement:

  1. Coupure de gradient: Utiliser la coupure de gradient pour empêcher les gradients explosifs, en particulier au début de l’entraînement.
  2. Moyenne mobile des poids du modèle: Conserver une moyenne mobile exponentielle des poids du modèle pour l’échantillonnage, ce qui peut conduire à une génération plus stable et de meilleure qualité.
  3. Augmentation de données: Pour les modèles d’images, de simples augmentations comme les retournements horizontaux aléatoires peuvent améliorer la généralisation.
  4. Planification du bruit: Expérimenter avec différents calendriers de bruit (linéaire, cosinus, sigmoïde) pour trouver ce qui fonctionne le mieux pour vos données.
  5. Entraînement à précision mixte: Utiliser l’entraînement à précision mixte pour réduire l’utilisation de la mémoire et accélérer l’entraînement, en particulier pour les grands modèles.
  6. Génération conditionnelle: Même si votre objectif final est la génération inconditionnelle, l’entraînement avec du conditionnement (par exemple, sur les classes d’images) peut améliorer la qualité globale des échantillons.

Évaluation des modèles de diffusion

Évaluer correctement les modèles génératifs est crucial mais difficile. Voici quelques métriques et approches courantes:

Distance de Fréchet-Inception (FID)

La distance FID est une métrique largement utilisée pour évaluer la qualité et la diversité des images générées. Elle compare les statistiques des échantillons générés aux données réelles dans l’espace de fonctionnalités d’un classifieur pré-entraîné (généralement InceptionV3).

Des scores FID plus bas indiquent une meilleure qualité et des distributions plus réalistes. Cependant, la FID a des limites et ne devrait pas être la seule métrique utilisée.

Score d’Inception (IS)

Le score d’Inception mesure à la fois la qualité et la diversité des images générées. Il utilise un réseau Inception pré-entraîné pour calculer:

IS = exp(E[KL(p(y|x) || p(y))])

Où p(y|x) est la distribution de classe conditionnelle pour l’image générée x.

Un score IS plus élevé indique une meilleure qualité et diversité, mais il a des limites connues, en particulier pour les ensembles de données très différents d’ImageNet.

Log-vraisemblance négative (NLL)

Pour les modèles de diffusion, nous pouvons calculer la log-vraisemblance négative des données retenues. Cela fournit une mesure directe de la façon dont le modèle s’ajuste à la distribution de données réelle.

Cependant, la NLL peut être coûteuse en termes de calcul pour être estimée avec précision pour des données à haute dimension.

Évaluation humaine

Pour de nombreuses applications, en particulier les applications créatives, l’évaluation humaine reste cruciale. Cela peut impliquer:

  • Comparaisons côte à côte avec d’autres modèles
  • Évaluations de type test de Turing
  • Évaluations spécifiques à la tâche (par exemple, élagage d’images pour les modèles d’image-à-texte)

Bien que subjective, l’évaluation humaine peut capturer des aspects de la qualité que les métriques automatisées manquent.

Modèles de diffusion en production

Déployer des modèles de diffusion dans des environnements de production présente des défis uniques. Voici quelques considérations et meilleures pratiques:

Optimisation pour l’inférence

  1. Exportation ONNX: Convertir les modèles au format ONNX pour une inférence plus rapide sur différents matériels.
  2. Quantification: Utiliser des techniques comme la quantification INT8 pour réduire la taille du modèle et améliorer la vitesse d’inférence.
  3. Mise en cache: Pour les modèles conditionnels, mettre en cache les résultats intermédiaires pour le modèle inconditionnel pour accélérer le guidage sans classeur.
  4. Traitement par lots: Exploiter le traitement par lots pour utiliser efficacement les ressources GPU.

Mise à l’échelle

  1. Inférence distribuée: Pour les applications à haut débit, mettre en œuvre une inférence distribuée sur plusieurs GPU ou machines.
  2. Échantillonnage adaptatif: Ajuster dynamiquement le nombre d’étapes d’échantillonnage en fonction du compromis souhaité entre qualité et vitesse.
  3. Génération progressive: Pour les sorties de grande taille (par exemple, images haute résolution), générer progressivement de la résolution la plus basse à la plus haute pour fournir des résultats initiaux plus rapides.

Sécurité et filtrage

  1. Filtrage de contenu: Mettre en œuvre des systèmes de filtrage de contenu robustes pour empêcher la génération de contenu nuisible ou inapproprié.
  2. Marquage d’eau: Envisager d’incorporer des marques d’eau invisibles dans le contenu généré pour la traçabilité.

Applications

Les modèles de diffusion ont trouvé du succès dans une large gamme de tâches génératives:

Génération d’images

La génération d’images est le domaine où les modèles de diffusion ont d’abord gagné en reconnaissance. Quelques exemples notables incluent:

  • DALL-E 3: Le modèle d’image-à-texte d’OpenAI, combinant un encodeur de texte CLIP avec un décodeur d’image de diffusion
  • Stable Diffusion: Un modèle de diffusion latent open-source pour la génération d’images à partir de texte
  • Imagen: Le modèle d’image-à-texte de Google

Ces modèles peuvent générer des images très réalistes et créatives à partir de descriptions textuelles, surpassant les approches basées sur les GAN.

Génération de vidéos

Les modèles de diffusion ont également été appliqués à la génération de vidéos:

  • Modèles de diffusion de vidéos: Générer des vidéos en traitant le temps comme une dimension supplémentaire dans le processus de diffusion
  • Make-A-Video: Le modèle d’image-à-vidéo de Meta
  • Imagen Vidéo: Le modèle d’image-à-vidéo de Google

Ces modèles peuvent générer de courtes séquences de vidéos à partir de descriptions textuelles, ouvrant de nouvelles possibilités pour la création de contenu.

Génération 3D

Des travaux récents ont étendu les modèles de diffusion à la génération 3D:

  • DreamFusion: Génération de texte-à-3D en utilisant des modèles de diffusion 2D
  • Point-E: Le modèle de nuage de points de diffusion d’OpenAI pour la génération d’objets 3D

Ces approches permettent la création d’actifs 3D à partir de descriptions textuelles, avec des applications dans les jeux, la réalité virtuelle/augmentée et la conception de produits.

Défis et directions futures

Bien que les modèles de diffusion aient montré un succès remarquable, il existe encore plusieurs défis et domaines de recherche futurs:

Efficacité computationnelle

Le processus itératif d’échantillonnage des modèles de diffusion peut être lent, en particulier pour les sorties haute résolution. Les approches comme la diffusion latente et les modèles de cohérence visent à résoudre ce problème, mais des améliorations supplémentaires en termes d’efficacité sont un domaine de recherche actif.

Contrôlabilité

Bien que des techniques comme le guidage sans classeur aient amélioré la contrôlabilité, il reste encore du travail à faire pour permettre un contrôle plus fin des sorties générées. C’est particulièrement important pour les applications créatives.

Génération multi-modale

Les modèles de diffusion actuels excellent dans la génération mono-modale (par exemple, images ou audio). Développer de véritables modèles de diffusion multi-modaux capables de générer en douceur entre les modalités est une direction excitante pour les travaux futurs.

Compréhension théorique

Bien que les modèles de diffusion aient des résultats empiriques solides, il reste encore plus à comprendre sur pourquoi ils fonctionnent si bien. Développer une compréhension théorique plus approfondie pourrait conduire à des améliorations et à de nouvelles applications.

Conclusion

Les modèles de diffusion représentent un pas en avant dans l’IA générative, offrant des résultats de haute qualité dans une gamme de modalités. En apprenant à inverser un processus d’ajout de bruit, ils fournissent une approche flexible et théoriquement solide de la génération.

Des outils créatifs à des simulations scientifiques, la capacité de générer des données complexes et à haute dimension a le potentiel de transformer de nombreux domaines. Cependant, il est important d’aborder ces technologies puissantes avec prudence, en considérant à la fois leur énorme potentiel et les défis éthiques qu’ils présentent.

J'ai passé les cinq dernières années à plonger dans le monde fascinant de l'apprentissage automatique et du deep learning. Ma passion et mon expertise m'ont conduit à contribuer à plus de 50 projets de génie logiciel divers, avec un focus particulier sur l'IA/ML. Ma curiosité continue m'a également attiré vers le traitement automatique des langues, un domaine que je suis impatient d'explorer plus en profondeur.