Diffusionsmodelle
Wie KI-Bildgeneratoren arbeiten: Sie beginnen mit reinem Rauschen und entfernen es Schritt für Schritt – geleitet von der Beschreibung, was am Ende zu sehen sein soll.
Ein Diffusionsmodell hat gelernt, aus einem verrauschten Bild ein etwas weniger verrauschtes zu machen. Zum Erzeugen startet es mit reinem Zufallsrauschen und wendet diesen Schritt zwanzig- bis fünfzigmal an – bis ein klares Bild entstanden ist.
Gelenkt wird das durch eine Textbeschreibung (den Prompt): Bei jedem Schritt entscheidet das Modell, welches Entrauschen am besten zu „Leuchtturm bei Sonnenuntergang“ passt. Das ist ein grundlegend anderer Weg als bei Sprachmodellen, die Text Token für Token anhängen.
Ein Bild aus dem Rauschen
Wähl eine Beschreibung und schieb den Regler – oder lass es ablaufen. Achte darauf, dass alle Bilder aus demselben Startrauschen entstehen:
Wie es lernt
Das Training ist überraschend einfach. Man nimmt echte Bilder und macht sie in vielen kleinen Schritten kaputt, indem man immer mehr Rauschen hinzufügt. Das Modell – ein neuronales Netz – bekommt ein verrauschtes Bild und soll vorhersagen, welches Rauschen darin steckt. Weil man das Rauschen selbst hinzugefügt hat, kennt man die richtige Antwort und kann den Fehler messen.
Nach Training auf Hunderten Millionen Bildern mit Beschreibungen hat das Modell ein sehr gutes Gespür dafür entwickelt, wie Bilder typischerweise aussehen: wie Licht fällt, wie Fell aussieht, wie Perspektive funktioniert.
Wie der Text mitlenkt
Damit nicht irgendein Bild entsteht, bekommt das Modell bei jedem Schritt die Beschreibung mit – als Embedding aus einem Textmodell. Über Aufmerksamkeit kann jede Bildregion auf die Wörter achten, die für sie wichtig sind.
Text-Encoder
Ein Sprachmodell-Teil, der die Beschreibung in Vektoren übersetzt.
Guidance
Ein Regler dafür, wie streng sich das Bild an den Text halten soll. Zu wenig: beliebig. Zu viel: übersättigt und unnatürlich.
Latenter Raum
Gerechnet wird meist nicht auf den Pixeln, sondern auf einer stark komprimierten Darstellung. Erst am Ende wird daraus das große Bild. Das macht es viel schneller.
Anders als Sprachmodelle
| Sprachmodell | Diffusionsmodell | |
|---|---|---|
| Erzeugt | Token für Token, von links nach rechts | das ganze Bild gleichzeitig, immer schärfer |
| Ein Schritt ist | das nächste Wortstück | ein etwas weniger verrauschtes Gesamtbild |
| Zufall steckt in | der Auswahl jedes Tokens (Temperatur) | dem Startrauschen |
| Korrektur | einmal geschrieben, bleibt es stehen | jeder Schritt kann das ganze Bild noch verändern |
Die Grenzen verschwimmen inzwischen: Manche neueren Systeme erzeugen Bilder auch Token für Token in einem multimodalen Sprachmodell (siehe Multimodal), und es wird erforscht, Text per Diffusion zu erzeugen. Für Video wird das Diffusionsprinzip auf viele Bilder gleichzeitig ausgeweitet.
Typische Schwächen
Lange waren Hände und Schrift im Bild berüchtigt: sechs Finger, Buchstabensalat auf Schildern. Der Grund: Das Modell lernt, wie Dinge ungefähr aussehen – Hände sehen aus vielen Winkeln sehr unterschiedlich aus, und Buchstaben müssen exakt stimmen. Neuere Modelle sind darin viel besser geworden. Schwierig bleiben genaues Zählen („genau sieben Vögel“), komplexe räumliche Anordnungen und dieselbe Figur über viele Bilder hinweg gleich aussehen zu lassen.
Offene Fragen
Bildgeneratoren lernen aus riesigen Mengen Bilder aus dem Internet, darunter Werke von Künstlern, die nicht gefragt wurden. Ob und wann das rechtlich zulässig ist, wird in mehreren Ländern vor Gericht verhandelt. Dazu kommen Fragen nach Fälschungen echter Personen und der Kennzeichnung von KI-Bildern – etwa über unsichtbare Wasserzeichen oder Herkunftsangaben in den Bilddateien. Beispiele für KI-erzeugte Bilder zeigt die Galerie dieser Seite.
Für Entwickler übersetzt
| Begriff | Entspricht ungefähr |
|---|---|
| Diffusionsmodell | eine Funktion float[] entrausche(float[] bild, int schritt, float[] text), die in einer Schleife aufgerufen wird |
| Startrauschen / Seed | new Random(seed) – gleicher Seed, gleiche Beschreibung, gleiches Bild |
| Schritte | Iterationen eines Näherungsverfahrens: mehr ist genauer, aber langsamer |
| Latenter Raum | eine komprimierte Zwischendarstellung, wie ein verlustbehaftetes Format, in dem gerechnet und erst am Ende dekodiert wird |
float[] x = rauschen(new Random(seed), groesse); // Start: reiner Zufall
float[] t = textEncoder.embed("Leuchtturm bei Sonnenuntergang");
for (int s = SCHRITTE; s > 0; s--) {
float[] geschaetztesRauschen = modell.vorhersage(x, s, t);
x = entferneEinStueck(x, geschaetztesRauschen, s); // etwas klarer
}
Bild ergebnis = decoder.zuPixeln(x);