Le modèle de diffusion à partir de zéro sous un nouvel angle théorique
- Les modèles de diffusion ont récemment montré des résultats impressionnants en modélisation générative, en particulier pour l’échantillonnage de distributions multimodales.
- Les modèles de diffusion ne sont pas seulement largement adoptés dans des outils de génération texte-image comme Stable Diffusion, ils affichent aussi d’excellentes performances dans divers domaines d’application, notamment la génération audio/vidéo/3D, la conception de protéines et la planification de trajectoires robotiques.
- Ce tutoriel présente les modèles de diffusion sous l’angle de l’optimisation et couvre à la fois la théorie et le code pour expliquer comment implémenter un modèle de diffusion à partir de zéro.
Entraîner un modèle de diffusion
- Un modèle de diffusion vise à générer des échantillons à partir d’un ensemble appris depuis les exemples d’entraînement.
- L’entraînement d’un modèle de diffusion comprend le processus suivant :
- Échantillonner x0 dans K, échantillonner un niveau de bruit σ entre σmin et σmax, puis échantillonner un bruit ϵ dans N(0,I).
- Générer les données bruitées xσ=x0+σϵ.
- Prédire ϵ (la direction du bruit) à partir de xσ tout en minimisant une perte quadratique.
- En pratique, l’entraînement est réalisé via la fonction
training_loop, qui itère sur les x0 du batch et échantillonne le niveau de bruit sigma ainsi que le vecteur de bruit eps à l’aide de generate_train_sample.
Planning de bruit
- En pratique, σ n’est pas échantillonné uniformément sur l’intervalle [σmin,σmax] ; cet intervalle est discrétisé en N valeurs distinctes, appelées planning σ.
- La classe
Schedule encapsule une liste de sigmas possibles et échantillonne dans cette liste pendant l’entraînement.
- Le tutoriel utilise un planning log-linéaire et fournit un graphique le comparant à d’autres plannings avec les paramètres par défaut.
Exemple jouet
- Ce tutoriel utilise un jeu de données jouet composé de points échantillonnés sur une spirale.
- Pour ce jeu de données simple, le débruiteur est implémenté à l’aide d’un perceptron multicouche (MLP).
- Le MLP prend en entrée la concaténation de x∈R2 et du niveau de bruit σ, puis prédit le bruit ϵ∈R2.
- Une fois tous les composants nécessaires en place, il est possible d’entraîner le modèle de diffusion.
Interpréter le débruitage comme une projection approchée
- La procédure d’entraînement de diffusion apprend un débruiteur ϵθ(x,σ), que l’article interprète comme une projection approchée sur la variété de données K.
- Cela motive l’introduction d’un modèle d’approximation à erreur relative pour analyser la convergence des algorithmes d’échantillonnage par diffusion.
Fonctions de distance et de projection
- Pour un ensemble K⊆Rn, la fonction de distance est définie par distK(x), et la projection de x∈Rn est définie comme l’ensemble des points qui atteignent cette distance.
- Si projK(x) est unique, alors le gradient de distK(x) pointe vers cette projection unique.
Débruiteur idéal
- Pour un niveau de bruit σ donné, le débruiteur idéal ou optimal ϵ∗ est le minimiseur exact de la fonction de perte d’entraînement.
- Lorsque les données suivent une distribution uniforme discrète sur un ensemble fini de K, le débruiteur idéal admet une expression exacte sous forme fermée.
Modèle à erreur relative
- Afin d’analyser la convergence des algorithmes d’échantillonnage par diffusion, un modèle à erreur relative est introduit.
- Ce modèle suppose que la projection prédite par le débruiteur, x−σϵθ(x,σ), approxime bien projK(x) lorsque σ estime correctement distK(x)/n pour l’entrée x.
Échantillonnage dans les modèles de diffusion
- Pour obtenir un point x0 appartenant à K en échantillonnant à partir du débruiteur appris ϵθ(x,σ), le débruiteur ϵθ(xt,σt) reçoit un bruit xt et un niveau de bruit σt, puis prédit x0.
Interpréter l’échantillonnage par diffusion comme une minimisation de distance
- L’itération d’échantillonnage par diffusion peut être interprétée comme une descente de gradient sur la fonction f(x)=12distK(x)2.
- La manière de choisir le planning σt détermine le nombre et la taille des pas de gradient effectués pendant l’échantillonnage.
Un échantillonneur amélioré via estimation du gradient
- Un nouvel échantillonneur efficace est dérivé à partir de l’estimation du gradient.
- Cet échantillonneur montre une convergence plus rapide que l’échantillonneur DDIM existant.
Exemple à grande échelle
- Le code d’entraînement fourni ci-dessus peut être utilisé non seulement pour le jeu de données jouet, mais aussi pour entraîner à partir de zéro un modèle de diffusion d’images.
- Le code d’échantillonnage fonctionne sans modification pour échantillonner à partir de modèles de diffusion latente de pointe préentraînés.
Autres ressources
- Les articles de blog suivants sur les modèles de diffusion sont également recommandés :
- Qu’est-ce qu’un modèle de diffusion ? présente les modèles de diffusion depuis une perspective en temps discret fondée sur l’inversion d’un processus de Markov.
- La modélisation générative par estimation du gradient de la distribution des données présente les modèles de diffusion depuis une perspective en temps continu fondée sur l’inversion d’équations différentielles stochastiques.
- The Annotated Diffusion Model explique en détail une implémentation PyTorch des modèles de diffusion.
L’avis de GN⁺
- Ce tutoriel présente les modèles de diffusion sous l’angle de l’optimisation et les explique en reliant le contexte théorique à l’implémentation pratique en code, ce qui les rend accessibles même à des ingénieurs logiciels débutants.
- Les modèles de diffusion peuvent s’appliquer à divers types de données, ce qui suggère leur utilité dans de nombreux domaines où l’échantillonnage de distributions multimodales est important.
- Le tutoriel décrit étape par étape l’entraînement et l’échantillonnage des modèles de diffusion, ce qui aide à acquérir une compréhension approfondie de leur fonctionnement et de leur implémentation.
- Les processus d’entraînement et d’échantillonnage des modèles de diffusion sont relativement complexes ; les comprendre et les implémenter nécessite donc des connaissances de base en machine learning et en deep learning.
- Lors de l’adoption de cette technologie, il faut prendre en compte des facteurs comme le coût de calcul, la qualité des données d’entraînement et la complexité du modèle, avec le potentiel de générer des échantillons plus sophistiqués et plus variés.
1 commentaires
Commentaires sur Hacker News
L’auteur explique qu’en cherchant à comprendre les modèles de diffusion, il s’est rendu compte qu’il était possible de simplifier considérablement le code et les mathématiques, ce qui l’a amené à écrire un billet de blog et une bibliothèque sur le sujet. Il est tout disposé à répondre aux questions.
Un autre excellent article, « Diffusion Models From Scratch », entre davantage dans les détails mathématiques et s’accompagne d’une implémentation de moins de 500 lignes, facile à comprendre.
C’est bien que cet article contienne du code. Les articles sur la diffusion sont réputés pour leurs nombreuses formules, mais le code est plus clair et plus facile à comprendre pour des gens comme nous. Tous les articles théoriques devraient être fournis avec un code d’implémentation de référence.
J’aimerais voir une extension sur les diffusion transformers. Ils servent à faire tourner Sora et d’autres modèles de génération vidéo. Il serait intéressant de combiner cet article avec « GPT From Scratch » pour créer une introduction à « Diffusion Transformer From Scratch ».
Bon article, mais il passe à côté d’une propriété importante : les modèles de diffusion modélisent la dérivée du log de la probabilité (la fonction de score), et l’échantillonnage par diffusion est similaire à la dynamique de Langevin. Cela explique pourquoi ils sont plus faciles à entraîner que les GAN.
Très intéressant. Cela me fait penser à l’article sur l’Iterative alpha-(de)Blending. Cet article aussi pose un modèle de diffusion conceptuellement plus simple et le formalise comme un processus itératif de projection approximative. Cette approche permet des expériences plus intéressantes, comme l’analyse des erreurs de débruitage.
L’une des idées de la diffusion est-elle d’obtenir d’immenses quantités de données d’entraînement ? Autrement dit, de comparer des images diffusées aléatoirement avec des images non diffusées ?
Bonne explication de la théorie. Cela semble indépendant du jeu de données. Je m’interroge sur les aspects spécifiques de la génération d’images. Par exemple, pourquoi un générateur d’images a-t-il du mal à produire des touches de piano ? Il semble qu’une meilleure représentation des contraintes à moyenne portée soit nécessaire.
N’oubliez pas que tous les modèles de machine learning sont des convolutions.
Il existe une société secrète qui utilise les commentaires de cet article pour s’envoyer des messages secrets, donc ne faites surtout pas de recherche Google.