self-attention-mekanisme
En neural netværksmekanisme, der beregner vægtede repræsentationer af en sekvens ved at lade hvert element 'kigge på' alle andre elementer i sekvensen.
Kort fortalt
Self-attention lader en model se på hele input-sekvensen på én gang og afgøre, hvilke dele der er vigtigst for hver position.
- Kategori
- teknik
- Niveau
- øvet
- Udtale
- /sɛlf əˈtɛnʃən mekəˈnɪsmə/
Betydninger
2- 1
En matematisk operation, der beregner en vægtet sum af værdier for hvert element i en sekvens baseret på dets relation til alle andre elementer. Vægtene bestemmes af en alignment-funktion (typisk dot-product) efterfulgt af en softmax.
- Self-attention-mekanismen gør det muligt for en model at fange langdistanceafhængigheder i en tekst uden at øge antallet af parametre lineært. — Vaswani et al., 2017
- 2
Et neuralt netværkslag, der implementerer self-attention-operationen, ofte inklusive en projektion af input til query, key og value repræsentationer.
- I en transformer består hvert encoder-lag af et self-attention-lag efterfulgt af et feed-forward-lag. — Vaswani et al., 2017
Hvornår bruges det
Self-attention er den centrale byggesten i transformer-arkitekturer, hvor den bruges både i encoder og decoder. Den anvendes i sprogmodeller som GPT og BERT, og i vision transformers til billedbehandling. I praksis udnytter man multi-head self-attention for at fange forskellige relationsmønstre.
Formel
Attention(Q, K, V) = softmax(QK^T / √d_k) VKodeeksempel
import torch
import torch.nn.functional as F
def self_attention(Q, K, V):
d_k = Q.size(-1)
scores = torch.matmul(Q, K.transpose(-2, -1)) / (d_k ** 0.5)
attn_weights = F.softmax(scores, dim=-1)
output = torch.matmul(attn_weights, V)
return output, attn_weightsEn minimal implementering af self-attention i PyTorch, der tager query (Q), key (K) og value (V) som input og returnerer den vægtede sum samt attention-vægtene.
Oprindelse
Termen opstod med transformer-arkitekturen i artiklen 'Attention Is All You Need' (2017), hvor den erstattede tidligere attention-mekanismer, der krævede separate query- og key-værdier fra forskellige kilder.