Semantiskt avstånd som euklidiskt avstånd
Ett högdimensionellt vektorrum
Varje token i ANDREA-120M:s vokabulär med 8449 tokens avbildas till en punkt i R^768. Tokeninbäddningsmatrisen har formen 8449 × 768: 8449 rader, en per vokabulärtoken; 768 kolumner, en per inbäddningsdimension.
Tre egenskaper gör detta till ett vektorrum
[BLOCK_TYPE SECTION/STEP]1. Addition. v_a + v_b hamnar i R^768. Summan av två inbäddningar är en giltig vektor. [BLOCK_TYPE SECTION/STEP]
2. Skalär multiplikation. alpha * v hamnar i R^768 för varje reellt tal alpha. Sträck ut eller krymp längs samma riktning. [BLOCK_TYPE SECTION/STEP]
3. Linjäritet. alpha v_a + beta v_b hamnar i R^768. Linjärkombinationer stannar inom rummet. [BLOCK_TYPE SECTION/STEP]
Dessa egenskaper ger oss geometriska verktyg: avstånd, vinkel, projektion, bas, ortogonalitet. [BLOCK_TYPE SECTION/STEP]
Avstånd som semantisk likhet
Cosinuslikhet mellan två inbäddningar mäter vinkeln mellan dem: cos(theta) = (v_a . v_b) / (||v_a|| * ||v_b||). Omfång: -1 (motsatt) till +1 (parallell).
Empiriskt mönster efter träning: tokens med liknande kontexter ger inbäddningar med hög cosinuslikhet. ANDREA-120M placerar parakeet & monkey nära varandra (båda biologiska, båda arter, båda levande eller utdöda kategorier). Den placerar Fourier & transform nära varandra (signalbehandlingskontext). Den placerar parakeet & Fourier långt ifrån varandra (tvärdomän-ortogonalitet).
Varför R^768 inte R^384
ANDREA-12M använde d_model = 384. ANDREA-120M fördubblade till 768. Fördubblingen spelar roll: ett 384-dimensionellt rum har färre tillgängliga 'vinklar', och tvärdomänsskillnader lider. Fördubblad kapacitet ger modellen utrymme att lösa bank (flod) kontra bank (finansiell) till olika bassänger i inbäddningsrymden utan att den ena kollapsar i den andra.
Uppdatering av inbäddningar som vektoröversättning
Varje gradientsteg lägger till delta_v till v_token. Geometriskt: små förskjutningar i R^768 flyttar varje tokens position mot områden som minskar förlusten. Under 200K steg migrerar varje token från sin slumpmässiga initialisering till en inlärd position.
Beräkna ett avstånd
Tre tränade inbäddningar (förenklade till R^3 för aritmetik):
- v(parakeet) = (1.0, 0.5, 0.0)
- v(monkey) = (1.2, 0.3, 0.1)
- v(Fourier) = (0.0, 0.0, 1.5)
Projektion på ett Query-underrum
Vad Attention Beräknar
För en token på position t beräknar attention:
<translated content> [BLOCK_TYPE SECTION/STEP]
softmax(Q K^T / sqrt(d_k)) V [BLOCK_TYPE SECTION/STEP]
<translated content> [BLOCK_TYPE SECTION/STEP]
Där Q är frågan (denna tokens fråga), K är nycklar (varje tidigare tokens identifierare), V är värden (varje tidigare tokens innehåll). Utmatningen blandar V viktat efter hur mycket frågan relaterar till varje nyckel. [BLOCK_TYPE SECTION/STEP]
<translated content> [BLOCK_TYPE SECTION/STEP]
Geometrisk tolkning
[BLOCK_TYPE SECTION/STEP]Tänk på K som en lista av vektorer i R^d_k. Varje rad är en tidigare tokens nyckel. Q är en vektor i R^d_k: denna tokens fråga. [BLOCK_TYPE SECTION/STEP]
<translated content>
Q K^T projicerar varje nyckel på Q. Skalärprodukten q . k_i mäter hur mycket k_i ligger längs q:s riktning. Lång projektion = nyckeln är starkt relevant för frågan. Kort projektion = nyckeln är knappt relevant.
softmax normaliserar projektionerna till vikter som summerar till 1. Den viktade summan av V är en enda vektor: en blandning av tidigare innehåll, viktat efter relevans för den aktuella frågan.
Multi-Head Attention som multi-subrymd-projektion
ANDREA-120M använder 12 attention-huvuden. d_model = 768; d_k = 768 / 12 = 64. Varje huvud projicerar till en annan 64-dimensionell subrymd av R^768. Tolv huvuden ger tolv oberoende vyer av samma sekvens: ett huvud kan spåra grammatisk roll, ett annat semantisk likhet, ett tredje långdistansreferenser.
Geometriskt: varje huvud definierar en 64-dimensionell orienterad subrymd (ett ”fönster”) genom vilket det betraktar det förflutna.
Den kausala masken
Decoder-only-modeller lägger till en kausal mask: varje Q K^T-post ovanför diagonalen sätts till -oändlighet före softmax. Geometriskt: projektionen på varje framtida token får noll vikt. Token t kan bara se token 0 till t.
Varför detta är viktigt: träning och inferens blir symmetriska. Samma forward-pass, samma maskade projektioner, ingen speciell genereringslogik.
Skalning med sqrt(d_k)
Utan skalning växer skalprodukter med d_k. Stora skalprodukter driver softmax mot en-hot-regioner (en vikt nära 1, resten nära 0). Genom att dividera med sqrt(d_k) hålls projektionerna på en enhetsvarians-skala, vilket bevarar softmax-skärpan över ett brett intervall av d_k-värden.
Geometriskt: sqrt(d_k) normaliserar längderna på projektionerna så att softmax ser jämförbara magnituder oavsett underrymdens dimension.
Läsa en projektion
Tre nycklar & en query i R^4 (förenklat för beräkning):
- q = (1, 0, 1, 0)
- k_1 = (1, 0, 0, 0) [tidigare token 1]
- k_2 = (0, 0, 1, 0) [tidigare token 2]
- k_3 = (0, 1, 0, 1) [past token 3]
d_k = 4, så sqrt(d_k) = 2.
Gradient Descent som väg på terräng
En yta i 120M+1 dimensioner
Varje viktkonfiguration för ANDREA-120M är en punkt i R^120,000,000. Förlusten L(w) mappar varje punkt till ett reellt tal: träningsförlusten vid denna konfiguration. Tillsammans bildar förlustvärdena en (120M+1)-dimensionell yta ovanför parameterrymden.
Geometriskt omöjligt att visualisera direkt. Konceptuellt: en terräng. Berg (hög förlust), dalar (låg förlust), sadelpunkter, platåer, åsar, bassänger.
Gradient som lokal lutning
grad L(w) är en vektor i R^120M som pekar i riktningen för brantaste ÖKNING av L. Negering av den: -grad L(w) pekar brantast nedför.
Ett AdamW-steg flyttar w i den negativa gradientens riktning (med adaptiv skalning från m & v). Geometriskt: ett litet steg längs ytan, nedåt, med stegstorlek styrd av lr.
v1:s dåliga bassäng
v1 tog sitt första steg med LR = toppvärde (0.0003) på nyss initierade vikter. Geometrisk bild: w_0 ligger i ett kraftigt krökt område (slumpmässig initiering har hög krökning i många riktningar), och ett steg med topp-LR hamnar i fel bassäng. Efterföljande steg kan inte ta sig ut. Modellen fastnar i att producera 'region region region' eftersom den bassängen har lägst förlust som modellen kan hitta från där den landade.
v2:s uppvärmningsväg
v2 tar 2000 små steg med LR som ökar från 0 till toppvärde. Geometrisk bild: w_0 flyttar sig först försiktigt längs släta riktningar (där krökningen är låg). Vid steg 2000 har w flyttats till ett mer navigerbart område; topp-LR kan sedan driva det mot en bättre bassäng utan att överskjuta.
Warmup är ett geometri-medvetet initieringsprotokoll: låt modellen hitta en säker lokal omgivning innan du pressar den hårt.
Breda vs smala bassänger
Vid steg 112K sitter ANDREA-120M i en bassäng. Fråga: hur bred är den?
Bred bassäng = många närliggande viktkonfigurationer uppnår också låg träningsförlust. Generalisering tenderar att vara bra (bassängens bredd förutspår testprestanda; se PAC-Bayes-lektionen, Kapitel 3).
Smalt bassäng = endast en tunn uppsättning vikter uppnår låg förlust. Generalisering tenderar att bli sämre.
v3-polering vid steg 112 619 flyttade modellen längs ytan (utan återställning) till ett bredare bassäng via läroplansstörning: ändra förlustfunktionen (annan bandit, annan träningsmix), låt SGD hitta en närliggande plan region under den nya policyn.
Zombieklippan
Den avvikande förlusten 0,13 vid steg 112 080 var en KLIPPBRANT: en skarp, smal region där ett specifikt indatamönster (memorerad repo-dokumentsträng) ger nära-noll förlust. Modellen föll från det bredare bassänget ner i en smal ravin. Poleringens hårda exkludering av repo-dokument fyllde igen den ravinen så att SGD inte längre kunde hitta den.
Att läsa terrängen
Läroplansmix som en vandring på ett diskret simplex
Vad ett simplex är
Ett n-dimensionellt simplex (specifikt det standardmässiga (n-1)-simplexet) är mängden av n-tupler (w_1, w_2, ..., w_n) där varje w_i >= 0 & sum(w_i) = 1.
För n = 2: en linjesegment från (1, 0) till (0, 1). För n = 3: en triangel med hörn (1, 0, 0), (0, 1, 0), (0, 0, 1). För n = 16 (ANDREA:s fullständiga källista): en 15-dimensionell simplex som ligger i R^16.
Banditvikter som simplexkoordinater
ANDREA:s bandit producerar en viktvektor w över datakällor i varje fas. Varje komponent w_i är sannolikheten att sampla källa i. Sannolikheterna är icke-negativa och summerar till 1: varje viktvektor ligger på simplexet.
Hörn = rena strategier (sampla endast en källa). Inre = blandade strategier (sampla flera källor, var och en med positiv sannolikhet). Kanter = blandningar av endast två källor.
Källgolv som begränsad region
ANDREA sätter minimivikter: hermes3-general på golv 0.7 (efter polering). Detta skapar en delregion av simplexet: endast viktvektorer med w_hermes3-general >= 0.7 är nåbara.
Geometriskt: golvet skär simplexet med ett hyperplan. Den nåbara regionen är den del av simplexet som ligger på rätt sida av varje golv-hyperplan.
Tak som den andra begränsningen
ANDREA sätter även maximivikter: dictionary på tak 0.25 (efter polering). Varje tak är ett annat hyperplan, och den nåbara regionen måste ligga på rätt sida av varje tak-hyperplan också.
Att helt utesluta en källa (tak = 0.0) är den starkaste möjliga tak-begränsningen: koordinaten låses till noll, vilket reducerar det effektiva simplexet med en dimension.
Fasövergångar som simplexvandringar
Varje fasövergång (var 7–42 steg) genererar en ny viktvektor. Varje ny vektor är en punkt på simplexet. Under 200K steg spårar banditen en lång väg genom simplexets nåbara region.
Slumpmässiga faser = teleportera till en likformigt slumpmässig punkt inom den nåbara regionen.
Banditstyrda faser = steg mot den UCB-bästa hörnpunkten som är förenlig med golv och tak.
Polish pivot = rita om den nåbara regionen (nya golv, nya tak, vissa källor exkluderas), och vandringen fortsätter från den nya startpunkten.
Varför hörn är farliga
Ren-källfaser (en w_i = 1, resten = 0) ligger vid simplexhörn. Mångfald är noll. Modellen tränas på en enda fördelning. v1:s kollaps kunde delvis spåras till att banditen campade nära repo-docs-hörnet; proverna reproducerade enbart den källans fördelning.
Golv förhindrar hörncamping: ett golv på 0.7 säger ”låt aldrig någon källas vikt sjunka under 0.7” (eller vilket golvvärde som gäller för prioriterade källor).
Att gå i det nåbara området
Tre källor: hermes3-general (H), gutenberg (G), dictionary (D). Begränsningar: H-golv = 0.5, D-tak = 0.25. (Implicit: alla vikter ≥ 0, summerar till 1, inga andra begränsningar.)
Begränsning av dimensioner under de första 20K stegen
Vad v2:s läroplansuppvärmning gjorde
v2 satte curriculum_warmup_sources till sju källor: hermes3-general, hermes3-creative, hermes3-roleplay, chat, smoltalk, oasst, gutenberg. Under de första 20K stegen bidrog ENDAST dessa sju källor. Efter steg 20K aktiverades den fulla 16-källors brandslangen.
Geometrisk tolkning
Den fullständiga 16-källans simplex ligger i R^16. Genom att begränsa till 7 källor kollapsar 9 av de 16 koordinaterna till noll. Banditens vandring äger rum i en 6-dimensionell sub-simplex (en mindre än antalet källor, på grund av summa-till-1-begränsningen).
Geometriskt: en SUBMANIFOLD av den fullständiga simplexen. Lägre dimensionell, jämnare, enklare att navigera.
Varför Detta Hjälper Tidig Träning
Tidigt i träningen har modellen inte lärt sig sammanhängande språk alls. Olika källor förvirrar den: varje källa har sin egen stil, sin egen vokabulärfördelning, sitt eget mönster. Att blanda 16 källor vid slumpmässig initiering skapar en alltför bred målfördelning som modellen inte kan anpassa sig till.
Att begränsa till 7 konversationella/prosa-källor ger en mer enhetlig målfördelning. Modellen lär sig först en stabil representation, sedan expanderar den.
Geometrisk väg genom träningen
1. Steg 0 till 20K (warmup). Gången lever på det 6-D subsimplexet. Stabila språkmönster uppstår i modellen.
2. Steg 20K till 112K (full firehose). Gången expanderar till det 15-D fulla simplexet. Domänbredd uppstår.
3. Steg 112K och framåt (polish). Gången begränsas igen: repo-docs & repo-docstrings exkluderas, konversationstak höjs. Mindre polygon i det fulla simplexet; konversationskvalitet konsolideras.
Varför polish sätter curriculum_warmup_steps = 0
Polish börjar vid steg 112K. Modellen talar redan ett sammanhängande språk. Att begränsa till ett subsimplex nu skulle innebära förlorad bredd utan någon vinst (warmup-fördelen gäller för modeller med färsk initiering). Att sätta warmup_steps = 0 innebär: stanna på det fulla simplexet, men med nya tak och golv.
Tre geometrier, en träningskörning
v2 warmup: lågdimensionell sub-simplex.
v2 firehose: full 15-D simplex.
v3 polish: full simplex med mindre polygon (fler begränsningar).
Samma 200K-stegs körning, tre olika geometriska regimer. Varje var anpassad för en annan fas av modellens mognad.