3. Token-inbeddings

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Token-inbeddings

Na die tokenisering van teksdata is die volgende kritieke stap in die voorbereiding van data vir die opleiding van large language models (LLMs) soos GPT die skepping van token-inbeddings. Token-inbeddings omskep diskrete token (soos woorde of subwoorde) in deurlopende numeriese vektore wat die model kan verwerk en waaruit dit kan leer. Hierdie verduideliking breek token-inbeddings, hul inisialisering, gebruik, en die rol van posisionele inbeddings in die verbetering van die model se begrip van tokenreeksies af.

Tip

Die doel van hierdie derde fase is baie eenvoudig: Ken elkeen van die vorige token in die woordeskat ’n vektor van die gewenste dimensies toe om die model op te lei. Elke woord in die woordeskat sal ’n punt in ’n ruimte van X dimensies wees.
Let daarop dat aanvanklik die posisie van elke woord in die ruimte net β€œtoevallig” geΓ―nitialiseer word en dat hierdie posisies trainbare parameters is (sal tydens die opleiding verbeter).

Verder word tydens die token-inbedding ’n ander laag inbeddings geskep wat (in hierdie geval) die absolute posisie van die woord in die opleidingssin voorstel. Op hierdie manier sal ’n woord in verskillende posisies in die sin ’n verskillende voorstelling (betekenis) hΓͺ.

Wat is token-inbeddings?

Token-inbeddings is numeriese voorstellings van token in ’n deurlopende vektorruimte. Elke token in die woordeskat is geassosieer met ’n unieke vektor van vaste dimensies. Hierdie vektore vang semantiese en sintaktiese inligting oor die token vas, wat die model in staat stel om verhoudings en patrone in die data te begryp.

  • Woordeskatgrootte: Die totale aantal unieke token (bv. woorde, subwoorde) in die model se woordeskat.
  • Inbedding-dimensies: Die aantal numeriese waardes (dimensies) in elke token se vektor. HoΓ«r dimensies kan meer genuanseerde inligting vasvang maar vereis meer rekenaarsbronne.

Voorbeeld:

  • Woordeskatgrootte: 6 token [1, 2, 3, 4, 5, 6]
  • Inbedding-dimensies: 3 (x, y, z)

Initialisering van token-inbeddings

Aan die begin van opleiding word token-inbeddings gewoonlik geΓ―nisialiseer met klein toevallige waardes. Hierdie aanvanklike waardes word tydens opleiding aangepas (gefynpas) om die betekenis van die token beter voor te stel gebaseer op die opleidingsdata.

PyTorch Example:

import torch

# Set a random seed for reproducibility
torch.manual_seed(123)

# Create an embedding layer with 6 tokens and 3 dimensions
embedding_layer = torch.nn.Embedding(6, 3)

# Display the initial weights (embeddings)
print(embedding_layer.weight)

I don’t have the contents of src/AI/AI-llm-architecture/3.-token-embeddings.md. Please paste the markdown text you want translated to Afrikaans (keeping tags/links as instructed), and I’ll translate it.

luaCopy codeParameter containing:
tensor([[ 0.3374, -0.1778, -0.1690],
[ 0.9178,  1.5810,  1.3010],
[ 1.2753, -0.2010, -0.1606],
[-0.4015,  0.9666, -1.1481],
[-1.1589,  0.3255, -0.6315],
[-2.8400, -0.7849, -1.4096]], requires_grad=True)

Verduideliking:

  • Elke ry kom ooreen met ’n token in die woordeskat.
  • Elke kolom stel ’n dimensie in die insluitingsvektor voor.
  • Byvoorbeeld, die token by indeks 3 het ’n insluitingsvektor [-0.4015, 0.9666, -1.1481].

Toegang tot ’n Token se insluitingsvektor:

# Retrieve the embedding for the token at index 3
token_index = torch.tensor([3])
print(embedding_layer(token_index))

I don’t have access to your repository or the file src/AI/AI-llm-architecture/3.-token-embeddings.md. Please paste the markdown content here and I’ll translate it to Afrikaans, preserving all tags, paths and code.

tensor([[-0.4015,  0.9666, -1.1481]], grad_fn=<EmbeddingBackward0>)

Interpretasie:

  • Die token by indeks 3 word voorgestel deur die vektor [-0.4015, 0.9666, -1.1481].
  • Hierdie waardes is leerbare parameters wat die model tydens opleiding sal aanpas om die token se konteks en betekenis beter weer te gee.

Hoe Token-Embeddings Werk Tydens Opleiding

Tydens opleiding word elke token in die insetdata omgeskakel na sy ooreenstemmende embedding-vektor. Hierdie vektore word dan gebruik in verskeie berekeninge binne die model, soos aandagmeganismes en neurale netwerklae.

Voorbeeldscenario:

  • Batchgrootte: 8 (aantal voorbeelde wat gelyktydig verwerk word)
  • Max Sequence Length: 4 (aantal tokens per voorbeeld)
  • Embedding Dimensions: 256

Datastruktuur:

  • Elke batch word voorgestel as ’n 3D tensor met vorm (batch_size, max_length, embedding_dim).
  • Vir ons voorbeeld sou die vorm (8, 4, 256) wees.

Visualisering:

cssCopy codeBatch
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Sample 1    β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”     β”‚
β”‚ β”‚Tokenβ”‚ β†’ [x₁₁, x₁₂, ..., x₁₂₅₆]
β”‚ β”‚ 1   β”‚     β”‚
β”‚ β”‚...  β”‚     β”‚
β”‚ β”‚Tokenβ”‚     β”‚
β”‚ β”‚ 4   β”‚     β”‚
β”‚ β””β”€β”€β”€β”€β”€β”˜     β”‚
β”‚ Sample 2    β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”     β”‚
β”‚ β”‚Tokenβ”‚ β†’ [x₂₁, xβ‚‚β‚‚, ..., x₂₂₅₆]
β”‚ β”‚ 1   β”‚     β”‚
β”‚ β”‚...  β”‚     β”‚
β”‚ β”‚Tokenβ”‚     β”‚
β”‚ β”‚ 4   β”‚     β”‚
β”‚ β””β”€β”€β”€β”€β”€β”˜     β”‚
β”‚ ...         β”‚
β”‚ Sample 8    β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”     β”‚
β”‚ β”‚Tokenβ”‚ β†’ [xβ‚ˆβ‚, xβ‚ˆβ‚‚, ..., xβ‚ˆβ‚‚β‚…β‚†]
β”‚ β”‚ 1   β”‚     β”‚
β”‚ β”‚...  β”‚     β”‚
β”‚ β”‚Tokenβ”‚     β”‚
β”‚ β”‚ 4   β”‚     β”‚
β”‚ β””β”€β”€β”€β”€β”€β”˜     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Verduideliking:

  • Elke token in die volgorde word voorgestel deur ’n 256-dimensionele vektor.
  • Die model verwerk hierdie insluitings om taalpatrone aan te leer en voorspellings te genereer.

Posisionele insluitings: Konteks byvoeging by token-insluitings

Alhoewel token-insluitings die betekenis van individuele tokens vasvang, enkodeer hulle nie inherent die posisie van tokens binne ’n volgorde nie. Om die volgorde van tokens te verstaan is noodsaaklik vir taalbegrip. Dit is waar posisionele insluitings inkom.

Waarom posisionele insluitings nodig is:

  • Volgorde van tokens is belangrik: In sinne hang die betekenis dikwels af van die volgorde van woorde. Byvoorbeeld, β€œDie kat het op die mat gesit” vs. β€œDie mat het op die kat gesit.”
  • Beperking van insluiting: Sonder posisionele inligting behandel die model tokens as ’n sak van woorde en ignoreer hul volgorde.

Tipes posisionele insluitings:

  1. Absolute posisionele insluitings:
  • Ken ’n unieke posisie-vektor toe aan elke posisie in die volgorde.
  • Voorbeeld: Die eerste token in enige volgorde het dieselfde posisionele insluiting, die tweede token het ’n ander, ensovoorts.
  • Gebruik deur: OpenAI’s GPT models.
  1. Relatiewe posisionele insluitings:
  • Enkodeer die relatiewe afstand tussen tokens eerder as hul absolute posisies.
  • Voorbeeld: Dui aan hoe ver twee tokens van mekaar af is, ongeag hul absolute posisies in die volgorde.
  • Gebruik deur: Modelle soos Transformer-XL en sommige variante van BERT.

Hoe posisionele insluitings geΓ―ntegreer word:

  • Gelyke dimensies: Posisionele insluitings het dieselfde dimensionaliteit as token-insluitings.
  • Optelling: Hulle word by token-insluitings gevoeg, wat token-identiteit kombineer met posisionele inligting sonder om die algehele dimensionaliteit te verhoog.

Voorbeeld van die byvoeging van posisionele insluitings:

Gestel ’n token-insluiting-vektor is [0.5, -0.2, 0.1] en sy posisionele insluiting-vektor is [0.1, 0.3, -0.1]. Die gekombineerde insluiting wat deur die model gebruik sal word, sou wees:

Combined Embedding = Token Embedding + Positional Embedding
= [0.5 + 0.1, -0.2 + 0.3, 0.1 + (-0.1)]
= [0.6, 0.1, 0.0]

Voordele van Posisionele embeddinge:

  • Kontekstuele bewustheid: Die model kan onderskei tussen tokens gebaseer op hul posisies.
  • Volgordebegrip: Stel die model in staat om grammatika, sintaksis en konteksafhanklike betekenisse te verstaan.

Posisionele embeddinge in moderne LLMs

Rotary Positional Embeddings (RoPE)

RoPE kodeer posisie deur ’n posisie-afhanklike rotasie toe te pas op pare dimensies in die query/key-vektore, wat absolute posisies omskakel in relatiewe faseverskille. Dit verskaf relatiewe posisie-inligting terwyl die embedding-dimensionaliteit ongewysig bly en word wyd gebruik in onlangse decoder-only LLMs.

Vir hoe token- en posisionele embeddinge binne die model gekombineer word, sien the LLM architecture page.

Uitbreiding van kontekstvensters in RoPE-Based Models

Onlangse werk toon dat kontekslengte dikwels beperk word deur die posisionele enkodering-skema eerder as deur die token embeddingmatriks self.

  • Position Interpolation (PI): Skaleer posisie-indekse sodat langer reekse in die reeks val wat tydens opleiding gesien is, wat uitbreiding met minimale fyninstelling moontlik maak. Voorbeeld:
# Position Interpolation (PI) intuition
orig_ctx = 2048
new_ctx = 8192
scaled_pos = pos * (orig_ctx / new_ctx)
  • YaRN: ’n rekeneffektiewe RoPE-uitbreidingsstrategie wat RoPE-skaal/interpolasie aanpas om na langer kontekste te ekstrapoleer met minder addisionele opleidingsstappe.

Kodevoorbeeld

Hier volg die kodevoorbeeld vanaf https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:

# Use previous code...

# Create dimensional emdeddings
"""
BPE uses a vocabulary of 50257 words
Let's supose we want to use 256 dimensions (instead of the millions used by LLMs)
"""

vocab_size = 50257
output_dim = 256
token_embedding_layer = torch.nn.Embedding(vocab_size, output_dim)

## Generate the dataloader like before
max_length = 4
dataloader = create_dataloader_v1(
raw_text, batch_size=8, max_length=max_length,
stride=max_length, shuffle=False
)
data_iter = iter(dataloader)
inputs, targets = next(data_iter)

# Apply embeddings
token_embeddings = token_embedding_layer(inputs)
print(token_embeddings.shape)
torch.Size([8, 4, 256]) # 8 x 4 x 256

# Generate absolute embeddings
context_length = max_length
pos_embedding_layer = torch.nn.Embedding(context_length, output_dim)

pos_embeddings = pos_embedding_layer(torch.arange(max_length))

input_embeddings = token_embeddings + pos_embeddings
print(input_embeddings.shape) # torch.Size([8, 4, 256])

Verwysings

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks