Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Hur man genererar sinusformad positionskodning | Förstå Grunderna I Transformer
Transformers för Naturlig Språkbehandling

bookHur man genererar sinusformad positionskodning

Svep för att visa menyn

Sinusoidell positionskodning gör att transformer-modellen kan uppfatta ordningsföljd och position för ord, även om den inte använder rekurrens eller sekvensmedvetna lager. Varje position representeras av ett unikt mönster av sinus- och cosinusvärden fördelade över inbäddningsdimensionerna.

Vi tittar närmare på koden nedan.

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 för att generera sinusoidell positionskodning kan förstås steg för steg:

1. Skapa positionsarrayen

position = np.arange(seq_length)[:, np.newaxis]
  • Detta skapar en kolumnvektor där varje rad representerar en position i din inmatningssekvens, med start från 0.
  • Om din sekvens har sex token kommer denna array att se ut som [0, 1, 2, 3, 4, 5] som en kolumn.

2. Beräkna frekvensskalningstermen

div_term = np.exp(
    np.arange(0, embed_dim, 2) * -(np.log(10000.0) / embed_dim)
)
  • Detta beräknar en skalningsfaktor för varje jämn inbäddningsdimension.
  • Skalningen säkerställer att varje dimension har en unik frekvens, vilket gör att kodningen kan fånga både kort- och långdistansmönster för position.
  • Användningen av 10000.0 sprider ut frekvenserna så att positionsförändringar påverkar varje dimension olika.

3. Initiera positionskodningsmatrisen

pe = np.zeros((seq_length, embed_dim))
  • Detta skapar en matris fylld med nollor, med en rad för varje position och en kolumn för varje inbäddningsdimension.

4. Fyll matrisen med sinus- och cosinusvärden

pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
  • För jämna kolumner, fyll med sinus av position * div_term.
  • För udda kolumner, fyll med cosinus av position * div_term.
  • Denna växling innebär att varje position får en unik kombination av värden, och mönstret förändras mjukt över positioner och dimensioner.

5. Returnera positionskodningen

return pe
  • Den resulterande matrisen ger en unik kodning för varje position i din sekvens.
  • Denna kodning kan adderas till dina ordbäddningar så att transformer-modellen känner till ordningsföljden för token.
question mark

Vilka av följande påståenden om sinusoidal positionskodning är sanna?

Välj alla rätta svar

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 7

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 1. Kapitel 7
some-alt