Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen How to Implement Multi-Head Attention | Building Transformer Components
Transformer für Natural Language Processing

bookHow to Implement Multi-Head Attention

Swipe um das Menü anzuzeigen

12345678910111213141516171819202122232425262728293031323334353637383940
import numpy as np # Toy input: 3 tokens, embedding size 6 x = np.array([ [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], [0.6, 0.5, 0.4, 0.3, 0.2, 0.1], [0.2, 0.1, 0.4, 0.3, 0.6, 0.5], ]) # Multi-head attention parameters num_heads = 2 embed_size = x.shape[1] head_dim = embed_size // num_heads # Random weights for queries, keys, and values for each head np.random.seed(42) W_q = np.random.randn(num_heads, embed_size, head_dim) W_k = np.random.randn(num_heads, embed_size, head_dim) W_v = np.random.randn(num_heads, embed_size, head_dim) attention_outputs = [] for head in range(num_heads): # Linear projections Q = x @ W_q[head] K = x @ W_k[head] V = x @ W_v[head] # Scaled dot-product attention scores = Q @ K.T / np.sqrt(head_dim) attention_weights = np.exp(scores) / np.sum(np.exp(scores), axis=-1, keepdims=True) head_output = attention_weights @ V attention_outputs.append(head_output) # Concatenate outputs from all heads multi_head_output = np.concatenate(attention_outputs, axis=-1) print("Output from head 0:\n", attention_outputs[0]) print("Output from head 1:\n", attention_outputs[1]) print("Concatenated multi-head output:\n", multi_head_output)
copy

Multi-Head Attention funktioniert, indem derselbe Self-Attention-Mechanismus unabhängig und parallel über mehrere Köpfe hinweg angewendet wird. Jeder Kopf verwendet eigene Gewichtsmatrizen für Abfragen, Schlüssel und Werte (W_q, W_k und W_v) und projiziert die Eingabe in niedrigdimensionale Teilräume. Die Eingabe x in diesem Beispiel enthält drei Token mit einer Embedding-Größe von 6 und wird auf zwei Köpfe aufgeteilt.

Für jeden Kopf wiederholt der Code die Standard-Schritte der Self-Attention: Es werden die Matrizen für Abfrage (Q), Schlüssel (K) und Wert (V) berechnet, die Attention-Scores durch das Skalarprodukt von Q und K.T (angemessen skaliert) bestimmt und mit einer Softmax-Funktion die Attention-Gewichte erzeugt. Diese Gewichte werden verwendet, um die Wert-Vektoren zu kombinieren und so die Ausgabe jedes Kopfes zu erzeugen.

Es gibt keinen neuen Mechanismus; Multi-Head Attention ist einfach der Self-Attention-Prozess, der für jeden Kopf parallel ausgeführt wird. Nachdem alle Köpfe verarbeitet wurden, werden deren Ausgaben entlang der letzten Dimension zusammengefügt. Dieser Ansatz ermöglicht es dem Modell, vielfältige Beziehungen in den Daten zu erfassen, da jeder Kopf sich auf unterschiedliche Aspekte der Eingabe konzentrieren kann. Die ausgegebenen Ergebnisse zeigen, wie das mehrfache Ausführen desselben Self-Attention-Mechanismus und das Kombinieren der Resultate eine reichhaltigere Repräsentation für jedes Token liefert.

question mark

Wie werden die Ausgaben der verschiedenen Attention-Köpfe bei Multi-Head Attention kombiniert?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 2

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 2. Kapitel 2
some-alt