Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Hoe Multi-Head Attention te Implementeren | Transformercomponenten Bouwen
Transformers voor Natuurlijke Taalverwerking

bookHoe Multi-Head Attention te Implementeren

Veeg om het menu te tonen

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 werkt door hetzelfde self-attention-mechanisme onafhankelijk toe te passen over meerdere heads in parallel. Elke head gebruikt zijn eigen set gewichtsmatrices voor queries, keys en values (W_q, W_k en W_v), waarmee de input wordt geprojecteerd naar lager-dimensionale subruimtes. De input x in dit voorbeeld bevat drie tokens, elk met een embeddinggrootte van 6, en wordt opgesplitst in twee heads.

Voor elke head herhaalt de code de standaard self-attention-stappen: het berekent de query (Q), key (K) en value (V) matrices, berekent attentiescores door het nemen van het dotproduct van Q en K.T (juist geschaald), en gebruikt een softmaxfunctie om attentiegewichten te verkrijgen. Deze gewichten worden vervolgens gebruikt om de value-vectoren te combineren, wat de output van elke head oplevert.

Er is hier geen nieuw mechanisme; multi-head attention is simpelweg het self-attention-proces dat parallel wordt uitgevoerd voor elke head. Nadat alle heads zijn verwerkt, worden hun outputs samengevoegd langs de laatste dimensie. Deze aanpak stelt het model in staat om diverse relaties in de data vast te leggen, omdat elke head zich op verschillende aspecten van de input kan richten. De weergegeven resultaten illustreren hoe het meerdere keren uitvoeren van hetzelfde self-attention-mechanisme en het combineren van de resultaten een rijkere representatie voor elk token oplevert.

question mark

Hoe worden de outputs van verschillende attention-heads gecombineerd in multi-head attention?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 2

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 2. Hoofdstuk 2
some-alt