Hur Förvånad Bör Modellen Vara?
Från Logits Till Sannolikheter
Efter 12 transformerblock producerar ANDREA-120M en vektor med vocab_size antal siffror per tokenposition: logits. För ANDREA-120M är vocab_size = 8449, så varje position ger ut 8449 logits. Logits är onormaliserade poäng; vissa positiva, vissa negativa, ingen begränsning att summera till 1.
Softmax omvandlar logits till en sannolikhetsfördelning:
p_i = exp(logit_i) / sum_j exp(logit_j)
Efter softmax ligger alla 8449 siffror mellan 0 & 1 och summerar till 1. Modellen tilldelar sannolikhet till varje möjlig nästa token.
Cross-Entropy-förlust
Träning kräver en förlustfunktion: ett tal som mäter hur fel modellens förutsägelse var för ett givet korrekt svar. Cross-entropy fungerar för språkmodellering:
loss_t = -log(p_korrekt_token_t)
Ta modellens förutsagda sannolikhet för den faktiska nästa token (den i träningsdata). Ta den negativa logaritmen av den sannolikheten. Det är förlusten för en position.
Varför negativ logaritm
Tre egenskaper gör -log(p) till en naturlig förlustfunktion:
- -log(1) = 0: När modellen förutsäger den korrekta token med 100% säkerhet är förlusten noll.
- -log(0) = ∞: När modellen tilldelar noll sannolikhet till den korrekta token är förlusten oändlig. (I praktiken ger softmax aldrig exakt 0; förlusten förblir ändlig men stor.)
- Monoton: När den förutsagda sannolikheten för den korrekta token ökar minskar förlusten smidigt.
Högre säkerhet på det korrekta svaret = lägre förlust. Träningsmålet är enkelt: maximera den förutsagda sannolikheten för den faktiska nästa token.
Förlust per sekvens
ANDREA tränar på sekvenser av längd 1024 (fönstret för kontext). Varje sekvens producerar 1024 förutsägelser för nästa token. Sekvensförlusten är ett medelvärde över alla positioner:
sequence_loss = mean(-log(p_correct_t)) for t in 0..1023
Sedan genomsnittas sekvensförlusterna över batchen (ANDREA-120M använder batch_size = 8). Ett skalärt tal per träningssteg. Det talet är vad förlustkurvan plotar.
Beräkna förlust för en position
Perplexity = exp(loss)
En vänligare skala
Förlustvärden som 2.0 eller 3.43 förmedlar inte omedelbart vad modellen kan göra. Perplexity översätter förlusten till en mer intuitiv skala:
perplexity = exp(loss)
Perplexity besvarar en ren fråga: bland hur många lika sannolika tokens väljer modellen effektivt? En perplexity på 7 betyder att modellen beter sig som om den väljer från 7 plausibla nästa tokens vid varje position. En perplexity på 1 betyder perfekt förutsägelse.
Vanliga Loss-Perplexity-par
| Loss | Perplexity | Vad det känns som |
|---|---|---|
| 0.0 | 1.0 | Perfekt förutsägelse |
| 1.0 | 2.7 | Välja bland ~3 plausibla tokens |
| 2.0 | 7.4 | ANDREA-12M slutlig SMMA-territorium |
| 3.0 | 20.1 | Rimlig text men osäker |
| 3.43 | 30.9 | ANDREA-120M v1 minimum (före polering) |
| 5.0 | 148 | Tidig träning, lär vokabulärfördelning |
| 9.04 | 8449 | Slumpmässig chans-baslinje för ANDREA-120M's vocab |
Perplexity sätter förlustvärden i kontext: en förlust på 2.0 betyder att modellen effektivt väljer från ~7 tokens, inte från 8449.
Slumpmässiga chansens baslinje
En modell som inte vet något och gissar enhetligt tilldelar sannolikheten 1/V till varje token, där V = vocab_size:
p_uniform = 1 / V
loss = -log(1/V) = log(V)
För ANDREA-120M med V = 8449:
loss_uniform = ln(8449) ≈ 9,04
För ANDREA-12M med V = 2305:
loss_uniform = ln(2305) ≈ 7.74
Varje förlust över denna baslinje betyder att modellen presterar sämre än slumpmässigt. Varje förlust under den betyder att modellen har lärt sig något: den koncentrerar sannolikhetsmassan på en mindre delmängd av tokens än vad uniformt skulle göra.
Läsa en förlustvärde
Utjämning av Stegnivåbrus
Rå Förlust Är Brusig
Förlust per steg studsar runt. ANDREA's bandit väljer en annan källa var 7-42 steg; vissa källor (ordboksdefinitioner) producerar lätta förluster; andra (gutenberg-paragrafer) producerar svårare förluster. Att plotta rå stegförlust mot stegnomer ger en kaotisk spridning.
Utjämnad Modifierad Glidande Medelvärde (SMMA) dämpar brus & avslöjar trenden. ANDREA's träningsproxy beräknar SMMA som:
SMMA[0] = loss[0]
SMMA[t] = (SMMA[t-1] * (N-1) + loss[t]) / N
Med N = 100 (ANDREA's standard utjämningsfönster) blandar varje nytt SMMA-värde 99% av det föregående SMMA med 1% av den nya stegförlusten. Plötsliga spikar absorberas; ihållande förändringar visas gradvis.
Varför inte bara genomsnitt?
Ett enkelt glidande medelvärde över de senaste 100 stegen kräver lagring av 100 förlustvärden. SMMA lagrar ett värde (det löpande medelvärdet) & en konstant (fönsterstorleken). Minnesbilligt, beräkningsmässigt trivialt, & tillräckligt slätt för att läsa en kurva.
Olika utjämningsvikter svarar på olika frågor:
- N = 10: spårar kortsiktiga förändringar; användbart under fasövergångar
- N = 100: ANDREA's standard; spårar medellångtidsframsteg
- N = 1000: endast långsiktig trend; användbart i slutet av träning
Vad ANDREA Spårar
Var 100:e steg skriver träningsproxyn loss.json med aktuell SMMA, rå förlust, stegnummer och uppdelning per källa. Instrumentpanelen på training.ai.unturf.com/dashboard läser av denna fil var 10:e sekund. Externa tittare ser live-framsteg; instrumentpanelen är skrivskyddad.
ANDREA-12M:s Faktiska Kurva
Receptet Som Nådde SMMA 2.0
| Steg | Genomsnittlig Förlust | Noteringar |
|---|---|---|
| 0--2.5K | 4.50 | Slumpmässig initiering, tidig inlärning |
| 2.5K--5K | 3.88 | Snabb nedgång genom strukturfasen |
| 5K--10K | 3.30 | Närmar sig koherensgränsen |
| 10K--20K | 2.80 | Bandit hittar optimal blandning |
| 20K--25K | 2.40 | Platå --- datubrist |
| 25K--30K | 2.50 | Hermes-data introducerad + LR-återstart |
| 30K--35K | 2.35 | Hermes integrerad, nya lågvärden |
| 35K--40K | 2.10 | 4-arm fokus, brant nedgång |
| 40K--43.6K | 2.00 | Kunskapsterritorium, SMMA under 2.0 |
Tre faser sticker ut:
1. Brant tidig nedgång (0-10K). Förlusten sjunker från 4.50 till 3.30 när modellen lär sig vokabulärfördelning & grundläggande turstruktur. Slumpmässig chansbaslinje ln(2305) ≈ 7.74 ligger högt ovanför denna kurva; modellen koncentrerar sannolikhetsmassa snabbt när inbäddningarna stabiliseras.
2. Platå (20K-25K). Förlusten stannar vid 2.40. Banditen hade slut på utrymme i sin nuvarande källmix. Hermes-data lades till vid steg 25K, plus en LR-värmeåterstart, bröt platån.
3. Slutlig nedgång (35K-43,6K). Curriculum minskades från 16 källor till 4 (hermes3-general + dictionary + gutenberg + chat). Brantare förlustnedgång än den fulla arm-banditen. Slutlig SMMA: 2,0.
ANDREA-120M v1: En varnande kurva
Samma vokabulärberäkning: ln(8449) ≈ 9,04. ANDREA-120M v1 nådde SMMA 3,43 vid steg 110K (dess minimum), sedan divergerade den:
| Steg | EMA-förlust | Trend |
|---|---|---|
| 26K--40K | 4.29 | Konvergerande |
| 70K--85K | 3.60 | Bästa regionen |
| 85K--110K | 3.43 | Minimum |
| 110K--125K | 3.54 | Divergerande |
| 140K--155K | 4.05 | Divergerande |
| 155K--165K | 4.54 | Kollapsad |
Numeriskt rimliga förlustvärden genomgående (3.43 ligger bra under den slumpmässiga baslinjen på 9.04). Men proverna var repetitionskollaps: Budy Budy Budy Budy. Förlusten berättade en vilseledande historia; provgranskningar gjorde det inte.
v2:s coherence-gated early stopping (aktivitet 78) lade till en parallell signal: bigram-diversitet, trigram-diversitet, engelsk ordnärvaro, karaktärsdiversitet. När alla fyra poäng ligger under 30 för 5 konsekutiva prover stoppas träningen automatiskt. Denna signal skulle ha fångat v1 vid steg 132K och sparat 3,8 dagars beräkningskraft.
Vad varje fas berättar för dig
120M v1-lektionen
Två oberoende signaler
ANDREA-120M v1 nådde SMMA 3.43 vid steg 110K. Numeriskt: 273× bättre än slumpmässig chans (perplexity 31 mot vocab-storlek 8449). Ser bra ut på kurvan.
Prov vid steg 110K::
''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
Förlust & koherens är oberoende signaler. Låg förlust betyder att modellen koncentrerar sannolikhetsmassa effektivt. Koherens betyder att modellen producerar text som människor kan läsa. Det första implicerar inte det andra.
Varför Gapet Finns
En modell kan sänka förlust genom:
1. Lära sig verkliga språkmönster (bra): subjekt-verb-överensstämmelse, vanliga fraser, faktiska associationer.
2. Memorera strukturella artefakter (dåligt): högfrekventa repetitionsmönster, dataset-specifika egenheter, degenerativa attraktorer.
Båda minskar förlusten. Den första producerar prover som människor gillar. Den andra producerar Budy Budy Budy Budy. Träningsmålet ensamt kan inte skilja dem åt.
ANDREA-120M v3 Polish: Där förlust & koherens möttes
Efter v3-polering (steg 112K och framåt) producerar ANDREA-120M:
Steg 112,584, förlust 0.30, ppl 1::
> [extinction prompt]
< svart spindelapa montano lever, carolina parakit är utdöd.
Båda fakta korrekta. Carolina parakit erklädd utdöd 1939; svart spindelapa fortfarande levande. Låg förlust (0.30) OCH koherent faktisk återkallelse.
Steg 112,500, förlust 1.94, ppl 7::
> Hur hittar jag föråldrade paket i ett Python-projekt?
< Använd pip list --outdated names för att se listan över pip-paket...
Högre förlust (1.94 → ppl 7) men rätt verktyg framträder från träningsdata. Frasflyt utvecklas fortfarande vid 56%-märket i träningen.
Tvåsignal-disciplinen
Moderna tränings-pipelines övervakar BÅDA:
- Loss-kurva. Berättar om modellen lär sig något kvantitativt.
- Provgranskning. Berättar om det modellen lärde sig är användbart.
v2 lade till koherens-styrd tidig stopp (aktivitet 78). v3-polering var en läroplansstörning utlöst av provgranskningar, inte av loss-värden. Loss ensam är nödvändig men aldrig tillräcklig.