Reading the Math in AI Papers · Deel 1 van 1

Hoe je de wiskunde in arXiv-papers over AI leest: een praktische gids

Automatische vertaling

Dit artikel is automatisch vertaald vanuit de oorspronkelijke Engelse versie.

De wiskunde in een AI-paper kunnen lezen is een nuttige vaardigheid voor engineers die een model willen begrijpen, een methode willen reproduceren of een experimentele claim willen beoordelen. Deze gids legt uit hoe je de notatie ontcijfert, een vergelijking met kleine getallen controleert en haar koppelt aan de rest van het paper en aan de implementatie. Ze gaat ervan uit dat je code kunt lezen, maar niet dat je al vertrouwd bent met onderzoeksnotatie.

Een vergelijking perst meerdere beslissingen samen in één regel: de objecten waarmee wordt gerekend, hun dimensies, welke waarden worden gesampled en wat er wordt geleerd of juist vast blijft staan. Die details terughalen is een goede eerste stap. Uitleggen waarom een methode werkt en haar getrouw implementeren kost extra werk.

Begin met de attention-uitwerking: daarin wordt één vergelijking gekoppeld aan arrayvormen, kleine getallen en uitvoerbare Python. Het notatieoverzicht legt de uitdrukkingen uit die je in andere papers tegenkomt. De rest van deze serie past dezelfde methode toe op vergelijkingen uit specifieke papers: architectuurvergelijkingen zoals RoPE, MLA en LoRA; trainingsdoelen zoals DPO en GRPO; en generatieve modellen en metrics zoals de ELBO, diffusion en pass@k. Die delen zijn nog niet verschenen, dus de uitwerkingen waarnaar dit deel verwijst zijn niet gelinkt. Voor een uitgebreidere behandeling van de basis ontwikkelt Tianhua Chen in The Little Book of Generative AI Foundations de lineaire algebra en kansrekening achter generatieve modellen.

Attention, lees één symbool tegelijk

Attention levert een outputvector door een gewogen gemiddelde te nemen van value-vectoren. De gewichten komen voort uit een vergelijking van een query-vector voor de outputpositie met een key-vector voor elke beschikbare inputpositie. De matrices QQ, KK en VV bundelen die query-, key- en value-vectoren. Scaled dot-product attention vat deze stappen samen in vergelijking (1) van §3.2.1 (§ betekent “sectie”) in Attention Is All You Need:

Attention⁡(Q,K,V)=softmax⁡(QK⊤dk)V.\operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V.

De definities staan in de tekst, niet in de vergelijking. De alinea vóór vergelijking (1) zegt dat queries en keys dimensie dkd_k hebben en values dimensie dvd_v. De methode neemt het inproduct van elke query met alle keys, deelt elk door dk\sqrt{d_k} en past een softmax toe “to obtain the weights on the values”. Queries zijn “packed together into a matrix QQ”, en keys en values in KK en VV. Elke rij van deze matrices is dus de vector van één token, en de softmax levert één set gewichten per query. De geleerde matrices die tokenvectoren omzetten in QQ, KK en VV komen later, in §3.2.2.

Vormen en rollen. Een attention head voert één zo’n berekening uit met eigen query-, key- en value-vectoren. Schrijf hun vormen op voordat je de operatoren leest. Voor één head met nn queries en mm keys:

SymboolVormWat het isWaar het vandaan komt
QQn×dkn\times d_kéén query-rij per outputpositietokenvectoren maal een geleerde matrix
KKm×dkm\times d_kéén key-rij per positie waarop attention kan lettentokenvectoren maal een geleerde matrix
VVm×dvm\times d_véén value-rij per keytokenvectoren maal een geleerde matrix
K⊤K^\topdk×md_k\times mKK getransponeerd: rijen worden kolommendezelfde getallen als KK
dkd_keen getalde breedte van elke query en keyeen vaste instelling: 64 in de basis-Transformer

Papers geven een vorm aan door de verzameling te noemen waartoe de matrix behoort: Q∈Rn×dkQ\in\mathbb R^{n\times d_k} betekent een matrix van reële getallen met nn rijen en dkd_k kolommen, een array met vorm [n, dk].

Lees van binnen naar buiten.

  1. QK⊤QK^\top vermenigvuldigt een matrix van n×dkn\times d_k met een matrix van dk×md_k\times m. De gedeelde dkd_k wordt weggesommeerd, dus het resultaat is een tabel van n×mn\times m scores. Element (i,j)(i,j) is het inproduct van query ii en key jj: vermenigvuldig overeenkomstige elementen en tel de producten op. Bij gelijke vectorlengtes is deze score groter naarmate hun richtingen meer op elkaar lijken.

  2. Delen door dk\sqrt{d_k} voorkomt dat de scores meegroeien met de vectorbreedte. Voetnoot 4 van het paper laat zien waarom ongeschaalde inproducten groeien. Stel dat de componenten van een query en een key onafhankelijk van elkaar zijn (als je er een paar kent, weet je niets over de andere), elk met gemiddelde 0 en variantie 1 (de gemiddelde gekwadrateerde afstand tot het gemiddelde). Dan geldt:

    one product qiki:variance 1q⊤k=∑i=1dkqiki:variance dk, standard deviation dkq⊤k/dk:standard deviation 1\begin{aligned} \text{one product }q_ik_i:&\quad\text{variance }1\\ q^\top k=\textstyle\sum_{i=1}^{d_k}q_ik_i:&\quad\text{variance }d_k,\ \text{standard deviation }\sqrt{d_k}\\ q^\top k/\sqrt{d_k}:&\quad\text{standard deviation }1 \end{aligned}

    De regels gebruiken twee eigenschappen van onafhankelijke getallen. Ten eerste: het product van twee onafhankelijke getallen die elk gemiddelde 0 en variantie 1 hebben, heeft ook variantie 1. Ten tweede: als je onafhankelijke getallen optelt, tellen hun varianties op, dus de dkd_k producten geven variantie dkd_k. De standaarddeviatie is de wortel uit de variantie, dk\sqrt{d_k}. Als je elke score door dk\sqrt{d_k} deelt, krimpt de spreiding met dezelfde factor, terug naar 1.

    Waarom de twee regels gelden

    Variantie als het gemiddelde 0 is. Variantie is de gemiddelde gekwadrateerde afstand tot het gemiddelde. Als het gemiddelde 0 is, is die afstand gewoon het getal zelf, dus de variantie is het gemiddelde van het kwadraat. Een component qiq_i met gemiddelde 0 en variantie 1 heeft dus een qi2q_i^2 die gemiddeld 1 is.

    Het gemiddelde van een product. Voor onafhankelijke getallen is het gemiddelde van een product het product van de gemiddelden. Neem een getal aa dat met gelijke kans 1 of 3 is, dus gemiddeld 2, en een getal bb dat 1 of 5 is, eveneens met gelijke kans, dus gemiddeld 3. Onafhankelijk betekent dat bb elke waarde even vaak aanneemt, wat aa ook werd, zodat alle vier de paren even waarschijnlijk zijn. Als a=1a=1, zijn de producten 1 en 5, met gemiddelde 3=1×33=1\times3. Als a=3a=3, zijn ze 3 en 15, met gemiddelde 9=3×39=3\times3. In beide gevallen is het gemiddelde a×3a\times3, dus over beide waarden van aa is het (3+9)/2=6(3+9)/2=6, oftewel 2×32\times3. Zonder onafhankelijkheid faalt de regel: als bb 5 was wanneer aa 3 is, en 1 wanneer aa 1 is, kwamen alleen de producten 1 en 15 voor, en die hebben gemiddelde 8. Wikipedia geeft de regel voor willekeurige onafhankelijke stochastische variabelen, met “expected value” voor het gemiddelde: independence and expectation.

    Regel 1: één product heeft variantie 1. Neem één product qikiq_ik_i. Het gemiddelde is het product van de gemiddelden, 0×0=00\times0=0, dus de variantie is het gemiddelde van (qiki)2=qi2ki2(q_ik_i)^2=q_i^2k_i^2. De kwadraten zijn onafhankelijk omdat qiq_i en kik_i dat zijn, en elk is gemiddeld 1, dus de variantie is 1×1=11\times1=1. De algemene formule is de variance of a product of independent variables.

    Regel 2: de varianties van onafhankelijke termen tellen op. Noem de producten xi=qikix_i=q_ik_i, zodat het inproduct de som x1+⋯+xdkx_1+\cdots+x_{d_k} is. De termen zijn onafhankelijk omdat ze elk andere componenten gebruiken, en elk heeft gemiddelde 0 en variantie 1. De som heeft ook gemiddelde 0, dus haar variantie is het gemiddelde van haar kwadraat. Als je de som met zichzelf vermenigvuldigt, krijg je één product xixjx_ix_j voor elk paar termen, een raster van dk×dkd_k\times d_k:

    Een raster van vier bij vier voor het kwadraat van x1 + x2 + x3 + x4, met één cel voor elk product van twee termen. De vier diagonale cellen, x1 kwadraat tot en met x4 kwadraat, zijn gemarkeerd: elk heeft gemiddeld 1, dus samen 4. De twaalf andere cellen vermenigvuldigen twee verschillende onafhankelijke termen en hebben elk gemiddeld 0 maal 0, dus samen 0. Het kwadraat van de som heeft gemiddeld 4: variantie 4, standaarddeviatie 2. Met 64 termen geeft dezelfde telling variantie 64 en standaarddeviatie 8.Een raster van vier bij vier voor het kwadraat van x1 + x2 + x3 + x4, met één cel voor elk product van twee termen. De vier diagonale cellen, x1 kwadraat tot en met x4 kwadraat, zijn gemarkeerd: elk heeft gemiddeld 1, dus samen 4. De twaalf andere cellen vermenigvuldigen twee verschillende onafhankelijke termen en hebben elk gemiddeld 0 maal 0, dus samen 0. Het kwadraat van de som heeft gemiddeld 4: variantie 4, standaarddeviatie 2. Met 64 termen geeft dezelfde telling variantie 64 en standaarddeviatie 8.

    De diagonale cellen zijn de kwadraten xi2x_i^2, en elk is gemiddeld 1. Elke andere cel vermenigvuldigt twee verschillende, onafhankelijke termen, dus haar gemiddelde is het product van hun gemiddelden, 0×0=00\times0=0: haar positieve en negatieve waarden heffen elkaar op. Alleen de dkd_k diagonale cellen blijven over, dus de variantie van de som is dkd_k en haar standaarddeviatie is dk\sqrt{d_k}. De spreiding groeit met de wortel van de breedte omdat het grootste deel van het raster wegvalt. Wikipedia geeft de algemene stelling als de variance of a sum of uncorrelated variables; onafhankelijke variabelen zijn altijd ongecorreleerd, dus de regel geldt ook voor hen.

    Met dk=64d_k=64 liggen ruwe scores doorgaans binnen ongeveer ±8\pm8; geschaald binnen ongeveer ±1\pm1, bij elke breedte.

    Sterk gespreide scores verzadigen softmax (stap 3), en de gradients verdwijnen. Als één score in een rij ver boven de andere ligt, geeft softmax die key een gewicht dicht bij 1 en elke andere key een gewicht dicht bij 0. Een kleine verandering in een score verschuift de gewichten dan nauwelijks, dus de gradient die de queries en keys bereikt is bijna nul, en de training heeft vrijwel niets om ze mee bij te stellen. Het paper noemt dit als waarschijnlijke verklaring van een eerder resultaat: zonder de schaling presteerde dot-product attention bij grote dkd_k slechter dan additive attention, een oudere vorm die een query en een key met een klein netwerk scoort (Britz et al., 2017). Het paper meet de gradients zelf niet.

  3. Softmax zet elke rij scores om in gewichten. Laat z=(z1,…,zm)z=(z_1,\ldots,z_m) één rij van de geschaalde scores zijn. De exponentiële functie eae^a, ook geschreven als exp⁡(a)\exp(a), gebruikt de constante e≈2.718e\approx2.718. Dan geldt softmax⁡(z)j=ezj/∑j′ezj′\operatorname{softmax}(z)_j=e^{z_j}/\sum_{j'}e^{z_{j'}}, waarbij j′j' slechts een tweede indexnaam is, zodat de som over elke key in de rij loopt. De gewichten zijn positief en elke rij telt op tot 1.

  4. Door de n×mn\times m gewichten met de m×dvm\times d_v values te vermenigvuldigen, wordt de key-as weggesommeerd. Rij ii van de n×dvn\times d_v output is een gewogen gemiddelde van de value-rijen, gewogen naar hoe goed elke key bij query ii paste.

Eén attention head getekend als rasters van getallen, met drie queries, vier keys, keybreedte twee en valuebreedte drie. Q, drie bij twee, maal K getransponeerd, twee bij vier, geeft een scoretabel van drie bij vier. Softmax behoudt die vorm en laat elke rij optellen tot één. De gewichten, drie bij vier, maal V, vier bij drie, geven een output van drie bij drie, en outputrij twee is een gewogen gemiddelde van de value-rijen met gewichtsrij twee.Eén attention head getekend als rasters van getallen, met drie queries, vier keys, keybreedte twee en valuebreedte drie. Q, drie bij twee, maal K getransponeerd, twee bij vier, geeft een scoretabel van drie bij vier. Softmax behoudt die vorm en laat elke rij optellen tot één. De gewichten, drie bij vier, maal V, vier bij drie, geven een output van drie bij drie, en outputrij twee is een gewogen gemiddelde van de value-rijen met gewichtsrij twee.

Tel de vierkantjes in de figuur: elk product laat de as verdwijnen die de twee rasters delen.

Controleer het met twee getallen. Neem één query en twee keys met geschaalde scores (0,log⁡3)(0,\log3), zo gekozen dat de exponentiële waarden 1 en 3 worden, en values v1=(2,0)v_1=(2,0) en v2=(0,4)v_2=(0,4). De figuur werkt het uit, één bewerking per kolom:

Een tabel met één rij per key. Key 1: geschaalde score 0, exponentiële waarde 1, gewicht 1/4, value (2, 0), gewogen value (0.5, 0). Key 2: geschaalde score log 3, exponentiële waarde 3, gewicht 3/4, value (0, 4), gewogen value (0, 3). De exponentiële waarden tellen op tot 4, de gewichten tot 1 en de gewogen values tot de output (0.5, 3).Een tabel met één rij per key. Key 1: geschaalde score 0, exponentiële waarde 1, gewicht 1/4, value (2, 0), gewogen value (0.5, 0). Key 2: geschaalde score log 3, exponentiële waarde 3, gewicht 3/4, value (0, 4), gewogen value (0, 3). De exponentiële waarden tellen op tot 4, de gewichten tot 1 en de gewogen values tot de output (0.5, 3).

Attention mengde beide values; ze koos niet het token dat het beste paste.

Vergelijk het met code. De NumPy-functie hieronder implementeert één head. k.T is de getransponeerde. axis=1 is de key-as, dus de rij van elke query wordt apart genormaliseerd. Het maximum van de rij wordt afgetrokken vóór np.exp: als je hetzelfde getal bij elke score in een rij optelt, valt dat weg in de softmax-verhouding, dus het resultaat blijft gelijk, maar grote scores lopen niet meer over. De optionele mask zet geblokkeerde scores op −∞-\infty, waardoor hun gewichten precies nul worden. Een decoder gebruikt zo’n mask om te voorkomen dat elk token naar latere tokens kijkt (§3.2.3 van het paper).

Sla het blok op als attention_example.py en voer uv run --with numpy python attention_example.py uit. De controles slagen zonder uitvoer.

import numpy as np

def attention(q, k, v, allowed=None):
    """One head. q: [n, dk], k: [m, dk], v: [m, dv], allowed: bool [n, m]."""
    scores = q @ k.T / np.sqrt(q.shape[1])  # [n, m]
    if allowed is not None:
        if not allowed.any(axis=1).all():
            raise ValueError("every query needs at least one allowed key")
        scores = np.where(allowed, scores, -np.inf)
    scores = scores - scores.max(axis=1, keepdims=True)
    weights = np.exp(scores)
    weights = weights / weights.sum(axis=1, keepdims=True)  # rows sum to 1
    return weights @ v, weights  # [n, dv], [n, m]

# The two-key example from the text.
out, w = attention(
    np.array([[1.0]]),
    np.array([[0.0], [np.log(3.0)]]),
    np.array([[2.0, 0.0], [0.0, 4.0]]),
)
np.testing.assert_allclose(w, [[0.25, 0.75]])
np.testing.assert_allclose(out, [[0.5, 3.0]])

# A causal mask: query i may attend only to keys 0..i.
x = np.random.default_rng(0).normal(size=(3, 4))
out, w = attention(x, x, x, allowed=np.tril(np.ones((3, 3), dtype=bool)))
assert out.shape == (3, 4)
np.testing.assert_allclose(w.sum(axis=1), 1.0)
assert np.all(w[np.triu_indices(3, k=1)] == 0)

Een query waarvan alle keys geblokkeerd zijn, is een geval dat de vergelijking openlaat: elk gewicht in haar rij zou 0/00/0 zijn. De functie geeft een foutmelding in plaats van NaN terug te geven.

Van één head naar meerdere. De basis-Transformer draait acht heads parallel, elk met eigen geleerde matrices om QQ, KK en VV te maken, en elk met dk=dv=64d_k=d_v=64. De outputs worden samengevoegd en vermenigvuldigd met nog een geleerde matrix, WOW^O (Attention Is All You Need, §3.2.2).

Een implementatie kan ook een batch verwerken: meerdere inputsequenties tegelijk. PyTorch’s scaled dot-product attention accepteert bijvoorbeeld een query-tensor Q met vorm [batch, heads, n, d_k]. De eerste twee dimensies kiezen een sequentie en een head; Q[b, h] is de matrix [n, d_k] voor dat paar. De attention-formule geldt los voor elk paar. De NumPy-functie hier behandelt maar één zo’n paar: haar .T- en axis=1-bewerkingen gaan uit van tweedimensionale input.

Zes vragen bij elke vergelijking

VraagAntwoord voor attention
Wat geeft de vergelijking terug, en met welke vorm?Een matrix van n×dvn\times d_v: één outputrij per query
Is elk symbool data, een getrainde weight, een bevroren model, een instelling of een sample?QQ, KK en VV worden uit tokens berekend met geleerde matrices; dkd_k is een vaste instelling; er wordt niets gesampled
Over welke index of as loopt elke bewerking?Softmax loopt over de mm keys in de rij van elke query; het product van de gewichten met VV sommeert over keys
Waar staan de definities?De alinea vóór vergelijking (1), voetnoot 4, en §3.2.2 voor de geleerde projecties
Wat levert een controle met twee of drie getallen op?Gewichten (1/4,3/4)(1/4,3/4) en output (0.5,3)(0.5,3)
Welke keuzes moest de code maken die de vergelijking openlaat?Het maximum van de rij aftrekken, de waarde voor gemaskeerde scores, een rij zonder toegestane key

Wat voor soort uitspraak een vergelijking doet

Attention is een berekening: ze zegt hoe je uit inputs een output krijgt. Papers schrijven ook vergelijkingen met andere taken:

SoortVoorbeeld in deze serieWat je controleert
BerekeningDe attention-output; MLA’s gecomprimeerde vectorDe vorm van elk tussenresultaat
DefinitieGRPO’s score ten opzichte van andere antwoordenWaar de nieuwe naam voor staat, zodat je haar kunt terugsubstitueren
Doel: een loss om te minimaliseren of een score om te maximaliserenDe DPO-lossOf er wordt geminimaliseerd of gemaximaliseerd, en over welke data wordt gemiddeld
UpdateregelGradient descent; het geheugen van Gated DeltaNetWat er bij elke stap verandert en wat vast blijft
Beperking, of een verzameling toegestane waardenDe toegestane mixmatrices van mHCHoe het paper een waarde produceert die eraan voldoet
Grens: een boven- of ondergrens van een grootheidDe evidence lower bound (ELBO)Het verschil tussen de twee kanten, en wanneer het nul is
Schatter of metricpass@kWat er wordt geteld, en uit hoeveel samples
Empirische fitDe scaling law van DeepSeek LLMHet databereik waarop de curve is gefit

Een beperking legt een eigenschap vast die het resultaat moet hebben. Voor attention-gewichten is die eigenschap: elk gewicht is niet-negatief en elke rij telt op tot 1. Softmax is een berekening die gewichten met die eigenschap oplevert. De eis alleen zegt je niet dat je softmax moet gebruiken.

== stelt dat twee uitdrukkingen gelijk zijn. :=:= betekent “is gedefinieerd als”: het geeft een uitdrukking een naam. Een definitie kan een metric, een loss of een verzameling toegestane waarden een naam geven, dus als je :=:= ziet, weet je nog niet welke soort vergelijking uit de tabel hierboven je leest.

Evaluating Large Language Models Trained on Code, het paper dat het code-generatiemodel Codex introduceerde, gebruikt bijvoorbeeld :=:= om zijn schatter voor pass@k te definiëren (vergelijking 1). Deze metric meet de kans dat minstens één van kk gegenereerde programma’s de tests doorstaat. In het DeepSeek-V4 technical report combineert vergelijking (2) twee uitspraken: M:={…}\mathcal M:=\{\ldots\} definieert een verzameling toegestane matrices, en Bl∈MB_l\in\mathcal M eist dat de mixmatrix BlB_l van het model tot die verzameling behoort. De definitie gebruikt :=:=; de beperking gebruikt ∈\in, “behoort tot”. De secties over pass@k en mHC werken die voorbeelden uit.

De nieuwe vergelijking, haar definities en haar code vinden

De methodesectie van een paper beschrijft hoe het model of trainingsalgoritme werkt. De kop kan “Method”, “Architecture” of iets specifiekers zijn. Auteurs leggen vaak eerst een bestaande methode uit en laten dan zien wat ze hebben veranderd. Om de gepretendeerde bijdrage te achterhalen, begin je bij de samenvatting van wat nieuw is in de introductie. DeepSeekMath, §1.1 noemt bijvoorbeeld Group Relative Policy Optimization (GRPO), de methode om modellen te trainen op basis van gescoorde antwoorden. Sectie- en vergelijkingsnummers verwijzen hier naar het gelinkte paper.

Vergelijk daarna de voorgestelde methode met de eerdere methode die ze aanpast. Twee papers illustreren dit:

  • Een architectuurwijziging. DeepSeek-V2 beschrijft standaard multi-head attention in §2.1.1 en introduceert multi-head latent attention (MLA) in §2.1.2. Standaard attention slaat de keys en values van elk eerder token op. MLA slaat een gecomprimeerde vector op waaruit ze kunnen worden gereconstrueerd. Door die vergelijkingen naast elkaar te leggen zie je wat het model anders opslaat; de MLA-uitwerking leidt de geheugenbesparing af.
  • Een trainingswijziging. DeepSeekMath, §4.1.1 drukt het doel van Proximal Policy Optimization (PPO) af als vergelijking (1) en dat van GRPO als vergelijking (3). Beide gebruiken een advantage: een getal dat zegt of een antwoord beter of slechter was dan verwacht. PPO schat het met een tweede geleerd netwerk, het value model, dat de beloning voorspelt die een deelantwoord nog zal opleveren. GRPO vergelijkt in plaats daarvan de beloning van het antwoord met de beloningen van andere antwoorden op dezelfde vraag. De GRPO-uitwerking vergelijkt deze termen met de notatie voor hele antwoorden uit DeepSeek-R1.

Zoek de definities rond de vergelijking. Kijk in de voorgaande alinea, in een eventuele “where …”-zin erna, in voetnoten en in bijlagen. In Attention Is All You Need definieert de alinea vóór vergelijking (1) de dimensies, en voetnoot 4 verklaart de schaalfactor. DeepSeek-V3 definieert de meeste routingsymbolen direct na vergelijking (15), en de bias bib_i vlak vóór vergelijking (16). DeepSeek-V2 ontwikkelt MLA over de vergelijkingen (9)–(19) en verzamelt de berekening daarna in Appendix C.

Controleer het algoritme en de code. Een algoritmebox is een genummerde pseudocodelijst die de volgorde van bewerkingen vastlegt. Algorithm 1 van DeepSeekMath laat zien wanneer je antwoorden genereert en wanneer je het model bijwerkt. Algorithm 1 in Denoising Diffusion Probabilistic Models (DDPM) beschrijft hoe je het trainingsbeeld, het ruisniveau en de ruis samplet. Implementaties leggen verdere details vast: np.std deelt standaard de som van gekwadrateerde afwijkingen door nn, terwijl torch.std door n−1n-1 deelt. Het GRPO-voorbeeld laat zien hoe die keuze de advantage-waarden verandert die uit dezelfde beloningen worden berekend.

arXiv-versies kunnen secties verplaatsen en vergelijkingen onder nieuwe nummers herhalen, dus citeer de versie. In DeepSeek-R1 v1 is het GRPO-doel §2.2.1, vergelijkingen (1)–(3). In v2, geplaatst in januari 2026, is het §2.1, en dezelfde vergelijkingen komen terug als (11)–(13) in Supplementary A.3. Een link zonder versie opent de nieuwste, dus elke arXiv-link in deze serie bevat de versie waartegen hij is gecontroleerd.

Je lezing controleren met een LLM

Een chatmodel kan de symbooltabel, de index van elke som en een controle met kleine getallen opstellen, als je het de definities geeft en vraagt te markeren wat ontbreekt. Tekst die uit een pdf is gekopieerd, plet subscripts, superscripts en breuken tot één regel; de links “HTML (experimental)” en “TeX Source” op de arXiv-abstractpagina geven schone tekst om te plakken. Plak de vergelijking en de alinea’s eromheen met een prompt zoals deze:

Below is equation (N) from <paper title, arXiv ID and version>, followed by
the paragraphs that define its symbols.

1. Make a table with one row per symbol: shape or type, meaning, and whether
   it is input data, a trained weight, a frozen model, a fixed setting or a
   random sample. Quote the sentence that defines it.
2. List every symbol the pasted text does not define. Do not guess them.
3. For every sum, mean, softmax, min or expectation, name the index or the
   distribution it runs over.
4. Work through the equation with the smallest numbers that use every term.
5. Say which kind of statement it is: a computation, definition, objective,
   update rule, constraint, bound, estimator or empirical fit.

Zonder stap 2 houdt niets het model tegen om een ontbrekende definitie in te vullen met de gebruikelijke betekenis van de letter, bijvoorbeeld σ\sigma in DPO lezen als standaarddeviatie in plaats van als sigmoid. De citaten uit stap 1 maken de tabel controleerbaar: zoek elk citaat in de pdf, en behandel een rij waarvan je het citaat niet kunt vinden als een gok.

Dezelfde procedure als agent skills. paper-math-skills verpakt deze sectie en het notatieoverzicht hieronder als twee skills voor Claude Code; andere agents die SKILL.md-bestanden laden, kunnen ze ook gebruiken. read-paper-math haalt de vastgepinde arXiv-versie op, citeert de zin die elk symbool definieert, leest de vergelijking van binnen naar buiten en voert een controle met kleine getallen uit. check-paper-math toetst zo’n lezing aan het paper: het zoekt elk citaat op, rekent de getallen opnieuw door en markeert beweringen die sterker of zwakker zijn dan die van het paper. paper-math-readings bevat de lezingen van de skills voor deel 2 tot en met 4, één voor elk van de 15 secties met een Source:-regel.

Notatieoverzicht

Als een Griekse letter je onbekend is, open dan het Griekse-lettersoverzicht van dit artikel (Appendix A) voor haar naam en gangbare betekenissen. Voor meer oefening met de wiskunde bieden Stanford CS229 overzichten van kansrekening en lineaire algebra met oefeningen; de preliminaries van Dive into Deep Learning leggen de basis uit met code.

Subscripts, tekens en relatietekens

Letters zijn lokale variabelenamen: elk paper definieert de zijne. Subscripts zijn meestal indices. xix_i kan coördinaat ii van een vector zijn of voorbeeld ii in een dataset, en hth_t is de vector van het model voor token tt, zijn hidden state.

Superscripts in modelpapers zijn vaak labels. In ht(ℓ)h_t^{(\ell)} is de superscript tussen haakjes meestal een laagnummer, geen macht; in FFN⁡i(s)\operatorname{FFN}^{(s)}_i en FFN⁡i(r)\operatorname{FFN}^{(r)}_i van DeepSeek-V3 geeft ze gedeelde en gerouteerde experts aan: degene die elk token gebruikt en degene die een router kiest (zie het MoE-routingvoorbeeld). In DeepSeek-V2 dragen WDKVW^{DKV} en ktCk_t^C labels, geen exponenten; het MLA-voorbeeld definieert die labels. W⊤W^\top is een getransponeerde en x2x^2 is een kwadraat.

x1:Tx_{1:T} betekent de posities 1 tot en met TT, inclusief TT, anders dan een Python-slice; papers tellen meestal vanaf 1. x<tx_{<t} betekent elke positie vóór tt. Xt,:X_{t,:} selecteert rij tt, zoals bij NumPy-slicing.

Tekens op een letter veranderen haar betekenis meestal op een van deze manieren:

TekenGebruikelijke lezingVoorbeeld of uitzondering
y^\hat yEen voorspelling of schattingVoorbeeld: A^i,t\hat A_{i,t} in DeepSeekMath schat hoeveel beter een antwoord scoorde dan verwacht
xˉ\bar xEen gemiddeldeUitzondering: in DDPM vermenigvuldigt αˉt\bar\alpha_t de factoren van het ruisschema van stap 1 tot en met tt
x~\tilde xEen verstoorde of onbeperkte versieVoorbeeld: in DeepSeek-V4 is B~l\tilde B_l een matrix voordat normalisatie haar beperkingen afdwingt
x∗x^\astHet optimumUitzondering: in DPO is r∗r^\ast de ware beloning, die de methode nooit waarneemt
x′x'Een nieuwe waarde of een tussenwaardeVoorbeeld: in DeepSeek-V3 is gi,t′g'_{i,t} een expertgewicht vóór normalisatie
A−1A^{-1}De matrixinverseNiet de elementsgewijze reciproke: A−1A^{-1} maakt AA ongedaan, A−1A=IA^{-1}A=I (de eenheidsmatrix), en in het algemeen geldt (A−1)ij≠1/Aij(A^{-1})_{ij}\neq1/A_{ij}

Sommige symbolen die geen Griekse letters zijn, hebben ook meerdere taken:

SymboolBetekenissen
∣\midConditionering in p(y∣x)p(y\mid x); “zodanig dat” binnen een verzameling
∣x∣\vert x\vertEen absolute waarde; de lengte van een sequentie, zoals in ∣oi∣\vert o_i\vert, het aantal tokens van GRPO’s antwoord oio_i; de grootte van een verzameling
∼\sim”Wordt getrokken uit” in x∼px\sim p; “ongeveer” in informele tekst
TTEen sequentielengte; een softmax-temperatuur; het aantal diffusiestappen
qqEen query-vector (attention); een vraag (GRPO); het studentmodel qθq_\theta (distillation); de encoder qϕq_\phi (ELBO)

Vijf tekens geven aan hoe twee kanten zich tot elkaar verhouden. :=:=, soms ≜\triangleq, definieert een nieuwe naam. ≈\approx markeert een benadering, zoals het gesamplede gemiddelde in Verwachtingswaarden en waar de samples vandaan komen. ∝\propto betekent “evenredig met”, waarbij een normaliseringsconstante is weggelaten: pi∝ezip_i\propto e^{z_i} wordt pas een verdeling na deling door ∑jezj\sum_j e^{z_j}. ≪\ll betekent “veel kleiner dan”, zoals in dc≪dhnhd_c\ll d_hn_h van DeepSeek-V2: de gecomprimeerde breedte is veel kleiner dan de totale breedte van alle heads. ←\leftarrow is een toewijzing, zoals in een updateregel.

Sommen, tellingen, intervallen en logaritmen

De grote ∑\sum telt termen op en ∏\prod vermenigvuldigt ze. De index onder elke operator begint hier bij 1 en loopt tot en met de bovengrens NN:

∑i=1Nxi=x1+⋯+xN,∏i=1Nxi=x1⋯xN.\sum_{i=1}^{N}x_i=x_1+\cdots+x_N,\qquad\prod_{i=1}^{N}x_i=x_1\cdots x_N.

De index hoort bij de operator, zoals een lusvariabele bij zijn lus hoort. In yi=∑j=1dWijxjy_i=\sum_{j=1}^{d}W_{ij}x_j loopt de som over jj, terwijl ii een outputelement aanwijst. Het resultaat is een vector met één element per ii: het matrix-vectorproduct WxWx uitgeschreven. De indices aan de linkerkant vertellen je de vorm van de output.

De factor voor een som bepaalt wat gelijk gewicht krijgt. Een batch met een antwoord van 2 tokens en een van 8 tokens, waarbij ℓit\ell_{it} de loss op token tt van antwoord ii is (in GRPO is ℓ\ell in plaats daarvan een term om te maximaliseren), kan op twee manieren worden gemiddeld:

Lanswers=12(12∑t=12ℓ1t+18∑t=18ℓ2t)Ltokens=110(∑t=12ℓ1t+∑t=18ℓ2t)\begin{aligned} L_{\text{answers}}&=\frac12\left(\frac12\sum_{t=1}^{2}\ell_{1t}+\frac18\sum_{t=1}^{8}\ell_{2t}\right)\\ L_{\text{tokens}}&=\frac1{10}\left(\sum_{t=1}^{2}\ell_{1t}+\sum_{t=1}^{8}\ell_{2t}\right) \end{aligned}

In de eerste krijgt elk antwoord gewicht 12\tfrac12, gedeeld over zijn tokens:

short answer, each token:12×12=14long answer, each token:12×18=116\begin{aligned} \text{short answer, each token:}&\quad\tfrac12\times\tfrac12=\tfrac14\\ \text{long answer, each token:}&\quad\tfrac12\times\tfrac18=\tfrac1{16} \end{aligned}

In de tweede heeft elk token gewicht 1/101/10. GRPO samplet GG antwoorden o1,…,oGo_1,\ldots,o_G op elke vraag, en ∣oi∣\vert o_i\vert is het aantal tokens in antwoord ii. De twee gemiddelden luiden dan als volgt, voor DeepSeekMath’s GRPO en voor DAPO, een latere variant van GRPO:

DeepSeekMath’s GRPO, per answer:1G∑i=1G1∣oi∣∑t=1∣oi∣ℓitDAPO, per token:1∑i∣oi∣∑i=1G∑t=1∣oi∣ℓit\begin{aligned} \text{DeepSeekMath's GRPO, per answer:}&\quad\frac1G\sum_{i=1}^{G}\frac1{\vert o_i\vert}\sum_{t=1}^{\vert o_i\vert}\ell_{it}\\ \text{DAPO, per token:}&\quad\frac1{\sum_i\vert o_i\vert}\sum_{i=1}^{G}\sum_{t=1}^{\vert o_i\vert}\ell_{it} \end{aligned}

Met G=2G=2 zijn dit LanswersL_{\text{answers}} en LtokensL_{\text{tokens}} hierboven. DAPO stapte over op het gemiddelde per token (§3.3) omdat het gemiddelde per antwoord de tokens van lange antwoorden te weinig gewicht gaf: het model leerde te weinig van lange goede antwoorden en strafte lange, repetitieve slechte antwoorden niet genoeg.

Een som kan ook tellen. Papers doen dat met een indicator: een vetgedrukte één gevolgd door een voorwaarde, 1[C]\mathbf 1[C], die gelijk is aan 1 als de voorwaarde CC waar is en aan 0 als ze onwaar is. Sommige papers zetten de voorwaarde tussen haakjes of drukken een één in blackboard bold af; de betekenis is dezelfde. Indicatoren optellen telt dus hoe vaak de voorwaarde geldt. Accuracy is het gebruikelijke voorbeeld. Als y^i\hat y_i de voorspelde klasse is en yiy_i de juiste klasse voor voorbeeld ii, dan is ∑i1[y^i=yi]\sum_i\mathbf 1[\hat y_i=y_i] het aantal juiste voorspellingen. Voorspellingen (kat, hond, hond) tegen juiste labels (kat, kat, hond) geven de indicatoren 1, 0 en 1, dus de telling is 2 en de accuracy 2/3. In een mixture-of-experts-laag (MoE) stuurt een router elk token naar een paar van de vele feed-forward-subnetwerken, experts genoemd. In de balansloss van DeepSeek-V3 (vergelijking 18) is de indicator 1 wanneer de score van een expert voor een token tot de KrK_r hoogste scores voor dat token behoort, waarbij KrK_r het aantal experts is waarnaar elk token wordt gerouteerd. De som over de tokens van een sequentie telt hoe vaak dat gebeurde. De score laat hier de bias weg die de routing toevoegt, dus de telling kan afwijken van de experts die de router werkelijk kiest (MoE-routing).

De binomiaalcoëfficiënt (nk)\binom nk, gelezen als ”nn boven kk”, telt de manieren om kk verschillende items uit nn te kiezen, zonder rekening te houden met de volgorde. Voor gehele getallen 0≤k≤n0\leq k\leq n is ze gelijk aan n!/(k! (n−k)!)n!/(k!\,(n-k)!). Het uitroepteken betekent faculteit: n!=1×2×⋯×nn!=1\times2\times\cdots\times n, met 0!=10!=1. Bijvoorbeeld (52)=5!/(2! 3!)=10\binom52=5!/(2!\,3!)=10: vijf items hebben tien verschillende paren. DeepSeekMoE gebruikt binomiaalcoëfficiënten om combinaties van experts te tellen, en de pass@k-schatter gebruikt ze om verzamelingen samples te tellen.

Intervallen gebruiken haakjes voor meegenomen uiteinden: [a,b][a,b] omvat beide, (a,b)(a,b) geen van beide. In Gated DeltaNet betekent αt∈(0,1)\alpha_t\in(0,1) strikt tussen 0 en 1. Elders is (a,b)(a,b) een paar.

De natuurlijke logaritme draait machtsverheffen om: log⁡(ea)=a\log(e^a)=a. Logaritmen zetten producten om in sommen en quotiënten in verschillen: log⁡(ab)=log⁡a+log⁡b\log(ab)=\log a+\log b en log⁡(a/b)=log⁡a−log⁡b\log(a/b)=\log a-\log b, maar log⁡(a+b)\log(a+b) valt niet uiteen. Daarom werken papers met log-kansen. De log van een product van tokenkansen is een som, en de log van een quotiënt van de kansen van twee modellen is een verschil, de vorm die in de DPO- en GRPO-doelen wordt gebruikt. ML-papers bedoelen de natuurlijke log tenzij ze anders zeggen; de resultaten zijn in nats, en logaritmen met grondtal 2 geven bits. Voor een kans p≤1p\leq1 geldt −log⁡p≥0-\log p\geq0, en die groeit onbegrensd als pp naar 0 gaat, dus een zelfverzekerde foute voorspelling is duur.

Log-sum-exp betekent: neem de exponentiële waarde van elke score ziz_i, tel de resultaten op en neem dan de logaritme. log⁡∑iezi\log\sum_i e^{z_i} direct berekenen kan overlopen als een score groot is. Zoek in plaats daarvan de grootste score en noem die mm. De notatie m=max⁡izim=\max_i z_i betekent “vergelijk alle elementen ziz_i en neem de grootste”; in NumPy m = z.max().

Trek mm van elke score af vóór het exponentiëren en tel het na het nemen van de logaritme weer op:

log⁡∑iezi=m+log⁡∑iezi−m.\log\sum_i e^{z_i}=m+\log\sum_i e^{z_i-m}.

Voor z=(1000,1001)z=(1000,1001) is de grootste score m=1001m=1001. De verschoven scores zijn (−1,0)(-1,0), dus de berekening wordt 1001+log⁡(e−1+1)≈1001.3131001+\log(e^{-1}+1)\approx1001.313. Geen van beide exponentiële waarden is groter dan 1. De attention-code gebruikt dezelfde aftrekking vóór softmax; daar valt de gemeenschappelijke factor weg in de deling, dus er hoeft niets bij te worden opgeteld.

Voorwaardelijke kans en de kans van tekst

pθ(y∣x)p_\theta(y\mid x) is de kans die het model met parameters θ\theta aan output yy toekent gegeven input xx. De subscript noemt de parameters; sommige papers schrijven p(y∣x;θ)p(y\mid x;\theta), waarbij de puntkomma ook parameters aanduidt in plaats van een voorwaarde. Met een punt op de plaats van de output is pθ(⋅∣x)p_\theta(\cdot\mid x) de hele verdeling over outputs in plaats van één getal. RL-papers schrijven hetzelfde object als πθ(o∣q)\pi_\theta(o\mid q), de kans dat het model antwoord oo schrijft op vraag qq, en noemen het model een policy.

Als je de gebeurtenis en de voorwaarde omwisselt, krijg je een ander getal. Stel dat er 100 modelantwoorden zijn: 60 zijn juist, 50 zijn geldige JSON en 40 zijn beide. Dan geldt

P(correct∣valid JSON)=40/50=0.8,P(valid JSON∣correct)=40/60≈0.67.\begin{aligned} P(\text{correct}\mid\text{valid JSON})&=40/50=0.8,\\ P(\text{valid JSON}\mid\text{correct})&=40/60\approx0.67. \end{aligned}

Laat AA betekenen “het antwoord is juist” en BB “het antwoord is geldige JSON”. Voorwaardelijke kans beperkt de telling tot antwoorden die aan de voorwaarde voldoen: P(A∣B)=P(A∩B)/P(B)P(A\mid B)=P(A\cap B)/P(B), mits P(B)>0P(B)>0. Het symbool ∩\cap betekent “beide gebeurtenissen treden op”. Hier is de breuk 0.4/0.5=0.80.4/0.5=0.8, hetzelfde als 40 juiste antwoorden onder 50 geldige JSON-antwoorden.

Twee gebeurtenissen zijn onafhankelijk wanneer weten dat de ene zich voordeed de kans op de andere niet verandert. Dat vereist P(A∩B)=P(A)P(B)P(A\cap B)=P(A)P(B). In deze steekproef is P(both)=0.4P(\text{both})=0.4, terwijl P(correct)P(valid JSON)=0.6×0.5=0.3P(\text{correct})P(\text{valid JSON})=0.6\times0.5=0.3, dus de waargenomen verhoudingen voldoen niet aan onafhankelijkheid.

De stelling van Bayes, ook wel de regel van Bayes genoemd, verbindt de twee richtingen van conditionering: P(A∣B)=P(B∣A)P(A)/P(B)P(A\mid B)=P(B\mid A)P(A)/P(B). Daarmee bereken je de kans op AA gegeven BB uit de kans op BB gegeven AA en de kansen van de twee gebeurtenissen. Het ELBO-voorbeeld gebruikt haar om de kans op een verborgen code gegeven een waargenomen beeld te vinden.

Een taalmodel scoort een sequentie token voor token. Volgens de kettingregel van de kansrekening geldt

pθ(y1:T∣x)=∏t=1Tpθ(yt∣x,y<t)log⁡pθ(y1:T∣x)=∑t=1Tlog⁡pθ(yt∣x,y<t)\begin{aligned} p_\theta(y_{1:T}\mid x)&=\prod_{t=1}^{T}p_\theta(y_t\mid x,y_{<t})\\ \log p_\theta(y_{1:T}\mid x)&=\sum_{t=1}^{T}\log p_\theta(y_t\mid x,y_{<t}) \end{aligned}

Elke factor conditioneert op alle eerdere tokens, dus de formule neemt niet aan dat tokens onafhankelijk zijn. Als drie tokens voorwaardelijke kansen 0.5, 0.2 en 0.1 hebben:

p=0.5×0.2×0.1=0.01log⁡p=log⁡0.5+log⁡0.2+log⁡0.1≈−0.693−1.609−2.303≈−4.61\begin{aligned} p&=0.5\times0.2\times0.1=0.01\\ \log p&=\log0.5+\log0.2+\log0.1\approx-0.693-1.609-2.303\approx-4.61 \end{aligned}

De gebruikelijke trainingsloss is het negatief van deze som, gedeeld door de lengte:

L(θ)=−1T∑t=1Tlog⁡pθ(yt∣x,y<t).\mathcal L(\theta)=-\frac1T\sum_{t=1}^{T}\log p_\theta(y_t\mid x,y_{<t}).

Tijdens het trainen komen de eerdere tokens y<ty_{<t} uit de dataset. Tijdens het genereren zijn het de eerdere keuzes van het model zelf.

Verwachtingswaarden en waar de samples vandaan komen

Een verwachtingswaarde is een met kansen gewogen gemiddelde:

Ex∼p[f(x)]=∑xp(x)f(x).\mathbb E_{x\sim p}[f(x)]=\sum_x p(x)f(x).

Lees Ex∼p[f(x)]\mathbb E_{x\sim p}[f(x)] als “het gemiddelde van f(x)f(x) wanneer xx uit pp wordt getrokken”. De notatie ∑x\sum_x sommeert over alle mogelijke discrete waarden van xx. Zonder subscript middelt E[X]\mathbb E[X] een stochastische variabele XX over haar eigen verdeling: als XX met kans 0.75 gelijk is aan 1 en met kans 0.25 aan 3, dan is E[X]=1×0.75+3×0.25=1.5\mathbb E[X]=1\times0.75+3\times0.25=1.5.

Als een variabele een dichtheid p(x)p(x) heeft, dat wil zeggen kans per eenheid van xx, is het gewogen gemiddelde een integraal, ∫f(x)p(x) dx\int f(x)p(x)\,dx. De dxdx geeft aan dat xx de variabele is waarover wordt geïntegreerd; zonder hier opgeschreven grenzen omvat de integraal het hele bereik. Het dichtheidsvoorbeeld legt kans per eenheid uit en toont een integraal als een oppervlakte onder een curve.

Trainingscode kan niet over elke mogelijke input sommeren, dus ze samplet en middelt: Ex∼p[f(x)]≈1N∑i=1Nf(xi)\mathbb E_{x\sim p}[f(x)]\approx\frac1N\sum_{i=1}^{N}f(x_i), waarbij elke xix_i onafhankelijk uit pp is getrokken, wat papers schrijven als xi∼iidpx_i\overset{\text{iid}}{\sim}p. Papers noemen dit een Monte Carlo-schatting, en in code is het loss.mean() over een batch. Het batchgemiddelde schat de verwachtingswaarde alleen als de batch is getrokken uit de verdeling in de subscript van de E\mathbb E, dus de subscript vertelt je hoe de trainingsdata tot stand komt:

  • DPO middelt over opgeslagen voorbeelden (x,yw,yl)∼D(x,y_w,y_l)\sim\mathcal D: een prompt, een voorkeursantwoord en een afgewezen antwoord. De antwoorden worden vóór deze trainingsfase verzameld en gelabeld; ze kunnen uit eerdere modelgeneratie komen. Bij elke trainingsstap berekent het model kansen voor die aangeleverde antwoorden en werkt het zijn weights bij. Het model samplet voor die stap geen nieuwe antwoorden.
  • GRPO in DeepSeek-R1: genereer antwoorden en vergelijk dan hun beloningen. De training trekt een vraag uit de dataset, genereert meerdere antwoorden en scoort ze met een beloningsfunctie, bijvoorbeeld door een wiskundig resultaat te controleren of unit tests uit te voeren. De update geeft de voorkeur aan antwoorden die boven het groepsgemiddelde scoorden. De notatie q∼P(Q)q\sim P(Q) betekent “sample een vraag qq uit de vraagverdeling”. De notatie {oi}∼πθold(O∣q)\{o_i\}\sim\pi_{\theta_{old}}(O\mid q) betekent “sample antwoorden oio_i op die vraag uit de modelkopie genaamd πθold\pi_{\theta_{old}}”. De subscript old markeert de kopie die deze antwoorden genereerde; die kopie blijft vast terwijl de batch voor updates wordt gebruikt. De GRPO-uitwerking legt de beloningsvergelijking en de updates uit.
  • On-policy distillation in MiniLLM en DeepSeek-V4: genereer tekst en leer dan van teacher-kansen. Het model dat wordt getraind is de student. Hij genereert tekst; een bevroren teacher levert de kansen voor het volgende token bij dezelfde prefixen, en de training past de kansen van de student aan naar die van de teacher. Deze kansen vormen het trainingssignaal, in plaats van GRPO’s beloningsscore voor een antwoord. MiniLLM schrijft door de student gesamplede tekst als y∼qθy\sim q_\theta: yy is de tekst en qθq_\theta noemt het studentmodel. DeepSeek-V4 noemt zijn student πθ\pi_\theta en gebruikt meerdere gespecialiseerde teachers. De feitelijke samplingprocedure van MiniLLM mengt ook tokens bij die uit de teacher zijn getrokken. De distillation-uitwerking legt de doelen en dat samplingverschil uit.

De volgorde bepaalt wat de training optimaliseert. Stel dat een model kansen 0.9 en 0.1 toekent aan de juiste outputs van twee even zwaar wegende trainingsvoorbeelden. Hun log-kansen middelen betekent eerst elke log nemen en dan middelen: np.log(probs).mean(). De log van hun gemiddelde nemen is np.log(probs.mean()). Als XX de kans is die wordt toegekend aan de juiste output van een willekeurig gekozen voorbeeld:

E[log⁡X]=12(log⁡0.9+log⁡0.1)≈−1.20log⁡E[X]=log⁡((0.9+0.1)/2)=log⁡0.5≈−0.69\begin{aligned} \mathbb E[\log X]&=\tfrac12(\log0.9+\log0.1)\approx-1.20\\ \log\mathbb E[X]&=\log\bigl((0.9+0.1)/2\bigr)=\log0.5\approx-0.69 \end{aligned}

Als je het teken van deze scores omdraait, krijg je losses van 1.20 en 0.69. Een tweede model dat aan elke juiste output 0.5 toekent, krijgt bij beide berekeningen 0.69. Kansen middelen vóór het nemen van de log behandelt de twee modellen dus als even goed, terwijl de gebruikelijke gemiddelde negatieve log-kans het eerste model zwaarder straft voor zijn lage kans op de tweede juiste output. Behoud bij het vertalen van een loss naar code de volgorde van de log en het gemiddelde.

De ongelijkheid van Jensen geeft de algemene relatie voor positieve XX: E[log⁡X]≤log⁡E[X]\mathbb E[\log X]\leq\log\mathbb E[X]. Ze helpt ook bij het construeren van alternatieve trainingsdoelen. Wanneer de datakans van een model een dure middeling over verborgen variabelen vereist, kan een gemiddelde van logtermen een ondergrens leveren die makkelijker te schatten is. De ELBO-uitwerking legt dat trainingsprobleem uit; ELBO staat voor evidence lower bound. Sectie 2.4 van Tianhua Chens The Little Book of Generative AI Foundations leidt de grens af met de ongelijkheid van Jensen.

Dichtheden, variantie en foutbalken

p(x)p(x) heeft twee gangbare betekenissen. Voor discrete uitkomsten zoals tokens of klassen geeft ze de kans op uitkomst xx: een getal van 0 tot 1, waarbij de kansen over alle uitkomsten optellen tot 1.

Om de andere betekenis te begrijpen, stel dat XX uniform tussen 0 en 0.5 wordt gekozen. Intervallen van gelijke lengte hebben gelijke kansen. Het interval van 0.1 tot 0.2 beslaat een vijfde van het hele bereik, dus

P(0.1≤X≤0.2)=0.2−0.10.5=0.2.P(0.1\leq X\leq0.2)=\frac{0.2-0.1}{0.5}=0.2.

Binnen dit bereik is de kans de breedte van het interval maal 2. Die vermenigvuldiger is de kansdichtheid: p(x)=2p(x)=2 voor 0≤x≤0.50\leq x\leq0.5, en nul daarbuiten. Dichtheid beschrijft kans per eenheid van de variabele, niet de kans op één exacte waarde.

Kans nul voor een punt betekent niet dat er niets wordt gesampled. Verklein een interval rond 0.15: zijn kans is tweemaal zijn breedte, dus hij gaat naar nul als de breedte naar nul gaat. Het ene exacte punt heeft daarom kans nul. Een trekking levert nog steeds een waarde in [0,0.5][0,0.5] op, en dat hele interval heeft kans 1. Als je het resultaat afgerond op twee decimalen noteert, staat een genoteerde waarde 0.15 voor het interval van 0.145 tot 0.155, met kans 2×0.01=0.022\times0.01=0.02.

Bij een niet-uniforme dichtheid varieert de vermenigvuldiger met xx. De integraal telt de bijdragen over het interval op:

P(a≤X≤b)=∫abp(x) dx.P(a\leq X\leq b)=\int_a^bp(x)\,dx.

Meetkundig is dit de oppervlakte onder de dichtheidscurve tussen aa en bb; de oppervlakte over het hele bereik is 1. Voor het uniforme voorbeeld is de oppervlakte simpelweg hoogte 2 maal breedte 0.5. Een dichtheid kan dus groter zijn dan 1, en haar log kan positief zijn, zoals log⁡2≈0.69\log2\approx0.69 hier. Een kans is nooit groter dan 1.

De Gauss-verdeling die in DDPM voor ruis wordt gebruikt, heeft een dichtheid van dit soort. Niet elke continue verdeling heeft een gewone dichtheid: de Cantor-verdeling is een wiskundig tegenvoorbeeld, buiten de modellen die hier worden besproken. Opslag met reële getallen impliceert ook geen continue verdeling: een variabele die beperkt is tot 0.0 en 1.0 heeft nog steeds twee discrete uitkomsten.

Papers gebruiken vaak dezelfde letter voor kansen en dichtheden. Kijk hoe het paper de verdeling van de variabele definieert en over welke variabele wordt gesommeerd of geïntegreerd. Een integraal over een verborgen variabele zz, zoals de latente code in de ELBO van deel 4, zegt je niet of een waargenomen xx discreet of continu is. Sommige papers schrijven hoofdletter PP voor kansen en kleine letter pp voor dichtheden, maar veel gebruiken pp voor beide.

Om te beschrijven hoeveel een verdeling rond haar gemiddelde spreidt, gebruiken papers variantie: het gemiddelde gekwadrateerde verschil met het gemiddelde, Var⁡(X)=E[(X−μ)2]\operatorname{Var}(X)=\mathbb E[(X-\mu)^2], waarbij μ=E[X]\mu=\mathbb E[X]. De standaarddeviatie is de wortel ervan, dus ze heeft dezelfde eenheden als XX.

Deze grootheden komen ook voor in namen van verdelingen. De Gauss-verdeling, ook normale verdeling genoemd, wordt geschreven als N(μ,σ2)\mathcal N(\mu,\sigma^2): μ\mu is het gemiddelde en σ2\sigma^2 de variantie. Voor een vector gebruikt N(μ,Σ)\mathcal N(\mu,\Sigma) een covariantiematrix Σ\Sigma: element (i,j)(i,j) meet hoe de coördinaten ii en jj samen variëren, en de diagonaal bevat hun varianties. N(0,I)\mathcal N(0,I) beschrijft een vector van onafhankelijke standaardnormale getallen, elk met gemiddelde 0 en variantie 1; II is de eenheidsmatrix.

Benchmarktabellen geven vaak een gemiddelde score samen met een maat voor variatie. De spreiding van afzonderlijke runs verschilt van de onzekerheid van hun gemiddelde: voor NN onafhankelijke runs met standaarddeviatie σ\sigma is de standaardfout van het gemiddelde σ/N\sigma/\sqrt N.

Zoek, voordat je twee vermeldingen zoals 82.3±0.482.3\pm0.4 en 81.5±0.481.5\pm0.4 vergelijkt, in het bijschrift uit of 0.4 een standaarddeviatie over runs is, een standaardfout of de halve breedte van een betrouwbaarheidsinterval. Om de gemiddelden te vergelijken, bereken je een interval voor hun verschil. Een 95%-betrouwbaarheidsintervalprocedure levert bereiken op die het ware verschil bevatten in 95% van herhaalde experimenten, onder haar aannames.

Neem voor dit voorbeeld aan dat er vier onafhankelijke runs per model zijn, ongeveer normale runscores en gelijke populatievarianties. Als de runs gepaard zijn, zoals twee modellen die op dezelfde onafhankelijk gesamplede taken worden geëvalueerd, analyseer dan in plaats daarvan de verschillen binnen de paren. NIST’s gids voor twee steekproeven legt deze gevallen uit.

Voor onafhankelijke gemiddelden is de variantie van hun verschil de som van hun varianties. Een standaardnormale variabele valt met kans ongeveer 0.95 tussen −1.96-1.96 en 1.961.96, wat de vermenigvuldiger levert voor een normale benadering van een 95%-interval. Als 0.4 de standaarddeviatie over vier runs is, geeft die eerste berekening:

standard error of each mean=0.4/4=0.2standard error of the gap=0.22+0.22≈0.28gap=82.3−81.5=0.8normal approximation=0.8±1.96×0.28≈0.8±0.55=from 0.25 to 1.35\begin{aligned} \text{standard error of each mean}&=0.4/\sqrt4=0.2\\ \text{standard error of the gap}&=\sqrt{0.2^2+0.2^2}\approx0.28\\ \text{gap}&=82.3-81.5=0.8\\ \text{normal approximation}&=0.8\pm1.96\times0.28\approx0.8\pm0.55\\ &=\text{from }0.25\text{ to }1.35 \end{aligned}

Die vermenigvuldiger 1.96 behandelt de geschatte spreiding als bekend. Met slechts vier runs per model gebruik je de t-verdeling van Student om de onzekerheid in de spreiding mee te nemen. Onder de bovenstaande aannames zijn de vrijheidsgraden 4+4−2=64+4-2=6 (acht runs min twee geschatte gemiddelden). scipy.stats.t.ppf(0.975, 6) geeft ongeveer 2.447 in plaats van 1.96; 0.975 laat 2.5% buiten elk uiteinde van een 95%-interval. Als de aanname van gelijke variantie niet past, gebruik dan een Welch-interval, waarvan de vrijheidsgraden anders worden berekend.

Beschouw nu de andere lezing van het bijschrift: 0.4 is al de standaardfout van elk gemiddelde, geschat uit die vier runs. Er wordt niets door 4\sqrt4 gedeeld, en de standaardfout van het verschil is ongeveer 0.566. De t-vermenigvuldiger is nog steeds nodig. De twee lezingen geven:

0.4 a standard deviation, t interval:0.8±2.4470.22+0.22≈0.8±0.69from 0.11 to 1.490.4 a standard error, t interval:0.8±2.4470.42+0.42≈0.8±1.38from −0.58 to 2.18\begin{aligned} \text{0.4 a standard deviation, t interval:}&\quad0.8\pm2.447\sqrt{0.2^2+0.2^2}\approx0.8\pm0.69\\ &\quad\text{from }0.11\text{ to }1.49\\ \text{0.4 a standard error, t interval:}&\quad0.8\pm2.447\sqrt{0.4^2+0.4^2}\approx0.8\pm1.38\\ &\quad\text{from }-0.58\text{ to }2.18 \end{aligned}

De figuur vergelijkt de eerste normale benadering met de twee t-intervallen:

Drie intervallen voor hetzelfde verschil van 0.8, uitgaande van vier onafhankelijke, ongeveer normale runs per model en gelijke populatievarianties. Met 0.4 als standaarddeviatie geeft de normale benadering 0.25 tot 1.35 en het t-interval 0.11 tot 1.49. Met 0.4 als geschatte standaardfout geeft het t-interval min 0.58 tot 2.18 en bevat het nul.Drie intervallen voor hetzelfde verschil van 0.8, uitgaande van vier onafhankelijke, ongeveer normale runs per model en gelijke populatievarianties. Met 0.4 als standaarddeviatie geeft de normale benadering 0.25 tot 1.35 en het t-interval 0.11 tot 1.49. Met 0.4 als geschatte standaardfout geeft het t-interval min 0.58 tot 2.18 en bevat het nul.

Wanneer 0.4 de standaarddeviatie is, sluit het t-interval nul uit: onder deze aannames ondersteunen de resultaten een positief verschil. Wanneer 0.4 de geschatte standaardfout is, bevat het interval nul, dus de resultaten stellen niet vast welk model de hogere gemiddelde score heeft.

Cross-entropy en KL-divergentie

Tijdens het trainen heeft een model een numerieke loss nodig die meet hoe goed zijn voorspelde kansen overeenkomen met het trainingsdoel. Het trainingsalgoritme verandert de parameters van het model om die loss te verkleinen. Cross-entropy levert zo’n loss voor gelabelde voorbeelden of de kansen van een teacher-model. Kullback–Leibler-divergentie (KL) meet het verschil tussen twee verdelingen. Papers gebruiken haar om een student een teacher te laten nabootsen of om afwijkingen van een vast referentiemodel te straffen.

Hier zijn de uitkomsten discreet, zoals tokens of klassen. Schrijf de doelverdeling als pp en de voorspelde verdeling van het model over dezelfde uitkomsten als qq. Begin met één waargenomen uitkomst ii: als het model er kans qiq_i aan gaf, is haar loss −log⁡qi-\log q_i. Die is 0 als qi=1q_i=1, ongeveer 0.69 als qi=0.5q_i=0.5, ongeveer 2.3 als qi=0.1q_i=0.1, en oneindig als qi=0q_i=0.

Cross-entropy middelt die loss over uitkomsten die uit het doel zijn getrokken:

H(p,q)=Ei∼p[−log⁡qi]=−∑ipilog⁡qi.H(p,q)=\mathbb E_{i\sim p}[-\log q_i]=-\sum_i p_i\log q_i.

Met een one-hot-label pp, dat 1 is bij de juiste klasse yy en elders 0, telt alleen de juiste klasse, en H(p,q)=−log⁡qyH(p,q)=-\log q_y: de gewone classificatieloss. PyTorch’s nn.CrossEntropyLoss berekent dit uit ruwe modelscores, logits genoemd, en past intern log-softmax toe; haar input is niet de kansvector qq. Met de zachte verdeling van een teacher-model als pp telt elke klasse mee naar rato van de kans van de teacher. Klassieke distillation traint op die manier een klein model op de kansen van een groot model. Voor het doel p=(0.9,0.1)p=(0.9,0.1) hebben twee modellen deze cross-entropies H(p,q)H(p,q):

q=(0.5,0.5):−0.9log⁡0.5−0.1log⁡0.5≈0.693q=(0.9,0.1):−0.9log⁡0.9−0.1log⁡0.1≈0.095+0.230=0.325\begin{aligned} q=(0.5,0.5):&\quad -0.9\log0.5-0.1\log0.5\approx0.693\\ q=(0.9,0.1):&\quad -0.9\log0.9-0.1\log0.1\approx0.095+0.230=0.325 \end{aligned}

Het tweede model komt overeen met het doel, en geen enkel model kan beter. Dat minimum, hier 0.325, is H(p)=−∑ipilog⁡piH(p)=-\sum_ip_i\log p_i, de entropie van pp. Ze is alleen 0 voor een one-hot-doel: als het doel zelf onzeker is, blijft er een loss over die geen enkel model kan wegnemen.

KL-divergentie trekt dat minimum af en houdt alleen de loss over die ontstaat doordat qq van pp verschilt. Ze wordt geschreven met een dubbele streep ∥\Vert, die alleen de twee argumenten scheidt; het is niet de voorwaardelijke-kansstreep ∣\mid uit Voorwaardelijke kans en de kans van tekst en ook niet de lengtestrepen ∥x∥\Vert x\Vert uit het overzicht over vectoren. Papers gebruiken haar in plaats van een komma om aan te geven dat de volgorde telt: het gemiddelde loopt over uitkomsten die uit het eerste argument zijn getrokken.

DKL(p ∥ q)=H(p,q)−H(p)=∑ipilog⁡piqi=Ei∼p[log⁡piqi].D_{\mathrm{KL}}(p\,\Vert\,q)=H(p,q)-H(p)=\sum_i p_i\log\frac{p_i}{q_i}=\mathbb E_{i\sim p}\Bigl[\log\frac{p_i}{q_i}\Bigr].

Voor het eerste model hierboven geldt 0.693−0.325≈0.370.693-0.325\approx0.37. KL is 0 wanneer de twee verdelingen overeenkomen en anders positief.

De volgorde bepaalt welke afwijkingen worden gestraft. Een term met pi>0p_i>0 en qi=0q_i=0 is oneindig, dus DKL(p∥q)D_{\mathrm{KL}}(p\Vert q) straft qq voor het toekennen van kans nul aan alles wat pp kan voortbrengen. Uitkomsten met pi=0p_i=0 voegen niets toe (volgens afspraak is 0log⁡0=00\log0=0), dus ze geven geen directe straf, ook als qi>0q_i>0. Als je de argumenten omdraait, krijg je DKL(q∥p)D_{\mathrm{KL}}(q\Vert p), die oneindig is overal waar qi>0q_i>0 en pi=0p_i=0. Uitkomsten met qi=0q_i=0 voegen nu niets toe, ook als pi>0p_i>0. Met pp als doel heet DKL(p∥q)D_{\mathrm{KL}}(p\Vert q) de forward KL en DKL(q∥p)D_{\mathrm{KL}}(q\Vert p) de reverse KL.

Voor p=(0.5,0.5)p=(0.5,0.5) en q=(1,0)q=(1,0) is de forward KL oneindig, omdat qq een uitkomst mist die pp voortbrengt, terwijl de reverse KL slechts 1×log⁡(1/0.5)+0=log⁡21\times\log(1/0.5)+0=\log2 is: de uitkomst die qq overslaat voegt niets toe. Voor p=(0.9,0.1)p=(0.9,0.1) en q=(0.5,0.5)q=(0.5,0.5) is de forward KL de 0.37 die hierboven werd gevonden, hier term voor term berekend, en de reverse KL verschilt:

DKL(p∥q)=0.9log⁡0.90.5+0.1log⁡0.10.5≈0.53−0.16=0.37DKL(q∥p)=0.5log⁡0.50.9+0.5log⁡0.50.1≈−0.29+0.80=0.51\begin{aligned} D_{\mathrm{KL}}(p\Vert q)&=0.9\log\tfrac{0.9}{0.5}+0.1\log\tfrac{0.1}{0.5}\approx0.53-0.16=0.37\\ D_{\mathrm{KL}}(q\Vert p)&=0.5\log\tfrac{0.5}{0.9}+0.5\log\tfrac{0.5}{0.1}\approx-0.29+0.80=0.51 \end{aligned}

Deze asymmetrie is waarom KL een divergentie heet en geen afstand.

Omdat H(p,q)=H(p)+DKL(p∥q)H(p,q)=H(p)+D_{\mathrm{KL}}(p\Vert q), en de entropie H(p)H(p) van een vaste teacher niet van de student afhangt, geeft cross-entropy tegen een vaste teacher de student dezelfde gradients als DKL(p∥q)D_{\mathrm{KL}}(p\Vert q). Als een parameter van de student verandert, veranderen beide losses evenveel, dus hun afgeleiden die voor de training worden gebruikt zijn gelijk; Gradients en optimalisatie legt die berekening uit. Daardoor kunnen classificatiecode en klassieke distillation-code cross-entropy gebruiken. De omwisseling werkt alleen met de teacher eerst. Met de student eerst geldt DKL(q∥p)=H(q,p)−H(q)D_{\mathrm{KL}}(q\Vert p)=H(q,p)-H(q), en de eigen entropie H(q)H(q) van de student verandert tijdens het trainen, dus de twee geven niet meer dezelfde gradients.

Vectoren en matrices

Architectuurvergelijkingen beschrijven berekeningen op arrays van getallen. De vorm van een array vertelt je hoe haar getallen zijn gerangschikt, welke bewerkingen geldig zijn en wat die bewerkingen opleveren. Een vector is een geordende lijst getallen. Een matrix rangschikt getallen in rijen en kolommen. In ML-code is tensor de algemene term voor deze numerieke arrays, ook voor arrays met meer dan twee assen. Een as is een dimensie waarlangs je de array indexeert: een matrix heeft een rij-as en een kolom-as.

De hidden state van een token is een vector getallen die binnen het model wordt berekend om dat token voor te stellen. Stel dat we een batch van BB sequenties tegelijk verwerken, elk met TT tokenposities, en elke hidden state bevat dd getallen. De hidden-statearray heeft vorm [B, T, d], wat papers ook schrijven als B×T×dB\times T\times d. Haar drie assen kiezen de sequentie, de tokenpositie en het getal binnen de vector van dat token. [2, 3, 4] bevat bijvoorbeeld twee sequenties, drie tokenvectoren per sequentie en vier getallen per vector: 24 getallen in totaal. Hier is dd de breedte van de vector. De vorm noemt de drie groottes; door ze te vermenigvuldigen krijg je het aantal elementen.

Papers schrijven vormen vaak als verzamelingslidmaatschap: a∈Rda\in\mathbb R^d betekent dat aa een vector van dd reële getallen is, en A∈Rm×nA\in\mathbb R^{m\times n} dat AA een matrix met mm rijen en nn kolommen is. Vetgedrukte letters markeren soms vectoren of tensoren, maar de definitie in het paper bepaalt de vorm.

In de tabel hieronder zijn aa en bb kolomvectoren: hun getallen staan verticaal. De superscript ⊤\top betekent transponeren: rijen en kolommen verwisselen. a⊤a^\top is dus een rij met dezelfde getallen als kolom aa. De hoofdletters AA en BB benoemen hier matrices; BB betekent niet langer de batchgrootte.

UitdrukkingWaarden die ze gebruiktWat de bewerking doetResultaat
a⊤ba^\top b — inproductTwee kolomvectoren, elk met dd elementenVermenigvuldig overeenkomstige elementen en tel de producten op: ∑iaibi\sum_i a_i b_iEén getal
ab⊤ab^\top — uitwendig productEen kolom aa met mm elementen en een kolom bb met nn elementenVermenigvuldig elk element van aa met elk element van bbEen matrix van m×nm\times n; element (i,j)(i,j) is aibja_i b_j
ABAB — matrixproductAA met mm rijen en kk kolommen; BB met kk rijen en nn kolommenVermenigvuldig voor element (i,j)(i,j) overeenkomstige getallen in rij ii van AA en kolom jj van BB en tel opEen matrix van m×nm\times n; het aantal kolommen van AA moet gelijk zijn aan het aantal rijen van BB
A⊙BA\odot B — elementsgewijs productTwee arrays met dezelfde vormVermenigvuldig elementen op overeenkomstige posities, zonder op te tellenEen array met dezelfde vorm
[a;b][a;b] — concatenatieKolommen aa en bb met mm en nn elementenZet de elementen van bb achter die van aaEén kolom met m+nm+n elementen; controleer de afspraak van het paper voor de samenvoegas

Neem voor een concrete vergelijking a=(12)a=\begin{pmatrix}1\\2\end{pmatrix} en b=(34)b=\begin{pmatrix}3\\4\end{pmatrix}. Door de transpositie te verplaatsen veranderen zowel de berekening als het resultaat:

a⊤b=1×3+2×4=11ab⊤=(1×31×42×32×4)=(3468).\begin{aligned} a^\top b&=1\times3+2\times4=11\\ ab^\top&=\begin{pmatrix}1\times3&1\times4\\2\times3&2\times4\end{pmatrix}=\begin{pmatrix}3&4\\6&8\end{pmatrix}. \end{aligned}

Het inproduct geeft één score, zoals bij de query–key-vergelijking in attention. Het uitwendig product houdt een aparte waarde voor elk paar elementen; de update van Gated DeltaNet gebruikt het om uit twee vectoren een matrixupdate te bouwen.

Een matrixproduct kun je anders groeperen, (AB)C=A(BC)(AB)C=A(BC), maar niet van volgorde veranderen; de MLA-afleiding gebruikt het hergroeperen om het opnieuw opbouwen van keys over te slaan. NumPy schrijft matrixvermenigvuldiging als @ en het elementsgewijze product als *. Papers erven NumPy’s broadcastingregels niet: een vector bij een matrix optellen vereist een benoemde as. Papers verschillen ook over de vraag of een vector een rij of een kolom is: attention stapelt tokens als de rijen van QQ, terwijl MLA, Gated DeltaNet en LoRA WhWh met kolomvectoren schrijven, en PyTorch’s nn.Linear x @ W.T op rijen berekent.

Een architectuurvergelijking kan ook de grootte van een vector beschrijven, beperken welke matrices zijn toegestaan of een product herschikken:

NotatieBetekenis
∥x∥2=∑ixi2\Vert x\Vert_2=\sqrt{\sum_i x_i^2}De Euclidische lengte; ∥x∥2\Vert x\Vert^2, zonder de wortel, komt voor in DDPM’s loss
∥x∥1=∑i∣xi∣\Vert x\Vert_1=\sum_i\vert x_i\vertDe som van absolute waarden
∥A∥2\Vert A\Vert_2De spectrale norm: de grootste factor waarmee AA de lengte van een vector vergroot; mHC houdt haar hoogstens 1
rank⁡(A)\operatorname{rank}(A)Het aantal onafhankelijke kolommen; LoRA’s update heeft rang hoogstens rr
det⁡A\det ADe determinant: ∣det⁡A∣\vert\det A\vert is de factor waarmee AA volume schaalt, en het teken geeft aan of AA de oriëntatie omkeert; het voorbeeld van variabelentransformatie in Appendix B van dit artikel gebruikt haar
A≥0A\geq0Elk element is niet-negatief, zoals in mHC; A⪰0A\succeq0 is een andere voorwaarde, positief semidefiniet: x⊤Ax≥0x^\top Ax\geq0 voor elke xx
II, 1n\mathbf 1_nDe eenheidsmatrix (1 op haar diagonaal, elders 0, dus Ix=xIx=x); een vector van nn enen
(AB)⊤=B⊤A⊤(AB)^\top=B^\top A^\topHet transponeren van een product keert de volgorde om; de RoPE- en MLA-secties van deel 2 gebruiken dit

Gradients en optimalisatie

Training gebruikt afgeleiden om te bepalen hoe de parameters van het model moeten veranderen. Laat L\mathcal L één scalaire loss zijn en θ\theta de vector van alle parameters; θi\theta_i is één element van die vector.

De partiële afgeleide ∂L/∂θi\partial\mathcal L/\partial\theta_i is één getal, geëvalueerd bij de huidige parameterwaarden. Ze meet de veranderingssnelheid van de loss wanneer alleen θi\theta_i verandert en de andere parameters vast blijven. Lees haar als “de partiële afgeleide van de loss naar parameter θi\theta_i”.

De gradient ∇θL\nabla_\theta\mathcal L bundelt die getallen voor elke parameter in één vector. Haar ii-de element is ∂L/∂θi\partial\mathcal L/\partial\theta_i. Het symbool ∇\nabla heet nabla; hier betekent het “neem de gradient”. Met slechts één parameter heeft de gradient één element dat gelijk is aan de gewone afgeleide.

Neem bijvoorbeeld L(θ1,θ2)=θ12+3θ22\mathcal L(\theta_1,\theta_2)=\theta_1^2+3\theta_2^2. Bij θ1=2\theta_1=2 en θ2=1\theta_2=1:

∂L∂θ1=2θ1=4∂L∂θ2=6θ2=6∇θL=(46).\begin{aligned} \frac{\partial\mathcal L}{\partial\theta_1}&=2\theta_1=4\\ \frac{\partial\mathcal L}{\partial\theta_2}&=6\theta_2=6\\ \nabla_\theta\mathcal L&=\begin{pmatrix}4\\6\end{pmatrix}. \end{aligned}

De eerste partiële afgeleide, 4, betekent dat θ1\theta_1 met 0.01 verhogen de loss met ongeveer 0.04 doet stijgen terwijl θ2\theta_2 vast blijft. De gradient bevat deze informatie voor beide parameters. Gradient descent trekt de afgeleide van elke parameter af, vermenigvuldigd met een positieve learning rate η\eta die de stapgrootte bepaalt:

θ←θ−η∇θL,η>0.\theta\leftarrow\theta-\eta\nabla_\theta\mathcal L,\qquad\eta>0.

Met η=0.1\eta=0.1 verandert het voorbeeld van (2,1)(2,1) naar (1.6,0.4)(1.6,0.4), en de loss daalt van 7 naar 3.04. Bij een differentieerbare loss met een gradient ongelijk aan nul verlaagt een voldoende kleine stap de loss. Een gradient van nul geeft geen update.

De subscript op ∇\nabla zegt wat varieert. ∇θlog⁡pθ(x)\nabla_\theta\log p_\theta(x) laat de parameters variëren; ∇xlog⁡pθ(x)\nabla_x\log p_\theta(x) laat de input variëren, en diffusionpapers noemen haar de score, wat niets te maken heeft met een benchmarkscore.

Een Jacobiaan legt afgeleiden voor meerdere outputs vast. Een laag van een neuraal netwerk kan veel getallen produceren, zoals de componenten van de hidden state van een token. Om te beschrijven hoe elke output op elke input reageert, bundel je de partiële afgeleiden in een matrix die de Jacobiaan heet. Voor y=f(x)y=f(x) met nn inputgetallen en mm outputgetallen heeft ze vorm m×nm\times n: rijen komen overeen met outputs, kolommen met inputs, en element Jij=∂yi/∂xjJ_{ij}=\partial y_i/\partial x_j meet hoe output ii verandert wanneer input jj verandert.

Laat een functie bijvoorbeeld twee getallen nemen en y1=x1+2x2y_1=x_1+2x_2 en y2=3x1−x2y_2=3x_1-x_2 teruggeven. Haar Jacobiaan is

J=(∂y1/∂x1∂y1/∂x2∂y2/∂x1∂y2/∂x2)=(123−1).\begin{aligned} J&=\begin{pmatrix} \partial y_1/\partial x_1 & \partial y_1/\partial x_2\\ \partial y_2/\partial x_1 & \partial y_2/\partial x_2 \end{pmatrix}\\ &=\begin{pmatrix}1&2\\3&-1\end{pmatrix}. \end{aligned}

De tweede kolom zegt dat x2x_2 met 0.1 verhogen terwijl x1x_1 vast blijft y1y_1 met 0.2 verhoogt en y2y_2 met 0.1 verlaagt. Dit voorbeeld is lineair, dus de Jacobiaan is constant. Bij een niet-lineaire functie kunnen de elementen van de huidige input afhangen en lokaal kleine veranderingen beschrijven. Met slechts één scalaire output heeft de Jacobiaan één rij: dezelfde afgeleiden als de gradient, getransponeerd volgens onze afspraak met kolomvectoren. Deep Learning, §4.3, geeft de algemene definities.

Backpropagation gebruikt deze afgeleiden om de gradient van de loss door opeenvolgende lagen te berekenen. Het voorbeeld van variabelentransformatie in Appendix B van dit artikel gebruikt een andere eigenschap: de absolute waarde van de determinant van een vierkante Jacobiaan geeft de lokale volumeschaalfactor, die nodig is om een kansdichtheid aan te passen.

Voor training beschrijven afgeleiden lokale veranderingen; een optimalisatiedoel stelt wat de updates moeten minimaliseren of maximaliseren. Papers onderscheiden de beste waarde van een doel van de parameters die haar bereiken: min⁡θf(θ)\min_\theta f(\theta) is de kleinste waarde van ff, terwijl arg min⁡θf(θ)\operatorname*{arg\,min}_\theta f(\theta) de parameterwaarden geeft die haar bereiken. Voor f(θ)=(θ−3)2f(\theta)=(\theta-3)^2 is het minimum 0 en de argmin 3. Een argmin legt het gewenste resultaat vast, maar laat het updatealgoritme open.

MiniLLM schrijft haar doel bijvoorbeeld als θ=arg min⁡θDKL(qθ∥p)\theta=\operatorname*{arg\,min}_\theta D_{\mathrm{KL}}(q_\theta\Vert p) (vergelijking 1), waarbij qθq_\theta het studentmodel is en pp de teacher waarvan hij leert. Sectie 2.2 leidt vervolgens een gradient af en past haar aan om de training stabieler te maken; vergelijking (7) is de gradient die voor updates wordt gebruikt. Het voorbeeld van on-policy distillation legt die wijzigingen uit. Wie alleen de argmin leest, mist ze.

Een stop-gradient, sg⁡(x)\operatorname{sg}(x), geeft xx ongewijzigd door maar blokkeert gradients erdoorheen, zoals .detach() in PyTorch. Twee uitdrukkingen met dezelfde forward-waarde kunnen verschillend trainen als een van beide is losgekoppeld. In het GRPO-voorbeeld behandelt Hugging Face TRL de log-kans van het oude model als vast. In de vereenvoudigde distillation-aanpak die DeepSeek-V4 bespreekt, levert een losgekoppelde log-ratio van teacher en student een vast gewicht voor de update.

Verzamelingen en beperkingen

Een beperking legt vast welke waarden zijn toegestaan. Papers drukken beperkingen vaak uit met verzamelingen: collecties van verschillende elementen, geschreven tussen accolades, zoals {1,2,3}\{1,2,3\}. De volgorde doet er niet toe, dus {3,1,2}\{3,1,2\} is dezelfde verzameling. Herhaalde elementen tellen maar één keer. De haakjes in een vector zoals (1,2,3)(1,2,3) beschrijven daarentegen een geordende lijst: (3,1,2)(3,1,2) is een andere vector.

Zodra een paper een verzameling definieert, kan ze lidmaatschap testen, verzamelingen combineren, hun elementen tellen of er een voorwaarde voor stellen. Neem A={1,2,3}A=\{1,2,3\} en B={3,4}B=\{3,4\}:

NotatieBetekenisVoorbeeld en hoe je het leest
x∈Ax\in ALidmaatschap: xx behoort tot AA2∈A2\in A: 2 is een element van AA
A∪BA\cup BVereniging: neem elk element van een van beide verzamelingenA∪B={1,2,3,4}A\cup B=\{1,2,3,4\}; neem 3 maar één keer
A∩BA\cap BDoorsnede: houd alleen elementen over die in beide voorkomenA∩B={3}A\cap B=\{3\}
∣A∣\vert A\vertHet aantal verschillende elementen∣A∣=3\vert A\vert=3
∀\forall”Voor elk”: een voorwaarde moet gelden voor alle genoemde elementen∀x∈A: x>0\forall x\in A:\ x>0: elk element van AA is positief
∃\exists”Er bestaat”: minstens één element moet aan de voorwaarde voldoen∃x∈A: x>2\exists x\in A:\ x>2: AA heeft een element groter dan 2, namelijk 3

De vormnotatie uit Vectoren en matrices benoemt ook verzamelingen: Rd\mathbb R^d is de verzameling van alle vectoren van dd reële getallen, en Rn×d\mathbb R^{n\times d} de verzameling van alle reële matrices met nn rijen en dd kolommen. Q∈Rn×dkQ\in\mathbb R^{n\times d_k} legt dus vast welke vorm QQ moet hebben.

Set-builder-notatie beschrijft een verzameling aan de hand van een voorwaarde: {x∈S∣condition}\{x\in S\mid\text{condition}\} leest als “de elementen van SS die aan de voorwaarde voldoen”, net als de Python-set comprehension {x for x in S if condition(x)}. De streep betekent “zodanig dat”, niet voorwaardelijke kans; sommige papers gebruiken in plaats daarvan een dubbele punt. Voorbeelden in deze serie zijn de toegestane matrices van mHC, de geselecteerde experts van MoE en de geselecteerde tokens van sparse attention.

DAPO, een trainingsmethode die groepen gegenereerde antwoorden filtert, houdt een vraag alleen als sommige antwoorden juist zijn en sommige fout. Voor GG gesamplede antwoorden o1,…,oGo_1,\ldots,o_G en referentieantwoord aa schrijf je de verzameling van indices van juiste antwoorden als

C={i∈{1,…,G}∣is_equivalent⁡(a,oi)}.C=\{i\in\{1,\ldots,G\}\mid\operatorname{is\_equivalent}(a,o_i)\}.

Het filter is 0<∣C∣<G0<\vert C\vert<G. Met indices ligt het tellen vast: twee samples met identieke tekst tellen nog steeds als twee antwoorden. Het paper van DAPO schrijft de verzameling in plaats daarvan over de antwoorden oio_i; letterlijk gelezen als verzameling teksten telt die vorm twee identieke antwoorden één keer.

Oefeningen

  1. Vormen. QQ is 4×84\times8, KK is 6×86\times8 en VV is 6×36\times3. Welke vormen hebben de scores en de output? Over welke as loopt softmax?
  2. Softmax. Bereken de softmax van (0,log⁡4)(0,\log4). Verandert het resultaat als je 100 bij beide inputs optelt?
  3. Gemiddelden. Eén antwoord heeft één token met loss 4; een ander heeft drie tokens met loss 0. Bereken het gemiddelde per token en het gemiddelde per antwoord.
  4. Conditioneren. Van 200 antwoorden zijn er 120 juist, 80 doorstaan de formaatvalidatie en 60 doen beide. Bepaal P(correct∣valid)P(\text{correct}\mid\text{valid}) en P(valid∣correct)P(\text{valid}\mid\text{correct}).
  5. KL. Bereken voor een teacher p=(1,0)p=(1,0) en een student q=(0.5,0.5)q=(0.5,0.5) beide KL-richtingen.
  6. Verzamelingen. DAPO houdt een vraag alleen als 0<∣C∣<G0<\vert C\vert<G, waarbij CC de indices van juiste antwoorden onder GG samples bevat. Houdt het met G=4G=4 een vraag waarvan de antwoorden (1,1,1,1)(1,1,1,1) scoren? Een vraag met antwoorden die (1,0,1,1)(1,0,1,1) scoren? Verandert het eerste antwoord als alle vier de samples identieke juiste tekst bevatten?

Antwoorden:

  1. De scores zijn 4×64\times6 en de output is 4×34\times3. Softmax loopt over de zes keys in de rij van elke query.

  2. (1/5,4/5)(1/5,4/5). Hetzelfde getal bij elke input optellen laat softmax ongewijzigd, maar e100e^{100} direct berekenen loopt over in 32-bit floats.

  3. De twee gemiddelden:

    per token:(4+0+0+0)/4=1per answer:(4/1+0/3)/2=(4+0)/2=2\begin{aligned} \text{per token:}&\quad(4+0+0+0)/4=1\\ \text{per answer:}&\quad(4/1+0/3)/2=(4+0)/2=2 \end{aligned}
  4. 60/80=0.7560/80=0.75 en 60/120=0.560/120=0.5.

  5. DKL(p∥q)=log⁡2≈0.69D_{\mathrm{KL}}(p\Vert q)=\log2\approx0.69, en DKL(q∥p)=∞D_{\mathrm{KL}}(q\Vert p)=\infty, omdat de student kans toekent aan een uitkomst die de teacher uitsluit.

  6. Nee: C={1,2,3,4}C=\{1,2,3,4\} heeft vier elementen, wat gelijk is aan GG. Ja: C={1,3,4}C=\{1,3,4\} heeft drie elementen, tussen 0 en 4. Identieke tekst verandert het eerste antwoord niet: het zijn vier afzonderlijke samples, dus hun vier indices tellen nog steeds.

Appendix A. Griekse letters

De rollen zijn gangbare voorbeelden; elk paper definieert nog steeds wat zijn symbolen betekenen.

LetterNaamGangbare rollen in ML-papers
α\alphaalfaEen mixgewicht of schaal; een afname (Gated DeltaNet); een ruisschema (DDPM)
β\betabètaEen strafsterkte (DPO, GRPO); een schrijfsterkte (Gated DeltaNet); een ruisschema (DDPM)
γ\gammagammaEen discontofactor in RL; een stapgrootte (de bias-update in DeepSeek-V3)
δ,Δ\delta,\DeltadeltaEen verschil of een verandering
ϵ,ε\epsilon,\varepsilonepsilonRuis (DDPM); een clipbereik (GRPO); een kleine stabilisator
η\etaetaDe learning rate
θ,Θ\theta,\ThetathetaModelparameters; de rotatiehoeken van RoPE
λ,Λ\lambda,\LambdalambdaEen regularisatiegewicht; een eigenwaarde
μ\mumuEen gemiddelde; het aantal gradientstappen per batch in Algorithm 1 van DeepSeekMath
π,Π\pi,\PipiEen policy; ∏\prod is de productoperator
ρ\rhorhoEen kansverhouding, zoals in de GRPO-sectie van deel 3; een correlatie
σ,Σ\sigma,\SigmasigmaDe sigmoid (DPO); een standaarddeviatie; een covariantie; ∑\sum is de somoperator
τ\tautauEen temperatuur; een drempel; een trajectorie in RL
ϕ,φ,Φ\phi,\varphi,\PhiphiDe parameters van een tweede netwerk, zoals een encoder; features; een hoek
ψ,Ψ\psi,\PsipsiDe parameters van een ander netwerk, zoals het value model VψV_\psi in DeepSeekMath’s PPO
ω,Ω\omega,\OmegaomegaEen frequentie; Ω\Omega is ook een ondergrens in complexiteit, of een verzameling uitkomsten

Varianten zoals ϕ/φ\phi/\varphi en ϵ/ε\epsilon/\varepsilon zijn meestal dezelfde letter in een ander lettertype, maar een paper kan beide voor verschillende variabelen gebruiken.

Appendix B. Andere vergelijkingsfamilies

Vergelijkingsvormen die deze serie niet uitwerkt, met de definities die elk nodig heeft:

Selective state-space models. Een state-space model verwerkt een sequentie door bij elke stap een opgeslagen toestand bij te werken. Een update van de vorm ht=Aˉtht−1+Bˉtxth_t=\bar A_th_{t-1}+\bar B_tx_t, yt=Cthty_t=C_th_t combineert de vorige toestand met de huidige input en berekent daarna een output. Hier is xtx_t de huidige input, hth_t de opgeslagen toestand en yty_t de output. De matrices Aˉt\bar A_t, Bˉt\bar B_t en CtC_t transformeren respectievelijk de vorige toestand, voegen de bijdrage van de input toe en produceren de output. De streepjes markeren parameters die van een continutijdmodel naar discrete stappen zijn omgezet; ze betekenen geen gemiddelden. In Mamba hangen de updateparameters af van de huidige input, wat “selective” betekent.

Stochastische differentiaalvergelijkingen. dx/dt=f(x,t)dx/dt=f(x,t) beschrijft hoe een toestand xx met de tijd tt verandert: ff is haar veranderingssnelheid. Een stochastische differentiaalvergelijking (SDE) voegt willekeurige veranderingen toe, dXt=f(Xt,t) dt+g(Xt,t) dWtdX_t=f(X_t,t)\,dt+g(X_t,t)\,dW_t. Hier beschrijft ff de deterministische verandering, bepaalt gg de ruisschaal en is dWtdW_t een increment van Brownse beweging. Om haar in code te benaderen gebruikt de Euler–Maruyama-methode een kleine tijdstap Δt\Delta t en vervangt ze dWtdW_t door Gauss-ruis met variantie Δt\Delta t. Sectie 5.1 van Tianhua Chens The Little Book of Generative AI Foundations geeft zo’n update; §6.4 van hetzelfde boek gebruikt SDE’s om diffusionmodellen te beschrijven.

Variabelentransformatie. Een stochastische variabele transformeren verandert haar dichtheid naargelang de transformatie het lokale volume verandert. Stel dat y=f(x)y=f(x) afbeeldt tussen ruimten van dezelfde dimensie, en dat zowel ff als haar inverse f−1f^{-1} differentieerbaar zijn. De dichtheden vóór en na de transformatie, pXp_X en pYp_Y, voldoen aan pY(y)=pX(f−1(y)) ∣det⁡Jf−1(y)∣p_Y(y)=p_X\bigl(f^{-1}(y)\bigr)\,\bigl\vert\det J_{f^{-1}}(y)\bigr\vert. De inverse f−1f^{-1} herstelt xx uit yy. Haar Jacobiaan Jf−1J_{f^{-1}} is de vierkante matrix van eerste afgeleiden; de absolute waarde van haar determinant corrigeert voor de lokale volumeverandering. Als bijvoorbeeld y=2xy=2x in één dimensie, wordt de dichtheid pY(y)=pX(y/2)/2p_Y(y)=p_X(y/2)/2: de breedte verdubbelen halveert de dichtheid. Normalizing flows gebruiken zulke inverteerbare transformaties om dichtheden te modelleren; Tianhua Chens boek, §7.1, legt de methode uit.

Min–max-doelen. In generative adversarial networks (GAN’s) produceert een generator GG voorbeelden en probeert een discriminator DD ze van echte data te onderscheiden. Het doel V(D,G)V(D,G) meet het succes van de discriminator: DD maximaliseert het terwijl GG het minimaliseert. Het doel min⁡Gmax⁡DV(D,G)\min_G\max_DV(D,G) (vergelijking 1) zegt: beschouw voor elke mogelijke generator de beste discriminator ertegen, en kies dan de generator met het kleinste resulterende doel. De training lost die binnenste maximalisatie niet exact op. Algorithm 1 van het paper wisselt kk gradient-ascent-stappen op DD af met één gradient-descent-stap op GG; de experimenten gebruikten k=1k=1.

De kanssimplex. Een kansvector heeft niet-negatieve elementen die optellen tot 1. De verzameling van alle zulke vectoren met KK elementen heet de kanssimplex, geschreven als ΔK−1={p∈RK∣pi≥0, ∑ipi=1}\Delta^{K-1}=\{p\in\mathbb R^K\mid p_i\geq0,\ \sum_ip_i=1\}. Elke softmax-output ligt erin. Hier benoemt Δ\Delta een verzameling, en de superscript K−1K-1 is haar dimensie, geen macht: zodra K−1K-1 kansen zijn gekozen, moet de laatste de som op 1 brengen. Met twee keuzes heeft elke verdeling de vorm (a,1−a)(a,1-a) voor 0≤a≤10\leq a\leq1, dus slechts één getal is vrij.

Normalisatie. Normalisatie schaalt waarden naar het gemiddelde en de spreiding van een gekozen groep. Een gangbare vorm is x^=(x−μ)/σ2+ϵ\hat x=(x-\mu)/\sqrt{\sigma^2+\epsilon}, waarbij μ\mu een gemiddelde is, σ2\sigma^2 een variantie en ϵ\epsilon een klein positief getal dat deling door nul voorkomt. De vergelijking alleen zegt niet welke elementen worden gebruikt om het gemiddelde en de variantie te berekenen. Voor een batch featurevectoren berekent batch normalization ze apart voor elke feature over de voorbeelden heen. De layer normalization van een Transformer berekent ze apart voor elk token over zijn features heen. Controleer de gespecificeerde assen als je implementaties vergelijkt.

Bronnen en versies

Sectie- en vergelijkingsnummers verwijzen naar de versies die hier zijn gelinkt.

  1. Tianhua Chen. The Little Book of Generative AI Foundations: An Intuitive Mathematical Primer. 2026. Versie 2; §2.4 en §3.2 behandelen de ongelijkheid van Jensen en de ELBO, §5.1 en §6.4 ruis in continue tijd.
  2. Vaswani et al. Attention Is All You Need. 2017. Versie 7, §3.2.1, vergelijking (1), en voetnoot 4.
  3. Dai et al. DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models. 2024. Fijnmazige expertsegmentatie en de combinatietellingen, §3.1; ablatie, §4.4 en Figure 3.
  4. Shao et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. 2024. Versie 3, §1.1, §4.1.1, vergelijkingen (1)–(4), en Algorithm 1.
  5. DeepSeek-AI. DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model. 2024. Versie 5, §2.1.1–2.1.3, vergelijkingen (9)–(19), en Appendix C.
  6. DeepSeek-AI. DeepSeek-V3 Technical Report. 2024–2025. Versie 2, §2.1.2, vergelijkingen (12)–(18).
  7. DeepSeek-AI. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. 2025. Versie 1: §2.2.1, vergelijkingen (1)–(3). Versie 2, 2026: §2.1 en Supplementary A.3.
  8. DeepSeek-AI. DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence. 2026. Versie 1: §2.2, vergelijkingen (1)–(8); §5.1.2, vergelijking (29).
  9. Rafailov et al. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. 2023–2024. Versie 3, §4, vergelijking (7).
  10. Gu et al. MiniLLM: Knowledge Distillation of Large Language Models. 2023–2024. Versie 4, §2.1, vergelijking (1), en §2.2, vergelijkingen (2) en (7).
  11. Yu et al. DAPO: An Open-Source LLM Reinforcement Learning System at Scale. 2025. Versie 2, §3.2–3.3, vergelijkingen (11)–(12).
  12. Gu and Dao. Mamba: Linear-Time Sequence Modeling with Selective State Spaces. 2023–2024.
  13. Yang et al. Gated Delta Networks: Improving Mamba2 with Delta Rule. 2024–2025. Versie 3, §3.1, vergelijking (10), en §3.3–3.4.
  14. Ho, Jain and Abbeel. Denoising Diffusion Probabilistic Models. 2020. Versie 2, §2, vergelijkingen (4)–(5); §3.2, vergelijking (12); §3.4, vergelijking (14); en Algorithms 1–2.
  15. Goodfellow et al. Generative Adversarial Nets. 2014. Vergelijking (1) en Algorithm 1.
  16. Chen et al. Evaluating Large Language Models Trained on Code. 2021. Versie 2, §2.1, vergelijking (1), en Figure 3.
  17. Hugging Face TRL. GRPOTrainer en GRPOConfig bij commit c6eac19, oktober 2026.
  18. Stanford CS229. Probability Theory Review en Linear Algebra Review and Reference.
  19. Dive into Deep Learning. Preliminaries.
  20. Britz, Goldie, Luong and Le. Massive Exploration of Neural Machine Translation Architectures. 2017. Versie 2, Table 5; geciteerd door Attention Is All You Need voor dot-product tegenover additive attention.