Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Hvordan Man Genererer Sinusformet Positionskodning | Forståelse af Transformer-Grundlag
Transformers til Naturlig Sprogbehandling

bookHvordan Man Genererer Sinusformet Positionskodning

Stryg for at vise menuen

Sinusoidal positionel kodning gør det muligt for transformer-modellen at opfatte rækkefølgen og positionen af ord, selvom den ikke anvender rekursive eller sekvensbevidste lag. Hver position repræsenteres af et unikt mønster af sinus- og cosinusværdier fordelt over embedding-dimensionerne.

Herunder ses et eksempel på koden.

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

Koden til generering af sinusoidal positionel kodning kan forstås trin for trin:

1. Opret positions-array

position = np.arange(seq_length)[:, np.newaxis]
  • Dette opretter en kolonnevektor, hvor hver række repræsenterer en position i inputsekvensen, startende fra 0.
  • Hvis sekvensen har seks tokens, vil dette array se ud som [0, 1, 2, 3, 4, 5] som en kolonne.

2. Beregn frekvensskaleringsfaktoren

div_term = np.exp(
    np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim)
)
  • Dette beregner en skaleringsfaktor for hver lige embedding-dimension.
  • Skaleringen sikrer, at hver dimension har en forskellig frekvens, hvilket gør det muligt for kodningen at opfange både kort- og langtrækkende positionsmønstre.
  • Brug af 10000.0 spreder frekvenserne ud, så ændringer i position påvirker hver dimension forskelligt.

3. Initialiser den positionelle kodningsmatrix

pe = np.zeros((seq_length, embed_dim))
  • Dette opretter en matrix fyldt med nuller, med én række for hver position og én kolonne for hver embedding-dimension.

4. Udfyld matricen med sinus- og cosinusværdier

pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
  • For lige kolonner udfyldes med sinus til position * div_term.
  • For ulige kolonner udfyldes med cosinus til position * div_term.
  • Denne vekslen betyder, at hver position får en unik kombination af værdier, og mønsteret ændrer sig glidende på tværs af positioner og dimensioner.

5. Returnér den positionelle kodning

return pe
  • Den resulterende matrix giver en unik kodning for hver position i sekvensen.
  • Denne kodning kan lægges til word embeddings, så transformer-modellen kender rækkefølgen af tokens.
question mark

Hvilke af følgende udsagn om sinusoidal positionel kodning er sande?

Vælg alle korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 7

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 1. Kapitel 7
some-alt