Semantische Afstand als Euclidische Afstand
Een Hoog-Dimensionale Vectorruimte
Elke token in ANDREA-120M’s 8449-token-vocabulaire wordt afgebeeld op één punt in R^768. De token-embeddingmatrix heeft de vorm 8449 × 768: 8449 rijen, één per vocabulaire-token; 768 kolommen, één per embeddingdimensie.
Drie eigenschappen maken dit een vectorruimte
1. Optelling. v_a + v_b ligt in R^768. De som van twee embeddings is een geldige vector.
2. Scalaire vermenigvuldiging. alpha * v ligt in R^768 voor elke reële alpha. Rek uit of krimp langs dezelfde richting.
3. Lineariteit. alpha v_a + beta v_b ligt in R^768. Lineaire combinaties blijven binnen de ruimte.
Deze eigenschappen geven ons geometrische hulpmiddelen: afstand, hoek, projectie, basis, orthogonaliteit.
Afstand als semantische gelijkenis
De cosinusgelijkenis van twee embeddings meet de hoek tussen hen: cos(theta) = (v_a . v_b) / (||v_a|| * ||v_b||). Bereik: -1 (tegengesteld) tot +1 (parallel).
Empirisch patroon na training: tokens met vergelijkbare contexten produceren embeddings met hoge cosinusgelijkenis. ANDREA-120M plaatst parakeet & monkey dicht bij elkaar (beide biologisch, beide soorten, beide bestaande of uitgestorven categorieën). Het plaatst Fourier & transform dicht bij elkaar (signaalverwerkingscontext). Het plaatst parakeet & Fourier ver uit elkaar (cross-domein orthogonaliteit).
Waarom R^768 Niet R^384
ANDREA-12M gebruikte d_model = 384. ANDREA-120M verdubbelde dit naar 768. De verdubbeling is van belang: een 384-dimensionale ruimte heeft minder 'hoeken' beschikbaar, en cross-domein disambiguatie lijdt hieronder. Verdubbeling van de capaciteit geeft het model ruimte om bank (rivier) versus bank (financieel) op te lossen in verschillende bassins van de embeddingruimte zonder dat de ene in de andere verdwijnt.
Embedding-updates als vectorvertaling
Elke gradientstap voegt delta_v toe aan v_token. Geometrisch: kleine translaties in R^768 verplaatsen elke token naar buurten die de loss verminderen. Na 200K stappen migreert elke token van zijn willekeurige initialisatie naar een geleerde positie.
Een afstand berekenen
Drie getrainde embeddings (vereenvoudigd naar R^3 voor rekenkundige doeleinden):
- v(parakeet) = (1.0, 0.5, 0.0)
- v(monkey) = (1.2, 0.3, 0.1)
- v(Fourier) = (0.0, 0.0, 1.5)
Projectie op een Query-subruimte
Wat Attention Berekent
Voor een token op positie t berekent attention:
softmax(Q K^T / sqrt(d_k)) V
Waar Q de query is (de vraag van dit token), K de keys (de identificatie van elk vorig token) en V de values (de inhoud van elk vorig token). De output combineert V, gewogen op basis van hoe sterk de query aan elke key gerelateerd is.
Geometrische interpretatie
Denk aan K als een lijst van vectoren in R^d_k. Elke rij is de key van één vorig token. Q is één vector in R^d_k: de vraag van dit token.
Q K^T projecteert elke key op Q. Het dot-product q . k_i meet hoeveel k_i ligt langs de richting van q. Lange projectie = key sterk relevant voor query. Korte projectie = key nauwelijks relevant.
softmax normaliseert de projecties tot gewichten die optellen tot 1. De gewogen som van V is een enkele vector: een mengsel van eerdere inhoud, gewogen naar relevantie voor de huidige query.
Multi-Head Attention als Multi-Subruimte Projectie
ANDREA-120M gebruikt 12 attention heads. d_model = 768; d_k = 768 / 12 = 64. Elke head projecteert naar een andere 64-dim subruimte van R^768. Twaalf heads geven twaalf onafhankelijke weergaven van dezelfde sequentie: één head kan grammaticale rol volgen, een andere semantische gelijkenis, weer een andere lange-afstandsreferenties.
Geometrisch: elke head definieert een 64-dim georiënteerde subruimte (een 'venster') waardoorheen het het verleden bekijkt.
De causale mask
[BLOCK_TYPE SECTION/STEP]Decoder-only modellen voegen een causale mask toe: elke Q K^T-waarde boven de diagonaal wordt op -oneindig gezet vóór de softmax. Geometrisch: de projectie op elk toekomstig token krijgt gewicht nul. Token t kan alleen tokens 0 tot en met t zien. [BLOCK_TYPE SECTION/STEP]
Waarom dit belangrijk is: training en inferentie worden symmetrisch. Dezelfde forward pass, dezelfde gemaskeerde projecties, geen speciale generatielogica. [BLOCK_TYPE SECTION/STEP]
sqrt(d_k) schaling
[BLOCK_TYPE SECTION/STEP]Zonder schaling groeien dot-producten mee met d_k. Grote dot-producten duwen de softmax naar one-hot-regio’s (één gewicht bijna 1, de rest bijna 0). Delen door sqrt(d_k) houdt de projecties op eenheidsvariantie-schaal, waardoor de softmax scherpte behouden blijft over een breed bereik van d_k-waarden.
Geometrisch: sqrt(d_k) normaliseert de lengtes van de projecties zodat de softmax vergelijkbare grootte-ordes ziet, ongeacht de dimensie van de deelruimte.
Een projectie lezen
Drie keys & één query in R^4 (vereenvoudigd voor rekenwerk):
- q = (1, 0, 1, 0)
- k_1 = (1, 0, 0, 0) [vorige token 1]
- k_2 = (0, 0, 1, 0) [vorige token 2]
- k_3 = (0, 1, 0, 1) [past token 3]
d_k = 4, dus sqrt(d_k) = 2.
Gradient Descent als Pad op een Terrein
Een Oppervlak in 120M+1 Dimensies
Elke gewichtconfiguratie van ANDREA-120M is één punt in R^120.000.000. Loss L(w) wijst elk punt toe aan een reëel getal: de trainingsloss bij deze configuratie. Samen vormen de loss-waarden een (120M+1)-dimensionaal oppervlak boven de parameter-ruimte.
Geometrisch onmogelijk om direct te visualiseren. Conceptueel: een terrein. Bergen (hoge loss), dalen (lage loss), zadelpunten, plateaus, ruggen, bassins.
Gradient als Lokale Helling
grad L(w) is een vector in R^120M die wijst in de richting van de steilste TOENAME van L. Negeren ervan: -grad L(w) wijst het steilst bergafwaarts.
Een AdamW-stap duwt w in de richting tegengesteld aan de gradient (met adaptieve schaling vanuit m & v). Geometrisch: een kleine stap langs het oppervlak, bergafwaarts, waarbij de stapgrootte wordt bepaald door lr.
v1's Slechte Bekken
v1 zette zijn eerste stap met LR = piek (0.0003) op vers geïnitialiseerde gewichten. Geometrisch beeld: w_0 bevindt zich in een sterk gekromd gebied (willekeurige initialisatie heeft hoge kromming in veel richtingen), en een stap met piek-LR belandt in het verkeerde bekken. Vervolgstappen kunnen hier niet uit ontsnappen. Het model blijft steken in het produceren van 'region region region' omdat dat bekken de laagste loss is die het model kan vinden vanaf waar het is beland.
v2's Warmup-pad
v2 neemt 2000 kleine stappen waarbij de LR oploopt van 0 naar piek. Geometrisch beeld: w_0 migreert eerst voorzichtig langs gladde richtingen (waar de kromming laag is). Tegen stap 2000 is w verplaatst naar een beter begaanbaar gebied; de piek-LR kan het dan naar een beter bekken sturen zonder te overschieten.
Warmup is een geometrie-bewust initialisatieprotocol: laat het model eerst een veilige lokale omgeving vinden voordat je het hard pusht.
Brede vs Smalle Bassins
Bij stap 112K bevindt ANDREA-120M zich in een bassin. Vraag: hoe breed is het?
Breed bassin = veel naburige gewicht-configuraties bereiken ook een laag trainingsverlies. Generalisatie is meestal goed (de breedte van het bassin voorspelt de testprestaties; zie PAC-Bayes-les, Hoofdstuk 3).
Smal bekken = slechts een dunne set gewichten bereikt een laag verlies. Generalisatie lijdt er meestal onder.
v3-polish bij stap 112.619 duwde het model langs het oppervlak (zonder reset) naar een breder bekken via curriculum-perturbatie: verander de verliesfunctie (andere bandit, andere trainingsmix), laat SGD een nabijgelegen vlak gebied onder het nieuwe beleid vinden.
De Zombie-klif
Het afwijkende verlies 0.13 bij stap 112.080 was een KLIF: een scherpe, smalle regio waarin één specifiek invoerpatroon (gememoriseerde repo-docs-substring) een verlies van bijna nul bereikt. Het model viel van het bredere bekken in een smalle geul. De hard-exclusion van repo-docs bij polish-pivot vulde die geul op, zodat SGD hem niet meer kon vinden.
Het terrein lezen
Curriculum Mix als een wandeling op een discrete simplex
Wat een Simplex Is
Een n-dimensionale simplex (specifiek de standaard (n-1)-simplex) is de verzameling van n-tupels (w_1, w_2, ..., w_n) waarbij elke w_i >= 0 & som(w_i) = 1.
Voor n = 2: een lijnstuk van (1, 0) naar (0, 1). Voor n = 3: een driehoek met hoekpunten (1, 0, 0), (0, 1, 0), (0, 0, 1). Voor n = 16 (ANDREA's volledige bronnenlijst): een 15-dimensionale simplex in R^16.
Bandit-gewichten als simplex-coördinaten
ANDREA's bandit produceert bij elke fase een gewichtsvector w over databronnen. Elke component w_i is de kans om bron i te selecteren. Kanswaarden zijn niet-negatief en tellen op tot 1: elke gewichtsvector ligt op de simplex.
Hoekpunten = pure strategieën (alleen één bron selecteren). Interieur = gemengde strategieën (meerdere bronnen selecteren, elk met positieve kans). Randen = mengsels van slechts twee bronnen.
Bronvloeren als beperkt gebied
ANDREA legt minimumgewichten op: hermes3-general met een vloer van 0,7 (na-polijsten). Dit creëert een subregio van de simplex: alleen gewichtsvectoren met w_hermes3-general >= 0,7 zijn bereikbaar.
Geometrisch: de vloer snijdt de simplex met een hypervlak. De bereikbare regio is het deel van de simplex aan de juiste kant van elk vloerhypervlak.
Caps als de andere beperking
ANDREA legt ook maximumgewichten op: dictionary met een cap van 0,25 (na-polijsten). Elke cap is een ander hypervlak, en de bereikbare regio moet aan de juiste kant van elk cap-hypervlak liggen.
Een bron volledig uitsluiten (cap = 0,0) is de sterkste mogelijke cap: de coördinaat wordt vastgezet op nul, waardoor de effectieve simplex met één dimensie wordt verkleind.
Faseovergangen als Simplex-wandelingen
[BLOCK_TYPE SECTION/STEP]Elke faseovergang (elke 7-42 stappen) produceert een nieuwe gewichtsvector. Elke nieuwe vector is een punt op de simplex. Over 200K stappen traceert de bandit een lang pad door het bereikbare gebied van de simplex. [BLOCK_TYPE SECTION/STEP]
Willekeurige fasen = teleporteer naar een uniform-willekeurig punt binnen het bereikbare gebied. [BLOCK_TYPE SECTION/STEP]
Bandit-gestuurde fasen = stap in de richting van de UCB-beste vertex die consistent is met de floors & caps. [BLOCK_TYPE SECTION/STEP]
Polish pivot = herteken het bereikbare gebied (nieuwe floors, nieuwe caps, sommige bronnen uitgesloten), & de wandeling gaat verder vanaf het nieuwe startpunt. [BLOCK_TYPE SECTION/STEP]
Waarom hoekpunten gevaarlijk zijn
Pure-bronfasen (één w_i = 1, rest = 0) bevinden zich op de hoekpunten van de simplex. Diversiteit is nul. Het model traint alleen op één distributie. De deels ineenstorting van v1 is deels terug te voeren op de bandit die dicht bij het repo-docs-hoekpunt kampeerde; de samples reproduceerden uitsluitend de distributie van die bron.
Vloeren voorkomen hoekpunt-kamperen: een vloer van 0.7 zegt ‘laat het gewicht van geen enkele bron onder 0.7 dalen’ (of wat de vloer ook is voor de prioriteitsbronnen).
Door het bereikbare gebied lopen
Drie bronnen: hermes3-general (H), gutenberg (G), dictionary (D). Beperkingen: H-vloer = 0.5, D-cap = 0.25. (Impliciet: alle gewichten >= 0, som = 1, geen andere beperkingen.)
Dimensies beperken voor de eerste 20K stappen
Wat v2's Curriculum Warmup deed
v2 stelde curriculum_warmup_sources in op zeven bronnen: hermes3-general, hermes3-creative, hermes3-roleplay, chat, smoltalk, oasst, gutenberg. Voor de eerste 20K stappen droegen ALLEEN deze zeven bronnen bij. Na stap 20K activeerde de volledige 16-bronnen firehose.
Geometrische interpretatie
De volledige 16-bronnen simplex bevindt zich in R^16. Beperken tot 7 bronnen zet 9 van de 16 coördinaten op nul. De wandeling van de bandit vindt plaats in een 6-dimensionale sub-simplex (één minder dan het aantal bronnen, door de som-tot-1-beperking).
Geometrisch: een SUBMANIFOLD van de volledige simplex. Lagere dimensie, gladder, gemakkelijker te navigeren.
Waarom Dit Vroeg In De Training Helpt
Vroeg in de training heeft het model nog geen coherente taal geleerd. Diverse bronnen verwarren het: elke bron heeft zijn eigen stijl, eigen woordenschatverdeling, eigen patroon. Het willekeurig mixen van 16 bronnen bij random initialisatie creëert een te brede doeldistributie die het model niet kan fitten.
Beperken tot 7 conversatie-/prozabronnen geeft een uniformere doelverdeling. Het model leert eerst een stabiele representatie en breidt daarna uit.
Geometrisch pad door training
1. Stappen 0 tot 20K (warmup). De wandeling bevindt zich op de 6-D sub-simplex. Stabiele taalpatronen ontstaan in het model.
2. Stappen 20K tot 112K (full firehose). De wandeling breidt zich uit naar de 15-D volledige simplex. Domeinbreedte ontstaat.
3. Stap 112K en verder (polish). De wandeling wordt opnieuw beperkt: repo-docs & repo-docstrings uitgesloten, conversatievloeren verhoogd. Kleinere veelhoek in de volledige simplex; conversatiekwaliteit consolideert.
Waarom Polish curriculum_warmup_steps = 0 instelt
Polish begint bij stap 112K. Het model spreekt al coherente taal. Beperken tot een sub-simplex zou nu breedte kosten zonder iets te winnen (het warmup-voordeel geldt voor modellen met een verse initialisatie). warmup_steps = 0 instellen betekent: blijf op de volledige simplex, maar met nieuwe caps & floors.
Drie Meetkunden, Eén Trainingsrun
v2 warmup: laag-dimensionale sub-simplex.
v2 firehose: volledige 15-D simplex.
v3 polish: volledige simplex met kleinere veelhoek (meer beperkingen).
Dezelfde 200K-stappen-run, drie verschillende geometrische regimes. Elk werd afgestemd op een andere fase van modelrijpheid.