Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Hoe Sinusvormige Positionele Codering te Genereren | Begrip van Transformer-Grondslagen
Transformers voor Natuurlijke Taalverwerking

bookHoe Sinusvormige Positionele Codering te Genereren

Veeg om het menu te tonen

Sinusoïdale positionele codering stelt het transformermodel in staat om woordvolgorde en positie te herkennen, ook al maakt het geen gebruik van recursie of volgorde-bewuste lagen. Elke positie wordt weergegeven door een uniek patroon van sinus- en cosinuswaarden verspreid over de embedding-dimensies.

Bekijk de onderstaande code.

1234567891011121314151617
import numpy as np def get_sinusoidal_positional_encoding(seq_length, embed_dim): position = np.arange(seq_length)[:, np.newaxis] div_term = np.exp( np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim) ) pe = np.zeros((seq_length, embed_dim)) pe[:, 0::2] = np.sin(position * div_term) pe[:, 1::2] = np.cos(position * div_term) return pe # Example usage: seq_length = 6 embed_dim = 8 encoding = get_sinusoidal_positional_encoding(seq_length, embed_dim) print(encoding)
copy

De code voor het genereren van sinusoïdale positionele codering kan stap voor stap worden begrepen:

1. Maak de positie-array

position = np.arange(seq_length)[:, np.newaxis]
  • Dit maakt een kolomvector waarbij elke rij een positie in de invoersequentie weergeeft, beginnend bij 0.
  • Als de sequentie zes tokens bevat, ziet deze array eruit als [0, 1, 2, 3, 4, 5] als kolom.

2. Bereken de frequentieschaalterm

div_term = np.exp(
    np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim)
)
  • Dit berekent een schaalfactor voor elke even embedding-dimensie.
  • De schaal zorgt ervoor dat elke dimensie een andere frequentie heeft, waardoor de codering zowel korte- als langeafstandspositiepatronen kan vastleggen.
  • Het gebruik van 10000.0 spreidt de frequenties, zodat veranderingen in positie elke dimensie anders beïnvloeden.

3. Initialiseer de positionele coderingmatrix

pe = np.zeros((seq_length, embed_dim))
  • Dit maakt een matrix gevuld met nullen, met één rij voor elke positie en één kolom voor elke embedding-dimensie.

4. Vul de matrix met sinus- en cosinuswaarden

pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
  • Voor even kolommen vullen met de sinus van position * div_term.
  • Voor oneven kolommen vullen met de cosinus van position * div_term.
  • Door deze afwisseling krijgt elke positie een unieke combinatie van waarden, en verandert het patroon geleidelijk over posities en dimensies.

5. Retourneer de positionele codering

return pe
  • De resulterende matrix geeft een unieke codering voor elke positie in de sequentie.
  • Deze codering kan worden opgeteld bij de woordembeddings zodat het transformermodel de volgorde van de tokens kent.
question mark

Welke van de volgende uitspraken over sinusoïdale positionele codering zijn waar?

Selecteer alle juiste antwoorden

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 7

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 1. Hoofdstuk 7
some-alt