Zum Inhalt springen
coden

Diffusionsmodelle: wie aus reinem Rauschen ein Bild wird

Der Vorwärtsprozess, der Rauschen hinzufügt, ein Netz, das das Rauschen schätzt, DDPM und DDIM von Grund auf geschrieben, acht Cluster ohne Moduskollaps, wie viele Sampling-Schritte nötig sind, ein Vergleich mit VAE und GAN auf Ziffern und der Weg zu Bildern nach Text.

12 Minuten Matěj Žalmánek 2026-10-16

Serie KI-Grundlagen Teil 46 von 52
  1. Landkarte der künstlichen Intelligenz: was was ist und wie alles zusammenpasst
  2. Eine kurze Geschichte der künstlichen Intelligenz: von Turing bis zu Sprachmodellen
  3. Daten, Modell, Training, Inferenz: die Grundbegriffe an einem einzigen Beispiel
  4. Mathematische Notation lesen: Symbole, Indizes, Summen und Quantoren
  5. Mengen und Relationen: der Baukasten, aus dem Definitionen in der KI bestehen
  6. Funktionen und Abbildungen: warum jedes KI-Modell eine Funktion ist
  7. Logik und Beweise: die Regeln, nach denen KI schließt
  8. Graphen und Bäume: die Struktur, auf der Suche und neuronale Netze stehen
  9. Lineare Algebra für maschinelles Lernen: Vektoren, Matrizen und warum KI vor allem multipliziert
  10. Ableitungen, Gradient und Kettenregel: wie ein Modell herausfindet, in welche Richtung es lernen soll
  11. Gradientenabstieg: wie ein Modell lernt
  12. Was ist Wahrscheinlichkeit: vom Würfelwurf zu den Kolmogorow-Axiomen
  13. Bedingte Wahrscheinlichkeit und der Satz von Bayes: wie du deine Einschätzung änderst, wenn du etwas Neues erfährst
  14. Zufallsvariable und Verteilungsfunktion: eine Funktion, die alles über eine Verteilung verrät
  15. Dichtefunktion und Wahrscheinlichkeitsfunktion: warum eine stetige Zufallsvariable in einem Punkt die Wahrscheinlichkeit null hat
  16. Erwartungswert, Varianz und Kovarianz: wo eine Verteilung liegt, wie breit sie ist und was womit zusammenhängt
  17. Überblick über Wahrscheinlichkeitsverteilungen: Bernoulli-, Binomial-, Poisson-, Gleich-, Normal- und Exponentialverteilung
  18. Gesetz der großen Zahlen und zentraler Grenzwertsatz: Warum sich Durchschnitte so vorhersagbar verhalten
  19. Statistik und Parameterschätzung: Maximum Likelihood, MAP und Konfidenzintervalle
  20. Informationstheorie: Entropie, Kreuzentropie und KL-Divergenz — woher Verlustfunktionen kommen
  21. Zustandsraumsuche: BFS, DFS, UCS und A* mit Animationen
  22. Spiele und Gegner: Minimax, Alpha-Beta-Suche und Monte Carlo Tree Search
  23. Constraint Satisfaction: Backtracking, Constraint-Propagierung und AC-3 an Sudoku und einer Karte tschechischer Regionen
  24. Logik und wissensbasierte Systeme: Vorwärts- und Rückwärtsverkettung, Resolution und Expertensysteme
  25. Planung: STRIPS, die Blockwelt, Heuristiken aus Relaxierung und Planung in KI-Agenten
  26. Lokale Suche und simulierte Abkühlung: ein Handlungsreisender durch die tschechischen Regionalhauptstädte
  27. Genetische Algorithmen: Population, Kreuzung, Mutation und Selektion am Rucksack für die Wanderung
  28. Evolutionsstrategien und genetische Programmierung: von der 1/5-Erfolgsregel zum Keplerschen Gesetz
  29. Ameisenkolonieoptimierung: wie eine Pheromonspur einen kurzen Weg findet
  30. Partikelschwarmoptimierung: Trägheit, eigene Erfahrung und die Erfahrung des Schwarms
  31. Neuroevolution: Evolution der Gewichte und der Gestalt neuronaler Netze und der Algorithmus NEAT
  32. Fuzzy-Mengen und Zugehörigkeitsfunktionen: wie man „etwas warm“ aufschreibt
  33. Fuzzy-Logik und Wahrscheinlichkeit: warum „etwas warm“ nicht „wahrscheinlich warm“ bedeutet
  34. Fuzzy-Logik: t-Normen, Implikationen und WENN–DANN-Regeln
  35. Fuzzy-Regelung: Mamdani und Sugeno vom Ventilator bis zum Pendel auf dem Wagen
  36. Fuzzy-Clustering: der Algorithmus fuzzy c-means und Punkte zwischen den Clustern
  37. Neuro-Fuzzy-Systeme (ANFIS): Fuzzy-Regeln, die aus Daten lernen
  38. Markow-Ketten: Übergangsmatrix, stationäre Verteilung und PageRank
  39. Hidden-Markov-Modelle: der Viterbi-Algorithmus und das unehrliche Kasino
  40. Bayessche Netze: warum das Gras nass ist und was das für den Rasensprenger bedeutet
  41. Der Kalman-Filter: wie man aus ungenauen Messungen schätzt, wo ein Auto ist und wie schnell es fährt
  42. Arten des maschinellen Lernens: überwacht, unüberwacht, halbüberwacht und mehr
  43. Prompts, Kontext und RAG: wie man einem Modell die richtigen Informationen gibt
  44. Variational Autoencoder (VAE): neue Bilder aus einem stetigen latenten Raum
  45. Generative Adversarial Networks (GAN): der Fälscher gegen den Detektiv
  46. Diffusionsmodelle: wie aus reinem Rauschen ein Bild wird
  47. Markow-Entscheidungsprozesse: Zustände, Aktionen, Belohnungen und Bellman-Gleichungen
  48. Q-Learning und DQN: den Wert von Aktionen lernen, von der Tabelle bis zum neuronalen Netz
  49. Policy Gradient und PPO: die Strategie direkt lernen
  50. Wie ein KI-Agent funktioniert: ein Sprachmodell in einer Schleife mit Werkzeugen
  51. Programmieren mit KI-Agenten: Auftrag, Tests und Kontrolle
  52. Bewertung und Sicherheit von KI-Systemen: wie man misst und wie man überwacht

Der ganze Lehrplan der Serie 52 von 83 Themen fertig

Was du mitnimmst
  • Wie der Vorwärts- und der Rückwärtsprozess der Diffusion funktionieren.
  • Warum Diffusion stabiler lernt als ein GAN und was die Anzahl der Schritte kostet.
  • Wie aus Diffusion ein Bildgenerator nach Text wird.

Vorher gut zu wissen: Generative Adversarial Networks (GAN): der Fälscher gegen den Detektiv, Variational Autoencoder (VAE): neue Bilder aus einem stetigen latenten Raum

Stable Diffusion, Midjourney, DALL·E 3 und auch die Modelle, die Videos erzeugen, beruhen auf derselben Idee, und die ist überraschend einfach. Ein Bild zu zerstören ist leicht — man fügt ihm nach und nach Rauschen hinzu, bis nur noch Rauschen übrig ist. Wenn wir lernten, jeden kleinen Schritt rückgängig zu machen, könnten wir mit reinem Rauschen beginnen und Schritt für Schritt ein Bild daraus herausschälen. In diesem Teil programmieren wir das von Grund auf und vergleichen es auf denselben Daten mit VAE und GAN.

Er baut auf den Teilen Generative Adversarial Networks und Variational Autoencoder auf.

1. Vorwärtsprozess: ein Bild löst sich im Rauschen auf

Definition — Vorwärtsprozess (Diffusionsprozess)

Man wählt eine Anzahl von Schritten T und einen Plan kleiner Varianzen β1, …, βT. In jedem Schritt kommt etwas Rauschen hinzu: xt = √(1 − βt) · xt−1 + √βt · ε, ε ~ N(0, I). Setzt man die Schritte zusammen, ergibt sich die geschlossene Form xt = √ᾱt · x0 + √(1 − ᾱt) · ε mit ᾱt = ∏s ≤ t (1 − βs). Für hinreichend großes t ist ᾱt ≈ 0 und xt reines Rauschen.

Einfach gesagt

Ein Tropfen Tinte in einem Glas Wasser: Eine Weile siehst du die Form des Tropfens, dann verschwimmt er, am Ende ist das Wasser gleichmäßig gefärbt und die ursprüngliche Form nicht mehr zu erkennen. Die geschlossene Formel sagt, dass man zu jedem beliebigen Zeitpunkt direkt springen kann — man muss nicht alle Schritte simulieren.

xt = √ᾱt · x0 + √(1 − ᾱt) · ε

xt
das verrauschte Bild in Schritt t — genau das, was das Netz beim Training als Eingabe bekommt
√ᾱt
wie viel vom ursprünglichen Bild übrig ist; ᾱt ist das Produkt aller (1 − βs) bis Schritt t und sinkt daher mit jedem Schritt
x0
das ursprüngliche Bild aus den Daten
√(1 − ᾱt)
wie viel Rauschen darin ist; die Wurzeln stehen da, weil sich die Varianzen addieren: (√ᾱ)² + (√(1 − ᾱ))² = 1, Daten mit Varianz 1 haben also in jedem Schritt Varianz 1 und gehen am Ende fließend in N(0, I) über
ε
eine Stichprobe Rauschen aus N(0, I) — genau sie wird das Netz erraten; dass wir sie kennen, macht aus dem Training eine gewöhnliche Regression
Satz — warum ein Sprung genügt

Gilt xt−1 = √ᾱt−1 x0 + √(1 − ᾱt−1) ε′ mit ε′ ~ N(0, I), dann gilt auch xt = √ᾱt x0 + √(1 − ᾱt) ε mit einem neuen ε ~ N(0, I).

Beweis. Wir setzen in einen Schritt ein: xt = √(1 − βt) √ᾱt−1 x0 + √(1 − βt) √(1 − ᾱt−1) ε′ + √βt ε″. Der erste Term ist √ᾱt x0, weil ᾱt = (1 − βt) ᾱt−1. Die beiden übrigen sind unabhängige normalverteilte Rauschterme mit Mittelwert 0; ihre Summe ist wieder normalverteilt und die Varianzen addieren sich: (1 − βt)(1 − ᾱt−1) + βt = 1 − (1 − βt) ᾱt−1 = 1 − ᾱt. Für t = 1 gilt die Aussage direkt (ᾱ0 = 1), weiter per Induktion. ∎

Beispiel — unser Rauschplan in Zahlen

β wächst linear: βt = β1 + (βT − β1) · (t − 1)/(T − 1), also um 0,00101 pro Schritt.

tβtᾱt√ᾱt (Signal)√(1 − ᾱt) (Rauschen)
10,000100,99991,0000,010
20,001110,99880,9990,035
250,024320,73510,8570,515
370,036430,50450,7100,704
380,037440,48560,6970,717
500,049550,28300,5320,847
1000,100000,00560,0750,997

Die zweite Zeile prüfen wir von Hand: ᾱ2 = (1 − β1)(1 − β2) = 0,9999 · 0,99889 = 0,99879. Signal und Rauschen halten sich (ᾱ = 0,5) zwischen den Schritten 37 und 38 die Waage; in Schritt 100 hat das ursprüngliche Bild nur noch das Gewicht 0,075 gegenüber 0,997 beim Rauschen.

Bei uns ist T = 100 und β wächst linear von 0,0001 bis 0,1. Der Anteil des ursprünglichen Signals √ᾱt beträgt in Schritt 25 0,86, in Schritt 50 0,53 und in Schritt 100 nur noch 0,07.

Eine Drei im Vorwärtsprozess (von links t = 0, 10, 25, 50, 75, 100)

2. Rückwärtsprozess: ein Netz, das das Rauschen errät

Definition — DDPM (Denoising Diffusion Probabilistic Model)

DDPM (Jonathan Ho, Ajay Jain und Pieter Abbeel, 2020; die Idee stammt von Jascha Sohl-Dickstein u. a., 2015) trainiert ein Netz εθ(xt, t) darauf, aus einem verrauschten Bild und der Schrittnummer zu schätzen, welches Rauschen ε hinzugefügt wurde. Der Verlust ist der gewöhnliche mittlere quadratische Fehler E ‖ε − εθ(√ᾱt x0 + √(1 − ᾱt) ε, t)‖² mit zufälligem t. Gesampelt wird von xT ~ N(0, I) rückwärts: xt−1 = (xt − βt/√(1 − ᾱt) · εθ) / √(1 − βt) + √βt · z.

Einfach gesagt

Das Netz bekommt ein unscharfes, verrauschtes Foto und die Frage „Wie viel Rauschen steckt darin und wie sieht es aus?“. Wenn es das Rauschen schätzen kann, kann es auch ein wenig davon abziehen. Das wiederholen wir hundertmal, jedes Mal mit etwas frischem Zufall — und aus dem Rauschen taucht ein Bild auf. Das Training ist dabei eine gewöhnliche Regression: kein Gegenspieler wie beim GAN, keine Kompromisse wie beim VAE.

L(θ) = Ex0, t, ε ‖ε − εθ(√ᾱt x0 + √(1 − ᾱt) ε, t)‖²

ε
das Rauschen, das wir selbst ins Bild gegeben haben — die richtige Antwort, deshalb kennen wir sie ohne jedes Annotieren der Daten
εθ(…, t)
die Schätzung des Rauschens durch das Netz; es bekommt auch die Schrittnummer t, weil es bei t = 2 wenig Rauschen finden muss und bei t = 100 in xt fast nur Rauschen ist
√ᾱt x0 + √(1 − ᾱt) ε
das verrauschte Bild xt, mit einem Sprung erzeugt — dank der geschlossenen Formel genügt es, für jedes Beispiel t und ε zu ziehen; nichts wird Schritt für Schritt simuliert
Der Erwartungswert läuft über Bilder aus den Daten, einen gleichverteilt gezogenen Schritt t ∈ {1, …, T} und Rauschen ε ~ N(0, I); in der Praxis ein Mittelwert über den Batch. Ho u. a. haben diesen einfachen Verlust durch Vereinfachung der variationellen unteren Schranke erhalten (derselben, die auch der VAE optimiert) — sie haben darin die Gewichte der einzelnen Schritte weggelassen.

xt−1 = 1/√(1 − βt) · (xt − βt/√(1 − ᾱt) · εθ(xt, t)) + √βt · z

xt
der aktuelle verrauschte Zustand — man beginnt mit reinem Rauschen xT ~ N(0, I)
εθ(xt, t)
die Schätzung des Rauschens, das in xt steckt
βt/√(1 − ᾱt)
wie großes Stück des geschätzten Rauschens abgezogen wird — nur der Anteil, der zu einem Schritt gehört (βt), umgerechnet auf das gesamte Rauschniveau √(1 − ᾱt); bei uns 0,01 in Schritt 1 und 0,10 in Schritt 100
1/√(1 − βt)
macht die Verkleinerung aus dem Vorwärtsschritt rückgängig (dort wurde mit √(1 − βt) multipliziert); in Schritt 100 ist das 1,054
√βt · z
frisches Rauschen z ~ N(0, I) (im letzten Schritt z = 0) — der Rückwärtsprozess ist zufällig wie der Vorwärtsprozess; ohne es würden die Stichproben zu Durchschnittsbildern hingezogen. Die Größe √βt ist eine der beiden Varianten, die Ho u. a. ausprobiert haben
Die mit dem ersten Faktor multiplizierte Klammer ist eine Schätzung des Mittelwerts eines um einen Schritt weniger verrauschten Bildes; dann kommt so viel Zufall hinzu, wie zu dem Schritt gehört.
# Training (DDPM)
wiederhole 16 000×:
    für jedes der 64 Beispiele im Batch:
        x₀ = zufälliges Beispiel aus den Daten
        t  = zufällig aus 1 … 100
        ε  = Vektor von Zufallszahlen aus N(0, 1)
        x_t = √ᾱ_t · x₀ + √(1 − ᾱ_t) · ε
        Fehler = ‖ε − ε_θ(x_t, Kode(t))‖² / Dimension
    Adam-Schritt auf dem mittleren Fehler

# Sampling (DDPM, 100 Schritte)
x = Vektor aus N(0, 1)
für t = 100, 99, …, 1:
    ε̂ = ε_θ(x, Kode(t))
    z = Vektor aus N(0, 1), im Schritt t = 1 null
    x = (x − β_t / √(1 − ᾱ_t) · ε̂) / √(1 − β_t) + √β_t · z
gib x zurück
Definition — sinusförmige Zeitkodierung

Das Netz bekommt die Zahl t nicht direkt, sondern acht Zahlen Kode(t) = (sin(fπt/T), cos(fπt/T)) für f = 1, 2, 4, 8. Die langsamen Frequenzen sagen „ungefähr wo im Prozess wir sind“, die schnellen unterscheiden benachbarte Schritte; alle Zahlen liegen zwischen −1 und 1, sodass keine Eingabe die anderen überwiegt.

Für t = 25 (ein Viertel des Prozesses, Winkel π/4, π/2, π und 2π): Kode(25) = (0,707; 0,707; 1,000; 0,000; 0,000; −1,000; 0,000; 1,000).

Unser Netz ist das gewöhnliche mehrschichtige Netz aus dem Teil über GANs: Am Eingang stehen xt und acht Zahlen der sinusförmigen Kodierung der Zeit t (wie die Positionskodierung im Transformer), am Ausgang die Schätzung des Rauschens. Auf dem Kreis hat es zwei verborgene Schichten mit je 64 Neuronen, auf den Ziffern mit je 128. Trainiert wird mit Adam über 16 000 Schritte.

3. Acht Cluster ohne Kollaps

Dieselben Daten wie im vorigen Teil: acht Cluster auf einem Kreis. So sehen 400 Stichproben während des Rückwärtsprozesses aus:

t = 100 t = 50 t = 25 t = 10 t = 0 Koordinate x₁ (ohne Einheit) x₂ (ohne Einheit)
Rückwärtsprozess: vom Rauschen (t = 100) zu den Daten (t = 0)

Noch in Schritt 25 sind die Punkte fast gleichmäßig verstreut (Qualität 3 %), in Schritt 10 zeichnet sich der Kreis ab, und in den letzten zehn Schritten laufen die Punkte in den Clustern zusammen. Am Ende sind alle 8 Cluster abgedeckt und jeder bekam 28 bis 50 von 500 Stichproben. Die Qualität (Anteil innerhalb von 3σ um ein Zentrum) beträgt 63 %.

Der Unterschied zum GAN liegt nicht in der Qualität, sondern in der Zuverlässigkeit. Der GAN hat alle acht Cluster nur in einem von vier Läufen abgedeckt; die Diffusion hat es in dem einzigen Lauf geschafft, den wir gestartet haben (ein Lauf ist kein Beweis, passt aber zu dem, was man über Diffusion weiß). Der Verlust der Diffusion ist nämlich kein Spiel, sondern eine Regression, und das Netz wird für jede Stichprobe der Daten bestraft — keinen Cluster kann es „sausen lassen“.

4. Wie viele Schritte nötig sind

Definition — DDIM

DDIM (Jiaming Song, Chenlin Meng und Stefano Ermon, 2020) verwendet dasselbe trainierte Netz, sampelt aber deterministisch und in größeren Sprüngen: Aus der Schätzung des Rauschens berechnet es eine Schätzung des sauberen Bildes x̂0 = (xt − √(1 − ᾱt) εθ) / √ᾱt und daraus direkt xs = √ᾱs x̂0 + √(1 − ᾱs) εθ für einen beliebigen früheren Zeitpunkt s < t.

Einfach gesagt

Statt hundert winziger Schrittchen machen wir zwanzig größere. In jedem fragt das Netz „Wie würde das fertige Bild wohl aussehen?“ und springt entsprechend ein Stück des Weges. Sind die Sprünge zu groß, trifft das Netz daneben.

xs = √ᾱs · x̂0 + √(1 − ᾱs) · εθ(xt, t),   x̂0 = (xt − √(1 − ᾱt) εθ) / √ᾱt

xt
der Zustand, in dem wir gerade sind
εθ
die Schätzung des Rauschens — dasselbe Netz wie bei DDPM, nichts wird neu trainiert
x̂0
die Schätzung des fertigen Bildes: die geschlossene Formel des Vorwärtsprozesses, nach x0 aufgelöst; geteilt wird durch √ᾱt, das am Anfang klein ist, daher ist die Schätzung hier am ungenauesten
√ᾱs
wie viel Bild zum Zielzeitpunkt s da sein soll — derselbe Faktor wie im Vorwärtsprozess, nur für einen anderen Zeitpunkt
√(1 − ᾱs)
wie viel Rauschen bleiben soll; DDIM verwendet dabei dasselbe geschätzte Rauschen und zieht kein neues — deshalb ist es deterministisch
Ein Schritt lautet „vollständig entrauschen und dann wieder auf das Niveau des Zeitpunkts s verrauschen“. So kann DDIM beliebig weit springen.
Beispiel — warum zwei Schritte nicht reichen (vereinfacht)

DDIM mit n Schritten geht über gleichmäßig verteilte Zeitpunkte: mit 5 Schritten 100 → 80 → 60 → 40 → 20 → 0, mit 2 Schritten 100 → 50 → 0. Der erste Sprung geht immer von t = 100 aus, wo √ᾱ100 = 0,075.

Irrt sich das Netz bei der Schätzung des Rauschens um δ, irrt sich die Schätzung x̂0 um δ · √(1 − ᾱ100)/√ᾱ100 = 13,3 δ — der Fehler wird mehr als verzehnfacht. Nach Einsetzen in den Sprung zum Zeitpunkt s weicht der neue Zustand vom richtigen um δ · (√(1 − ᾱs) − √ᾱs · 13,3) ab:

  • 5 Schritte, Sprung 100 → 80: Faktor −1,59,
  • 2 Schritte, Sprung 100 → 50: Faktor −6,23,

Bei einem kleinen Sprung wird die schlechte Schätzung x̂0 mit dem kleinen Gewicht √ᾱ80 = 0,19 beigemischt und die weiteren Schritte korrigieren sie. Bei einem Sprung in die Mitte des Prozesses geht sie mit dem Gewicht √ᾱ50 = 0,53 ein, und es bleibt nur ein einziger Schritt. Die Überlegung verfolgt nur einen Fehler in einem Schritt und nimmt an, dass das Netz sonst genau schätzt; sie zeigt aber, warum die ersten, am stärksten verrauschten Schritte am empfindlichsten sind.

0 %25 %50 %75 %100 % 63 · 8/8 100 79 · 8/8 50 77 · 8/8 20 70 · 8/8 10 60 · 8/8 5 0 · 0/8 2 Sampling-Schritte (Anzahl) Qualität (% der Stichproben in 3σ)
Qualität und Abdeckung auf dem Kreis nach Anzahl der Sampling-Schritte DDPM (100 Schritte) DDIM bester GAN-Lauf

DDIM mit 50 Schritten erreicht eine Qualität von 79 % — mehr als DDPM mit 100 Schritten (63 %), vermutlich weil es kein zufälliges Rauschen hinzufügt, das unser ungenaues Netz in den letzten Schritten nicht mehr entfernen kann. Mit 10 Schritten sind es noch 70 %, mit 5 Schritten 60 %. Bei 2 Schritten bricht das Sampling zusammen (0 %). Die Anzahl der Schritte ist der Hauptpreis der Diffusion: Jeder Schritt ist ein Durchlauf durch das Netz, während ein GAN ein Bild in einem einzigen Durchlauf erzeugt.

5. Ziffern: drei Generatoren im Vergleich

Auf Ziffern 8 × 8 (Pixel in den Bereich −1 bis 1 umgerechnet) wird das Netz 16 000 Schritte lang trainiert.

Diffusion GAN, Seed 2 VAE
Die ersten zehn Stichproben
ModellAbstand zur nächsten Zifferam seltensten vertretene Ziffer (von 200)Ziffern mit weniger als 10 Stichproben
VAE (k = 8)0,054100
GAN, Seed 10,04933
GAN, Seed 20,04206
Diffusion (100 Schritte)0,063120

Hier muss man ehrlich sein: Unsere Diffusion hat einen Abstand von 0,063, schlechter als der VAE (0,054) und der GAN (0,042). In den Bildern ist Restrauschen zu sehen. Die Ziffern sind aber ausgewogen vertreten — die seltenste Ziffer hat 12 Stichproben, beim GAN mit Seed 2 fehlen zwei Ziffern ganz.

Warum ist die Schärfe schlechter? Ein kleines mehrschichtiges Netz muss Bilder auf allen hundert Rauschstufen zugleich entrauschen, und das ist eine schwerere Aufgabe als die eine Abbildung Rauschen → Bild beim GAN. Dafür verbessert es sich verlässlich mit mehr Rechenaufwand: Der Abstand der Stichproben sank während des Trainings 0,096 (Schritt 4 000), 0,082 (Schritt 8 000), 0,068 (Schritt 12 000), 0,063 (Schritt 16 000) (schnelle Schätzung aus 100 DDIM-Stichproben mit 20 Schritten). Kein Kollaps und keine Ausreißer. Echte Diffusionsmodelle verwenden konvolutionale U-Net-Netze oder Transformer mit Hunderten Millionen Parametern und trainieren wochenlang — und dann gewinnen sie auch bei der Schärfe.

6. Von Ziffern zu Bildern nach Text

  • Konditionierung. Das Netz εθ(xt, t, c) bekommt zusätzlich eine Beschreibung c — ein Text-Embedding aus einem Sprachmodell, angebunden über Attention (Teil über Attention). Trainiert wird auf Milliarden von Bild-Beschreibung-Paaren.
  • Classifier-free Guidance (Jonathan Ho und Tim Salimans, 2021). Das Netz lernt mit und ohne Beschreibung, und beim Sampling wird die Schätzung in Richtung „mit Beschreibung minus ohne Beschreibung“ verschoben, verstärkt durch einen Koeffizienten. Das Bild entspricht dann besser der Vorgabe, auf Kosten der Vielfalt.
  • Latente Diffusion. Die Diffusion läuft im kleinen latenten Raum eines Autoencoders, nicht in Pixeln — siehe Teil über VAE. Dadurch läuft Stable Diffusion (2022) sogar auf einer Gaming-Grafikkarte.
  • Weniger Schritte. Bessere Sampler und Destillation (ein Netz lernt, viele Schritte in einem oder wenigen nachzuahmen) haben die Generierung von Hunderten Schritten auf eine Handvoll verkürzt.

ε̃ = εθ(xt, t, ∅) + w · (εθ(xt, t, c) − εθ(xt, t, ∅))

εθ(…, ∅)
die Schätzung des Rauschens ohne Beschreibung (leere Bedingung ∅) — „wie ein beliebiges Bild aussieht“; das Netz lernt sie, indem beim Training die Beschreibung ab und zu zufällig weggelassen wird
εθ(…, c) − εθ(…, ∅)
um wie viel sich die Schätzung ändert, wenn das Netz die Beschreibung kennt — die Richtung, in die die Beschreibung das Bild zieht
w
Stärke der Guidance: w = 0 ignoriert die Beschreibung, w = 1 ist ein gewöhnliches bedingtes Modell, w > 1 übertreibt den Einfluss der Beschreibung — das Bild entspricht besser der Vorgabe, aber die Stichproben ähneln sich stärker
Beim Sampling wird ε̃ anstelle von εθ eingesetzt; der Preis sind zwei Durchläufe durch das Netz pro Schritt. Ho und Salimans schreiben dieselbe Formel als (1 + w′) εθ(…, c) − w′ εθ(…, ∅), also w = 1 + w′. Die Bibliothek diffusers verwendet für Stable Diffusion standardmäßig w = 7,5.

7. Zusammenfassung

  • Der Vorwärtsprozess fügt nach und nach Rauschen hinzu; zu jedem Schritt kann man mit der Formel √ᾱ x₀ + √(1 − ᾱ) ε springen.
  • Das Netz lernt, das hinzugefügte Rauschen zu schätzen — eine gewöhnliche Regression. Erzeugt wird rückwärts aus reinem Rauschen.
  • Auf den acht Clustern hat die Diffusion alle in einem einzigen Lauf abgedeckt (DDIM mit 50 Schritten 79 %); der GAN nur in einem von vier Läufen.
  • Weniger Schritte (DDIM) beschleunigen das Sampling; mit 10 Schritten liegt die Qualität bei 70 %, mit 2 Schritten bricht sie zusammen.
  • Auf den Ziffern deckt die Diffusion alle Ziffern ab, bei der Schärfe bleibt sie mit unserem kleinen Netz zurück; sie verbessert sich aber stetig mit mehr Rechenaufwand.

Willst du es selbst ausprobieren? Lass einen KI-Agenten ein kleines DDPM auf zweidimensionalen Daten trainieren (etwa Punkte in Form deiner Initialen) und zeichnen, wie sich die Punkte während des Rückwärtsprozesses zu Buchstaben zusammensetzen.

Siehst du das anders? Schreib an support@coden-app.com.

Ein Agent auf deinem Rechner, vom Telefon aus gesteuert