Diffusionsmodelle von Grund auf aus einer neuen theoretischen Perspektive
- Diffusionsmodelle haben in der generativen Modellierung zuletzt beeindruckende Ergebnisse gezeigt und sind insbesondere stark beim Sampling aus multimodalen Verteilungen.
- Diffusionsmodelle wurden nicht nur breit in Text-zu-Bild-Tools wie Stable Diffusion übernommen, sondern zeigen auch starke Leistung in verschiedenen Anwendungsfeldern wie Audio-/Video-/3D-Generierung, Proteindesign und Roboter-Pfadplanung.
- Dieses Tutorial führt Diffusionsmodelle aus einer Optimierungsperspektive ein und behandelt sowohl Theorie als auch Code, um zu erklären, wie man Diffusionsmodelle von Grund auf implementiert.
Diffusionsmodelle trainieren
- Diffusionsmodelle zielen darauf ab, Samples aus der durch Trainingsbeispiele gelernten Menge zu erzeugen.
- Das Training von Diffusionsmodellen umfasst den folgenden Prozess:
- Ziehe
x0 aus K, ziehe einen Noise-Level σ zwischen σmin und σmax und ziehe Rauschen ϵ aus N(0,I).
- Erzeuge die verrauschten Daten
xσ=x0+σϵ.
- Sage aus
xσ das ϵ voraus (die Richtung des Rauschens), während der quadratische Verlust minimiert wird.
- Das eigentliche Training wird über die Funktion
training_loop ausgeführt, die über Batches von x0 iteriert und mit generate_train_sample den Noise-Level sigma und den Noise-Vektor eps sampelt.
Noise-Schedule
- In der Praxis wird
σ nicht gleichmäßig aus dem Intervall [σmin,σmax] gesampelt; stattdessen wird dieses Intervall in einen σ-Schedule aus N unterschiedlichen Werten diskretisiert.
- Die Klasse
Schedule kapselt eine Liste möglicher sigmas und sampelt während des Trainings aus dieser Liste.
- Verwendet wird ein log-linearer Schedule, und es werden Plots bereitgestellt, die diesen Schedule mit anderen Schedules unter Standardparametern vergleichen.
Toy-Beispiel
- In diesem Tutorial wird ein Toy-Datensatz verwendet, der aus Punkten besteht, die aus einer Spirale gesampelt wurden.
- Für diesen einfachen Datensatz wird ein Multi-Layer-Perceptron (MLP) verwendet, um den Denoiser zu implementieren.
- Das MLP erhält als Eingabe die Konkatenation von
x∈R2 und dem Noise-Level σ und sagt das Rauschen ϵ∈R2 voraus.
- Sobald alle wesentlichen Komponenten vorhanden sind, kann das Diffusionsmodell trainiert werden.
Denoising als approximative Projektion interpretieren
- Das Diffusions-Trainingsverfahren lernt einen Denoiser
ϵθ(x,σ), und im Paper wird der gelernte Denoiser als approximative Projektion auf die Datenmannigfaltigkeit K interpretiert.
- Das motiviert die Einführung eines Modells mit relativem Fehler, um die Konvergenz von Diffusions-Sampling-Algorithmen zu analysieren.
Distanz- und Projektionsfunktion
- Für eine Menge
K⊆Rn wird die Distanzfunktion als distK(x) definiert, und die Projektion eines x∈Rn wird als die Menge der Punkte definiert, die diese Distanz erreichen.
- Falls
projK(x) eindeutig ist, zeigt der Gradient von distK(x) auf diese eindeutige Projektion.
Idealer Denoiser
- Der ideale oder optimale Denoiser
ϵ∗ für einen bestimmten Noise-Level σ ist der exakte Minimierer der Trainings-Loss-Funktion.
- Wenn die Daten eine diskrete Gleichverteilung auf einer endlichen Menge über K sind, besitzt der ideale Denoiser eine exakte geschlossene Darstellung.
Modell mit relativem Fehler
- Zur Analyse der Konvergenz des Diffusions-Sampling-Algorithmus wird ein Modell mit relativem Fehler eingeführt.
- Dieses Modell nimmt an, dass die vom Denoiser vorhergesagte Projektion
x−σϵθ(x,σ) projK(x) gut approximiert, wenn σ distK(x)/n für die Eingabe x gut abschätzt.
Aus Diffusionsmodellen samplen
- Um durch Sampling aus dem gelernten Denoiser
ϵθ(x,σ) einen zu K gehörenden Punkt x0 zu erhalten, sagt der Denoiser ϵθ(xt,σt) mit dem Rauschen xt und dem Noise-Level σt x0 voraus.
Diffusions-Sampling als Distanzminimierung interpretieren
- Die Iteration des Diffusions-Samplings kann als Gradientenabstieg auf die Funktion
f(x)=12distK(x)2 interpretiert werden.
- Wie der
σt-Schedule gewählt werden sollte, bestimmt die Anzahl und Größe der Gradientenschritte während des Samplings.
Verbesserter Sampler durch Gradientenabschätzung
- Durch Gradientenabschätzung wird ein neuer effizienter Sampler hergeleitet.
- Dieser Sampler zeigt eine schnellere Konvergenz als der bestehende DDIM-Sampler.
Großskalige Beispiele
- Der oben bereitgestellte Trainingscode kann nicht nur für den Toy-Datensatz, sondern auch zum Training von Bild-Diffusionsmodellen von Grund auf verwendet werden.
- Der Sampling-Code funktioniert ohne Änderungen auch beim Sampling aus vortrainierten Latent-Diffusion-Modellen auf dem neuesten Stand der Technik.
Weitere Materialien
- Die folgenden Blogposts zu Diffusionsmodellen werden ebenfalls empfohlen:
- Was sind Diffusionsmodelle? führt Diffusionsmodelle aus einer diskreten Zeitperspektive ein, bei der Markov-Prozesse umgekehrt werden.
- Generative Modellierung durch Schätzung des Gradienten der Datenverteilung führt Diffusionsmodelle aus einer kontinuierlichen Zeitperspektive ein, bei der stochastische Differentialgleichungen umgekehrt werden.
- The Annotated Diffusion Model erklärt eine PyTorch-Implementierung von Diffusionsmodellen im Detail.
Meinung von GN⁺
- Dieses Tutorial führt Diffusionsmodelle aus einer Optimierungsperspektive ein und erklärt sie, indem es theoretischen Hintergrund mit praktischer Code-Implementierung verbindet, wodurch es auch für Junior-Software-Ingenieure zugänglich ist.
- Diffusionsmodelle sind auf verschiedene Datentypen anwendbar, was ihre Einsetzbarkeit in unterschiedlichen Anwendungsfeldern nahelegt, in denen Sampling aus multimodalen Verteilungen wichtig ist.
- Das Tutorial erklärt den Trainings- und Sampling-Prozess von Diffusionsmodellen Schritt für Schritt und hilft so zu einem tieferen Verständnis der Funktionsweise und Implementierung des Modells.
- Der Trainings- und Sampling-Prozess von Diffusionsmodellen ist relativ komplex; um ihn zu verstehen und umzusetzen, sind grundlegende Kenntnisse in Machine Learning und Deep Learning erforderlich.
- Bei der Einführung dieser Technologie sollten Faktoren wie Rechenkosten, die Qualität der Trainingsdaten und die Komplexität des Modells berücksichtigt werden; zugleich bietet sie das Potenzial, ausgefeiltere und vielfältigere Samples zu erzeugen.
1 Kommentare
Hacker-News-Kommentare
Der Autor sagt: Beim Versuch, Diffusionsmodelle zu verstehen, habe er erkannt, dass sich Code und Mathematik stark vereinfachen lassen, was ihn dazu gebracht habe, einen Blogbeitrag und eine Diffusionsbibliothek zu schreiben. Er beantworte gerne Fragen.
Ein weiterer großartiger Beitrag, 'Diffusion Models From Scratch', behandelt die mathematischen Details ausführlicher und wird von einer leicht verständlichen Implementierung mit weniger als 500 Zeilen begleitet.
Gut an diesem Beitrag ist, dass er Code enthält. Diffusions-Papers sind für ihre vielen Formeln bekannt, aber Code ist für Leute wie uns klarer und leichter zu verstehen. Jeder theoretische Beitrag sollte mit einer Referenzimplementierung veröffentlicht werden.
Ich würde gern eine Erweiterung zu Diffusion Transformers sehen. Sie werden verwendet, um Sora und andere Modelle zur Videogenerierung anzutreiben. Es wäre schön, diesen Beitrag und 'GPT From Scratch' zu kombinieren und eine Einführung 'Diffusion Transformer From Scratch' zu erstellen.
Guter Beitrag, aber er lässt eine wichtige Eigenschaft aus: Diffusionsmodelle modellieren die Ableitung des Wahrscheinlichkeitslogs (die Score-Funktion), und Diffusions-Sampling ähnelt der Langevin-Dynamik. Das erklärt, warum sie leichter zu trainieren sind als GANs.
Sehr interessant. Das erinnert mich an das Paper Iterative alpha-(de)Blending. Auch dieses setzt ein konzeptionell einfacheres Diffusionsmodell auf und formuliert es als groben iterativen Projektionsprozess. Dieser Ansatz ermöglicht interessantere Experimente wie etwa die Analyse von Entrauschungsfehlern.
Besteht eine der Ideen hinter Diffusion darin, enorme Mengen an Trainingsdaten zu erhalten? Also zufällig diffundierte Bilder den nicht diffundierten Bildern gegenüberzustellen?
Gute Erklärung der Theorie. Sie scheint datensatzunabhängig zu sein. Ich bin neugierig auf die konkreten Aspekte der Bildgenerierung. Warum ist es für Bildgeneratoren zum Beispiel schwierig, Klaviertasten zu erzeugen? Es scheint eine bessere Repräsentation von Constraints mittlerer Reichweite zu brauchen.
Denkt daran: Alle Machine-Learning-Modelle sind Convolutions.
Es gibt eine Geheimgesellschaft, die die Kommentare zu diesem Beitrag nutzt, um geheime Nachrichten zu verschicken, also bitte nicht googeln.