English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

Gast
1 / ?

Breite teilt sich auf Heads auf

Ein einzelner Head erkennt ein Muster

Aktivität 67 behandelte scaled dot-product attention: ein Query-Vektor Q, ein Key-Vektor K, ein Value-Vektor V; berechne Q·Kᵀ/√d_k, Maske, Softmax, gewichte V. Ein Head lernt ein Beziehungs-Muster: vielleicht Subjekt-Verb-Einheit, vielleicht Paarung von Satzzeichen, vielleicht nichts Nützliches.


Multi-Head-Attention führt diese gleiche Operation parallel aus, mehrmals, auf verschiedenen Scheiben der Repräsentation eines Tokens. Zwölf parallele Heads. Zwölf mögliche Beziehungs-Muster. Heads spezialisieren sich allein durch Trainingsdruck; kein Architekt sagt Head 4, auf Verb-Zeit zu achten.


Die Split-Beziehung

ANDREA-120M setzt d_model = 768 & n_head = 12. Multi-Head-Attention teilt 768 in 12 Stücke von je 64 auf:


head_dim = d_model / n_head
64       = 768     / 12

Jeder Head arbeitet mit 64-dimensionalen Vektoren. Der Split funktioniert sauber: d_model muss durch n_head ohne Rest teilbar sein. Konfigurationen, die das verletzen, scheitern bei der Konfigurationsvalidierung, nicht zur Laufzeit.


Drei Modelle, drei Splits


Varianted_modeln_headhead_dim
ANDREA-12M3841232
ANDREA-120M7681264
ANDREA-480M15362464

Hinweis: ANDREA-12M & ANDREA-120M halten n_head=12 konstant; nur d_model & damit head_dim skalieren. ANDREA-480M verdoppelt die Anzahl der Köpfe auf 24 und hält head_dim=64 passend zu ANDREA-120M.

Berechnung von head_dim

Nehmen Sie an, eine hypothetische ANDREA-240M-Variante verwendet `d_model=1024` & `n_head=16`. Berechnen Sie `head_dim`. Erklären Sie dann in einem Satz, was bei der Konfigurationsvalidierung passieren würde, wenn ein Kollege `d_model=1024` & `n_head=15` vorschlagen würde.

Drei Matrizen pro Head oder eine große Matrix

Sicht pro Head

Jeder Head benötigt seine eigene Query-Projektion, Key-Projektion und Value-Projektion. Für Head h:


Q_h = X · W_Q^h    wobei W_Q^h die Form [d_model, head_dim] hat
K_h = X · W_K^h    wobei W_K^h die Form [d_model, head_dim] hat
V_h = X · W_V^h    wobei W_V^h die Form [d_model, head_dim] hat

X trägt die Eingabeform [batch, seq_len, d_model]. Nach der Projektion haben Q_h, K_h, V_h jeweils die Form [batch, seq_len, head_dim].


Geführte Ansicht

Die pro-Head-Matrizen liegen nebeneinander im Speicher. Eine einzige geführte Matrix W_Q mit der Form [d_model, d_model] erzeugt alle Heads auf einmal:


Q_fused = X · W_Q              # [batch, seq_len, d_model]
Q_per_head = reshape(Q_fused)  # [batch, n_head, seq_len, head_dim]

Die fused Matmul ersetzt 12 BLAS-Aufrufe durch einen einzigen. CUDA Tensor Cores erreichen ihre maximale Durchsatzleistung bei Matmuls dieser Größe; pro-Head-Matmuls würden die Hardware unterauslasten.


Parameteranzahl

Drei fusionierten Matrizen W_Q, W_K, W_V, jeweils d_model × d_model. Plus die Ausgabprojektion W_O, ebenfalls d_model × d_model. Für ANDREA-120M:


params pro Layer-Attention = 4 × 768² = 2.359.296 ≈ 2,36M
params über 12 Layer      = 12 × 2,36M ≈ 28,3M

Ungefähr ein Viertel der Gesamtparameter von ANDREA-120M befindet sich in den Attention-Projektionen. Die restlichen drei Viertel befinden sich im MLP-Unterschicht & Embeddings.

Benennung der Projektionen

ANDREA-120M hat `d_model=768` & `n_head=12`. Nennen Sie die vier Projektionsmatrizen in der Attention-Unterschicht eines Transformer-Blocks & geben Sie die Form jeder an (Zeilen × Spalten). Nennen Sie dann, welche der vier das Eingabe-X verwendet & welche die verketteten Head-Ausgaben.

Zwölf Vektoren werden zu einem

Multi-Head Attention Flow


Nachdem jeder Head berechnet hat

Jeder Head erzeugt ein Ausgabetensor der Form [batch, seq_len, head_dim]. Zwölf Heads erzeugen zwölf solcher Tensoren. Die Konkatenation entlang der Feature-Dimension stapelt sie wieder zusammen:


concat_output = concat(head_1, head_2, ..., head_12)
shape         = [batch, seq_len, n_head × head_dim]
= [batch, seq_len, 768]    # for ANDREA-120M

Concat kehrt das Split um. Die Gesamtdimension der Merkmale kehrt zu d_model zurück. Kein Informationsverlust in den Dimensionen; der Unterschied liegt darin, was jeder Chunk enthält: Der Chunk von Head 1 spiegelt das gelernte Attention-Muster von Head 1 wider.


Die Output-Projektion W_O

Die reine Konkatenation lässt die Heads isoliert: Die Ausgabe von Head 4 liegt neben der Ausgabe von Head 7, ohne voneinander zu wissen. Die Output-Projektion W_O der Form [d_model, d_model] mischt sie:


attention_output = concat_output · W_O
shape            = [batch, seq_len, d_model]

Nach W_O trägt jede Ausgabedimension eine gelernte lineare Kombination aller zwölf Köpfe. Informationen fließen frei zwischen den Köpfen durch diese einzige Matrixmultiplikation.


Warum sich Köpfe spezialisieren

Nichts in der Architektur zwingt Kopf 4, die Verbzeit zu lernen, oder Kopf 9, gepaarte Satzzeichen zu lernen. Die Spezialisierung entsteht durch Gradientendruck: Während des Trainings erhalten Köpfe, die redundant beitragen, kleinere Gradienten als Köpfe, die einzigartig beitragen. Über Tausende von Schritten siedelt sich jeder Kopf in eine Nische an, die den Gesamtverlust am effektivsten reduziert.


Empirisch zeigen trainierte Transformer Köpfe, die folgendes handhaben: positionsbezogene Muster (Kopf schaut auf das vorherige Token), syntaktische Muster (Kopf schaut auf die passende schließende Klammer), semantische Muster (Kopf schaut auf die neueste benannte Entität). Keine Labels trainieren diese Spezialisierung. Das Trainingssignal allein, propagiert durch W_O, sortiert die Köpfe.

Warum zwölf Köpfe, nicht ein breiterer Kopf

Stellen Sie sich eine Alternative vor: Ersetzen Sie 12 Köpfe mit je 64 Dim durch 1 Kopf mit 768 Dim. Die Gesamtanzahl der Parameter in den Projektionen bleibt gleich. Nennen Sie zwei unterschiedliche Gründe, warum die 12-Köpfe-Konfiguration die 1-Kopf-Konfiguration bei Sprachmodellierungsaufgaben übertrifft. Beziehen Sie sich in Ihrer Antwort auf Attention-Muster oder Trainingdynamiken.

Wie CUDA die Heads speichert

Ein einzelnes Tensor, umgeformt

ANDREA's Training-Engine microgpt_cuda.cu reserviert keine zwölf separaten Puffer für zwölf Heads. Sie reserviert ein fusioniertes Tensor & behandelt die Head-Dimension als Stride-Muster:


// nach Q = X · W_Q (eine Matmul, fusioniert über Heads)
// Q hat die Form [batch, seq_len, d_model]
// umformen zu    [batch, seq_len, n_head, head_dim]
// transponieren zu  [batch, n_head, seq_len, head_dim]
// jeder Head jetzt kontinuierlich in den inneren zwei Dimensionen

Die Transposition verschiebt n_head vor seq_len. Warum? Weil die nächste Operation (Q_h · K_h^T) den seq_len × head_dim-Ausschnitt jedes Heads kontinuierlich im Speicher benötigt. CUDA-MatMuls laufen schneller auf kontinuierlichen Tensoren.


Ein Kernel, viele Heads

Ein einzelner Attention-CUDA-Kernel läuft parallel über alle Heads. Jeder Thread-Block bearbeitet ein (Batch, Head)-Paar; Threads innerhalb des Blocks kooperieren bei der seq_len × head_dim-Kachel. Der Kernel weiß nie, dass er mehrere Heads verarbeitet; das Launch-Grid kümmert sich um die Parallelität.


Konfiguration spiegelt die Hardware wider

Die Wahl von n_head=12, head_dim=64 bei ANDREA-120M passt zu den Tensor-Cores der RTX 4090, die Matmul-Kacheln in Vielfachen von 16 bevorzugen. head_dim=64 = 4 × 16 passt exakt zur Kachelform. head_dim=32 (ANDREA-12M) passt ebenfalls, nutzt die Kachel aber unteraus. head_dim=72 würde nicht passen & würde Fallback-Kernel erzwingen.


Gesamtbild


SchrittOperationAusgabform
1. ProjektQ = X · W_Q (ebenso K, V)[batch, seq, d_model]
2. Umformen & transponierenAufteilung d_model → (n_head, head_dim)[batch, n_head, seq, head_dim]
3. Attention pro HeadSkaliertes Dot-Product pro Head[batch, n_head, seq, head_dim]
4. Transponieren & umformenZusammenführen (n_head, head_dim) → d_model[batch, seq, d_model]
5. Ausgabprojektionoutput = concat · W_O[batch, seq, d_model]

Fünf Schritte. Drei Matmuls berühren den Input (Q, K, V Projektionen). Ein Matmul berührt die verketteten Heads (W_O). Ein Attention-Kernel verarbeitet alle Heads parallel. ANDREA-120M führt alle fünf Schritte einmal pro Schicht aus, zwölf Schichten tief, bei jedem Forward-Pass.

Lesen des Pipelines

Gehen Sie durch, was mit der Repräsentation eines einzelnen Tokens X[i] (ein 768-dim Vektor) passiert, während es durch eine Multi-Head-Attention-Unterschicht in ANDREA-120M fließt. Erwähnen Sie: die Projektionen, denen es unterzogen wird, wie es aufgeteilt wird, was Attention damit macht, & wie es zu einem 768-dim Vektor zurückkehrt. Zeigen Sie die Dimensionen an jedem Schritt.