Tokenwerk · Das LLM-Lehrbuch

Kapitel 17 · III · Den Transformer bauen · 6 Minuten

Self-Attention ohne Geheimnisse

Eine Position mischt Informationen aus anderen Positionen. Wir rechnen erst drei Beiträge aus und lesen danach die Attentionformel.

Was unseren Positionsvektoren noch fehlt

Ein Embedding ist die gelernte Zahlenliste zu einer Token-ID. Dasselbe Token bekommt zunächst denselben Tabellenvektor, auch wenn es in verschiedenen Sätzen vorkommt. Wir brauchen einen Rechenschritt, durch den eine Textposition Informationen von anderen Positionen aufnehmen kann.

Diesen Schritt nennt man Self-Attention. „Self“ bedeutet, dass die Informationen aus derselben Eingabefolge stammen. „Attention“ beschreibt hier eine berechnete Gewichtung. Es ist weder bewusstes Aufpassen noch eine fertige Erklärung dafür, wie das Modell denkt.

Wir beginnen mit genau einer lesenden Position und drei verfügbaren Informationsquellen. Die Frage lautet: Wie stark soll jede Quelle in die neue Zahlenliste eingehen?

Zuerst eine gewichtete Mischung

Stell dir drei Values vor: 10, 20 und 30. Value heißt in diesem Zusammenhang „der zu übertragende Inhalt“. Zur Übersicht ist jeder Inhalt hier nur eine Zahl. In einem echten Modell ist er eine Zahlenliste.

Mit Gewichten 0,5, 0,25 und 0,25 lautet die Mischung: 0,5×10+0,25×20+0,25×30=17,5. Ein größeres Gewicht übernimmt mehr von der entsprechenden Quelle. Die Gewichte ergeben zusammen eins.

Diese Rechnung kennst du bereits als gewichtete Summe. Neu ist jetzt, dass die Gewichte aus dem aktuellen Text berechnet werden, statt feste, direkt trainierte Verbindungsgewichte zu sein.

Drei Rollen für dieselbe Textposition

Aus dem inneren Zahlenvektor jeder Position erzeugen gelernte lineare Schichten drei verschiedene Zahlenlisten:

Name Übersetzung und Rolle
Query, kurz Q „Suchanfrage“: Mit welchem Muster vergleicht die lesende Position die Quellen?
Key, kurz K „Vergleichsmerkmal“: Welche Zahlenliste bietet eine Quelle zum Vergleich an?
Value, kurz V „Inhalt“: Welche Zahlenliste wird bei der Mischung übernommen?

Die Suchanalogie erklärt nur die Rollen. Das Modell schreibt keine menschlichen Suchbegriffe und schaut nicht in eine externe Datenbank. Es berechnet Zahlenlisten durch Multiplikationen und Summen. Projektion ist der Fachname für eine solche gelernte lineare Umrechnung in einen neuen Vektorraum; für uns genügt zunächst „andere Zahlenliste berechnen“.

Query und Key vergleichen

Unsere Query ist [1,0]. Die drei Keys sind [1,0], [0,1] und [1,1]. Wir vergleichen Query und jeden Key durch ein Skalarprodukt: jeweils passende Komponenten multiplizieren und addieren.

Quelle Rechnung Vergleichsscore
Key 1 = [1,0] 1×1 + 0×0 1
Key 2 = [0,1] 1×0 + 0×1 0
Key 3 = [1,1] 1×1 + 0×1 1

Die erste und die dritte Quelle erhalten hier denselben Score. Das sagt nur etwas über diese gewählten Zahlen aus. Es beweist noch keine semantische Ähnlichkeit echter Wörter.

Scores in Mischgewichte verwandeln

Unsere Query und Keys enthalten jeweils zwei Komponenten. Diese Länge nennen wir d=2. Wir teilen die Scores durch die Quadratwurzel von d, also ungefähr 1,414. Dadurch werden [1,0,1] zu ungefähr [0,707;0;0,707].

Diese Skalierung hält Scores bei wachsenden Vektorgrößen unter bestimmten typischen Anfangsannahmen in einer handlicheren Größenordnung. Für die erste Rechnung reicht: Es ist eine festgelegte Größenanpassung vor Softmax, kein neu gelernter Parameter.

Jetzt wenden wir die bereits erklärte Softmax an. Die Gewichte werden ungefähr [0,401;0,198;0,401]. Sie sind positiv und ergeben zusammen eins. Damit übernimmt unsere Position ungefähr 40,1 Prozent von Value 1, 19,8 Prozent von Value 2 und 40,1 Prozent von Value 3.

Die neue Ausgabe berechnen

Mit Values 10, 20 und 30 erhalten wir ungefähr:

0,401×10 + 0,198×20 + 0,401×30 = 20.

Dass genau 20 entsteht, liegt an der symmetrischen Wahl dieses Beispiels. Änderst du im Experiment nur Value 3, bleiben die Gewichte gleich, aber die Ausgabe verändert sich. Änderst du dagegen die Query, verändern sich die Gewichte. So kannst du Vergleich und übertragenen Inhalt auseinanderhalten.

Viele Positionen gleichzeitig rechnen

Für einen ganzen Text berechnen wir eine Query pro Position. Jede Query erhält ihre eigene Zeile von Vergleichsscores zu den Keys. Die entstehende Tabelle nennt man Scorematrix. Zeile bedeutet „wer liest“, Spalte bedeutet „von wem wird gelesen“.

Bei drei Textpositionen hat die Tabelle drei Zeilen und drei Spalten. Auf jede Zeile wenden wir Softmax getrennt an. Wir normieren also nicht alle neun Zahlen gemeinsam, sondern jede Auswahl einer lesenden Position für sich.

Die bekannte Rechnung in Kurzform

A=softmax⁡(QK⊤d),Y=AV.A=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt d}\right),\qquad Y=AV.
Zeichen Bedeutung in der gerade erklärten Rechnung
Q Tabelle aller Query-Vektoren
K Tabelle aller Key-Vektoren
K⊤K^\top Dieselbe Key-Tabelle mit vertauschten Zeilen und Spalten
QK⊤QK^\top Alle Query-Key-Skalarprodukte als gemeinsame Tabelle
d Anzahl der Komponenten je Query beziehungsweise Key
A Tabelle der Mischgewichte nach zeilenweiser Softmax
V Tabelle der zu mischenden Inhalte, also Values
Y Tabelle der neuen Ausgaben, je eine pro lesender Position

Lies die Formel: Vergleiche Queries mit Keys, skaliere die Scores, berechne pro Zeile Softmax und mische mit diesen Gewichten die Values. Das Komma in der Formel trennt zwei aufeinanderfolgende Rechenschritte.

Beachte die Namensüberschneidung: In diesem Abschnitt bedeutet großes V die Value-Tabelle. In Formbeschreibungen wie [B,T,V] steht V dagegen für die Vokabulargröße. Solche Wiederverwendung ist in Fachtexten üblich, aber verwirrend. Wir nennen die jeweilige Rolle ausdrücklich.

Was trainiert wird und was neu berechnet wird

Die Gewichte der linearen Schichten, die Q, K und V erzeugen, sind Modellparameter. Sie werden beim Training verändert. Die Attentiongewichte A sind dagegen Zwischenwerte, die für jede Eingabe neu entstehen. Sie stehen nicht als eine für alle Texte feste Tabelle im Modell.

Backpropagation kann auch durch die Skalarprodukte, Softmax und Mischung rechnen. Dadurch lernen die Projektionen, welche Vergleiche für das eigentliche nächste-Token-Ziel nützlich sind. Es gibt nicht für jede Position einen von Menschen vorgegebenen Attentionplan.

Eine offene Frage führt ins nächste Kapitel

Bis hierher durften alle Quellen an der Mischung teilnehmen. Beim Vorhersagen des nächsten Tokens darf eine Position aber keine zukünftige Antwort sehen. Wir müssen bestimmte Tabellenfelder sperren. Diese Einschränkung nennt man eine Maske. Das folgende Kapitel baut sie auf unsere eben erklärte Scorematrix auf.