Logo Zéphyrnet

Introduction aux modèles de diffusion pour l'apprentissage automatique

Date :

Cet article a été publié initialement le AssembléeAI et republié sur TOPBOTS avec la permission de l'auteur.

Les modèles de diffusion sont des modèles génératifs qui ont gagné en popularité ces dernières années, et pour cause. Une poignée d'articles fondateurs publiés dans les années 2020 seul ont montré au monde ce dont les modèles Diffusion sont capables, comme battre les GAN[6] sur la synthèse d'images. Plus récemment, les praticiens auront vu des modèles de diffusion utilisés dans DALL-E2, le modèle de génération d'images d'OpenAI publié le mois dernier.

Diverses images générées par DALL-E 2 (la source).

Compte tenu de la récente vague de succès des modèles de diffusion, de nombreux praticiens de l'apprentissage automatique sont sûrement intéressés par leur fonctionnement interne. Dans cet article, nous examinerons les fondements théoriques des modèles de diffusion, puis montrez comment générer des images avec un Modèle de diffusion dans PyTorch. Plongeons-nous!

Si ce contenu éducatif approfondi vous est utile, abonnez-vous à notre liste de diffusion AI d'être alerté lorsque nous publierons du nouveau matériel. 

Modèles de diffusion – Introduction

Les modèles de diffusion sont génératif modèles, ce qui signifie qu'ils sont utilisés pour générer des données similaires aux données sur lesquelles ils sont formés. Fondamentalement, les modèles de diffusion fonctionnent en détruire les données d'entraînement par addition successive de bruit gaussien, puis apprendre à récupérer les données par inversant ce processus de bruit. Après la formation, nous pouvons utiliser le modèle de diffusion pour générer des données simplement faire passer un bruit échantillonné de manière aléatoire à travers le processus de débruitage appris.

Les modèles de diffusion peuvent être utilisés pour générer des images à partir du bruit (adapté de la source)

Plus précisément, un modèle de diffusion est un modèle de variable latente qui correspond à l'espace latent à l'aide d'une chaîne de Markov fixe. Cette chaîne ajoute progressivement du bruit aux données afin d'obtenir le q(x1 :T|x0), où x1,…,XT sont les variables latentes de même dimensionnalité que x0. Dans la figure ci-dessous, nous voyons une telle chaîne de Markov se manifester pour les données d'image.

En fin de compte, l'image est asymptotiquement transformée en bruit gaussien pur. La objectif de former un modèle de diffusion est d'apprendre le inverser processus – c'est-à-dire la formation pθ(xt−1|xt). En parcourant cette chaîne à rebours, nous pouvons générer de nouvelles données.

Avantages des modèles de diffusion

Comme mentionné ci-dessus, la recherche sur les modèles de diffusion a explosé ces dernières années. Inspiré de la thermodynamique hors équilibre[1], Les modèles de diffusion produisent actuellement Qualité d'image de pointe, dont des exemples peuvent être vus ci-dessous:

Au-delà de la qualité d'image de pointe, les modèles de diffusion offrent une foule d'autres avantages, notamment ne nécessitant pas de formation contradictoire. Les difficultés de la formation contradictoire sont bien documentées; et, dans les cas où des alternatives non contradictoires existent avec des performances et une efficacité de formation comparables, il est généralement préférable de les utiliser. En ce qui concerne l'efficacité de la formation, les modèles de diffusion ont également les avantages supplémentaires de évolutivité et parallélisabilité.

Alors que les modèles de diffusion semblent presque produire des résultats à partir de rien, il existe de nombreux choix et détails mathématiques minutieux et intéressants qui constituent la base de ces résultats, et les meilleures pratiques évoluent encore dans la littérature. Examinons maintenant plus en détail la théorie mathématique qui sous-tend les modèles de diffusion.

Modèles de diffusion - Une plongée en profondeur

Comme mentionné ci-dessus, un modèle de diffusion consiste en un processus de transfert (ou processus de diffusion), dans lequel une donnée (généralement une image) est progressivement bruitée, et un processus inverse (ou processus de diffusion inverse), dans lequel le bruit est retransformé en un échantillon à partir de la distribution cible.

Les transitions de la chaîne d'échantillonnage dans le processus direct peuvent être définies sur des gaussiennes conditionnelles lorsque le niveau de bruit est suffisamment faible. La combinaison de ce fait avec l'hypothèse de Markov conduit à une paramétrisation simple du processus direct :

Note mathématique

Nous avons parlé de corrompre les données en ajoutant Bruit gaussien, mais il peut d'abord ne pas être clair où nous effectuons cette addition. Selon l'équation ci-dessus, à chaque étape de la chaîne, nous échantillonnons simplement à partir d'une distribution gaussienne dont la moyenne est la valeur précédente (c'est-à-dire l'image) dans la chaîne.

Ces deux déclarations sont équivalentes. C'est-à-dire

Pour comprendre pourquoi, nous utiliserons un léger abus de notation en affirmant

Où l'implication finale découle de l'équivalence mathématique entre une somme de variables aléatoires et la convolution de leurs distributions - voir cette page Wikipédia pour plus d'information.

En d'autres termes, nous avons montré qu'affirmer la distribution d'un pas de temps conditionné au précédent via la moyenne d'une distribution gaussienne revient à affirmer que la distribution d'un pas de temps donné est celle du précédent avec l'ajout d'un bruit gaussien. Nous avons omis les scalaires introduits par le schéma de variance et l'avons montré pour une dimension par souci de simplicité, mais une preuve similaire est valable pour les gaussiennes multivariées.

Où β1,…,βT est un échéancier de variance (soit appris, soit fixe) qui, s'il se comporte bien, s'assure que xT est presque une gaussienne isotrope pour T suffisamment grand.

Compte tenu de l'hypothèse de Markov, la distribution conjointe des variables latentes est le produit des transitions de la chaîne conditionnelle gaussienne (modifiée de la source).

Comme mentionné précédemment, la « magie » des modèles de diffusion réside dans le processus inverse. Lors de l'apprentissage, le modèle apprend à inverser ce processus de diffusion afin de générer de nouvelles données. En partant du bruit gaussien pur p(xT):=N(xT,0,I) le modèle apprend la distribution conjointe pθ(x0 :T) comme

où les paramètres dépendant du temps des transitions gaussiennes sont appris. Notez en particulier que la formulation de Markov affirme qu'une distribution de transition de diffusion inverse donnée ne dépend que du pas de temps précédent (ou du pas de temps suivant, selon la façon dont vous le regardez):

Formation

Un modèle de diffusion est formé par trouver les transitions de Markov inverses qui maximisent la vraisemblance des données d'apprentissage. En pratique, l'apprentissage consiste de manière équivalente à minimiser la borne supérieure variationnelle sur le log de vraisemblance négative.

Détail de la notation

Notez que Letc est techniquement un supérieur borne (le négatif de l'ELBO) que nous essayons de minimiser, mais nous l'appelons Letc par souci de cohérence avec la littérature.

On cherche à réécrire le Letc en fonction de Divergences Kullback-Leibler (KL). La divergence KL est une mesure de distance statistique asymétrique de combien une distribution de probabilité P diffère d'une distribution de référence Q. On s'intéresse à la formulation de Letc en termes de divergences KL car les distributions de transition dans notre chaîne de Markov sont gaussiennes, et la divergence KL entre gaussiennes a une forme fermée.

Qu'est-ce que la divergence KL ?

La forme mathématique de la divergence KL pour les distributions continues est

Les doubles barres indiquent que la fonction n'est pas symétrique par rapport à ses arguments.

Ci-dessous, vous pouvez voir la divergence KL d'une distribution variable P (bleu) à partir d'une distribution de référence Q (rouge). La courbe verte indique la fonction dans l'intégrale dans la définition de la divergence KL ci-dessus, et l'aire totale sous la courbe représente la valeur de la divergence KL de P de Q à un instant donné, une valeur également affichée numériquement.

Casting Nivlb en termes de divergences KL

Comme mentionné précédemment, il est possible [1] pour réécrire Letc presque complètement en termes de divergences KL :

De

Détails de dérivation

La borne variationnelle est égale à

En remplaçant les distributions par leurs définitions compte tenu de notre hypothèse de Markov, nous obtenons

Nous utilisons des règles de log pour transformer l'expression en une somme de logs, puis nous retirons le premier terme

En utilisant le théorème de Bayes et notre hypothèse de Markov, cette expression devient

Nous avons ensuite divisé le moyen terme en utilisant des règles de log

En isolant le second terme, on voit

Rebrancher cela dans notre équation pour Letc, on a

À l'aide des règles de journalisation, nous réorganisons

d8

Ensuite, nous notons l'équivalence suivante pour la divergence KL pour deux distributions quelconques :

Enfin, en appliquant cette équivalence à l'expression précédente, on arrive à

Conditionnement du processus avant postérieur sur x0 en Lt−1 aboutit à une forme traitable qui conduit à toutes les divergences KL étant des comparaisons entre gaussiennes. Cela signifie que les divergences peuvent être exactement calculées avec des expressions de forme fermée plutôt qu'avec des estimations de Monte Carlo[3].

Choix de modèles

Une fois les fondements mathématiques de notre fonction objectif établis, nous devons maintenant faire plusieurs choix concernant la manière dont notre modèle de diffusion sera mis en œuvre. Pour le processus aval, le seul choix requis est de définir l'échéancier des écarts, dont les valeurs sont généralement croissantes au cours du processus aval.

Pour le processus inverse, nous choisissons largement l'architecture(s) de paramétrisation/modèle de distribution gaussienne. Noter la grande flexibilité que les modèles de diffusion offrent - la uniquement L'exigence sur notre architecture est que son entrée et sa sortie aient la même dimensionnalité.

Nous allons explorer les détails de ces choix plus en détail ci-dessous.

Processus de transfert et LT

Comme indiqué ci-dessus, en ce qui concerne le processus d'avancement, nous devons définir le calendrier des écarts. En particulier, nous les avons définis pour être constantes dépendant du temps, ignorant le fait qu'ils peuvent être appris. Par exemple[3], un schéma linéaire de β1= 10-4 à βT=0.2 peut être utilisé, ou peut-être une série géométrique.

Indépendamment des valeurs particulières choisies, le fait que le programme de variance soit fixe entraîne LT devenir une constante par rapport à notre ensemble de paramètres apprenables, nous permettant de l'ignorer en ce qui concerne la formation.

Processus inverse et L1:T−1

Nous discutons maintenant des choix nécessaires pour définir le processus inverse. Rappelons ci-dessus que nous avons défini les transitions de Markov inverses comme une gaussienne :

Il faut maintenant définir les formes fonctionnelles de μθ ou Σθ. Bien qu'il existe des façons plus compliquées de paramétrer Σθ[5], on pose simplement

Autrement dit, nous supposons que la gaussienne multivariée est un produit de gaussiennes indépendantes avec une variance identique, une valeur de variance qui peut changer avec le temps. Nous définir ces écarts pour qu'ils soient équivalents à notre calendrier d'écart de processus en avant.

Etant donné cette nouvelle formulation de Σθ, on a

qui nous permet de transformer

à

où le premier terme de la différence est une combinaison linéaire de xt et x0 qui dépend du schéma de variance βt. La forme exacte de cette fonction n'est pas pertinente pour nos besoins, mais elle peut être trouvée dans [3].

La signification de la proportion ci-dessus est que la paramétrisation la plus directe de μθ prédit simplement la moyenne a posteriori de diffusion. Surtout, les auteurs de [3] a en fait constaté que la formation μθ prédire la bruit composant à un pas de temps donné donne de meilleurs résultats. En particulier, laissez

De

Cela conduit à la fonction de perte alternative suivante, que les auteurs de [3] trouvé pour conduire à une formation plus stable et de meilleurs résultats:

Les auteurs de [3] notent également les liens de cette formulation des modèles de diffusion avec les modèles génératifs d'appariement des scores basés sur la dynamique de Langevin. En effet, il apparaît que les modèles de diffusion et les modèles basés sur les scores peuvent être les deux faces d'une même médaille, apparentée au développement indépendant et simultané de la mécanique quantique basée sur les ondes et de la mécanique quantique basée sur les matrices révélant deux formulations équivalentes des mêmes phénomènes.[2].

Architecture de réseau

Alors que notre fonction de perte simplifiée cherche à former un modèle ϵθ, nous n'avons pas encore défini l'architecture de ce modèle. Notez que le uniquement L'exigence pour le modèle est que ses dimensionnalités d'entrée et de sortie soient identiques.

Compte tenu de cette restriction, il n'est peut-être pas surprenant que les modèles de diffusion d'images soient couramment mis en œuvre avec des architectures de type U-Net.

Décodeur de processus inverse et L0

Le chemin le long du processus inverse consiste en de nombreuses transformations sous des distributions gaussiennes conditionnelles continues. A la fin du processus inverse, rappelez-vous que nous essayons de produire un image, qui est composé de valeurs de pixels entières. Il faut donc trouver un moyen d'obtenir probabilités discrètes (log) pour chaque valeur de pixel possible sur tous les pixels.

Pour ce faire, il suffit de définir la dernière transition de la chaîne de diffusion inverse sur un décodeur discret indépendant. Pour déterminer la vraisemblance d'une image donnée x0 donné x1, nous imposons d'abord l'indépendance entre les dimensions des données :

où D est la dimensionnalité des données et l'exposant i indique l'extraction d'une coordonnée. L'objectif est maintenant de déterminer la probabilité de chaque valeur entière pour un pixel donné donné la répartition entre les valeurs possibles pour le pixel correspondant dans l'image légèrement bruitée à l'instant t=1 :

où les distributions de pixels pour t=1 sont dérivées de la gaussienne multivariée ci-dessous dont la matrice de covariance diagonale nous permet de diviser la distribution en un produit de gaussiennes univariées, une pour chaque dimension des données :

Nous supposons que les images sont constituées d'entiers en 0,1,…,255 (comme le font les images RVB standard) qui ont été mis à l'échelle linéairement à [−1,1]. Nous décomposons ensuite la ligne réelle en petits "seaux", où, pour une valeur de pixel mise à l'échelle donnée x, le compartiment pour cette plage est [x−1/255, x+1/255]. La probabilité d'une valeur de pixel x, étant donné la distribution gaussienne univariée du pixel correspondant en x1, est le zone sous cette distribution gaussienne univariée dans le seau centré sur x.

Ci-dessous, vous pouvez voir la zone de chacun de ces compartiments avec leurs probabilités pour une gaussienne moyenne de 0 qui, dans ce contexte, correspond à une distribution avec une valeur de pixel moyenne de 255/2 (demi-luminosité). La courbe rouge représente la distribution d'un pixel spécifique dans le t = 1 image, et les zones donnent la probabilité de la valeur de pixel correspondante dans t = 0 l'image.

note technique

Les premier et dernier compartiments s'étendent jusqu'à -inf et +inf pour préserver la probabilité totale.

Donné un t = 0 valeur de pixel pour chaque pixel, la valeur de pθ(x0|x1) est simplement leur produit. Ce processus est résumé succinctement par l'équation suivante :

De

ainsi que

Étant donné cette équation pour pθ(x0|x1), on peut calculer le terme final de Letc qui n'est pas formulé comme une divergence KL :

Objectif final

Comme mentionné dans la dernière section, les auteurs de [3] ont constaté que la prédiction de la composante de bruit d'une image à un pas de temps donné produisait les meilleurs résultats. En fin de compte, ils utilisent l'objectif suivant :

Les algorithmes d'entraînement et d'échantillonnage pour notre modèle de diffusion peuvent donc être résumés succinctement dans la figure ci-dessous :

Résumé de la théorie du modèle de diffusion

Dans cette section, nous avons plongé en détail dans la théorie des modèles de diffusion. Il peut être facile de se laisser emporter par les détails mathématiques, nous notons donc les points les plus importants dans cette section ci-dessous afin de rester orientés d'un point de vue à vol d'oiseau :

  1. Notre modèle de diffusion est paramétré comme un Chaîne de Markov, ce qui signifie que nos variables latentes x1,…,XT ne dépendent que du pas de temps précédent (ou suivant).
  2. Les distributions de transition dans la chaîne de Markov sont Gaussienne, où le processus direct nécessite un programme d'écart, et les paramètres du processus inverse sont appris.
  3. Le processus de diffusion garantit que xT is asymptotiquement distribué comme une gaussienne isotrope pour un T suffisamment grand.
  4. Dans notre cas, le le calendrier des écarts a été corrigé, mais ça s'apprend aussi. Pour les horaires fixes, suivre une progression géométrique peut donner de meilleurs résultats qu'une progression linéaire. Dans les deux cas, les variances augmentent généralement avec le temps dans la série (c'est-à-dire βij pour moi
  5. Les modèles de diffusion sont très flexible et permettre tous architecture dont les dimensionnalités d'entrée et de sortie sont les mêmes à utiliser. De nombreuses implémentations utilisent De type U-Net architectures.
  6. Les objectif de formation est de maximiser la vraisemblance des données d'apprentissage. Cela se manifeste par le réglage des paramètres du modèle pour minimiser la limite supérieure variationnelle du log de vraisemblance négative des données.
  7. Presque tous les termes de la fonction objectif peuvent être convertis en Divergences KL à la suite de notre hypothèse de Markov. Ces valeurs devenir tenable pour calculer étant donné que nous utilisons des gaussiennes, omettant ainsi la nécessité d'effectuer une approximation de Monte Carlo.
  8. En fin de compte, en utilisant un objectif de formation simplifié former une fonction qui prédit la composante de bruit d'une variable latente donnée donne les résultats les meilleurs et les plus stables.
  9. décodeur discret est utilisé pour obtenir les probabilités logarithmiques sur les valeurs de pixel comme dernière étape du processus de diffusion inverse.

Avec cet aperçu de haut niveau des modèles de diffusion dans nos esprits, passons à la manière d'utiliser un modèle de diffusion dans PyTorch.

Modèles de diffusion dans PyTorch

Bien que les modèles de diffusion n'aient pas encore été démocratisés au même degré que d'autres architectures/approches plus anciennes dans l'apprentissage automatique, il existe encore des implémentations disponibles. Le moyen le plus simple d'utiliser un modèle de diffusion dans PyTorch consiste à utiliser le denoising-diffusion-pytorch package, qui implémente un modèle de diffusion d'image comme celui présenté dans cet article. Pour installer le package, tapez simplement la commande suivante dans le terminal :

pip install denoising_diffusion_pytorch

Exemple minimal

Pour entraîner un modèle et générer des images, nous importons d'abord les packages nécessaires :

import torch
from denoising_diffusion_pytorch import Unet, GaussianDiffusion

Ensuite, nous définissons notre architecture réseau, dans ce cas un U-Net. La dim Le paramètre spécifie le nombre de cartes d'entités avant le premier sous-échantillonnage, et le dim_mults fournit des multiplicandes pour cette valeur et des sous-échantillonnages successifs :

model = Unet(
 dim = 64,
 dim_mults = (1, 2, 4, 8)
)

Maintenant que notre architecture réseau est définie, nous devons définir le modèle de diffusion lui-même. Nous passons dans le modèle U-Net que nous venons de définir avec plusieurs paramètres – la taille des images à générer, le nombre de pas de temps dans le processus de diffusion, et un choix entre les normes L1 et L2.

diffusion = GaussianDiffusion(
 model,
 image_size = 128,
 timesteps = 1000, # number of steps
 loss_type = 'l1' # L1 or L2
)

Maintenant que le modèle de diffusion est défini, il est temps de s'entraîner. Nous générons des données aléatoires sur lesquelles nous entraîner, puis nous entraînons le modèle de diffusion de la manière habituelle :

training_images = torch.randn(8, 3, 128, 128)
loss = diffusion(training_images)
loss.backward()

Une fois le modèle formé, nous pouvons enfin générer des images en utilisant le sample() méthode de diffusion objet. Ici, nous générons 4 images, qui ne sont que du bruit étant donné que nos données d'entraînement étaient aléatoires :

sampled_images = diffusion.sample(batch_size = 4)

Formation sur les données personnalisées

Les denoising-diffusion-pytorch package vous permet également de former un modèle de diffusion sur un ensemble de données spécifique. Remplacez simplement le 'path/to/your/images' chaîne avec le chemin du répertoire de l'ensemble de données dans Trainer() objet ci-dessous et modifiez image_size à la valeur appropriée. Après cela, exécutez simplement le code pour former le modèle, puis échantillonnez comme avant. Notez que PyTorch doit être compilé avec CUDA activé afin d'utiliser le Trainer classe:

from denoising_diffusion_pytorch import Unet, GaussianDiffusion, Trainer
model = Unet(
 dim = 64,
 dim_mults = (1, 2, 4, 8)
).cuda()
diffusion = GaussianDiffusion(
 model,
 image_size = 128,
 timesteps = 1000, # number of steps
 loss_type = 'l1' # L1 or L2
).cuda()
trainer = Trainer(
 diffusion,
 'path/to/your/images',
 train_batch_size = 32,
 train_lr = 2e-5,
 train_num_steps = 700000, # total training steps
 gradient_accumulate_every = 2, # gradient accumulation steps
 ema_decay = 0.995, # exponential moving average decay
 amp = True # turn on mixed precision
)
trainer.train()

Ci-dessous, vous pouvez voir le débruitage progressif du bruit gaussien multivarié aux chiffres MNIST similaires à la diffusion inverse :

Mot de la fin

Les modèles de diffusion sont une approche conceptuellement simple et élégante du problème de génération de données. Leurs résultats de pointe combinés à une formation non contradictoire les ont propulsés vers de grands sommets, et d'autres améliorations peuvent être attendues dans les années à venir compte tenu de leur statut naissant. En particulier, les modèles de diffusion se sont avérés essentiels à la performance des modèles de pointe tels que DALL-E2.

Bibliographie

 Apprentissage profond non supervisé à l'aide de la thermodynamique hors équilibre

 Modélisation générative en estimant les gradients de la distribution des données

 Modèles probabilistes de diffusion de débruitage

 Techniques améliorées pour la formation de modèles génératifs basés sur les scores

 Modèles probabilistes de diffusion de débruitage améliorés

 Les modèles de diffusion battent les GAN sur la synthèse d'images

 GLIDE : vers la génération et l'édition d'images photoréalistes avec des modèles de diffusion guidés par le texte

 Génération hiérarchique d'images textuelles conditionnelles avec CLIP Latents

Vous aimez cet article? Inscrivez-vous pour plus de mises à jour de recherche sur l'IA.

Nous vous informerons lorsque nous publierons d'autres articles résumés comme celui-ci.

spot_img

Dernières informations

spot_img