English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

gäst
1 / ?

En inbäddning är en uppslagning, inte en funktion

Ett första lager efter en tokenizer

En tokenizer ger en modell heltal-ID:n: [256, 1842, 7301, ...]. En av de första sakerna en transformator gör är att omvandla varje ID till en vektor med d_model flyttal. Den vektorn lever i ett d_model-dimensionellt rum (768 dimensioner för ANDREA-120M).


En inbäddningslager är en uppslagningstabell, inte en funktion. Föreställ dig en stor matris:


form: (V, d_model)
rad 0:    [e_0_0, e_0_1, ..., e_0_767]
rad 1:    [e_1_0, e_1_1, ..., e_1_767]
...
rad 8448: [e_8448_0, e_8448_1, ..., e_8448_767]

Token-ID i väljer rad i. Direkt arrayåtkomst. Ingen aritmetik, ingen aktivering. Bara ett index.


Token & position embedding flow


Träningsbara flyttal

Varje post i tabellen börjar som ett litet slumpmässigt flyttal (vanligtvis hämtat från en normalfördelning skalad med 1/sqrt(d_model)). Backpropagation uppdaterar varje rad varje gång dess token-ID förekommer i en batch. Efter träning hamnar liknande tokens (cat, dog, pet) med liknande vektorer; orelaterade tokens (cat, Tuesday, xylophone) ligger långt ifrån varandra i vektorutrymmet.


ANDREA-120M Token Embedding Cost


KvantitetVärde
V8,449
d_model768
Parametrar6,488,832

Ungefär 6,5 miljoner parametrar finns bara i en token-embedding-tabell, cirka 5,4 % av ANDREA-120M:s totala antal. Varje vokabulärplats får dessa 768 flyttal.

Dimensionering av embedding-tabeller

Beräkna antalet parametrar för token-embeddings för två framtida varianter. (a) ANDREA-480M: V = 16 641 (en 16 384-segment tokenizer plus 256 bytes plus 1 BOS), d_model = 1536. (b) ANDREA-12M: V = 4 353, d_model = 384. Visa V × d_model-beräkningen för vardera.

Punktprodukter mäter likhet

Vektorer som pilar

En 768-dimensionell vektor lever i ett rum som människor inte kan visualisera, men samma algebra fungerar i alla dimensioner. Två viktiga operationer är relevanta för transformatorer:


Magnitud (längden på en pil):


||v|| = sqrt(v_0² + v_1² + ... + v_767²)

Skalärprodukt (överensstämmelse mellan två pilar):


u · v = u_0 × v_0 + u_1 × v_1 + ... + u_767 × v_767

Vad en skalärprodukt berättar

Två fakta som gäller i alla dimensioner:


- u · v = ||u|| × ||v|| × cos(theta), där theta är vinkeln mellan dem.

- Vektorer som pekar åt samma håll ger stora positiva skalärprodukter.

- Vektorer som pekar åt motsatta håll ger stora negativa skalärprodukter.

- Vektorer som står i rät vinkel ger en skalärprodukt på noll.


Skalärprodukt = onormaliserad likhet. Två tränade token-inbäddningar för cat & dog får en hög skalärprodukt eftersom backpropagation har dragit dem närmare varandra (båda förutsäger kontexter relaterade till husdjur). cat & Tuesday blir nästan ortogonala eftersom de förutsäger olika kontexter.


Varför en Transformer bryr sig

Aktivitet 5 (grow_a_language_model_attention) bygger attention från skalärprodukter: en query-vektor skalärproduktas med key-vektorer och ger poäng som visar vilka tidigare tokens som är viktiga för att förutsäga nästa. Embeddings och skalärprodukter tillsammans bär alla interaktioner inuti en transformer.

Förutsäg likhet

Efter träning hamnar ANDREA-120M:s embedding för `believ` (token-rad 4287, hypotetisk) ungefär i linje med `know`, `understand`, `learn`. Utan att beräkna exakta värden, förutsäg en ordning från största skalärprodukt till minsta: `believ · know`, `believ · stone`, `believ · understand`. Motivera din ordning med en fras per par.

ANDREA använder inlärda positionsinbäddningar

Ett problem

En token-inbäddning talar om för en modell vilket ord som finns på denna position. Den talar inte om för modellen var det ordet sitter. Utan positionsinformation behandlar en transformator the cat sat on a mat och mat a on sat cat the identiskt: samma uppsättning tokens, utan ordningssignal.


Tre lösningar finns i transformatorlitteraturen:


Sinusoidal (Vaswani 2017). En fast matematisk formel baserad på sinus- och cosinusfunktioner. Position 0 får en specifik 768-vektor; position 1 får en annan; aldrig tränad, aldrig uppdaterad. Generaliserar till vilken position som helst via formeln.


RoPE (Rotary Position Embedding). Roterar query- och key-vektorer baserat på position. Används av LLaMA, Qwen. Inga extra parametrar; rotationen är inbyggd i attention.


Learned. En separat embedding-tabell med formen (T, d_model) där T är en kontextlängd. Varje rad tränas via backpropagation, precis som token-embeddings.


ANDREAs val: Learned

ANDREA ärver ett learned-position-tillvägagångssätt från microGPT, som ärvde det från nanoGPT, som ärvde det från GPT-2. En motivering:


- Enkelhet. Ingen speciell matematik i attention. En positionstabell ser ut som en tokentabell.

- Kompatibilitet med anpassad CUDA. ANDREA:s microgpt_cuda.cu-motor hanterar två inbäddningsuppslagningar identiskt; inga sin/cos-kärnor behövs.

- Tillräckligt för fast kontext. ANDREA begränsar T till 1024. En inlärd tabell fungerar bra för sekvenser med fast längd.


ANDREA-120M Position Embedding Cost


QuantityValue
T (kontext)1,024
d_model768
Parametrar786,432

0.79M parametrar för position. Kombinerat med token-inbäddningar: 6.49M + 0.79M = 7.27M inbäddningsparametrar totalt för ANDREA-120M.


Hur de kombineras

Vid varje position t i en indatasekvens:


x_t = token_embedding[token_id_t] + position_embedding[t]

Två 768-vektorer, summerade elementvis. Resultatet, x_t, flödar in i ett första transformerblock. En modell separerar dem aldrig igen; den lär sig att använda den kombinerade signalen.

Inlärd kontra sinusformad

Jämför två strategier för positionsinbäddning för en hypotetisk ANDREA-modell. Strategi A: inlärd, T = 1024. Strategi B: sinusformad, T godtycklig (fungerar för valfri sekvenslängd). Nämn en fördel för varje. Ange sedan vilken ANDREA väljer och en anledning ur ett CUDA-/ingenjörsperspektiv.

Var inbäddningsparametrar finns

Ett komplett ANDREA-120M-inbäddningslager


KomponentFormParametrar
Token embedding table8,449 × 7686,488,832
Position embedding table1,024 × 768786,432
Total7,275,264

Ungefär 7,3M parametrar. ANDREA-120M:s totala parameterantal: ~120M. Endast embeddings-lagret: 6%. Resterande 94% finns i transformerblocken (attention + MLP, täcks i aktivitet 5-7).


Untied vs Tied Embeddings

Många transformermodeller (inklusive GPT-2) kopplar samman en tokeninbäddning med en slutlig utmatningsprojektion: samma V × d_model-matris används både vid inmatning och vid utmatning (logits över vokabulären). Kopplingen sparar V × d_model parametrar och förbättrar ofta kvaliteten.


ANDREA använder obundna inbäddningar: inmatningsinbäddningen och utmatningsprojektionen tränas som separata matriser. Aktivitet 7 (grow_a_language_model_transformer_block) täcker ett sista lager.


En framåtkörning hittills

Indata: token-ID:n [256, 1842, 7301, ...] (1024 stycken). Varje ID slår upp en 768-vektor. Varje position slår upp en 768-vektor. Summera elementvis. Resultat: en (1024, 768)-matris x av token-+-positionsvektorer. x flödar in i transformerblock 1.


Aktivitet 5 (grow_a_language_model_attention) täcker vad block 1 gör: skalad punktprodukt-uppmärksamhet med kausal mask och softmax.

Förutsäg inbäddningsstruktur

Reflektera: ANDREA-120M har 8449 tokeninbäddningar & 1024 positionsinbäddningar som delar samma 768-dimensionella rum. Vad skulle du förvänta dig efter träning: (a) hur en tokeninbäddningsmatris ser ut (klustermönster?), eller (b) hur en positionsinbäddningsmatris ser ut (jämn gradient?). Välj ett alternativ och förutsäg i en eller två meningar. Inget svar är fel; resonemanget är det viktiga.