positional encoding
En teknik, der tilføjer positionsinformation til inputrepræsentationer i transformer-modeller, så modellen kan skelne rækkefølgen af elementer i en sekvens.
Kort fortalt
Positional encoding fortæller en transformer-model, hvilken rækkefølge ordene i en sætning kommer i.
- Kategori
- teknik
- Niveau
- øvet
- Udtale
- /pəˈzɪʃənəl ɪnˈkoʊdɪŋ/
Betydninger
1- 1
Den oprindelige metode til at indkode absolut position ved hjælp af sinus- og cosinusfunktioner med forskellige frekvenser.
- I transformer-modellen adderes positional encoding til de indlejrede token-vektorer, før de behandles af self-attention. — Vaswani et al., 2017
- Positional encoding gør det muligt for modellen at generalisere til længere sekvenser end dem, den er trænet på. — Vaswani et al., 2017
Hvornår bruges det
Positional encoding anvendes i alle transformer-baserede sprogmodeller som GPT, BERT og T5. Den lægges til token-embeddingerne, før de går igennem opmærksomhedsmekanismerne, så modellen kan udnytte sekvensielle relationer.
Formel
PE_{(pos,2i)} = sin(pos / 10000^{2i/d}) ; PE_{(pos,2i+1)} = cos(pos / 10000^{2i/d})Kodeeksempel
import numpy as np
def positional_encoding(max_len, d_model):
pe = np.zeros((max_len, d_model))
position = np.arange(0, max_len)[:, np.newaxis]
div_term = np.exp(np.arange(0, d_model, 2) * -(np.log(10000.0) / d_model))
pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
return peImplementering af sinusformet positional encoding i Python. Returnerer en matrix med form (max_len, d_model).
Oprindelse
Begrebet 'positional encoding' blev introduceret i forskningsartiklen 'Attention Is All You Need' (Vaswani et al., 2017) som en løsning på transformer-arkitekturens manglende evne til at opfatte rækkefølge.