Attention Mechanism
Ein Aufmerksamkeitsmechanismus gewichtet Eingabemerkmale anhand ihrer Relevanz mithilfe von Abfragen, Schlüsseln und Werten. Behandelt die Mathematik, verschiedene Arten von Aufmerksamkeit und Aufmerksamkeit im Vergleich zu Faltung.
Ein Aufmerksamkeitsmechanismus ist eine Operation in einem neuronalen Netz, die jede Ausgabe als gewichteten Durchschnitt der Eingabemerkmale berechnet. Die Gewichte hängen davon ab, wie relevant jede Eingabe für das gerade verarbeitete Element ist. Die Relevanz wird durch den Vergleich eines Abfragevektors mit Schlüsselvektoren bewertet. Die resultierenden Werte gewichten die zugehörigen Wertvektoren. Aufmerksamkeit wurde 2014 eingeführt für die maschinelle Übersetzung. Dort ermöglichte sie einem Decoder mit einem rekurrenten neuronalen Netz (RNN), auf jedes Wort der Quelle zurückzublicken, statt den ganzen Satz in einen Vektor fester Länge zu pressen. Der Transformer von 2017 baute eine gesamte Architektur auf Aufmerksamkeit auf. Sie ist heute die zentrale Operation großer Sprachmodelle, von Vision Transformern und vieler Objekterkennungsmodelle.
So funktioniert Attention#
Aufmerksamkeit nutzt drei gelernte lineare Projektionen ihrer Eingabe. Die Abfrage (Q) beschreibt, wonach das aktuelle Token sucht, jeder Schlüssel (K) beschreibt, was ein Token bietet, und jeder Wert (V) enthält den weiterzugebenden Inhalt. Das Modell vergleicht die Abfrage mit jedem Schlüssel, wandelt die Vergleichswerte in Gewichte um und gibt die gewichtete Summe der Werte zurück. Wenn ein Übersetzungsmodell „The black cat“ mit „noir“ wiedergibt, erzielt die Abfrage dieses Schritts beim Schlüssel für „black“ den höchsten Wert, obwohl das Adjektiv im Französischen nach dem Substantiv steht.
Mehrkopf-Aufmerksamkeit führt mehrere solcher Berechnungen parallel aus, jeweils mit eigenen Projektionen geringerer Dimension, und fügt die Ergebnisse zusammen. Verschiedene Köpfe können sich dann innerhalb derselben Schicht auf unterschiedliche Beziehungen spezialisieren.
Skaliertes Skalarprodukt der Aufmerksamkeit#
Die Aufmerksamkeit des Transformers wird als Attention(Q, K, V) = softmax(QKᵀ / √d_k) V notiert. Jede Abfrage wird über ein Skalarprodukt mit jedem Schlüssel verglichen. Die Werte werden durch die Quadratwurzel der Schlüsseldimension d_k geteilt, damit sie nicht mit der Vektorgröße wachsen und Softmax sättigen. Softmax wandelt die Werte jeder Abfrage in Gewichte um, deren Summe 1 beträgt. Die Ausgabe ist die gewichtete Summe der Wertvektoren.
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# Abfragen, Schlüssel und Werte für eine Sequenz aus 4 Token mit jeweils 8 Dimensionen
q, k, v = torch.randn(3, 4, 8).unbind(0)
# Jede Abfrage mit jedem Schlüssel vergleichen, durch sqrt(d_k) skalieren und jede Zeile mit Softmax normalisieren
weights = (q @ k.T / k.shape[-1] ** 0.5).softmax(dim=-1)
# Jedes Ausgabetoken ist ein gewichteter Durchschnitt der Wertvektoren
output = weights @ v
print("Attention weights of token 0:", [round(w, 3) for w in weights[0].tolist()])
print("Matches PyTorch SDPA:", torch.allclose(output, F.scaled_dot_product_attention(q, k, v), atol=1e-6))Die Ausgabe enthält [0.121, 0.741, 0.106, 0.032] und True: Token 0 bezieht 74 % seiner Ausgabe aus dem Wertvektor von Token 1, seine vier Gewichte summieren sich zu 1, und das manuelle Ergebnis stimmt mit der optimierten Variante von PyTorch scaled_dot_product_attention überein. Diese verwendet auf unterstützten GPUs speichereffiziente Kernel wie FlashAttention.
Arten von Aufmerksamkeit#
- Selbstaufmerksamkeit: Abfragen, Schlüssel und Werte stammen alle aus derselben Sequenz. Dadurch sammelt jedes Token Kontext von allen anderen Token. Sie ist die Aufmerksamkeitsform in Transformer-Encodern und ViTs.
- Kreuzaufmerksamkeit: Die Abfragen stammen aus einer Sequenz, die Schlüssel und Werte aus einer anderen. Ein Übersetzungsdecoder richtet seine Aufmerksamkeit auf den Ausgangssatz, ein textgesteuertes Diffusionsmodell auf die Eingabeaufforderung und die Objektabfragen eines DETR-Decoders auf Bildmerkmale.
- Kausale Aufmerksamkeit: Eine Maske verhindert, dass jedes Token spätere Token berücksichtigt. So erzeugt ein Sprachmodell Text von links nach rechts, und Schlüssel und Werte früherer Token können in einem KV-Cache gespeichert werden.
- Effiziente Aufmerksamkeit: Sparse Aufmerksamkeit, Gleitfenster-Aufmerksamkeit und lineare Aufmerksamkeit reduzieren die quadratischen Kosten des Vergleichs jedes Tokens mit allen anderen. Deformierbare Aufmerksamkeit tastet nur einige wenige gelernte Punkte um jede Referenzposition ab.
- Kanalaufmerksamkeit in CNNs: Squeeze-and-Excitation-Netzwerke gewichten die Kanäle einer Merkmalskarte anhand ihres globalen Durchschnitts neu. Diese kostengünstige Form der Aufmerksamkeit bildete die Grundlage für den siegreichen Klassifizierungsbeitrag bei ILSVRC 2017.
Attention und Faltung#
Eine Faltung wendet an jeder Position denselben kleinen Filter an. Daher sieht jede Ausgabe ein festes lokales Fenster, und die Gewichte hängen nicht vom Bild ab. Aufmerksamkeit berechnet ihre Gewichte anhand des Inhalts und kann jede beliebigen zwei Positionen innerhalb einer Schicht verknüpfen. Der Nachteil: Die Kosten wachsen quadratisch mit der Anzahl der Token. Ein 640×640-Bild ergibt bei Stride 32 ein 20×20-Raster mit 400 Token und 160.000 Abfrage-Schlüssel-Paaren. Das Stride-8-Raster desselben Bildes hat 6.400 Token und fast 41 Millionen Paare. YOLO26 platziert seine Aufmerksamkeitsblöcke entsprechend: Der C2PSA-Block am Ende des Backbones und ein aufmerksamkeitsbasierter C3k2-Block im Neck führen beide Mehrkopf-Selbstaufmerksamkeit auf der 20×20-Merkmalskarte mit Stride 32 aus. Alle Ebenen mit höherer Auflösung bleiben faltungsbasiert.










