Wat een Taalmodel Voorspelt
Een Probabilistische Vervolgengine
Een taalmodel neemt een reeks tokens & wijst een waarschijnlijkheidsverdeling toe over welk token er daarna komt. Voer the cat sat on the in & het geeft waarschijnlijkheden over een gehele woordenschat: hoge massa op mat, floor, couch; lage massa op xylophone, Tuesday.
Bemonster die verdeling, voeg een token toe, & voer het terug: die lus genereert tekst één token tegelijk. Autoregressieve generatie, genoemd omdat elke stap regresseert op zijn eigen eerdere uitvoer.
Drie Getallen Definiëren een Taalmodel
Woordenschatgrootte (V). Hoeveel verschillende tokens een model kan produceren. ANDREA-12M gebruikte 4.353 tokens; ANDREA-120M gebruikt 8.449.
Contextvenster (T). Hoeveel tokens in één forward pass passen. ANDREA-modellen gebruiken T = 1.024.
Aantal parameters (P). Hoeveel geleerde gewichten er binnenin zitten. 12M, 120M, & 480M benoemen een familie naar P.
Een Familie van Drie
| Variant | d_model | Heads | Layers | Context | Params |
|---|---|---|---|---|---|
| ANDREA-12M | 384 | 12 | 6 | 1024 | 12.8M |
| ANDREA-120M | 768 | 12 | 12 | 1024 | ~120M |
| ANDREA-480M | 1536 | 24 | 16 | 1024 | ~480M |
Drie knoppen schalen: d_model (breedte van elke interne vector), n_layer (diepte van gestapelde transformerblokken), n_head (parallelle aandachtsprojecties). Woordenschat & context blijven vast binnen de familie.
De Familietabel lezen
Waarom Klein Belangrijk Is
Beperking als Bevrijding
Grote taalmodellen met honderden miljarden parameters vereisen duizenden GPU's, proprietary datasets en bedrijfsbudgetten. Weinig mensen kunnen er een trainen. Weinig mensen kunnen er een repareren.
Een klein taalmodel op één GPU keert dat om. Iedereen met een 4090 (of een 3060) kan ANDREA reproduceren vanuit open data. Het trainingsrecept dient tegelijk als modelkaart. Open code, open gewichten, open data; volledige herkomst in 72 uur rekenkracht.
Capaciteit vs Kwaliteit
Kleinere modellen kunnen hun trainingscorpus niet memoriseren. ANDREA-12M, met 12,8M parameters, mist de capaciteit om feitelijke inhoud op te slaan; het leert gespreksstructuur, woordenschatverdeling en responsvorm. ANDREA-120M, met 10× capaciteit, leert feitelijke herinnering, samenhang over meerdere paragrafen en domeinbreedte (geverifieerd door externe beoordeling met 9,5/10 op biologie- en signaalverwerkingssamples).
De kernboodschap: capaciteit stelt een plafond. Het curriculum bepaalt of het plafond wordt bereikt. Activiteiten 14-23 behandelen het curriculum. [TITLE decoder_only/]
Drie Transformer Varianten
Encoder, Decoder, Beide
De originele Transformer (Vaswani et al., 2017) bevatte een encoder & een decoder, aan elkaar gekleefd voor vertaling. Drie architecturale lijnen stammen af van dat artikel:
Encoder-only (BERT-lijn). Bidirectionele aandacht, geen causale maskering. Geoptimaliseerd voor classificatie, niet voor generatie. Een token ziet zowel zijn verleden & zijn toekomst tijdens de training.
Encoder-decoder (T5, BART). Encoder leest de input; decoder genereert de output, met aandacht voor de encoder via cross-attention. Gebruikt voor vertaling, samenvatting.
Decoder-only (GPT, ANDREA). Causal mask: elk token ziet alleen zijn verleden. Getraind om het volgende token te voorspellen. Generatie komt gratis; training & inferentie delen dezelfde forward pass.
Waarom Decoder-Only Wint op Eén GPU
Drie redenen:
1. Enkelvoudig doel. Next-token voorspelling werkt op elke tekst. Geen gepaarde bron/doel nodig.
2. Symmetrie tussen training & inferentie. Dezelfde forward pass, geen speciale generatielogica.
3. Eenvoud van geheugen. Geen cross-attention; één stack van lagen; één stroom van activaties.
ANDREA erft de decoder-only keuze over van microGPT, die het overnam van nanoGPT, die het weer overnam van GPT-2. De lijn blijft standaard; wat verandert zit in tokenization, traininginfrastructuur, & curriculum.
Waarom Decoder-Only voor ANDREA
Wat past in 24 GB
Bytes Per Parameter
Een RTX 4090 wordt geleverd met 24 GB VRAM. De training van ANDREA-12M gebruikte 1,4 GB. ANDREA-120M gebruikte aanzienlijk meer. Het verschil komt neer op een eenvoudige boekhoudkundige oefening: elke parameter verschijnt meerdere keren in het geheugen tijdens de training.
Voor elke parameter houdt training vast:
- Het gewicht zelf (1× gewicht)
- Adam eerste moment (m): dezelfde vorm als gewicht (1× gewicht)
- Adam tweede moment (v): dezelfde vorm als gewicht (1× gewicht)
- Gradienten: dezelfde vorm als gewicht (1× gewicht)
- Activaties & tijdelijke waarden: ~2-4× gewicht (varieert met batch & context)
Totaal: ~6-8× het gewichtenaantal, in bytes bepaald door precisie.
Precisie Vermenigvuldigt Alles
| Precisie | Bytes/param | Totaal voor 120M gewichten | Opmerkingen |
|---|---|---|---|
| FP32 | 4 | 480 MB | Basislijn; veiligst, traagst |
| FP16 | 2 | 240 MB | cuBLAS, helft geheugen |
| FP8 E4M3 | 1 | 120 MB | Tensor cores, NaN-risico |
Vermenigvuldig met 6-8× voor volledige footprint tijdens training. ANDREA-120M traint comfortabel in FP16 (~2 GB voor gewichten + optimizer + grads); FP8 E4M3 halveert trainingstijd op RTX 4090 tensor cores.
Activiteit 13 (grow_a_language_model_precision) behandelt de FP-precisie-afwegingen in detail.
Het bepalen van de grootte van de optimizer-status van ANDREA-120M
Vijfentwintig Activiteiten
Twee Helften
Deze cursus splitst netjes op. De eerste helft behandelt wat microGPT aan het veld heeft geleerd: een transformer die draait op één GPU. De tweede helft behandelt ANDREA's echte bijdrage: een curriculum dat leert.
Helft 1: Een Transformer op Eén GPU (activiteiten 2-13)
| # | Activiteit | Beat |
|---|---|---|
| 2 | Harris morfeem tokenizer | distributionele segmentatie, 256+N+1 vocab |
| 3 | Tokenizer-dieet uitlijning | verzadigingspunt, waarom 12M 63,6% verspild |
| 4 | Embeddings & positie | geleerde token + positielookup |
| 5 | Geschaalde dot-product aandacht | Q·Kᵀ/√d, causale masker, softmax |
| 6 | Multi-head aandacht | head-splitsingen, parallelle projecties |
| 7 | Transformerblok | MLP, residualen, laag normalisatie |
| 8 | Cross-entropy & perplexity | log-wahrscheinlichheid, SMMA-verlies |
| 9 | Backprop in custom CUDA | ketenregel over microgpt_cuda.cu |
| 10 | AdamW | ontkoppelde weight decay; waarom vanilla Adam faalde |
| 11 | LR warmup + cosine decay | 2000-stap ramp; waarom instant piek 120M vernietigt |
| 12 | Gradient clipping | globale L2-norm; 3 CUDA-kernels |
| 13 | FP32 / FP16 / FP8 E4M3 | precisie-afwegingen; tensor cores |
Helft 2: Een Curriculum Dat Leert (activiteiten 14-24)
| # | Activiteit | Beat |
|---|---|---|
| 14 | Multi-armed bandits | UCB1, exploratie vs exploitatie |
| 15 | Fase-gebaseerde dobbelsteencontrole | 7/14/21/28/42 fasen, 1d3/1d4 dobbelstenen |
| 16 | Beloningsattributie & EMA | per-bron verlies EMA, 1000× schaling |
| 17 | Bronvloeren & epoch-straf | 1/(1+epochs) voorkomt memoriseren |
| 18 | Dekkingsbonus | doc-niveau tracking, 1.3× versheid |
| 19 | Curriculumsopwarming | 7 chat/proza bronnen eerste 20K stappen |
| 20 | Filteren op vorm, niet tekens | has_system_prompt_shape() |
| 21 | Coherence-gated early stopping | bigram/trigram/word/char auto-halt |
| 22 | Checkpoint, hervatten, signalen | formaat, SIGTERM/SIGUSR1, loss.json continuïteit |
| 23 | Sample audit & externe beoordeling | een run lezen, 9.5/10 territorium |
| 24 | Van microGPT naar ANDREA-120M | v1 instorting, v2 fixes, v2.5 patch, v3 polish |
Plus een metgezel: geometry_of_andrea bekijkt elke laag als geometrie (embedding space, attention als projectie, loss surface, bandit als een wandeling op een discreet simplex).
Voorgestelde Volgorde
Activiteiten 2-13 bouwen een werkende transformer op. Sla door naar deel 2 als je eerder transformers hebt getraind; kom terug wanneer nieuwsgierigheid toeslaat.
Elke activiteit staat zoveel mogelijk op zichzelf. Wiskunde verwijst naar eerdere activiteiten bij naam (zie activiteit 5: scaled dot-product attention). Codeverwijzingen wijzen naar microgpt/microgpt_cuda.cu & microgpt/training_proxy.py in ~/git/uncloseai-cli/.