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. 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 pe

Implementering 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.

Afledte ord

1

Kilder

1