cross-attention
Cross-attention er en mekanisme i Transformer-modeller, hvor attention beregnes mellem to forskellige sekvenser, typisk en encoder og en decoder.
Kort fortalt
En teknik, der lader en model fokusere på relevante dele af én sekvens, når den behandler en anden sekvens.
- Kategori
- arkitektur
- Niveau
- øvet
- Udtale
- /krɒs əˈtɛnʃən/
Betydninger
2- 1
En attention-mekanisme, der beregner relevansen mellem elementer i to separate sekvenser, ofte brugt i encoder-decoder-modeller til at hente information fra encoder til decoder.
- I en maskinoversættelsesmodel bruger decoderens cross-attention-lag encoder-outputtet til at generere den næste målord. — Attention Is All You Need, 2017
- 2
I multi-modale modeller en attention-mekanisme, der forbinder repræsentationer fra forskellige modaliteter, f.eks. tekst og billeder.
- CLIP-modellen anvender cross-attention mellem billed- og tekst-embedding for at lære visuelle koncepter fra naturligt sprog. — Learning Transferable Visual Models From Natural Language Supervision, 2021
Hvornår bruges det
Cross-attention bruges primært i encoder-decoder-arkitekturer som i maskinoversættelse og tekstopsummering. I en Transformer-decoder hentes kontekst fra encoder-output via cross-attention-lag. Det anvendes også i multi-modale modeller, f.eks. til at forbinde billede- og tekstrepræsentationer.
Formel
CrossAttention(Q, K, V) = softmax(Q K^T / sqrt(d_k)) V, hvor Q kommer fra decoder, K og V fra encoder.Kodeeksempel
import torch
import torch.nn.functional as F
def cross_attention(query, key, value):
d_k = query.size(-1)
scores = torch.matmul(query, key.transpose(-2, -1)) / (d_k ** 0.5)
attn_weights = F.softmax(scores, dim=-1)
return torch.matmul(attn_weights, value)
# Eksempel: query (batch, heads, seq_len_q, d_k), key/value (batch, heads, seq_len_kv, d_k)
# query = decoder-output, key/value = encoder-outputEksempel på en cross-attention-funktion i PyTorch. Query stammer fra decoder, key og value fra encoder.
Oprindelse
Udtrykket 'cross-attention' opstod med Transformer-arkitekturen introduceret i 2017 for at skelne mellem attention over én sekvens (self-attention) og attention på tværs af to sekvenser.