Dem Self-Attention-Mechanismus unter die Haube geschaut! #
Das Ziel von Self-Attention ist es, die wechselseitigen Abhängigkeiten zwischen Tokens im Satzkontext zu erkennen und zu gewichten.
Für jedes einzelne Token wird dabei ein neues kontextangepasstes Embedding berechnet – also ein neuer Merkmalsvektor, der die gewichteten Informationen aller Tokens im Satz berücksichtigt.
So entsteht für jedes Token eine neue Repräsentation, die seine Bedeutung im Kontext der anderen Tokens widerspiegelt.
Jedes Token beginnt mit einem eigenen Embedding aus der Embedding-Lookup-Tabelle: Möglicherweise „Zwei“ als Zahl, „schwarze“ als Farbe, „Katzen“ als Tier. Durch den Transformer-Mechanismus werden diese Informationen gemeinsam verarbeitet. So entsteht beim Token „Katzen“ ein neues, kontextangepasstes Embedding, das die Bedeutung des gesamten Satzes widerspiegelt – das Bild zweier schwarzer Katzen. (Reale Embeddings sind natürlich latent – wie wir bereits gesehen haben.)
Ein Transformer führt eine große Menge an Berechnungen durch – und das gleichzeitig für viele Tokens. Um all diese Berechnungen – von den Q/K/V-Transformationen bis zur Gewichtung der Kontextinformationen – effizient durchzuführen, braucht es ein Werkzeug, das viele Operationen parallel und blitzschnell ausführen kann.
➔ Hier kommen Matrizen ins Spiel …
Mathe? Keine Sorge! #
Um Self-Attention richtig zu verstehen, brauchen wir etwas Mathe – aber keine Angst, das ist handlich und intuitiv.
Die zwei wichtigsten Werkzeuge sind:
Vektoren: Listen von Zahlen (kennen wir bereits)
[0.3, -1.2, 4.7, ...]
Matrizen: Tabellen aus Zahlen – sie ermöglichen schnelle, parallele Berechnungen
[ 1 2 3 ]
[ 4 5 6 ]
[ 7 8 9 ]
Warum Matrizen? #
Das bahnbrechende Paper von Vaswani et al. („Attention is All You Need“) hat nicht nur eine revolutionäre Architektur vorgestellt, sondern sie auch vollständig auf Matrizenoperationen aufgebaut.
Dieser Ansatz bildet bis heute das Herzstück moderner Transformer-Modelle – darunter GPT, BERT und viele andere.
Die Rechenstruktur wurde seitdem nur leicht optimiert, die Grundidee ist aber nahezu unverändert übernommen worden.
Warum Matrizen so mächtig sind #
Matrizen haben zwei entscheidende Vorteile:
- Sie ermöglichen es, Millionen mathematische Operationen in einem Schritt durchzuführen – dank hochoptimierter Matrixmultiplikation.
- Sie lassen sich hervorragend auf GPUs parallelisieren – was sie ultra schnell macht.
Matrizen werden schon seit Jahrzehnten in der Computergrafik eingesetzt – besonders in einem Bereich, den fast jeder kennt: 3D-Spiele.
In den letzten Jahren ist die Qualität und der Realismus in Games regelrecht explodiert.
Hauptgrund dafür: Grafikkarten (GPUs) wurden immer leistungsfähiger und können Millionen von Vektor- und Matrizenberechnungen pro Sekunde durchführen.
Man könnte sagen: Power-Gamer haben den Weg bereitet, damit heutige Computer zu echten Matrizenspezialisten geworden sind – eine Entwicklung, von der KI-Modelle heute massiv profitieren.
Erlebe Matrizen in Aktion! #
In dieser 3D-Szene siehst du ein Raumschiff als anschauliches Beispiel:
Anstatt jeden Rechenschritt – wie Verschiebung, Rotation (um X-, Y- und Z-Achse), Skalierung usw. – einzeln auszuführen, wird das gesamte Modell inklusive Umgebung mit einer einzigen sogenannten Model-View-Projection-Matrix (MVP) transformiert.
Du kannst das Raumschiff dabei aus unterschiedlichen Perspektiven betrachten – ähnlich wie wir das später bei Transformationen der Embeddings tun, um Informationen gezielt aus verschiedenen Blickwinkeln zu erfassen.
👉 Probiere es aus: Du kannst dich mit der Maus oder Touch in der Szene frei bewegen!
- linke Maustaste: drehen,
- rechte Maustaste: verschieben,
- Scrollrad: zoomen.
Drei verschiedene Ansichten von jedem Token #
Jedes Token liegt ursprünglich als Embedding-Vektor vor – ein Vektor mit z. B. 768 Zahlen, die seine Bedeutung in einem hochdimensionalen Raum abbilden.
Aus diesem Embedding-Vektor werden drei neue Vektoren abgeleitet, die im Attention-Mechanismus unterschiedliche Funktionen erfüllen:
- ❓ Query (Q) Vektor – der mit den Keys der anderen Tokens auf Ähnlichkeit geprüft wird
- 🔐 Key (K) Vektor – der als Grundlage für diesen Vergleich dient
- 📦 Value (V) Vektor – dessen Inhalte – je nach Relevanz – in die neue Darstellung des Tokens einfließen
Die Transformation erfolgt durch drei verschiedene – beim Training mit Milliarden Wörtern erlernte – Gewichtsmatrizen: Eine für Query, eine für Key, eine für Value.
Kurzer Exkurs zur Multiplikation von Matrizen und Vektoren:
Multiplizierst du einen Vektor mit einer Matrix, wird der Vektor mit jeder Spalte der Matrix verrechnet – das ergibt einen neuen Vektor. Dabei muss die Länge des Vektors mit der Anzahl der Zeilen der Matrix übereinstimmen. Der Rechenschritt ist einfach – ich habe ihn dir hier aufgeschrieben:$$ \vec{v} \cdot W = \begin{bmatrix} \color{blue}{2} & \color{red}{3} & \color{green}{1} & \color{orange}{1} \end{bmatrix} \cdot \begin{bmatrix} \color{blue}{1} & \color{blue}{0} & \color{blue}{2} \\ \color{red}{2} & \color{red}{1} & \color{red}{1} \\ \color{green}{0} & \color{green}{1} & \color{green}{0} \\ \color{orange}{1} & \color{orange}{0} & \color{orange}{1} \end{bmatrix}= \begin{bmatrix} \color{blue}{9} & \color{red}{4} & \color{green}{8} \end{bmatrix} $$
$$ \color{blue}{2} \cdot \color{blue}{1} + \color{red}{3} \cdot \color{red}{2} + \color{green}{1} \cdot \color{green}{0} + \color{orange}{1} \cdot \color{orange}{1} = 2 + 6 + 0 + 1 = \color{blue}{9} $$ $$ \color{blue}{2} \cdot \color{blue}{0} + \color{red}{3} \cdot \color{red}{1} + \color{green}{1} \cdot \color{green}{1} + \color{orange}{1} \cdot \color{orange}{0} = 0 + 3 + 1 + 0 = \color{red}{4} $$ $$ \color{blue}{2} \cdot \color{blue}{2} + \color{red}{3} \cdot \color{red}{1} + \color{green}{1} \cdot \color{green}{0} + \color{orange}{1} \cdot \color{orange}{1} = 4 + 3 + 0 + 1 = \color{green}{8} $$
Für jedes Token wird das ursprüngliche Embedding x_i mit den drei Gewichtsmatrizen
W_Q, W_K und W_V multipliziert, um die drei Vektoren Query (Q), Key (K) und Value (V) zu erzeugen.
Diese bilden die Grundlage für den Self-Attention-Mechanismus – effizient und vollständig auf Matrizenoperationen basiert.
In der Praxis geschieht das effizient über eine Matrixmultiplikation für die gesamte Eingabesequenz X, wobei jede Zeile einem Token entspricht.
$$ \begin{aligned} \mathbf{Q} &= \mathbf{X} \cdot \mathbf{W}^Q \\ \mathbf{K} &= \mathbf{X} \cdot \mathbf{W}^K \\ \mathbf{V} &= \mathbf{X} \cdot \mathbf{W}^V \end{aligned} $$
Die Gewichtsmatrizen besitzen so viele Zeilen wie das ursprüngliche Embedding Merkmale enthält (z. B. 768) und so viele Spalten wie die Ziel‑Dimension vorgibt (z. B. 64).
Durch die Multiplikation wird der ursprüngliche Merkmalsvektor in einen neuen Merkmalsraum projiziert:
Einige Merkmale werden dabei verstärkt, andere abgeschwächt oder ausgeblendet.
So entsteht eine neue Repräsentation mit reduzierter Dimensionalität – zum Beispiel von 768 auf 64 Merkmale.
Wichtig nochmals zu erwähnen! #
- Alle Tokens verwenden dieselben Q-, K- und V-Matrizen.
Es gibt also keine token-spezifischen Gewichtungen, sondern eine einheitliche Transformation für alle Eingaben – das sorgt für maximale Effizienz und Generalisierung. - Die Q-, K- und V-Matrizen sind unabhängig voneinander.
Sie lassen sich nicht voneinander ableiten oder direkt in Beziehung setzen – jede von ihnen hat eigene Parameter, die ausschließlich durch das Training gelernt wurden. - Mit einer solchen Q/K/V-Projektion erfasst das Modell eine bestimmte Art semantischer Beziehung zwischen Tokens.
Ein einzelner Attention-Head bildet dabei nur eine Perspektive ab – z. B. „welches Subjekt gehört zu welchem Verb?“. - In einem vollständigen Transformer-Modell arbeiten jedoch mehrere Heads gleichzeitig und in mehreren gestapelten Layern.
So entstehen tausende Projektionen, die gemeinsam eine Vielzahl semantischer Muster und Abhängigkeiten erfassen – vom Satzbau bis zur Bedeutung über ganze Absätze hinweg – mehr dazu in einem späteren Abschnitt.
Warum wird die Dimension reduziert? #
- Die Reduktion spart Rechenzeit und Speicher – besonders bei großer Kontextgröße, da Attention-Berechnungen mit der Anzahl der Tokens stark zunehmen.
- Sie ermöglicht es, die wichtigsten Merkmale gezielter zu fokussieren und kompakter darzustellen.
- Der Transformer verwendet mehrere sogenannte Attention-Köpfe.
Damit jeder Kopf effizient arbeiten kann, wird die ursprüngliche Embedding-Dimension aufgeteilt – z. B. bei 12 Köpfen: 768 / 12 = 64 Dimensionen pro Kopf.
👉 In dieser interaktiven Demo wird das Prinzip anschaulich visualisiert #
Wie entstehen diese Q,K,V Matrizen? #
Die Q-, K- und V-Matrizen werden durch Training mit riesigen Textmengen gelernt – meist Milliarden von Wörtern.
Das Trainingsziel ist immer die Vorhersage des nächsten Tokens -> Fehlerhafte Vorhersagen führen zu Rückmeldungen über Backpropagation.Dadurch lernen die Matrizen:
- Query- und Key-Vektoren so anzupassen, dass relevante Tokens hohe Ähnlichkeit zueinander aufweisen
- Value-Vektoren so zu gestalten, dass nur kontextrelevante Informationen weitergegeben werden
So erkennt der Transformer, welche Tokens relevant füreinander sind #
Wir haben im Merkmalsraum bereits gesehen, dass semantisch ähnliche Tokens näher beieinander liegen.
Je kleiner der Winkel zwischen ihren Vektoren, desto ähnlicher sind sie sich – gemessen wird das über den Winkel im Merkmalsraum.
Cosine Similarity #
Die Cosine Similarity berechnet das normierte Skalarprodukt (engl. Dot-Produkt) von Query- und Key-Vektor – also das Skalarprodukt geteilt durch das Produkt ihrer Vektorlängen.
Das Ergebnis ist ein Wert zwischen –1 und +1, der beschreibt, wie ähnlich sich die beiden Vektoren in ihrer Richtung sind.
Wert | Bedeutung |
---|---|
+1 | exakt gleiche Richtung |
0 | orthogonal → keine Ähnlichkeit |
−1 | exakt entgegengesetzt |
So lässt sich berechnen, wie hoch die Aufmerksamkeit (Attention) zwischen Query und Key ist – also wie relevant dieses Token für das andere ist.
Was ist ein Skalarprodukt (engl. Dot-Produkt)? Das Skalarprodukt ist ein Spezialfall der Matrix-Vektor-Multiplikation:
Ein Zeilenvektor wird mit einem Spaltenvektor multipliziert – dabei entsteht eine einzige Zahl, die zeigt, wie ähnlich die Richtungen der beiden Vektoren sind.Für alle, die es genau wissen wollen – die Formel zur Cosinus-Similarity: $$ \cos_{\mathrm{sim}}(\mathbf{q}, \mathbf{k}) = \frac{\mathbf{q} \cdot \mathbf{k}}{|\mathbf{q}| \cdot |\mathbf{k}|} $$
Dieses Verfahren kommt in zahlreichen Anwendungen zum Einsatz – etwa in der semantischen Textsuche, Dokumentenverwaltung oder Wissensorganisation.
Wie berechnet der Transformer die Relevanz zwischen Tokens? #
Genau nach diesem Prinzip wird auch der Attention Score berechnet – also die Relevanz eines Tokens im Verhältnis zu allen anderen.
Aber: Vaswani et al. wären nicht Vaswani et al.,
wenn sie dafür nicht auch eine elegantere und effizientere Lösung gefunden hätten.
$$ \text{score} = \frac{\mathbf{q} \cdot \mathbf{k}^\top}{\sqrt{d_k}} $$
Das Transformer-Modell verwendet ebenfalls das Skalarprodukt von Query- und Key-Vektor, verzichtet dabei aber auf die aufwändige und teure Normierung der Cosine Similarity – also darauf, die Werte zwischen –1 und +1 zu begrenzen. Das spart Rechenzeit – und lässt zugleich die Stärke einzelner Merkmale, also die Vektorlängen, direkt in die Berechnung einfließen.
Allerdings stellte sich dabei ein kleines Problem:
Skalarprodukte in hochdimensionalen Räumen können sehr große Werte annehmen.
Das macht die spätere Gewichtung der Tokens schwierig, weil einzelne Werte dann übermäßig stark hervorgehoben werden, während andere kaum noch eine Rolle spielen.
Die einfach und kostengünstige Lösung:
Man teilt das Ergebnis des Skalarprodukts durch die Wurzel der Dimensionalität des Key-Vektors (also √dk).
Diese einfache Skalierung verhindert, dass die Werte zu groß werden und dabei ausufern.
👉 Token-Relevanz: Probiere aus, wie sich Winkel und Dimensionen auf Cosine Similarity und Dot-Produkt auswirken #
Was bedeutet das T bei den Keys?
Das „T“ steht für Transponierung – dabei werden Zeilen und Spalten vertauscht.
Der Key-Vektor wird also in einen Zeilenvektor umgewandelt, damit das Skalarprodukt mit dem Query-Vektor korrekt berechnet werden kann.
Attention Attention! #
Wie wir den Attention Score – also die Relevanz zwischen zwei Tokens – berechnen, wissen wir nun.
Jetzt berechnen wir diese Scores für alle möglichen Kombinationen von Tokens im Satzkontext.
Die Attention Score Matrix #
Dazu erstellen wir eine Tabelle: Alle Tokens stehen sowohl in den Zeilen (als Query) als auch in den Spalten (als Key).
An jedem Schnittpunkt wird das Skalarprodukt zwischen Query- und Key-Vektor berechnet – das ergibt den Attention Score.
So entsteht eine vollständige Attention-Matrix, die zeigt, wie stark jedes Token auf alle anderen achtet. (In dieser Attention-Matrix treten nur positive Scores auf, obwohl negative ebenfalls möglich wären.)
Die Attention-Score-Matrix hat die Größe n × n – das heißt: Rechen- und Speicheraufwand wachsen quadratisch mit der Länge des Kontextfensters.
Deshalb sind in der Praxis oft nur einige Tausend Tokens effizient möglich.
Kontextfenster mit 100.000 Tokens funktionieren nur durch Optimierungen wie Sparse Attention oder Segmentierung.
In der Produktion wird die Berechnung der Attention-Scores effizient in einem einzigen Schritt durchgeführt – durch das Matrixprodukt der Query-Matrix mit der transponierten Key-Matrix. Dadurch erhält man direkt alle Scores der Attention-Matrix auf einmal. $$ \text{score} = \frac{\mathbf{Q} \cdot \mathbf{K}^\top}{\sqrt{d_k}} $$ (Vektoren werden üblicherweise mit Kleinbuchstaben geschrieben (zum Beispiel: q, k, v), Matrizen hingegen mit Großbuchstaben (zum Beispiel: Q, K, V).)
Jetzt zählen die wahren Werte! #
Im nächsten Schritt kommen endlich die Value-Vektoren ins Spiel.
Jetzt entscheidet sich, welche Informationen aus dem Kontext auf welches Token übertragen werden.
Das geschieht zeilenweise, also für jedes Query-Token von oben nach unten: Die gewichtete Summe der Value-Vektoren ergibt für jedes Token ein neues, kontextabhängiges Embedding.
Doch bevor wir loslegen, müssen wir noch ein Problem lösen …
Bitte nicht schummeln … #
Wenn wir für jedes Token alle Attention Scores im Satz berücksichtigen, könnte das Modell auch auf Tokens zugreifen, die erst später folgen – und damit Informationen nutzen, die es zu diesem Zeitpunkt eigentlich noch gar nicht kennen dürfte.
Das widerspricht der Idee eines autoregressiven Decoders, der bei der Vorhersage ausschließlich auf frühere Tokens zugreifen darf.
Die Attention-Maske #
Wie verhindern wir diese Schummelei?
Mit einem einfachen Trick: Wir verwenden eine Maske. Dabei werden alle Scores, die sich auf zukünftige Tokens beziehen, ausgeblendet – oder etwas technischer: Sie werden durch einen sehr kleinen Wert ersetzt, in der Regel −∞.
Wird anschließend die Gewichtung (Softmax) angewendet, werden diese Positionen automatisch auf null gesetzt – und damit vollständig ignoriert.
Welches Token trägt wie viel bei? #
Mit der Attention-Matrix wissen wir nun, welche Tokens einander Aufmerksamkeit schenken. Doch wie genau beeinflussen diese Scores, welche Merkmale ein Token von anderen übernimmt?
Die zentrale Idee: Tokens erhalten im Kontext nicht nur Aufmerksamkeit, sondern übernehmen auch Merkmale – und zwar aus den Value-Vektoren der Tokens, auf die sie sich fokussieren.
Das Team um Vaswani hat dafür einen eleganten Mechanismus entwickelt:
Man geht zeilenweise durch die Attention-Matrix – also Token für Token – und berechnet für jedes Ziel-Token, welche anderen Tokens in der Zeile wie stark beitragen.
Allerdings: Die rohen Attention-Scores sind noch nicht direkt geeignet zum Rechnen – sie sind nicht skaliert, nicht normiert, und schwer vergleichbar.
Deshalb brauchen wir eine Funktion, die Ordnung in diese Werte bringt mit denen wir zuverlässig gewichten können.
Die Rolle der Softmax-Funktion #
Hier kommt die Softmax-Funktion ins Spiel.
Sie ist eine mathematische Methode, mit der sich eine Liste von Zahlen in relative Gewichtungen umrechnen lässt.
Dabei wird jeder Wert zunächst durch die Exponentialfunktion verstärkt und anschließend so normalisiert, dass alle Ergebnisse zwischen 0 und 1 liegen und ihre Summe genau 1 ergibt.
So entstehen proportionale Gewichtungen: Größere Eingabewerte erhalten mehr Gewicht, kleinere weniger – so wird die Auswahl gezielt auf die relevantesten Tokens gelenkt.
Die Softmax-Funktion liefert uns damit für jedes Token in einer Attention-Zeile genau den Multiplikator, mit dem sein Value-Vektor gewichtet in das Ziel-Token einfließt.
Die Softmax-Werte einer Zeile ergeben immer genau 1 – das garantiert, dass die resultierende Kombination der Value-Vektoren stabil und ausgewogen ist.
👉 Probiere aus, wie sich die Softmax-Gewichtungen verändern, wenn du die Score-Werte anpasst:
Für alle, die es wieder genau wissen wollen – die Formel der Softmax-Funktion: $$ \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j}} $$
Das neue Embedding entsteht #
Jetzt haben wir alles beisammen:
- Die Attention-Matrix zeigt, wie stark ein Token auf andere achtet.
- Die Softmax-Funktion wandelt diese Werte in Gewichtungen um.
- Die Value-Vektoren enthalten die Merkmale, die weitergegeben werden.
Nun berechnen wir für jedes Token die gewichtete Summe der Value-Vektoren – mit den Softmax-Werten als Multiplikatoren.
Das Ergebnis ist ein neuer, kontextsensitiver Merkmalsvektor – also das neue Embedding.
Dieser Vektor fasst zusammen, welche Informationen aus dem gesamten Satzkontext für das aktuelle Token wichtig sind.
Die Formel, die gerade die Welt verändert! #
$$ \cancel{\boldsymbol{E = mc^2}} $$
$$ \mathbf{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \mathbf{softmax}\left( \frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{d_k}} + \mathbf{M} \right)\mathbf{V} $$
Der gesamte Vorgang der Self-Attention, den wir hier beschrieben haben, wurde von Vaswani und seinem Team in einer einzigen eleganten Formel zusammengefasst.
Alle Hochachtung für diesen genialen Mechanismus – an Vaswani, das gesamte Forschungsteam und natürlich auch an all jene, die zuvor den Weg dafür bereitet haben.
An heutigen Tools wie ChatGPT, Gemini und vielen anderen sehen wir Entwicklungen, die wir noch vor wenigen Jahren für undenkbar gehalten hätten.
Und es ist sehr wahrscheinlich, dass wir schon bald weitere emergente Phänomene erleben werden – Entwicklungen, die unsere heutige Vorstellungskraft nicht nur fordern, sondern weit übersteigen.
Wie geht es nun weiter? #
Mit der Self-Attention haben wir nun ein Embedding erzeugt, das für jedes Token – insbesondere das letzte („schläft“) – den gesamten Kontext berücksichtigt.
Was jetzt noch fehlt: Dieses Embedding muss einem konkreten nächsten Token zugeordnet werden.
Dafür kommt ein weiteres neuronales Netz ins Spiel: ein Feedforward-Layer, der das Embedding weiterverarbeitet – und dabei hilft, logische und semantische Muster zu erkennen.
Am Ende erzeugt ein Decoder eine Wahrscheinlichkeitsverteilung über das Vokabular – und wählt das wahrscheinlichste nächste Token aus.
Wie genau das funktioniert, sehen wir im nächsten Kapitel.
© 2025 Oskar Kohler. Alle Rechte vorbehalten. Hinweis: Der Text wurde manuell vom Autor verfasst. Stilistische Optimierungen, Übersetzungen sowie einzelne Tabellen, Diagramme und Abbildungen wurden mit Unterstützung von KI-Tools vorgenommen.