Een Embedding Is een Lookup, Geen Functie
Een Eerste Laag Na een Tokenizer
Een tokenizer geeft een model integer-ID’s: [256, 1842, 7301, ...]. Een eerste ding dat een transformer doet: elke ID omzetten in een vector van d_model floats. Die vector leeft in een d_model-dimensionale ruimte (768 dimensies voor ANDREA-120M).
Een embedding-laag is een lookup-tabel, geen functie. Stel je een gigantische matrix voor:
vorm: (V, d_model)
rij 0: [e_0_0, e_0_1, ..., e_0_767]
rij 1: [e_1_0, e_1_1, ..., e_1_767]
...
rij 8448: [e_8448_0, e_8448_1, ..., e_8448_767]
Token-ID i selecteert rij i. Directe array-toegang. Geen rekenkundige bewerkingen, geen activatiefunctie. Alleen een index.
Trainbare floats
Elke entry in die tabel begint als een kleine willekeurige float (meestal getrokken uit een normale verdeling geschaald met 1/sqrt(d_model)). Backpropagation werkt elke rij bij telkens wanneer zijn token-ID in een batch voorkomt. Na training krijgen vergelijkbare tokens (cat, dog, pet) vergelijkbare vectoren; niet-gerelateerde tokens (cat, Tuesday, xylophone) liggen ver uit elkaar in de vectorruimte.
ANDREA-120M Token Embedding Kosten
| Hoeveelheid | Waarde |
|---|---|
| V | 8.449 |
| d_model | 768 |
| Parameters | 6.488.832 |
Ruwe schatting: 6,5 miljoen parameters bevinden zich alleen al in een token-embeddingtabel, ongeveer 5,4 % van de totale grootte van ANDREA-120M. Elke vocabulaire-ingang krijgt deze 768 floats.
Grootte van embeddingtabellen
Dot-producten meten gelijkenis
Vectoren als pijlen
Een 768-dimensionale vector leeft in een ruimte die mensen niet kunnen visualiseren, maar dezelfde algebra werkt in elke dimensie. Twee belangrijke operaties zijn relevant voor transformers:
Grootte (lengte van een pijl):
||v|| = sqrt(v_0² + v_1² + ... + v_767²)
Inwendig product (uitlijning tussen twee pijlen):
u · v = u_0 × v_0 + u_1 × v_1 + ... + u_767 × v_767
Wat een inwendig product je vertelt
Twee feiten die in elke dimensie gelden:
- u · v = ||u|| × ||v|| × cos(theta), waarbij theta de hoek tussen hen is.
- Vectoren die in dezelfde richting wijzen geven grote positieve inproducten.
- Vectoren die in tegengestelde richtingen wijzen geven grote negatieve inproducten.
- Vectoren onder een rechte hoek geven een inproduct van nul.
Inproduct = ongenormaliseerde gelijkenis. Twee getrainde token-embeddings voor cat & dog krijgen een hoog inproduct omdat backpropagation ze dichter bij elkaar duwde (beide voorspellen contexten gerelateerd aan huisdieren). cat & Tuesday eindigen bijna orthogonaal omdat ze verschillende contexten voorspellen.
Waarom een Transformer Zich Bekommert
Activiteit 5 (grow_a_language_model_attention) bouwt aandacht op uit dot-producten: een query-vector dot-producted met key-vectoren levert scores op die aangeven welke vorige tokens van belang zijn voor het voorspellen van de volgende. Embeddings en dot-producten samen dragen elke interactie binnen een transformer.
Voorspel Overeenkomst
ANDREA gebruikt geleerde positie-embeddings
Een probleem
Een token-embedding vertelt een model welk woord zich op deze positie bevindt. Het vertelt een model niet waar dat woord zich bevindt. Zonder positie-informatie behandelt een transformer the cat sat on a mat en mat a on sat cat the identiek: dezelfde set tokens, geen volgordesignaal.
Er bestaan drie oplossingen in de transformer-literatuur:
Sinusoidal (Vaswani 2017). Een vaste wiskundige formule gebaseerd op sinus- en cosinusfuncties. Positie 0 krijgt een specifieke 768-vector; positie 1 krijgt een andere; nooit getraind, nooit bijgewerkt. Generaliseert naar elke positie via de formule.
RoPE (Rotary Position Embedding). Roteert query- en key-vectoren op basis van positie. Gebruikt door LLaMA en Qwen. Geen extra parameters; rotatie is ingebouwd in de attention.
Learned. Een aparte embedding-tabel met vorm (T, d_model) waarbij T de contextlengte is. Elke rij wordt getraind via backpropagation, net als token-embeddings.
ANDREA's Choice: Learned
ANDREA erft een learned-position-aanpak van microGPT, die het weer erfde van nanoGPT, dat het erfde van GPT-2. Een redenatie:
- Simplicity. Geen speciale wiskunde in attention. Een position table ziet eruit als een token table.
- Compatibiliteit met custom CUDA. ANDREA's microgpt_cuda.cu engine behandelt twee embedding lookups identiek; geen sin/cos kernels nodig.
- Voldoende voor vaste context. ANDREA beperkt T tot 1024. Een learned table werkt prima voor sequences van vaste lengte.
ANDREA-120M Position Embedding Cost
| Hoeveelheid | Waarde |
|---|---|
| T (context) | 1,024 |
| d_model | 768 |
| Parameters | 786,432 |
0.79M parameters voor positie. Gecombineerd met token embeddings: 6.49M + 0.79M = 7.27M embedding parameters totaal voor ANDREA-120M.
Hoe Ze Combineren
Op elke positie t in een invoerreeks:
x_t = token_embedding[token_id_t] + position_embedding[t]
Twee 768-vectoren, elementgewijs opgeteld. Het resultaat, x_t, stroomt een eerste transformerblok in. Een model scheidt ze nooit meer; het leert om het gecombineerde signaal te gebruiken.
Geleerd versus sinusoïdaal
Waar Embeddingparameters Zitten
Een Volledige ANDREA-120M Embeddinglaag
| Component | Shape | Parameters |
|---|---|---|
| Token embedding table | 8,449 × 768 | 6,488,832 |
| Position embedding table | 1,024 × 768 | 786,432 |
| Totaal | 7,275,264 |
Ongeveer 7,3M parameters. ANDREA-120M's totale parameteraantal: ~120M. Embedding-laag alleen: 6%. De overige 94% bevindt zich in transformerblokken (attention + MLP, behandeld in activiteiten 5-7).
Ontkoppelde vs Gekoppelde Embeddings
Veel transformermodellen (inclusief GPT-2) koppelen een token-embedding aan een uiteindelijke output-projectie: dezelfde V × d_model-matrix wordt gebruikt bij de input en bij de output (logits over de woordenschat). Deze koppeling bespaart V × d_model parameters en verbetert vaak de kwaliteit.
ANDREA gebruikt ontkoppelde embeddings: de input-embedding en de output-projectie worden getraind als aparte matrices. Activiteit 7 (grow_a_language_model_transformer_block) behandelt een laatste laag.
Een Forward Pass Tot Nu Toe
Input: token-ID's [256, 1842, 7301, ...] (1024 stuks). Elke ID zoekt een 768-vector op. Elke positie zoekt een 768-vector op. Som elementgewijs. Resultaat: een (1024, 768)-matrix x van token-+-positie-vectoren. x stroomt naar transformatorblok 1.
Activiteit 5 (grow_a_language_model_attention) behandelt wat blok 1 doet: geschaalde dot-product attention met causale mask en softmax.