How to Implement Multi-Head Attention
Swipe um das Menü anzuzeigen
12345678910111213141516171819202122232425262728293031323334353637383940import 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)
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.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen