Hoe Verrast Moet Het Model Zijn?
Van Logits Naar Waarschijnlijkheden
Na 12 transformer blocks produceert ANDREA-120M een vector van vocab_size getallen per token positie: de logits. Voor ANDREA-120M is vocab_size = 8449, dus elke positie geeft 8449 logits uit. Logits zijn niet-genormaliseerde scores; sommige positief, sommige negatief, geen beperking om op te tellen tot 1.
Softmax zet logits om in een waarschijnlijkheidsverdeling:
p_i = exp(logit_i) / sum_j exp(logit_j)
Na softmax liggen alle 8449 getallen tussen 0 & 1 en tellen ze op tot 1. Het model wijst waarschijnlijkheid toe aan elk mogelijk volgend token.
Cross-Entropy Loss
Training vereist een verliesfunctie: een getal dat meet hoe verkeerd de voorspelling van het model was voor een gegeven correct antwoord. Cross-entropy werkt voor taalmodellering:
loss_t = -log(p_correct_token_t)
Neem de voorspelde waarschijnlijkheid van het model voor het werkelijke volgende token (het token in de trainingsdata). Neem de negatieve logaritme van die waarschijnlijkheid. Dat is de loss voor één positie.
Waarom Negatieve Logaritme
Drie eigenschappen maken -log(p) een natuurlijke loss-functie:
- -log(1) = 0: Wanneer het model het juiste token met 100% vertrouwen voorspelt, is de loss nul.
- -log(0) = ∞: Wanneer het model nul waarschijnlijkheid toekent aan het juiste token, is de loss oneindig. (In de praktijk geeft softmax nooit exact 0 uit; de loss blijft eindig maar groot.)
- Monotoon: Naarmate de voorspelde waarschijnlijkheid voor het juiste token toeneemt, neemt de loss vloeiend af.
Hogere zekerheid op het juiste antwoord = lagere verlieswaarde. Het trainingsdoel is eenvoudig: maximaliseer de voorspelde waarschijnlijkheid voor het werkelijke volgende token.
Per-Sequentie Verlies
ANDREA traint op sequenties van lengte 1024 (het contextvenster). Elke sequentie produceert 1024 voorspellingen voor het volgende token. Het sequentie-verlies is het gemiddelde over alle posities:
```
sequence_loss = mean(-log(p_correct_t)) for t in 0..1023
```
Daarna worden de sequentie-verliezen gemiddeld over de batch (ANDREA-120M gebruikt batch_size = 8). Eén scalair getal per trainingstap. Dat getal is wat de verliescurve plot.
Verlies berekenen voor één positie
Perplexity = exp(loss)
Een Vriendelijkere Schaal
Loss-waarden zoals 2.0 of 3.43 maken niet meteen duidelijk wat het model kan. Perplexity vertaalt loss naar een intuïtiever schaal:
perplexity = exp(loss)
Perplexity beantwoordt een simpele vraag: uit hoeveel even waarschijnlijke tokens kiest het model effectief? Een perplexity van 7 betekent dat het model zich gedraagt alsof het op elke positie kiest uit 7 plausibele volgende tokens. Een perplexity van 1 betekent perfecte voorspelling.
Veelvoorkomende Loss-Perplexity Combinaties
| Loss | Perplexity | Hoe het aanvoelt |
|---|---|---|
| 0.0 | 1.0 | Perfecte voorspelling |
| 1.0 | 2.7 | Kiezen uit ~3 plausibele tokens |
| 2.0 | 7.4 | ANDREA-12M finale SMMA-gebied |
| 3.0 | 20.1 | Redelijk tekst maar onzeker |
| 3.43 | 30.9 | ANDREA-120M v1 minimum (voor polijsten) |
| 5.0 | 148 | Vroege training, leren van woordenschatdistributie |
| 9.04 | 8449 | Willekeurige-kans basislijn voor ANDREA-120M's vocab |
Perplexity plaatst verlieswaarden in context: een verlies van 2.0 betekent dat het model effectief kiest uit ~7 tokens, niet uit 8449.
De Random-Chance Baseline
Een model dat niets weet en uniform raadt, wijst een waarschijnlijkheid 1/V toe aan elk token, waarbij V = vocab_size:
p_uniform = 1 / V
loss = -log(1/V) = log(V)
Voor ANDREA-120M met V = 8449:
loss_uniform = ln(8449) ≈ 9.04
Voor ANDREA-12M met V = 2305:
loss_uniform = ln(2305) ≈ 7.74
Elke loss boven deze baseline betekent dat het model slechter presteert dan willekeurig. Elke loss eronder betekent dat het model iets heeft geleerd: het concentreert de waarschijnlijkheidsmassa op een kleinere subset van tokens dan uniform zou doen.
Een Loss-waarde Lezen
Gladmaken van Stap-Niveau Ruis
Ruw Verlies Is Ruisig
Per-stap verlies schommelt heen en weer. ANDREA's bandit kiest elke 7-42 stappen een andere bron; sommige bronnen (woordenboekdefinities) produceren makkelijke verliezen; andere (gutenberg-paragrafen) produceren moeilijkere verliezen. Het plotten van ruw stapverlies tegen stapnummer produceert een chaotische spreiding.
Gegladde Gewijzigde Bewegingsgemiddelde (SMMA) dempt het ruis & onthult de trend. ANDREA's trainingsproxy berekent SMMA als:
SMMA[0] = loss[0]
SMMA[t] = (SMMA[t-1] * (N-1) + loss[t]) / N
Met N = 100 (ANDREA's standaard gladmakingsvenster), mengt elke nieuwe SMMA-waarde 99% van de vorige SMMA met 1% van de nieuwe stapverlies. Plotselinge pieken worden geabsorbeerd; aanhoudende verschuivingen verschijnen geleidelijk.
Waarom Niet Gewoon Gemiddelde Nemen?
Een eenvoudig voortschrijdend gemiddelde over de laatste 100 stappen vereist het opslaan van 100 verlieswaarden. SMMA slaat één waarde op (het lopende gemiddelde) & één constante (de venstergrootte). Goedkoop qua geheugen, computationeel triviaal, & glad genoeg om een curve te lezen.
Verschillende gladmakingsgewichten beantwoorden verschillende vragen:
- N = 10: volgt kortetermijnveranderingen; nuttig tijdens fasenovergangen
- N = 100: ANDREA's standaard; volgt middellange-termijn voortgang
- N = 1000: alleen langetermijntrend; nuttig aan het einde van de training
Wat ANDREA Volgt
Elke 100 stappen schrijft de training proxy loss.json met de huidige SMMA, raw loss, stapnummer, & breakdowns per bron. Het dashboard op training.ai.unturf.com/dashboard pollt dit bestand elke 10 seconden. Externe kijkers zien live voortgang; het dashboard is alleen-lezen.
ANDREA-12M's Echte Curve
Het Recept Dat SMMA 2.0 Bereikte
| Stappen | Gem. Loss | Opmerkingen |
|---|---|---|
| 0--2.5K | 4.50 | Willekeurige init, vroege leerfase |
| 2.5K--5K | 3.88 | Snelle daling door structuurfase |
| 5K--10K | 3.30 | Benaderend coherentiegrens |
| 10K--20K | 2.80 | Bandit vindt optimale mix |
| 20K--25K | 2.40 | Plateau --- datagebrek |
| 25K--30K | 2.50 | Hermes-data geïntroduceerd + LR-herstart |
| 30K--35K | 2.35 | Hermes geïntegreerd, nieuwe dieptepunten |
| 35K--40K | 2.10 | 4-arm focus, steile daling |
| 40K--43.6K | 2.00 | Kennisgebied, SMMA onder 2.0 |
Drie fasen springen eruit:
1. Steile vroege daling (0-10K). Loss daalt van 4.50 naar 3.30 terwijl het model de woordenschatverdeling & basisgespreksstructuur leert. Random-chance baseline ln(2305) ≈ 7.74 ligt hoog boven deze curve; het model concentreert waarschijnlijkheidsmassa snel zodra embeddings stabiliseren.
2. Plateau (20K-25K). Loss stagneert op 2.40. De bandit had geen ruimte meer op zijn huidige bronmix. Hermes-data toegevoegd op stap 25K, plus een LR warm restart, doorbrak het plateau.
3. Eindafdaling (35K-43,6K). Curriculum versmald van 16 bronnen naar 4 (hermes3-general + dictionary + gutenberg + chat). Steilere daling van het verlies dan bij de full-arm bandit. Finale SMMA: 2.0.
ANDREA-120M v1: Een waarschuwende curve
Zelfde vocabulaireberekening: ln(8449) ≈ 9.04. ANDREA-120M v1 bereikte SMMA 3.43 op stap 110K (zijn minimum), en divergeerde daarna:
| Stappen | EMA-verlies | Trend |
|---|---|---|
| 26K--40K | 4.29 | Convergerend |
| 70K--85K | 3.60 | Beste regio |
| 85K--110K | 3.43 | Minimum |
| 110K--125K | 3.54 | Divergerend |
| 140K--155K | 4.05 | Divergerend |
| 155K--165K | 4.54 | Ingestort |
Numeriek redelijke verlieswaarden gedurende het hele traject (3.43 ligt ruim onder de 9.04 willekeurige basislijn). Maar samples waren herhaling-collapse: Budy Budy Budy Budy. Verlies vertelde een misleidend verhaal; sample-audits deden dat niet.
De coherence-gated early stopping van v2 (activiteit 78) voegde een parallelsignaal toe: bigram-diversiteit, trigram-diversiteit, aanwezigheid van Engelse woorden, karakterdiversiteit. Wanneer alle vier de scores onder de 30 blijven voor 5 opeenvolgende samples, stopt de training automatisch. Dit signaal zou v1 hebben gevangen bij stap 132K, waardoor 3,8 dagen rekentijd werden bespaard.
Wat Elke Fase Je Vertelt
De 120M v1 Les
Twee Onafhankelijke Signalen
ANDREA-120M v1 bereikte SMMA 3.43 op stap 110K. Numeriek: 273× beter dan willekeurige kans (perplexity 31 vs vocab size 8449). Ziet er geweldig uit op de curve.
Sample op stap 110K::
''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
Loss en coherentie zijn onafhankelijke signalen. Lage loss betekent dat het model de waarschijnlijkheidsmassa effectief concentreert. Coherentie betekent dat het model tekst produceert die mensen kunnen lezen. Het eerste impliceert niet het tweede.
Waarom Het Verschil Bestaat
Een model kan de loss verlagen door:
1. Echte taalpaternen leren (goed): onderwerp-werkwoordovereenkomst, veelvoorkomende zinswendingen, feitelijke associaties.
2. Structuurartefacten uit het hoofd leren (slecht): hoogfrequente herhalings patronen, dataset-specifieke eigenaardigheden, degeneratieve attractors.
Beide reduceren de loss. De eerste produceert samples die mensen leuk vinden. De tweede produceert Budy Budy Budy Budy. Het trainingsdoel op zich kan ze niet onderscheiden.
ANDREA-120M v3 Polish: Waar Loss & Coherentie Samenkomen
Na v3 polish (stap 112K en verder), produceert ANDREA-120M:
Stap 112.584, loss 0.30, ppl 1::
> [extinction prompt]
< black spider montano is alive, carolina parakeet is extinct.
Beide feiten correct. Carolina parkiet uitgeroepen tot uitgestorven in 1939; zwarte spinmonkey nog in leven. Lage loss (0.30) EN coherente feitelijke herinnering.
Stap 112.500, verlies 1.94, ppl 7::
> Hoe vind ik verouderde pakketten in een Python-project?
< Gebruik `pip list --outdated` om de lijst van verouderde pip-pakketten te zien...
Hoger verlies (1.94 → ppl 7) maar het juiste hulpmiddel komt naar voren uit de trainingsdata. Zinsconstructie vloeiendheid ontwikkelt zich nog bij de 56% trainingsmarkering.
De Tweesignaal Discipline
Moderne trainings-pipelines monitoren BEIDE:
- Loss curve. Vertelt je of het model kwantitatief iets leert.
- Sample audit. Vertelt je of wat het model heeft geleerd nuttig is.
v2 voegde coherence-gated early stopping toe (activiteit 78). v3 polish was een curriculum perturbatie geactiveerd door sample audits, niet door loss-waarden. Loss alleen is noodzakelijk maar nooit voldoende.