Diffusion Models
Diffusionsmodelle erzeugen Bilder, Videos und Audio, indem sie lernen, einen schrittweisen Rauschprozess umzukehren – von reinem Rauschen bis hin zu einer neuen Stichprobe.
Diffusionsmodelle sind Modelle für generative KI, die Daten erzeugen, indem sie lernen, einen schrittweisen Prozess der Rauschzufuhr umzukehren. Während des Trainings werden Bilder oder andere Daten über viele kleine Schritte mit gaußschem Rauschen verfälscht. Ein neuronales Netz lernt, das Rauschen bei jedem Schritt vorherzusagen. Zur Generierung beginnt das Modell mit reinem Zufallsrauschen und entfernt es schrittweise, bis ein neues Beispiel entsteht. Jascha Sohl-Dickstein und seine Kollegen schlugen den Ansatz 2015 in Deep Unsupervised Learning using Nonequilibrium Thermodynamics vor. Jonathan Ho, Ajay Jain und Pieter Abbeel machten ihn 2020 mit Denoising Diffusion Probabilistic Models (DDPM) konkurrenzfähig. Diese Modelle erzielten mit einem FID-Wert von 3,17 auf CIFAR-10 einen neuen Spitzenwert. 2021 zeigten Forschende von OpenAI, dass Diffusionsmodelle GANs bei der Bilderzeugung auf ImageNet übertreffen. Heute bilden Diffusionsmodelle und verwandte Verfahren wie Flow Matching die Grundlage für Text-zu-Bild-Systeme wie Stable Diffusion, Videogeneratoren, Bildbearbeitungsprogramme und wissenschaftliche Modelle.
Funktionsweise von Diffusionsmodellen#
Der Vorwärtsprozess ist festgelegt und wird nicht gelernt. Bei jedem der T Schritte wird eine kleine Menge gaußschen Rauschens hinzugefügt. DDPM verwendet T = 1.000, wobei die Rauschvarianz pro Schritt linear von 0.0001 auf 0.02 steigt. Da die Summe gaußschen Rauschens weiterhin gaußsch verteilt ist, kann ein Trainingsbild in geschlossener Form direkt zu jedem Schritt t übergehen: xt = sqrt(alpha_bar_t) * x0 + sqrt(1 - alpha_bar_t) * noise. Dabei ist alpha_bar_t das Produkt von 1 - beta über die ersten t Schritte. Beim Training werden wiederholt ein Bild, ein zufälliger Schritt und neues Rauschen ausgewählt. Daraus wird xt erstellt, und das Netz lernt mithilfe des mittleren quadratischen Fehlers, dieses Rauschen vorherzusagen. Das ist die vereinfachte Zielfunktion von DDPM. Dieser Code wendet den Vorwärtsprozess mit dem Zeitplan von DDPM auf ein Foto an:
import urllib.request
import numpy as np
import torch
from PIL import Image
# DDPM's linear schedule: 1,000 steps whose noise variance rises from 0.0001 to 0.02
betas = torch.linspace(1e-4, 0.02, 1000)
alpha_bar = torch.cumprod(1 - betas, dim=0)
# Load a photo and scale its pixels to [-1, 1]
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg")).convert("RGB").resize((256, 256))
x0 = torch.tensor(np.array(image), dtype=torch.float32).permute(2, 0, 1) / 127.5 - 1
# Jump straight to step t in closed form: x_t = sqrt(alpha_bar) * x0 + sqrt(1 - alpha_bar) * noise
frames = []
for t in (0, 99, 299, 599, 999):
xt = alpha_bar[t].sqrt() * x0 + (1 - alpha_bar[t]).sqrt() * torch.randn_like(x0)
frames.append(((xt.clamp(-1, 1) + 1) * 127.5).byte().permute(1, 2, 0).numpy())
print(f"step {t + 1}: image weight {alpha_bar[t].sqrt():.3f}, noise weight {(1 - alpha_bar[t]).sqrt():.3f}")
Image.fromarray(np.hstack(frames)).save("forward_diffusion.jpg")Das Bildgewicht fällt von 1.000 bei Schritt 1 auf 0.947 bei Schritt 100, 0.630 bei Schritt 300, 0.161 bei Schritt 600 und 0.006 bei Schritt 1.000, während das Rauschgewicht auf 1.000 steigt. Das gespeicherte forward_diffusion.jpg zeigt den Bus zunächst scharf, dann körnig, anschließend nur noch schwach und schließlich gar nicht mehr.
Bei der Generierung läuft der Prozess rückwärts. Er beginnt mit reinem gaußschem Rauschen. Bei jedem Schritt sagt das Netz das Rauschen im aktuellen Beispiel voraus, ein Solver entfernt einen Teil davon, und das etwas klarere Ergebnis dient als Eingabe für den nächsten Schritt. Eine Texteingabe oder Klassenbezeichnung wird dem Netz als Bedingung übergeben, oft mithilfe von Cross-Attention. Bei der bedingungslosen Klassifikatorführung trainiert ein Netz sowohl mit als auch ohne Bedingung. Das von Jonathan Ho und Tim Salimans eingeführte Verfahren extrapoliert beim Sampling von der bedingungslosen Vorhersage in Richtung der bedingten Vorhersage. Ein höherer Führungsfaktor, beispielsweise der Standardwert 7,5 in Stable-Diffusion-1.x-Pipelines, hält sich genauer an die Texteingabe, verringert jedoch die Vielfalt.
Sampling beschleunigen#
Beim DDPM-Sampling sind pro Bild 1.000 Netzwerkauswertungen nötig. Ein Großteil der Fortschritte in diesem Bereich zielte daher darauf ab, diese Zahl zu senken:
- Bessere Sampler: DDIM verwendet ein trainiertes DDPM mit einem deterministischen Sampler erneut und erzeugt hochwertige Beispiele bei 10- bis 50-mal kürzerer Laufzeit. Neuere ODE-Solver senken die Generierung in der Regel auf etwa 20 bis 50 Schritte.
- Latente Diffusion: Ein latentes Diffusionsmodell entrauscht eine komprimierte Darstellung aus einem Autoencoder statt einzelner Pixel. Der Autoencoder von Stable Diffusion wandelt ein Bild mit den Abmessungen 512×512×3 in eine latente Darstellung mit den Abmessungen 64×64×4 um, die 48-mal weniger Werte enthält.
- Destillation: Konsistenzmodelle lernen, beliebige verrauschte Beispiele direkt in klare Beispiele umzuwandeln, und ermöglichen so eine Generierung in einem einzigen Schritt. Latente Konsistenzmodelle übertragen dieselbe Idee mit 2 bis 4 Schritten auf Stable Diffusion.
- Geradere Pfade: Flow Matching und rectified flow werden entlang gerader Pfade vom Rauschen zu den Daten trainiert, denen Solver mit weniger Schritten folgen können.
Das Entrauschungsnetz selbst hat sich vom faltenden U-Net in DDPM und Stable Diffusion 1.x zum Diffusion Transformer (DiT) weiterentwickelt, der von den meisten aktuellen Bild- und Videogeneratoren verwendet wird.
Diffusionsmodelle im Vergleich zu anderen generativen Modellen#
- Generative gegnerische Netzwerke (GANs): Ein GAN erzeugt ein Beispiel in einem einzigen Vorwärtsdurchlauf. Das gegnerische Training von Generator und Diskriminator ist jedoch anfällig für Instabilität und einen Kollaps der Modi, bei dem der Generator nur einen Teil der Daten abdeckt. Das Training von Diffusionsmodellen basiert auf stabiler Regression und deckt die Datenverteilung umfassender ab, erfordert dafür aber viele Sampling-Schritte.
- Variationale Autoencoder (VAEs): Ein VAE decodiert einen latenten Vektor in einem einzigen Durchlauf zu einem Beispiel. Die erzeugten Beispiele sind tendenziell unschärfer. Latente Diffusionsmodelle verwenden einen Autoencoder nach Art eines VAE nur zur Bildkomprimierung und überlassen die Generierung dem Diffusionsmodell.
- Autoregressive Modelle: Sprachmodelle und visuelle autoregressive Modelle erzeugen jeweils ein Token oder eine Skalierungsebene und stützen sich dabei auf die vorhergehenden Inhalte. Ein Diffusionsmodell verfeinert bei jedem Schritt alle Teile des Beispiels parallel. Diffusions-Sprachmodelle wenden dasselbe Entrauschungsverfahren auf Text an.
Anwendungen in der Praxis#
- Bilderzeugung und -bearbeitung: Text-zu-Bild-Modelle erstellen Bilder anhand von Texteingaben. Beim Inpainting von Bildern wird ein maskierter Bereich passend zu seiner Umgebung neu erzeugt. ControlNet schränkt das Layout mithilfe von Kanten-, Tiefen- oder Posenkarten ein, und Diffusions-Upscaler führen eine Superauflösung durch.
- Videogenerierung: Modelle zur Videogenerierung entrauschen komprimierte latente Darstellungen, die viele Einzelbilder auf einmal umfassen. Dadurch wird jedes Einzelbild zusammen mit seinen Nachbarbildern erzeugt.
- Synthetische Trainingsdaten: Erzeugte Bilder schließen Lücken in Bilddatensätzen, beispielsweise bei seltenen Defekten, ungewöhnlichen Wetterbedingungen oder seltenen Blickwinkeln. In einem Datensatz auf der Ultralytics Platform erstellt die Aktion Ähnliche Bilder generieren pro Stapel 1 bis 16 neue Bilder, die von einem vorhandenen Bild inspiriert sind. Die Bilder, die du behältst, werden ohne Labels zum Datensatz hinzugefügt und können annotiert werden.
- Robotik: Diffusionsrichtlinien erzeugen Aktionssequenzen für Roboter, indem sie diese auf Basis von Kamerabildern entrauschen.
- Wissenschaft: AlphaFold 3 sagt die Strukturen von Komplexen aus Proteinen, Nukleinsäuren und kleinen Molekülen mithilfe eines Diffusionsmoduls voraus, das unverarbeitete Atomkoordinaten entrauscht und das Strukturmodul von AlphaFold 2 ersetzt.










