Attention
Der Mechanismus hinter jedem modernen Sprachmodell: wie ein Token entscheidet, worauf es schaut, und warum der Aufwand quadratisch wächst.
Die Idee
Um „sie" in einem Satz zu verstehen, müssen Sie wissen, worauf es sich bezieht. Sie schauen also zurück und gewichten: Das Substantiv drei Wörter vorher ist wahrscheinlich gemeint, der Nebensatz davor eher nicht.
Attention macht genau das, nur für jedes Token gleichzeitig und mit Zahlen statt Intuition.
Die drei Rollen
Jedes Token erzeugt drei Vektoren:
| Rolle | Bedeutung |
|---|---|
| Query | Wonach dieses Token sucht |
| Key | Wofür dieses Token zuständig ist |
| Value | Was es beisteuert, wenn es ausgewählt wird |
Jede Query wird mit allen Keys verglichen. Wo die Übereinstimmung groß ist, geht der zugehörige Value stark in das Ergebnis ein.
Von Hand
import numpy as np
def softmax(x):
x = x - x.max(axis=-1, keepdims=True) # numerisch stabil
e = np.exp(x)
return e / e.sum(axis=-1, keepdims=True)
rng = np.random.default_rng(0)
s, d = 6, 16 # 6 Token, 16 Dimensionen
Q, K, V = (rng.normal(size=(s, d)) for _ in range(3))
scores = Q @ K.T / np.sqrt(d) # Skalierung ist nicht optional
# Kausale Maske: Token duerfen nicht in die Zukunft sehen.
maske = np.triu(np.ones((s, s)), k=1).astype(bool)
scores[maske] = -np.inf
A = softmax(scores)
aus = A @ V
print(A.round(2)[3]) # Zeile 3: worauf Token 4 achtet
print(A.sum(axis=-1)) # jede Zeile summiert sich zu 1Mehrere Köpfe
Statt einer Attention mit 4096 Dimensionen rechnet man 32 Köpfe mit je 128 Dimensionen. Jeder Kopf kann sich auf eine andere Art von Beziehung spezialisieren, Syntax, Bezug, Position, Thema. Die Ergebnisse werden aneinandergehängt und durch eine weitere Matrix geschickt.
Die Formel
Warum die Skalierung nötig ist
Für zufällige Vektoren mit unabhängigen Komponenten der Varianz 1 hat das
Skalarprodukt q·k die Varianz d_k. Bei d_k = 128 ist die Standardabweichung
der Werte also rund 11,3. Softmax auf Werten dieser Größenordnung ist praktisch
ein Maximum: eine Komponente bekommt fast das gesamte Gewicht, alle anderen fast
null, und der Gradient verschwindet. Die Division durch √d_k bringt die Varianz
zurück auf 1.
Der Aufwand
Bei s = 4096, d = 4096: Projektionen 2,7e11, Attention 1,4e11, noch
vergleichbar. Bei s = 32768: Projektionen 2,2e12, Attention 8,8e12, also
das Vierfache. Ab etwa s = d dominiert der quadratische Term vollständig.
FlashAttention
Der Ausweg besteht nicht darin, weniger zu rechnen, sondern die Matrix nie vollständig zu speichern. FlashAttention verarbeitet Blöcke, hält sie im schnellen Speicher der Recheneinheit und aktualisiert das Softmax-Ergebnis schrittweise mit einem laufenden Maximum und einer laufenden Summe.
Ergebnis: Der Speicherbedarf sinkt von O(s²) auf O(s), und die Laufzeit sinkt
trotz gleicher Operationszahl, weil der langsame Kartenspeicher nicht mehr der
Engpass ist. Ohne dieses Verfahren wären Kontextlängen über etwa 8.000 Token
praktisch nicht bezahlbar. Siehe
Das Kontextfenster, technisch.
Passende Kurse und Quellen
Attention Is All You Need
Die Arbeit von 2017, die den Transformer einführte. Alles, was heute Sprachmodell heißt, steht auf diesen acht Seiten.
Die acht Seiten, auf denen alles steht, was heute Sprachmodell heißt.
Dive into Deep Learning
Lehrbuch mit ausführbarem Code neben jeder Herleitung. Jedes Kapitel lässt sich als Notebook öffnen und nachrechnen.
Für alle, die beim Lesen mitrechnen wollen; jedes Kapitel lässt sich als Notizbuch öffnen.
FlashAttention
Aufmerksamkeit berechnen, ohne die quadratische Matrix je vollständig abzulegen. Die Voraussetzung für lange Kontexte.
Für alle, die lange Kontexte betreiben und wissen müssen, woran der Speicher hängt.
Neuronale Netze, visuell erklärt
Von der einzelnen Gewichtung über Gradientenabstieg bis zum Aufmerksamkeitsmechanismus. Die beste verfügbare Anschauung für das, was die Formeln beschreiben.
Vor dem ersten Lehrbuch anzusehen, nicht danach. Spart Wochen an Verwirrung.