Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære How to Implement Multi-Head Attention | Opbygning af Transformer-Komponenter
Transformers til Naturlig Sprogbehandling

bookHow to Implement Multi-Head Attention

Stryg for at vise menuen

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 fungerer ved at anvende den samme self-attention-mekanisme uafhængigt på flere hoveder parallelt. Hvert hoved bruger sit eget sæt vægtmatricer til forespørgsler, nøgler og værdier (W_q, W_k og W_v), hvilket projicerer inputtet ind i lavere-dimensionelle delrum. Inputtet x i dette eksempel indeholder tre tokens, hver med en embedding-størrelse på 6, og deles op i to hoveder.

For hvert hoved gentager koden de standard self-attention-trin: den beregner forespørgsels- (Q), nøgle- (K) og værdimatricer (V), udregner attention-scorer ved at tage prikproduktet af Q og K.T (skaleret passende), og bruger en softmax-funktion til at opnå attention-vægte. Disse vægte bruges derefter til at kombinere værdivektorerne, hvilket producerer hvert hoveds output.

Der er ingen ny mekanisme her, multi-head attention er blot self-attention-processen udført parallelt for hvert hoved. Når alle hoveder er behandlet, sammenkædes deres output langs den sidste dimension. Denne tilgang gør det muligt for modellen at opfange forskellige relationer i dataene, da hvert hoved kan fokusere på forskellige aspekter af inputtet. De udskrevne resultater illustrerer, hvordan det at køre den samme self-attention-mekanisme flere gange og kombinere resultaterne giver en rigere repræsentation for hver token.

question mark

Hvordan kombineres output fra forskellige attention-hoveder i multi-head attention?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 2. Kapitel 2
some-alt