Reading the Math in AI Papers · Teil 1 von 1

Die Mathematik in arXiv-Papern zu AI lesen: ein praktischer Leitfaden

Automatische Übersetzung

Dieser Artikel wurde automatisch aus der englischen Originalversion übersetzt.

Die Mathematik in einem AI-Paper lesen zu können, ist eine nützliche Fähigkeit für Engineers, die ein Modell verstehen, eine Methode nachbauen oder eine experimentelle Behauptung einschätzen müssen. Dieser Leitfaden erklärt, wie man die Notation entschlüsselt, eine Gleichung an kleinen Zahlen prüft und sie mit dem umgebenden Paper und der Implementierung verbindet. Er setzt voraus, dass Sie Code lesen können, aber nicht, dass Ihnen die Notation der Forschung schon vertraut ist.

Eine Gleichung presst mehrere Entscheidungen in eine Zeile: welche Objekte bearbeitet werden, welche Dimensionen sie haben, welche Werte gesampelt werden und was gelernt wird oder fest bleibt. Diese Details zurückzugewinnen ist ein guter erster Schritt. Zu erklären, warum eine Methode funktioniert, und sie originalgetreu umzusetzen, erfordert weitere Arbeit.

Beginnen Sie mit dem Attention-Walkthrough: Er verbindet eine Gleichung mit Array-Formen, kleinen Zahlen und lauffähigem Python. Die Notationsreferenz erklärt die Ausdrücke, denen Sie in anderen Papern begegnen. Der Rest dieser Serie wendet dieselbe Methode auf Gleichungen aus konkreten Papern an: Architekturgleichungen wie RoPE, MLA und LoRA, Trainingsziele wie DPO und GRPO sowie generative Modelle und Metriken wie das ELBO, Diffusion und pass@k. Diese Teile sind noch nicht erschienen, deshalb sind die Walkthroughs, auf die dieser Teil verweist, nicht verlinkt. Für eine ausführlichere Behandlung der Grundlagen entwickelt Tianhua Chens The Little Book of Generative AI Foundations die lineare Algebra und Wahrscheinlichkeitsrechnung hinter generativen Modellen.

Attention, Symbol für Symbol gelesen

Attention erzeugt einen Ausgabevektor, indem sie einen gewichteten Mittelwert aus Value-Vektoren bildet. Die Gewichte erhält sie, indem sie einen Query-Vektor für die Ausgabeposition mit einem Key-Vektor für jede verfügbare Eingabeposition vergleicht. Die Matrizen QQ, KK und VV sammeln diese Query-, Key- und Value-Vektoren. Scaled Dot-Product Attention fasst diese Schritte in Gleichung (1) von §3.2.1 (§ steht für „Abschnitt“) in Attention Is All You Need zusammen:

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

Die Definitionen stehen im Text, nicht in der Gleichung. Der Absatz vor Gleichung (1) sagt, dass Queries und Keys die Dimension dkd_k haben und Values die Dimension dvd_v. Die Methode bildet das Skalarprodukt jeder Query mit allen Keys, teilt jedes durch dk\sqrt{d_k} und wendet ein Softmax an, „to obtain the weights on the values“. Die Queries werden „packed together into a matrix QQ“, Keys und Values in KK und VV. Jede Zeile dieser Matrizen ist also der Vektor eines Tokens, und das Softmax erzeugt pro Query einen Satz von Gewichten. Die gelernten Matrizen, die Token-Vektoren in QQ, KK und VV überführen, folgen später, in §3.2.2.

Formen und Rollen. Ein Attention Head führt eine solche Berechnung mit eigenen Query-, Key- und Value-Vektoren aus. Schreiben Sie deren Formen auf, bevor Sie die Operatoren lesen. Für einen Head mit nn Queries und mm Keys:

SymbolFormWas es istWoher es kommt
QQn×dkn\times d_keine Query-Zeile pro AusgabepositionToken-Vektoren mal eine gelernte Matrix
KKm×dkm\times d_keine Key-Zeile pro Position, die beachtet werden kannToken-Vektoren mal eine gelernte Matrix
VVm×dvm\times d_veine Value-Zeile pro KeyToken-Vektoren mal eine gelernte Matrix
K⊤K^\topdk×md_k\times mKK transponiert: Zeilen werden zu Spaltendieselben Zahlen wie KK
dkd_keine Zahldie Breite jeder Query und jedes Keyseine feste Einstellung: 64 im Basis-Transformer

Paper geben eine Form an, indem sie die Menge nennen, zu der die Matrix gehört: Q∈Rn×dkQ\in\mathbb R^{n\times d_k} bedeutet eine Matrix reeller Zahlen mit nn Zeilen und dkd_k Spalten, ein Array der Form [n, dk].

Von innen nach außen lesen.

  1. QK⊤QK^\top multipliziert eine n×dkn\times d_k-Matrix mit einer dk×md_k\times m-Matrix. Das gemeinsame dkd_k wird weggesummiert, das Ergebnis ist eine n×mn\times m-Tabelle von Scores. Der Eintrag (i,j)(i,j) ist das Skalarprodukt von Query ii und Key jj: entsprechende Einträge multiplizieren, dann die Produkte addieren. Bei festen Vektorlängen ist dieser Score größer, wenn ihre Richtungen ähnlicher sind.

  2. Die Division durch dk\sqrt{d_k} verhindert, dass die Scores mit der Vektorbreite wachsen. Fußnote 4 des Papers zeigt, warum unskalierte Skalarprodukte wachsen. Angenommen, die Komponenten einer Query und eines Keys sind voneinander unabhängig (wer einige kennt, erfährt nichts über die anderen), jeweils mit Mittelwert 0 und Varianz 1 (dem mittleren quadrierten Abstand vom Mittelwert). Dann gilt:

    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}

    Die Zeilen nutzen zwei Regeln über unabhängige Zahlen. Erstens hat das Produkt zweier unabhängiger Zahlen, die jeweils Mittelwert 0 und Varianz 1 haben, ebenfalls Varianz 1. Zweitens addieren sich beim Addieren unabhängiger Zahlen ihre Varianzen, die dkd_k Produkte ergeben also die Varianz dkd_k. Die Standardabweichung ist die Quadratwurzel der Varianz, dk\sqrt{d_k}. Teilt man jeden Score durch dk\sqrt{d_k}, schrumpft die Streuung um denselben Faktor, zurück auf 1.

    Warum die beiden Regeln gelten

    Varianz bei Mittelwert 0. Die Varianz ist der mittlere quadrierte Abstand vom Mittelwert. Ist der Mittelwert 0, ist der quadrierte Abstand vom Mittelwert einfach das Quadrat der Zahl, die Varianz ist also der Mittelwert der Quadrate. Eine Komponente qiq_i mit Mittelwert 0 und Varianz 1 hat daher qi2q_i^2 im Mittel 1.

    Der Mittelwert eines Produkts. Bei unabhängigen Zahlen ist der Mittelwert eines Produkts das Produkt der Mittelwerte. Nehmen Sie eine Zahl aa, die mit gleicher Wahrscheinlichkeit 1 oder 3 ist und daher im Mittel 2 beträgt, und eine Zahl bb, die mit gleicher Wahrscheinlichkeit 1 oder 5 ist, also im Mittel 3. Unabhängig heißt, dass bb jeden seiner Werte gleich oft annimmt, egal was für aa herauskam; alle vier Paare sind also gleich wahrscheinlich. Für a=1a=1 sind die Produkte 1 und 5, im Mittel 3=1×33=1\times3. Für a=3a=3 sind sie 3 und 15, im Mittel 9=3×39=3\times3. In beiden Fällen ist der Mittelwert a×3a\times3, über beide Werte von aa also (3+9)/2=6(3+9)/2=6, das ist 2×32\times3. Ohne Unabhängigkeit versagt die Regel: Wäre bb immer 5, wenn aa gleich 3 ist, und 1, wenn aa gleich 1 ist, träten nur die Produkte 1 und 15 auf, deren Mittelwert 8 ist. Wikipedia formuliert die Regel für beliebige unabhängige Zufallsvariablen, mit „expected value“ für den Mittelwert: independence and expectation.

    Regel 1: Ein Produkt hat Varianz 1. Nehmen Sie ein Produkt qikiq_ik_i. Sein Mittelwert ist das Produkt der Mittelwerte, 0×0=00\times0=0, seine Varianz ist also der Mittelwert von (qiki)2=qi2ki2(q_ik_i)^2=q_i^2k_i^2. Die Quadrate sind unabhängig, weil qiq_i und kik_i es sind, und jedes hat im Mittel 1, die Varianz ist also 1×1=11\times1=1. Die allgemeine Formel ist die variance of a product of independent variables.

    Regel 2: Die Varianzen unabhängiger Terme addieren sich. Nennen Sie die Produkte xi=qikix_i=q_ik_i, das Skalarprodukt ist dann die Summe x1+⋯+xdkx_1+\cdots+x_{d_k}. Die Terme sind unabhängig, weil jeder andere Komponenten verwendet, und jeder hat Mittelwert 0 und Varianz 1. Auch die Summe hat den Mittelwert 0, ihre Varianz ist also der Mittelwert ihres Quadrats. Multipliziert man die Summe mit sich selbst, entsteht für jedes Paar von Termen ein Produkt xixjx_ix_j, ein dk×dkd_k\times d_k-Raster:

    Ein Vier-mal-vier-Raster für das Quadrat von x1 + x2 + x3 + x4, mit einer Zelle für jedes Produkt zweier Terme. Die vier Diagonalzellen, x1 zum Quadrat bis x4 zum Quadrat, sind hervorgehoben: Jede hat den Mittelwert 1, zusammen ergeben sie 4. Die zwölf anderen Zellen multiplizieren zwei verschiedene, unabhängige Terme und haben jeweils den Mittelwert 0 mal 0, zusammen ergeben sie 0. Das Quadrat der Summe hat den Mittelwert 4: Varianz 4, Standardabweichung 2. Mit 64 Termen ergibt dieselbe Zählung die Varianz 64 und die Standardabweichung 8.Ein Vier-mal-vier-Raster für das Quadrat von x1 + x2 + x3 + x4, mit einer Zelle für jedes Produkt zweier Terme. Die vier Diagonalzellen, x1 zum Quadrat bis x4 zum Quadrat, sind hervorgehoben: Jede hat den Mittelwert 1, zusammen ergeben sie 4. Die zwölf anderen Zellen multiplizieren zwei verschiedene, unabhängige Terme und haben jeweils den Mittelwert 0 mal 0, zusammen ergeben sie 0. Das Quadrat der Summe hat den Mittelwert 4: Varianz 4, Standardabweichung 2. Mit 64 Termen ergibt dieselbe Zählung die Varianz 64 und die Standardabweichung 8.

    Die Diagonalzellen sind die Quadrate xi2x_i^2, jedes hat im Mittel 1. Jede andere Zelle multipliziert zwei verschiedene, unabhängige Terme, ihr Mittelwert ist also das Produkt ihrer Mittelwerte, 0×0=00\times0=0: Ihre positiven und negativen Werte heben sich auf. Übrig bleiben nur die dkd_k Diagonalzellen, die Varianz der Summe ist also dkd_k und ihre Standardabweichung dk\sqrt{d_k}. Die Streuung wächst mit der Quadratwurzel der Breite, weil sich der größte Teil des Rasters aufhebt. Wikipedia gibt die allgemeine Aussage als variance of a sum of uncorrelated variables an; unabhängige Variablen sind stets unkorreliert, die Regel deckt sie also ab.

    Bei dk=64d_k=64 streuen die rohen Scores typischerweise über etwa ±8\pm8; skaliert über etwa ±1\pm1, bei jeder Breite.

    Weit gestreute Scores sättigen das Softmax (Schritt 3), und seine Gradienten verschwinden. Liegt ein Score in einer Zeile weit über den anderen, gibt das Softmax diesem Key ein Gewicht nahe 1 und jedem anderen Key ein Gewicht nahe 0. Eine kleine Änderung an einem Score bewegt die Gewichte dann kaum, der Gradient, der Queries und Keys erreicht, liegt nahe null, und das Training hat fast nichts, womit es sie anpassen könnte. Das Paper bietet dies als wahrscheinliche Erklärung für ein früheres Ergebnis an: Ohne die Skalierung schnitt Dot-Product Attention bei großem dkd_k schlechter ab als additive Attention, eine ältere Form, die Query und Key mit einem kleinen Netz bewertet (Britz et al., 2017). Die Gradienten selbst misst das Paper nicht.

  3. Das Softmax macht aus jeder Score-Zeile Gewichte. Sei z=(z1,…,zm)z=(z_1,\ldots,z_m) eine Zeile der skalierten Scores. Die Exponentialfunktion eae^a, auch exp⁡(a)\exp(a) geschrieben, verwendet die Konstante e≈2.718e\approx2.718. Dann ist softmax⁡(z)j=ezj/∑j′ezj′\operatorname{softmax}(z)_j=e^{z_j}/\sum_{j'}e^{z_{j'}}, wobei j′j' nur ein zweiter Indexname ist, die Summe also über alle Keys der Zeile läuft. Die Gewichte sind positiv, und jede Zeile summiert sich zu 1.

  4. Multipliziert man die n×mn\times m-Gewichte mit den m×dvm\times d_v-Values, wird die Key-Achse weggesummiert. Zeile ii der n×dvn\times d_v-Ausgabe ist ein gewichteter Mittelwert der Value-Zeilen, gewichtet danach, wie gut jeder Key zu Query ii passte.

Ein Attention Head, gezeichnet als Raster aus Zahlen, mit drei Queries, vier Keys, Key-Breite zwei und Value-Breite drei. Q, drei mal zwei, mal K transponiert, zwei mal vier, ergibt eine Score-Tabelle der Form drei mal vier. Softmax behält diese Form und sorgt dafür, dass jede Zeile die Summe eins hat. Die Gewichte, drei mal vier, mal V, vier mal drei, ergeben eine Ausgabe der Form drei mal drei, und Ausgabezeile zwei ist ein gewichteter Mittelwert der Value-Zeilen mit Gewichtszeile zwei.Ein Attention Head, gezeichnet als Raster aus Zahlen, mit drei Queries, vier Keys, Key-Breite zwei und Value-Breite drei. Q, drei mal zwei, mal K transponiert, zwei mal vier, ergibt eine Score-Tabelle der Form drei mal vier. Softmax behält diese Form und sorgt dafür, dass jede Zeile die Summe eins hat. Die Gewichte, drei mal vier, mal V, vier mal drei, ergeben eine Ausgabe der Form drei mal drei, und Ausgabezeile zwei ist ein gewichteter Mittelwert der Value-Zeilen mit Gewichtszeile zwei.

Zählen Sie die Quadrate in der Abbildung: Jedes Produkt entfernt die Achse, die seine beiden Raster teilen.

Prüfen Sie es mit zwei Zahlen. Nehmen Sie eine Query und zwei Keys, deren skalierte Scores (0,log⁡3)(0,\log3) sind, so gewählt, dass die Exponentialwerte 1 und 3 ergeben, und die Values v1=(2,0)v_1=(2,0) und v2=(0,4)v_2=(0,4). Die Abbildung rechnet es durch, eine Operation pro Spalte:

Eine Tabelle mit einer Zeile pro Key. Key 1: skalierter Score 0, Exponentialwert 1, Gewicht 1/4, Value (2, 0), gewichteter Value (0.5, 0). Key 2: skalierter Score log 3, Exponentialwert 3, Gewicht 3/4, Value (0, 4), gewichteter Value (0, 3). Die Exponentialwerte summieren sich zu 4, die Gewichte zu 1 und die gewichteten Values zur Ausgabe (0.5, 3).Eine Tabelle mit einer Zeile pro Key. Key 1: skalierter Score 0, Exponentialwert 1, Gewicht 1/4, Value (2, 0), gewichteter Value (0.5, 0). Key 2: skalierter Score log 3, Exponentialwert 3, Gewicht 3/4, Value (0, 4), gewichteter Value (0, 3). Die Exponentialwerte summieren sich zu 4, die Gewichte zu 1 und die gewichteten Values zur Ausgabe (0.5, 3).

Attention hat beide Values gemischt; sie hat nicht das besser passende Token ausgewählt.

Vergleichen Sie es mit Code. Die NumPy-Funktion unten implementiert einen Head. k.T ist die Transponierte. axis=1 ist die Key-Achse, jede Query-Zeile wird also separat normalisiert. Das Zeilenmaximum wird vor np.exp abgezogen: Addiert man dieselbe Zahl zu jedem Score einer Zeile, kürzt sie sich im Softmax-Quotienten heraus, das Ergebnis bleibt also gleich, aber große Scores laufen nicht mehr über. Die optionale Maske setzt blockierte Scores auf −∞-\infty, wodurch ihre Gewichte exakt null werden. Ein Decoder verwendet eine solche Maske, damit kein Token spätere Tokens beachtet (§3.2.3 des Papers).

Speichern Sie den Block als attention_example.py und führen Sie uv run --with numpy python attention_example.py aus. Die Prüfungen laufen ohne Ausgabe durch.

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)

Eine Query, deren Keys alle blockiert sind, ist ein Fall, den die Gleichung offenlässt: Jedes Gewicht in ihrer Zeile wäre 0/00/0. Die Funktion löst einen Fehler aus, statt NaN zurückzugeben.

Von einem Head zu mehreren. Der Basis-Transformer führt acht Heads parallel aus, jeder mit eigenen gelernten Matrizen zur Erzeugung von QQ, KK und VV und jeweils mit dk=dv=64d_k=d_v=64. Er konkateniert ihre Ausgaben und multipliziert das Ergebnis mit einer weiteren gelernten Matrix, WOW^O (Attention Is All You Need, §3.2.2).

Eine Implementierung kann auch einen Batch verarbeiten: mehrere Eingabesequenzen gemeinsam. PyTorchs Scaled Dot-Product Attention akzeptiert zum Beispiel einen Query-Tensor Q der Form [batch, heads, n, d_k]. Die ersten beiden Dimensionen wählen eine Sequenz und einen Head aus; Q[b, h] ist die [n, d_k]-Matrix für dieses Paar. Die Attention-Formel wird auf jedes Paar getrennt angewendet. Die NumPy-Funktion hier behandelt nur ein solches Paar: Ihre Operationen .T und axis=1 setzen zweidimensionale Eingaben voraus.

Sechs Fragen an jede Gleichung

FrageAntwort für Attention
Was gibt die Gleichung zurück, und mit welcher Form?Eine n×dvn\times d_v-Matrix: eine Ausgabezeile pro Query
Ist jedes Symbol Daten, ein trainiertes Gewicht, ein eingefrorenes Modell, eine Einstellung oder ein Sample?QQ, KK und VV werden aus Tokens durch gelernte Matrizen berechnet; dkd_k ist eine feste Einstellung; nichts wird gesampelt
Über welchen Index oder welche Achse läuft jede Operation?Das Softmax läuft über die mm Keys in der Zeile jeder Query; das Produkt der Gewichte mit VV summiert über die Keys
Wo stehen die Definitionen?Im Absatz vor Gleichung (1), in Fußnote 4 und in §3.2.2 für die gelernten Projektionen
Was liefert eine Prüfung mit zwei oder drei Zahlen?Gewichte (1/4,3/4)(1/4,3/4) und Ausgabe (0.5,3)(0.5,3)
Was musste der Code entscheiden, das die Gleichung offenlässt?Das Abziehen des Zeilenmaximums, der Wert für maskierte Scores, eine Zeile ohne erlaubten Key

Welche Art von Aussage eine Gleichung macht

Attention ist eine Berechnung: Sie sagt, wie man aus Eingaben eine Ausgabe erhält. Paper schreiben aber auch Gleichungen, die andere Aufgaben erfüllen:

ArtBeispiel in dieser SerieWorauf zu achten ist
BerechnungDie Attention-Ausgabe; der komprimierte Vektor von MLADie Form jedes Zwischenergebnisses
DefinitionGRPOs Score relativ zu anderen AntwortenWofür der neue Name steht, damit Sie ihn zurückersetzen können
Zielfunktion: ein zu minimierender Loss oder ein zu maximierender ScoreDer DPO-LossOb minimiert oder maximiert wird und über welche Daten gemittelt wird
Update-RegelGradient Descent; der Speicher von Gated DeltaNetWas sich in jedem Schritt ändert und was fest bleibt
Nebenbedingung oder Menge erlaubter WerteDie erlaubten Mischungsmatrizen von mHCWie das Paper einen Wert erzeugt, der sie erfüllt
Schranke: eine obere oder untere Grenze für eine GrößeDie Evidence Lower Bound (ELBO)Die Differenz zwischen den beiden Seiten und wann sie null ist
Schätzer oder Metrikpass@kWas gezählt wird und aus wie vielen Samples
Empirische AnpassungDas Scaling Law von DeepSeek LLMDer Datenbereich, an den die Kurve angepasst wurde

Eine Nebenbedingung nennt eine Eigenschaft, die das Ergebnis haben muss. Für Attention-Gewichte lautet sie: Jedes Gewicht ist nichtnegativ, und jede Zeile summiert sich zu 1. Das Softmax ist eine Berechnung, die Gewichte mit dieser Eigenschaft erzeugt. Die Anforderung allein sagt Ihnen nicht, dass Sie Softmax verwenden sollen.

== behauptet, dass zwei Ausdrücke gleich sind. :=:= bedeutet „ist definiert als“: Es gibt einem Ausdruck einen Namen. Eine Definition kann eine Metrik, einen Loss oder eine Menge erlaubter Werte benennen, wenn Sie :=:= sehen, sagt das Ihnen also nicht, um welche Art von Gleichung aus der Tabelle oben es sich handelt.

Zum Beispiel verwendet Evaluating Large Language Models Trained on Code, das Paper, das das Code-Generierungsmodell Codex vorstellte, :=:=, um seinen Schätzer für pass@k zu definieren (Gleichung 1). Diese Metrik misst die Wahrscheinlichkeit, dass mindestens eines von kk erzeugten Programmen die Tests besteht. Im DeepSeek-V4 Technical Report kombiniert Gleichung (2) zwei Aussagen: M:={…}\mathcal M:=\{\ldots\} definiert eine Menge erlaubter Matrizen, und Bl∈MB_l\in\mathcal M verlangt, dass die Mischungsmatrix BlB_l des Modells zu dieser Menge gehört. Die Definition verwendet :=:=, die Nebenbedingung ∈\in, „gehört zu“. Die Abschnitte zu pass@k und mHC rechnen diese Beispiele durch.

Die neue Gleichung, ihre Definitionen und ihren Code finden

Der Methodenteil eines Papers beschreibt, wie sein Modell oder Trainingsalgorithmus funktioniert. Die Überschrift kann „Method“, „Architecture“ oder etwas Konkreteres lauten. Autoren erklären oft zuerst eine bestehende Methode und zeigen dann, was sie geändert haben. Um den behaupteten Beitrag zu erkennen, beginnen Sie mit der Zusammenfassung der Neuerungen in der Einleitung. DeepSeekMath, §1.1 nennt zum Beispiel Group Relative Policy Optimization (GRPO), seine Methode, Modelle aus bewerteten Antworten zu trainieren. Abschnitts- und Gleichungsnummern beziehen sich hier auf das verlinkte Paper.

Vergleichen Sie dann die vorgeschlagene Methode mit der früheren Methode, die sie ändert. Zwei Paper zeigen das:

  • Eine Architekturänderung. DeepSeek-V2 beschreibt Standard-Multi-Head-Attention in §2.1.1 und führt Multi-head Latent Attention (MLA) in §2.1.2 ein. Standard-Attention speichert Keys und Values jedes früheren Tokens. MLA speichert einen komprimierten Vektor, aus dem sie sich rekonstruieren lassen. Der Vergleich dieser Gleichungen zeigt, was das Modell anders speichert; der MLA-Walkthrough leitet die Speicherersparnis her.
  • Eine Trainingsänderung. DeepSeekMath, §4.1.1 gibt die Zielfunktion von Proximal Policy Optimization (PPO) als Gleichung (1) an und GRPO als Gleichung (3). Beide verwenden einen Advantage: eine Zahl, die sagt, ob eine Antwort besser oder schlechter war als erwartet. PPO schätzt ihn mit einem zweiten gelernten Netz, dem Value Model, das die noch ausstehende Belohnung ausgehend von einer Teilantwort vorhersagt. GRPO vergleicht stattdessen die Belohnung der Antwort mit den Belohnungen anderer Antworten auf dieselbe Frage. Der GRPO-Walkthrough vergleicht diese Terme anhand der Notation für ganze Antworten aus DeepSeek-R1.

Die Definitionen rund um die Gleichung finden. Prüfen Sie den vorangehenden Absatz, jeden „where …“-Satz danach, Fußnoten und Anhänge. In Attention Is All You Need definiert der Absatz vor Gleichung (1) die Dimensionen, und Fußnote 4 erklärt den Skalierungsfaktor. DeepSeek-V3 definiert die meisten seiner Routing-Symbole direkt nach Gleichung (15) und den Bias bib_i kurz vor Gleichung (16). DeepSeek-V2 entwickelt MLA über die Gleichungen (9)–(19) und fasst die Berechnung dann in Anhang C zusammen.

Algorithmus und Code prüfen. Eine Algorithmus-Box ist ein nummeriertes Pseudocode-Listing, das die Reihenfolge der Operationen angibt. DeepSeekMaths Algorithm 1 zeigt, wann Antworten erzeugt und wann das Modell aktualisiert wird. Algorithm 1 in Denoising Diffusion Probabilistic Models (DDPM) legt fest, wie das Trainingsbild, die Rauschstärke und das Rauschen gesampelt werden. Implementierungen klären weitere Details: Standardmäßig teilt np.std die Summe der quadrierten Abweichungen durch nn, torch.std dagegen durch n−1n-1. Das GRPO-Beispiel zeigt, wie diese Wahl die aus denselben Belohnungen berechneten Advantage-Werte verändert.

arXiv-Versionen können Abschnitte verschieben und Gleichungen unter neuen Nummern wiederholen, zitieren Sie also die Version. In DeepSeek-R1 v1 steht die GRPO-Zielfunktion in §2.2.1, Gleichungen (1)–(3). In v2, im Januar 2026 veröffentlicht, steht sie in §2.1, und dieselben Gleichungen tauchen als (11)–(13) in Supplementary A.3 wieder auf. Ein Link ohne Version öffnet die neueste, deshalb enthält jeder arXiv-Link in dieser Serie die Version, gegen die er geprüft wurde.

Das eigene Verständnis mit einem LLM prüfen

Ein Chat-Modell kann die Symboltabelle, den Index jeder Summe und eine Prüfung mit kleinen Zahlen entwerfen, wenn Sie ihm die Definitionen geben und es bitten, Fehlendes zu markieren. Aus einem PDF kopierter Text drückt Indizes, Exponenten und Brüche in eine Zeile; die Links „HTML (experimental)“ und „TeX Source“ auf der arXiv-Abstract-Seite liefern sauberen Text zum Einfügen. Fügen Sie die Gleichung und die Absätze darum herum mit einem Prompt wie diesem ein:

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.

Ohne Schritt 2 hindert nichts das Modell daran, eine fehlende Definition mit der üblichen Bedeutung des Buchstabens zu füllen, etwa σ\sigma in DPO als Standardabweichung statt als Sigmoid zu lesen. Die Zitate aus Schritt 1 machen die Tabelle überprüfbar: Suchen Sie im PDF nach jedem einzelnen, und behandeln Sie eine Zeile, deren Zitat Sie nicht finden, als Vermutung.

Dasselbe Vorgehen als Agent Skills. paper-math-skills bündelt diesen Abschnitt und die Notationsreferenz unten als zwei Skills, die für Claude Code geschrieben sind; andere Agents, die SKILL.md-Dateien laden, können sie ebenfalls verwenden. read-paper-math holt die festgelegte arXiv-Version, zitiert den Satz, der jedes Symbol definiert, liest die Gleichung von innen nach außen und führt eine Prüfung mit kleinen Zahlen aus. check-paper-math prüft eine solche Lesart gegen das Paper: Es sucht jedes Zitat, rechnet die Zahlen erneut und markiert Aussagen, die stärker oder schwächer sind als die des Papers. paper-math-readings enthält die Lesarten der Skills für die Teile 2–4, eine für jeden der 15 Abschnitte mit einer Source:-Zeile.

Notationsreferenz

Wenn Ihnen ein griechischer Buchstabe unbekannt ist, öffnen Sie die Referenz der griechischen Buchstaben in diesem Artikel (Anhang A) für seinen Namen und seine üblichen Bedeutungen. Zum Weiterüben der Mathematik bietet Stanford CS229 Auffrischungen zu Wahrscheinlichkeitsrechnung und linearer Algebra mit Übungen; die Preliminaries von Dive into Deep Learning erklären die Grundlagen mit Code.

Indizes, Zeichen und Relationszeichen

Buchstaben sind lokale Variablennamen: Jedes Paper definiert seine eigenen. Tiefgestellte Zeichen sind meist Indizes. xix_i kann die Koordinate ii eines Vektors oder das Beispiel ii in einem Dataset sein, und hth_t ist der Vektor des Modells für Token tt, sein Hidden State.

Hochgestellte Zeichen in Modell-Papern sind oft Labels. In ht(ℓ)h_t^{(\ell)} ist das eingeklammerte Hochgestellte meist eine Schichtnummer, keine Potenz; in FFN⁡i(s)\operatorname{FFN}^{(s)}_i und FFN⁡i(r)\operatorname{FFN}^{(r)}_i von DeepSeek-V3 kennzeichnet es geteilte und geroutete Experten, also diejenigen, die jedes Token nutzt, und diejenigen, die ein Router auswählt (siehe das MoE-Routing-Beispiel). In DeepSeek-V2 tragen WDKVW^{DKV} und ktCk_t^C Labels, keine Exponenten; das MLA-Beispiel definiert diese Labels. W⊤W^\top ist eine Transponierte und x2x^2 ein Quadrat.

x1:Tx_{1:T} bedeutet die Positionen 1 bis TT einschließlich TT, anders als bei einem Python-Slice; Paper zählen meist ab 1. x<tx_{<t} bedeutet jede Position vor tt. Xt,:X_{t,:} wählt die Zeile tt aus, wie beim NumPy-Slicing.

Zeichen auf einem Buchstaben ändern seine Bedeutung meist auf eine dieser Weisen:

ZeichenÜbliche LesartBeispiel oder Ausnahme
y^\hat yEine Vorhersage oder ein SchätzwertBeispiel: A^i,t\hat A_{i,t} in DeepSeekMath schätzt, wie viel besser eine Antwort abschnitt als erwartet
xˉ\bar xEin MittelwertAusnahme: In DDPM multipliziert αˉt\bar\alpha_t die Faktoren des Rauschplans von Schritt 1 bis tt
x~\tilde xEine gestörte oder unbeschränkte VersionBeispiel: In DeepSeek-V4 ist B~l\tilde B_l eine Matrix, bevor die Normalisierung ihre Nebenbedingungen durchsetzt
x∗x^\astDas OptimumAusnahme: In DPO ist r∗r^\ast die wahre Belohnung, die die Methode nie beobachtet
x′x'Ein neuer Wert oder ein ZwischenwertBeispiel: In DeepSeek-V3 ist gi,t′g'_{i,t} ein Expertengewicht vor der Normalisierung
A−1A^{-1}Die inverse MatrixNicht der elementweise Kehrwert: A−1A^{-1} macht AA rückgängig, A−1A=IA^{-1}A=I (die Einheitsmatrix), und (A−1)ij≠1/Aij(A^{-1})_{ij}\neq1/A_{ij} im Allgemeinen

Einige Symbole außer griechischen Buchstaben haben ebenfalls mehrere Aufgaben:

SymbolBedeutungen
∣\midBedingung in p(y∣x)p(y\mid x); „sodass“ innerhalb einer Menge
∣x∣\vert x\vertEin Absolutbetrag; die Länge einer Sequenz, wie in ∣oi∣\vert o_i\vert, der Token-Anzahl von GRPOs Antwort oio_i; die Größe einer Menge
∼\sim„Wird gesampelt aus“ in x∼px\sim p; „ungefähr“ in informellem Text
TTEine Sequenzlänge; eine Softmax-Temperatur; die Anzahl der Diffusionsschritte
qqEin Query-Vektor (Attention); eine Frage (GRPO); das Student-Modell qθq_\theta (Distillation); der Encoder qϕq_\phi (ELBO)

Fünf Zeichen sagen, wie zwei Seiten zueinander stehen. :=:=, manchmal ≜\triangleq, definiert einen neuen Namen. ≈\approx kennzeichnet eine Näherung, etwa den gesampelten Mittelwert in Erwartungswerte und woher die Samples kommen. ∝\propto bedeutet „proportional zu“, wobei eine Normierungskonstante weggelassen ist: pi∝ezip_i\propto e^{z_i} wird erst nach der Division durch ∑jezj\sum_j e^{z_j} zu einer Verteilung. ≪\ll bedeutet „viel kleiner als“, wie in dc≪dhnhd_c\ll d_hn_h von DeepSeek-V2: Die komprimierte Breite ist viel kleiner als die Gesamtbreite aller Heads. ←\leftarrow ist eine Zuweisung, wie in einer Update-Regel.

Summen, Zählungen, Intervalle und Logarithmen

Das große ∑\sum addiert Terme und ∏\prod multipliziert sie. Der Index unter jedem Operator beginnt hier bei 1 und läuft bis zur oberen Grenze 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.

Der Index gehört zum Operator, so wie eine Schleifenvariable zu ihrer Schleife gehört. In yi=∑j=1dWijxjy_i=\sum_{j=1}^{d}W_{ij}x_j läuft die Summe über jj, während ii einen Ausgabeeintrag bezeichnet. Das Ergebnis ist ein Vektor mit einem Eintrag pro ii: das ausgeschriebene Matrix-Vektor-Produkt WxWx. Die Indizes auf der linken Seite verraten Ihnen die Form der Ausgabe.

Der Faktor vor einer Summe entscheidet, was gleiches Gewicht bekommt. Ein Batch mit einer Antwort aus 2 Tokens und einer aus 8 Tokens, wobei ℓit\ell_{it} der Loss auf Token tt von Antwort ii ist (bei GRPO ist ℓ\ell stattdessen ein zu maximierender Term), lässt sich auf zwei Arten mitteln:

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}

Im ersten Fall bekommt jede Antwort das Gewicht 12\tfrac12, aufgeteilt auf ihre 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}

Im zweiten Fall hat jedes Token das Gewicht 1/101/10. GRPO sampelt GG Antworten o1,…,oGo_1,\ldots,o_G auf jede Frage, und ∣oi∣\vert o_i\vert ist die Anzahl der Tokens in Antwort ii. Die beiden Mittelwerte lauten dann so, für DeepSeekMaths GRPO und für DAPO, eine spätere GRPO-Variante:

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}

Mit G=2G=2 sind das LanswersL_{\text{answers}} und LtokensL_{\text{tokens}} von oben. DAPO wechselte zum Mittel pro Token (§3.3), weil das Mittel pro Antwort den Tokens langer Antworten zu wenig Gewicht gab: Das Modell lernte zu wenig aus langen guten Antworten und bestrafte lange, repetitive schlechte nicht genug.

Eine Summe kann auch zählen. Paper tun das mit einem Indikator: einer fettgedruckten Eins, gefolgt von einer Bedingung, 1[C]\mathbf 1[C], die 1 ist, wenn die Bedingung CC wahr ist, und 0, wenn sie falsch ist. Manche Paper setzen die Bedingung in runde Klammern oder drucken stattdessen eine doppelt durchgestrichene Eins; die Bedeutung ist dieselbe. Indikatoren aufzuaddieren zählt daher, wie oft die Bedingung zutrifft. Die Accuracy ist das übliche Beispiel. Wenn y^i\hat y_i die vorhergesagte Klasse und yiy_i die richtige Klasse für Beispiel ii ist, dann ist ∑i1[y^i=yi]\sum_i\mathbf 1[\hat y_i=y_i] die Anzahl der richtigen Vorhersagen. Die Vorhersagen (Katze, Hund, Hund) gegen die richtigen Labels (Katze, Katze, Hund) ergeben die Indikatoren 1, 0 und 1, die Zählung ist also 2 und die Accuracy 2/3. In einer Mixture-of-Experts-Schicht (MoE) schickt ein Router jedes Token an einige von vielen Feed-Forward-Teilnetzen, den Experten. Im Balance-Loss von DeepSeek-V3 (Gleichung 18) ist der Indikator 1, wenn der Score eines Experten für ein Token zu den KrK_r höchsten Scores für dieses Token gehört, wobei KrK_r angibt, an wie viele Experten jedes Token geroutet wird. Seine Summe über die Tokens einer Sequenz zählt, wie oft das geschah. Der Score lässt hier den Bias aus, den das Routing hinzufügt, die Zählung kann also von den Experten abweichen, die der Router tatsächlich wählt (MoE-Routing).

Der Binomialkoeffizient (nk)\binom nk, gelesen „nn über kk“, zählt die Möglichkeiten, kk verschiedene Elemente aus nn ohne Beachtung der Reihenfolge auszuwählen. Für ganze Zahlen 0≤k≤n0\leq k\leq n ist er gleich n!/(k! (n−k)!)n!/(k!\,(n-k)!). Das Ausrufezeichen steht für die Fakultät: n!=1×2×⋯×nn!=1\times2\times\cdots\times n, mit 0!=10!=1. Zum Beispiel ist (52)=5!/(2! 3!)=10\binom52=5!/(2!\,3!)=10: Fünf Elemente haben zehn verschiedene Paare. DeepSeekMoE verwendet Binomialkoeffizienten, um Expertenkombinationen zu zählen, und der pass@k-Schätzer verwendet sie, um Mengen von Samples zu zählen.

Intervalle verwenden Klammern für eingeschlossene Enden: [a,b][a,b] schließt beide ein, (a,b)(a,b) keines. In Gated DeltaNet bedeutet αt∈(0,1)\alpha_t\in(0,1) strikt zwischen 0 und 1. Anderswo ist (a,b)(a,b) ein Paar.

Der natürliche Logarithmus kehrt die Exponentiation um: log⁡(ea)=a\log(e^a)=a. Logarithmen machen Produkte zu Summen und Quotienten zu Differenzen: log⁡(ab)=log⁡a+log⁡b\log(ab)=\log a+\log b und log⁡(a/b)=log⁡a−log⁡b\log(a/b)=\log a-\log b, aber log⁡(a+b)\log(a+b) lässt sich nicht aufspalten. Deshalb arbeiten Paper mit Log-Wahrscheinlichkeiten. Der Logarithmus eines Produkts von Token-Wahrscheinlichkeiten ist eine Summe, und der Logarithmus des Quotienten der Wahrscheinlichkeiten zweier Modelle ist eine Differenz, die Form, die in den Zielfunktionen von DPO und GRPO verwendet wird. ML-Paper meinen den natürlichen Logarithmus, sofern nichts anderes gesagt wird; die Ergebnisse sind in Nats, und Logarithmen zur Basis 2 ergeben Bits. Für eine Wahrscheinlichkeit p≤1p\leq1 gilt −log⁡p≥0-\log p\geq0, und der Wert wächst unbegrenzt, wenn pp sich 0 nähert, sodass eine selbstsichere falsche Vorhersage teuer ist.

Log-Sum-Exp bedeutet: jeden Score ziz_i exponenzieren, die Ergebnisse addieren, dann den Logarithmus nehmen. log⁡∑iezi\log\sum_i e^{z_i} direkt zu berechnen kann überlaufen, wenn ein Score groß ist. Suchen Sie stattdessen den größten Score und nennen Sie ihn mm. Die Notation m=max⁡izim=\max_i z_i bedeutet „alle Einträge ziz_i vergleichen und den größten nehmen“; in NumPy m = z.max().

Ziehen Sie mm vor dem Exponenzieren von jedem Score ab und addieren Sie es nach dem Logarithmus wieder hinzu:

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

Für z=(1000,1001)z=(1000,1001) ist der größte Score m=1001m=1001. Die verschobenen Scores sind (−1,0)(-1,0), die Rechnung wird also zu 1001+log⁡(e−1+1)≈1001.3131001+\log(e^{-1}+1)\approx1001.313. Keine der Exponentialfunktionen ist größer als 1. Der Attention-Code verwendet vor dem Softmax dieselbe Subtraktion; dort kürzt sich der gemeinsame Faktor in der Division heraus, sodass nichts wieder addiert wird.

Bedingte Wahrscheinlichkeit und die Wahrscheinlichkeit von Text

pθ(y∣x)p_\theta(y\mid x) ist die Wahrscheinlichkeit, die das Modell mit den Parametern θ\theta der Ausgabe yy bei gegebener Eingabe xx zuweist. Der Index benennt die Parameter; manche Paper schreiben p(y∣x;θ)p(y\mid x;\theta), wobei das Semikolon ebenfalls Parameter statt einer Bedingung markiert. Mit einem Punkt anstelle der Ausgabe ist pθ(⋅∣x)p_\theta(\cdot\mid x) die ganze Verteilung über Ausgaben statt einer einzelnen Zahl. RL-Paper schreiben dasselbe Objekt als πθ(o∣q)\pi_\theta(o\mid q), die Wahrscheinlichkeit, dass das Modell die Antwort oo auf die Frage qq schreibt, und nennen das Modell eine Policy.

Vertauscht man Ereignis und Bedingung, ergibt sich eine andere Zahl. Angenommen, 100 Modellantworten: 60 sind korrekt, 50 sind gültiges JSON, und 40 sind beides. Dann gilt

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}

Sei AA „die Antwort ist korrekt“ und BB „die Antwort ist gültiges JSON“. Die bedingte Wahrscheinlichkeit beschränkt die Zählung auf Antworten, die die Bedingung erfüllen: P(A∣B)=P(A∩B)/P(B)P(A\mid B)=P(A\cap B)/P(B), sofern P(B)>0P(B)>0. Das Symbol ∩\cap bedeutet „beide Ereignisse treten ein“. Hier ist der Bruch 0.4/0.5=0.80.4/0.5=0.8, dasselbe wie 40 korrekte Antworten unter 50 Antworten mit gültigem JSON.

Zwei Ereignisse sind unabhängig, wenn das Wissen, dass das eine eingetreten ist, die Wahrscheinlichkeit des anderen nicht ändert. Das verlangt P(A∩B)=P(A)P(B)P(A\cap B)=P(A)P(B). In dieser Stichprobe ist P(both)=0.4P(\text{both})=0.4, während P(correct)P(valid JSON)=0.6×0.5=0.3P(\text{correct})P(\text{valid JSON})=0.6\times0.5=0.3 ist; die beobachteten Anteile erfüllen die Unabhängigkeit also nicht.

Der Satz von Bayes, auch Bayes-Regel genannt, setzt die beiden Richtungen der Bedingung in Beziehung: P(A∣B)=P(B∣A)P(A)/P(B)P(A\mid B)=P(B\mid A)P(A)/P(B). Er erlaubt es, die Wahrscheinlichkeit von AA gegeben BB aus der Wahrscheinlichkeit von BB gegeben AA und den Wahrscheinlichkeiten der beiden Ereignisse zu berechnen. Das ELBO-Beispiel nutzt ihn, um die Wahrscheinlichkeit eines verborgenen Codes bei einem beobachteten Bild zu finden.

Ein Sprachmodell bewertet eine Sequenz Token für Token. Nach der Kettenregel der Wahrscheinlichkeit gilt

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}

Jeder Faktor ist durch alle früheren Tokens bedingt, die Formel nimmt also nicht an, dass Tokens unabhängig sind. Haben drei Tokens die bedingten Wahrscheinlichkeiten 0.5, 0.2 und 0.1:

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}

Der übliche Trainings-Loss ist das Negative dieser Summe, geteilt durch die Länge:

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}).

Beim Training stammen die früheren Tokens y<ty_{<t} aus dem Dataset. Bei der Generierung sind es die eigenen früheren Entscheidungen des Modells.

Erwartungswerte und woher die Samples kommen

Ein Erwartungswert ist ein wahrscheinlichkeitsgewichteter Mittelwert:

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

Lesen Sie Ex∼p[f(x)]\mathbb E_{x\sim p}[f(x)] als „den Mittelwert von f(x)f(x), wenn xx aus pp gezogen wird“. Die Notation ∑x\sum_x summiert über alle möglichen diskreten Werte von xx. Ohne Index mittelt E[X]\mathbb E[X] eine Zufallsvariable XX über ihre eigene Verteilung: Ist XX mit Wahrscheinlichkeit 0.75 gleich 1 und mit Wahrscheinlichkeit 0.25 gleich 3, dann ist E[X]=1×0.75+3×0.25=1.5\mathbb E[X]=1\times0.75+3\times0.25=1.5.

Hat eine Variable eine Dichte p(x)p(x), also Wahrscheinlichkeit pro Einheit von xx, ist der gewichtete Mittelwert ein Integral, ∫f(x)p(x) dx\int f(x)p(x)\,dx. Das dxdx kennzeichnet xx als die Integrationsvariable; ohne hier angegebene Grenzen deckt das Integral ihren gesamten Bereich ab. Das Dichtebeispiel erklärt Wahrscheinlichkeit pro Einheit und zeigt ein Integral als Fläche unter einer Kurve.

Trainingscode kann nicht über jede mögliche Eingabe summieren, deshalb sampelt und mittelt er: Ex∼p[f(x)]≈1N∑i=1Nf(xi)\mathbb E_{x\sim p}[f(x)]\approx\frac1N\sum_{i=1}^{N}f(x_i), wobei jedes xix_i unabhängig aus pp gezogen wird, was Paper als xi∼iidpx_i\overset{\text{iid}}{\sim}p schreiben. Paper nennen das eine Monte-Carlo-Schätzung, und im Code ist es loss.mean() über einen Batch. Der Batch-Mittelwert schätzt den Erwartungswert nur, wenn der Batch aus der Verteilung im Index des E\mathbb E gezogen wird, der Index sagt Ihnen also, wie die Trainingsdaten entstehen:

  • DPO mittelt über gespeicherte Beispiele (x,yw,yl)∼D(x,y_w,y_l)\sim\mathcal D: einen Prompt, eine bevorzugte Antwort und eine abgelehnte Antwort. Die Antworten werden vor dieser Trainingsphase gesammelt und gelabelt; sie können aus früherer Modellgenerierung stammen. In jedem Trainingsschritt berechnet das Modell Wahrscheinlichkeiten für diese vorgegebenen Antworten und aktualisiert seine Gewichte. Es sampelt für diesen Schritt keine frischen Antworten.
  • GRPO in DeepSeek-R1: Antworten erzeugen, dann ihre Belohnungen vergleichen. Das Training zieht eine Frage aus dem Dataset, erzeugt mehrere Antworten und bewertet sie mit einer Belohnungsfunktion, etwa durch Prüfen eines mathematischen Ergebnisses oder Ausführen von Unit-Tests. Das Update bevorzugt Antworten, die über dem Gruppendurchschnitt lagen. Die Notation q∼P(Q)q\sim P(Q) bedeutet „ziehe eine Frage qq aus der Fragenverteilung“. Die Notation {oi}∼πθold(O∣q)\{o_i\}\sim\pi_{\theta_{old}}(O\mid q) bedeutet „ziehe Antworten oio_i auf diese Frage aus der Modellkopie namens πθold\pi_{\theta_{old}}“. Der Index old markiert die Kopie, die diese Antworten erzeugt hat; diese Kopie bleibt fest, solange der Batch für Updates verwendet wird. Der GRPO-Walkthrough erklärt den Belohnungsvergleich und die Updates.
  • On-Policy-Distillation in MiniLLM und DeepSeek-V4: Text erzeugen, dann aus den Wahrscheinlichkeiten des Teachers lernen. Das Modell, das trainiert wird, ist der Student. Er erzeugt Text; ein eingefrorener Teacher liefert Wahrscheinlichkeiten für das nächste Token für dieselben Präfixe, und das Training verschiebt die Wahrscheinlichkeiten des Students in Richtung der des Teachers. Diese Wahrscheinlichkeiten liefern das Trainingssignal, statt GRPOs Belohnungs-Score für eine Antwort. MiniLLM schreibt vom Student gesampelten Text als y∼qθy\sim q_\theta: yy ist der Text und qθq_\theta benennt das Student-Modell. DeepSeek-V4 nennt seinen Student πθ\pi_\theta und verwendet mehrere spezialisierte Teacher. Das tatsächliche Sampling-Verfahren von MiniLLM mischt außerdem Tokens bei, die aus dem Teacher gezogen werden. Der Distillation-Walkthrough erklärt die Zielfunktionen und diese Sampling-Unterscheidung.

Die Reihenfolge sagt, was das Training optimiert. Angenommen, ein Modell weist den korrekten Ausgaben zweier gleich gewichteter Trainingsbeispiele die Wahrscheinlichkeiten 0.9 und 0.1 zu. Ihre Log-Wahrscheinlichkeiten zu mitteln heißt, zuerst jeden Logarithmus zu nehmen und dann zu mitteln: np.log(probs).mean(). Den Logarithmus ihres Mittelwerts zu nehmen heißt np.log(probs.mean()). Ist XX die Wahrscheinlichkeit, die der korrekten Ausgabe eines zufällig gewählten Beispiels zugewiesen wird:

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}

Negiert man diese Scores, ergeben sich Losses von 1.20 und 0.69. Ein zweites Modell, das jeder korrekten Ausgabe 0.5 zuweist, erhält bei beiden Rechnungen 0.69. Mittelt man also Wahrscheinlichkeiten vor dem Logarithmus, werden die beiden Modelle als gleich gut behandelt, während die übliche mittlere negative Log-Wahrscheinlichkeit das erste Modell stärker für seine niedrige Wahrscheinlichkeit bei der zweiten korrekten Ausgabe bestraft. Wenn Sie einen Loss in Code übersetzen, behalten Sie die Reihenfolge von Logarithmus und Mittelwert bei.

Die Jensensche Ungleichung formuliert die allgemeine Beziehung für positives XX: E[log⁡X]≤log⁡E[X]\mathbb E[\log X]\leq\log\mathbb E[X]. Sie hilft auch beim Konstruieren alternativer Trainingsziele. Wenn die Datenwahrscheinlichkeit eines Modells einen teuren Mittelwert über verborgene Variablen erfordert, kann ein Mittelwert von Log-Termen eine untere Schranke liefern, die leichter zu schätzen ist. Der ELBO-Walkthrough erklärt dieses Trainingsproblem; ELBO steht für evidence lower bound. Abschnitt 2.4 von Tianhua Chens The Little Book of Generative AI Foundations leitet die Schranke mit der Jensenschen Ungleichung her.

Dichten, Varianz und Fehlerbalken

p(x)p(x) hat zwei gängige Bedeutungen. Für diskrete Ergebnisse wie Tokens oder Klassen gibt es die Wahrscheinlichkeit des Ergebnisses xx an: eine Zahl von 0 bis 1, wobei sich die Wahrscheinlichkeiten über alle Ergebnisse zu 1 summieren.

Um die andere Bedeutung zu verstehen, nehmen Sie an, XX wird gleichverteilt zwischen 0 und 0.5 gewählt. Intervalle gleicher Länge haben gleiche Wahrscheinlichkeiten. Das Intervall von 0.1 bis 0.2 nimmt ein Fünftel des gesamten Bereichs ein, also

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.

In diesem Bereich ist die Wahrscheinlichkeit die Breite des Intervalls mal 2. Dieser Faktor ist die Wahrscheinlichkeitsdichte: p(x)=2p(x)=2 für 0≤x≤0.50\leq x\leq0.5 und null außerhalb. Die Dichte beschreibt Wahrscheinlichkeit pro Einheit der Variablen, nicht die Wahrscheinlichkeit eines exakten Wertes.

Wahrscheinlichkeit null für einen Punkt heißt nicht, dass nichts gesampelt wird. Verengen Sie ein Intervall um 0.15: Seine Wahrscheinlichkeit ist das Doppelte seiner Breite und nähert sich null, wenn die Breite gegen null geht. Der einzelne exakte Punkt hat daher Wahrscheinlichkeit null. Eine Ziehung liefert trotzdem irgendeinen Wert in [0,0.5][0,0.5], und dieses ganze Intervall hat Wahrscheinlichkeit 1. Wenn Sie das Ergebnis auf zwei Dezimalstellen gerundet aufzeichnen, steht ein aufgezeichneter Wert von 0.15 für das Intervall von 0.145 bis 0.155, dessen Wahrscheinlichkeit 2×0.01=0.022\times0.01=0.02 ist.

Bei einer nicht gleichförmigen Dichte variiert der Faktor mit xx. Das Integral addiert die Beiträge über das Intervall:

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

Geometrisch ist das die Fläche unter der Dichtekurve zwischen aa und bb; die Fläche über den ganzen Bereich ist 1. Im gleichförmigen Beispiel ist die Fläche einfach Höhe 2 mal Breite 0.5. Eine Dichte kann also größer als 1 sein, und ihr Logarithmus kann positiv sein, wie hier log⁡2≈0.69\log2\approx0.69. Eine Wahrscheinlichkeit ist nie größer als 1.

Die Gauß-Verteilung, die in DDPM für das Rauschen verwendet wird, hat eine Dichte dieser Art. Nicht jede stetige Verteilung hat eine gewöhnliche Dichte: Die Cantor-Verteilung ist ein mathematisches Gegenbeispiel, außerhalb der hier besprochenen Modelle. Auch reellwertige Speicherung bedeutet keine stetige Verteilung: Eine Variable, die auf 0.0 und 1.0 beschränkt ist, hat weiterhin zwei diskrete Ergebnisse.

Paper verwenden oft denselben Buchstaben für Wahrscheinlichkeiten und Dichten. Prüfen Sie, wie das Paper die Verteilung der Variablen definiert und über welche Variable summiert oder integriert wird. Ein Integral über eine verborgene Variable zz, etwa den latenten Code im ELBO von Teil 4, sagt Ihnen nicht, ob ein beobachtetes xx diskret oder stetig ist. Manche Paper schreiben großes PP für Wahrscheinlichkeiten und kleines pp für Dichten, viele verwenden aber pp für beides.

Um zu beschreiben, wie stark eine Verteilung um ihren Mittelwert streut, verwenden Paper die Varianz: den mittleren quadrierten Abstand vom Mittelwert, Var⁡(X)=E[(X−μ)2]\operatorname{Var}(X)=\mathbb E[(X-\mu)^2], wobei μ=E[X]\mu=\mathbb E[X]. Die Standardabweichung ist ihre Quadratwurzel und hat daher dieselbe Einheit wie XX.

Diese Größen tauchen auch in Verteilungsnamen auf. Die Gauß-Verteilung, auch Normalverteilung genannt, wird N(μ,σ2)\mathcal N(\mu,\sigma^2) geschrieben: μ\mu ist ihr Mittelwert und σ2\sigma^2 ihre Varianz. Für einen Vektor verwendet N(μ,Σ)\mathcal N(\mu,\Sigma) eine Kovarianzmatrix Σ\Sigma: Der Eintrag (i,j)(i,j) misst, wie die Koordinaten ii und jj gemeinsam variieren, und die Diagonale enthält ihre Varianzen. N(0,I)\mathcal N(0,I) beschreibt einen Vektor unabhängiger standardnormalverteilter Zahlen, jede mit Mittelwert 0 und Varianz 1; II ist die Einheitsmatrix.

Benchmark-Tabellen geben oft einen Durchschnittswert zusammen mit einem Streuungsmaß an. Die Streuung einzelner Läufe unterscheidet sich von der Unsicherheit ihres Durchschnitts: Für NN unabhängige Läufe mit Standardabweichung σ\sigma ist der Standardfehler des Mittelwerts σ/N\sigma/\sqrt N.

Bevor Sie zwei Einträge wie 82.3±0.482.3\pm0.4 und 81.5±0.481.5\pm0.4 vergleichen, finden Sie in der Beschriftung heraus, ob 0.4 eine Standardabweichung über Läufe, ein Standardfehler oder die halbe Breite eines Konfidenzintervalls ist. Um die Mittelwerte zu vergleichen, berechnen Sie ein Intervall für ihre Differenz. Ein 95-%-Konfidenzintervallverfahren erzeugt Bereiche, die die wahre Differenz in 95 % der wiederholten Experimente unter seinen Annahmen enthalten.

Für dieses Beispiel nehmen Sie vier unabhängige Läufe pro Modell, annähernd normalverteilte Lauf-Scores und gleiche Populationsvarianzen an. Sind die Läufe gepaart, etwa zwei Modelle, die auf denselben unabhängig gezogenen Aufgaben ausgewertet wurden, analysieren Sie stattdessen die Differenzen innerhalb der Paare. Der NIST-Leitfaden zu Zwei-Stichproben-Tests erklärt diese Fälle.

Bei unabhängigen Mittelwerten ist die Varianz ihrer Differenz die Summe ihrer Varianzen. Eine standardnormalverteilte Variable liegt mit Wahrscheinlichkeit von etwa 0.95 zwischen −1.96-1.96 und 1.961.96, was den Faktor für eine Normalapproximation eines 95-%-Intervalls liefert. Ist 0.4 die Standardabweichung über vier Läufe, ergibt diese erste Rechnung:

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}

Dieser Faktor 1.96 behandelt die geschätzte Streuung als bekannt. Bei nur vier Läufen pro Modell verwenden Sie die Student-t-Verteilung, um die Unsicherheit der Streuung zu berücksichtigen. Unter den obigen Annahmen sind ihre Freiheitsgrade 4+4−2=64+4-2=6 (acht Läufe minus zwei geschätzte Mittelwerte). scipy.stats.t.ppf(0.975, 6) liefert etwa 2.447 statt 1.96; 0.975 lässt 2.5 % an jedem Ende eines 95-%-Intervalls außerhalb. Ist die Annahme gleicher Varianzen ungeeignet, verwenden Sie ein Welch-Intervall, dessen Freiheitsgrade anders berechnet werden.

Betrachten Sie nun die andere Lesart der Beschriftung: 0.4 ist bereits der Standardfehler jedes Mittelwerts, geschätzt aus diesen vier Läufen. Es wird nichts durch 4\sqrt4 geteilt, und der Standardfehler der Differenz beträgt etwa 0.566. Der t-Faktor wird weiterhin gebraucht. Die beiden Lesarten ergeben:

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}

Die Abbildung vergleicht die anfängliche Normalapproximation mit den beiden t-Intervallen:

Drei Intervalle für dieselbe Differenz von 0.8, unter der Annahme von vier unabhängigen, annähernd normalverteilten Läufen pro Modell und gleichen Populationsvarianzen. Mit 0.4 als Standardabweichung ergibt die Normalapproximation 0.25 bis 1.35 und das t-Intervall 0.11 bis 1.49. Mit 0.4 als geschätztem Standardfehler ergibt das t-Intervall minus 0.58 bis 2.18 und enthält null.Drei Intervalle für dieselbe Differenz von 0.8, unter der Annahme von vier unabhängigen, annähernd normalverteilten Läufen pro Modell und gleichen Populationsvarianzen. Mit 0.4 als Standardabweichung ergibt die Normalapproximation 0.25 bis 1.35 und das t-Intervall 0.11 bis 1.49. Mit 0.4 als geschätztem Standardfehler ergibt das t-Intervall minus 0.58 bis 2.18 und enthält null.

Ist 0.4 die Standardabweichung, schließt das t-Intervall null aus: Unter diesen Annahmen stützen die Ergebnisse eine positive Differenz. Ist 0.4 der geschätzte Standardfehler, enthält das Intervall null, die Ergebnisse stellen also nicht fest, welches Modell den höheren mittleren Score hat.

Kreuzentropie und KL-Divergenz

Beim Training braucht ein Modell einen numerischen Loss, der misst, wie gut seine vorhergesagten Wahrscheinlichkeiten mit dem Trainingsziel übereinstimmen. Der Trainingsalgorithmus ändert die Parameter des Modells, um diesen Loss zu senken. Die Kreuzentropie liefert einen solchen Loss für gelabelte Beispiele oder die Wahrscheinlichkeiten eines Teacher-Modells. Die Kullback-Leibler-Divergenz (KL) misst die Abweichung zwischen zwei Verteilungen. Paper verwenden sie, um einen Student zum Nachahmen eines Teachers zu trainieren oder Abweichungen von einem festen Referenzmodell zu bestrafen.

Hier sind die Ergebnisse diskret, etwa Tokens oder Klassen. Schreiben Sie die Zielverteilung als pp und die vorhergesagte Verteilung des Modells über dieselben Ergebnisse als qq. Beginnen Sie mit einem beobachteten Ergebnis ii: Hat das Modell ihm die Wahrscheinlichkeit qiq_i gegeben, ist sein Loss −log⁡qi-\log q_i. Er ist 0 für qi=1q_i=1, etwa 0.69 für qi=0.5q_i=0.5, etwa 2.3 für qi=0.1q_i=0.1 und unendlich für qi=0q_i=0.

Die Kreuzentropie mittelt diesen Loss über Ergebnisse, die aus dem Ziel gezogen werden:

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.

Bei einem One-Hot-Label pp, das auf der korrekten Klasse yy gleich 1 und sonst 0 ist, zählt nur die korrekte Klasse, und H(p,q)=−log⁡qyH(p,q)=-\log q_y: der gewöhnliche Klassifikations-Loss. PyTorchs nn.CrossEntropyLoss berechnet ihn aus rohen Modell-Scores, den Logits, und wendet intern Log-Softmax an; seine Eingabe ist nicht der Wahrscheinlichkeitsvektor qq. Mit der weichen Verteilung eines Teacher-Modells als pp zählt jede Klasse proportional zur Wahrscheinlichkeit des Teachers. Klassische Distillation trainiert auf diese Weise ein kleines Modell auf den Wahrscheinlichkeiten eines großen. Für das Ziel p=(0.9,0.1)p=(0.9,0.1) haben zwei Modelle diese Kreuzentropien 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}

Das zweite Modell trifft das Ziel, und kein Modell kann besser abschneiden. Dieses Minimum, hier 0.325, ist H(p)=−∑ipilog⁡piH(p)=-\sum_ip_i\log p_i, die Entropie von pp. Sie ist nur für ein One-Hot-Ziel 0: Ist das Ziel selbst unsicher, bleibt ein Loss, den kein Modell beseitigen kann.

Die KL-Divergenz zieht dieses Minimum ab und behält nur den Loss, der dadurch entsteht, dass qq von pp abweicht. Sie wird mit einem doppelten Strich ∥\Vert geschrieben, der nur die beiden Argumente trennt; er ist weder der Strich ∣\mid der bedingten Wahrscheinlichkeit aus Bedingte Wahrscheinlichkeit und die Wahrscheinlichkeit von Text noch die Längenstriche ∥x∥\Vert x\Vert der Vektoren-Referenz. Paper verwenden ihn statt eines Kommas, um zu markieren, dass die Reihenfolge zählt: Der Mittelwert läuft über Ergebnisse, die aus dem ersten Argument gezogen werden.

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].

Für das erste Modell oben ist es 0.693−0.325≈0.370.693-0.325\approx0.37. Die KL ist 0, wenn die beiden Verteilungen übereinstimmen, und sonst positiv.

Die Reihenfolge ändert, welche Abweichungen bestraft werden. Ein Term mit pi>0p_i>0 und qi=0q_i=0 ist unendlich, daher bestraft DKL(p∥q)D_{\mathrm{KL}}(p\Vert q) qq dafür, irgendetwas, das pp erzeugen kann, die Wahrscheinlichkeit null zuzuweisen. Ergebnisse mit pi=0p_i=0 tragen nichts bei (per Konvention 0log⁡0=00\log0=0), sie verursachen also keine direkte Strafe, selbst wenn qi>0q_i>0. Vertauscht man die Argumente, erhält man DKL(q∥p)D_{\mathrm{KL}}(q\Vert p), das überall unendlich ist, wo qi>0q_i>0 und pi=0p_i=0. Ergebnisse mit qi=0q_i=0 tragen nun nichts bei, selbst wenn pi>0p_i>0. Mit pp als Ziel heißt DKL(p∥q)D_{\mathrm{KL}}(p\Vert q) die Forward-KL und DKL(q∥p)D_{\mathrm{KL}}(q\Vert p) die Reverse-KL.

Für p=(0.5,0.5)p=(0.5,0.5) und q=(1,0)q=(1,0) ist die Forward-KL unendlich, weil qq ein Ergebnis verfehlt, das pp erzeugt, während die Reverse-KL nur 1×log⁡(1/0.5)+0=log⁡21\times\log(1/0.5)+0=\log2 beträgt: Das Ergebnis, das qq überspringt, trägt nichts bei. Für p=(0.9,0.1)p=(0.9,0.1) und q=(0.5,0.5)q=(0.5,0.5) ist die Forward-KL die oben gefundene 0.37, hier Term für Term berechnet, und die Reverse-KL unterscheidet sich:

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}

Diese Asymmetrie ist der Grund, warum die KL eine Divergenz heißt und kein Abstand.

Weil H(p,q)=H(p)+DKL(p∥q)H(p,q)=H(p)+D_{\mathrm{KL}}(p\Vert q) gilt und die Entropie H(p)H(p) eines festen Teachers nicht vom Student abhängt, liefert die Kreuzentropie gegen einen festen Teacher dem Student dieselben Gradienten wie DKL(p∥q)D_{\mathrm{KL}}(p\Vert q). Ändert man einen Student-Parameter, ändern sich beide Losses um denselben Betrag, ihre fürs Training verwendeten Ableitungen sind also gleich; Gradienten und Optimierung erklärt diese Rechnung. Deshalb darf Klassifikations- und klassischer Distillation-Code die Kreuzentropie verwenden. Der Tausch funktioniert nur mit dem Teacher an erster Stelle. Mit dem Student an erster Stelle ist DKL(q∥p)=H(q,p)−H(q)D_{\mathrm{KL}}(q\Vert p)=H(q,p)-H(q), und die eigene Entropie H(q)H(q) des Students ändert sich während des Trainings, sodass beide nicht mehr dieselben Gradienten liefern.

Vektoren und Matrizen

Architekturgleichungen beschreiben Berechnungen auf Arrays von Zahlen. Die Form eines Arrays sagt Ihnen, wie seine Zahlen angeordnet sind, welche Operationen gültig sind und was sie ergeben. Ein Vektor ist eine geordnete Liste von Zahlen. Eine Matrix ordnet Zahlen in Zeilen und Spalten an. In ML-Code ist Tensor der allgemeine Begriff für diese numerischen Arrays, einschließlich Arrays mit mehr als zwei Achsen. Eine Achse ist eine Dimension, entlang der man das Array indiziert: Eine Matrix hat eine Zeilenachse und eine Spaltenachse.

Der Hidden State eines Tokens ist ein Vektor von Zahlen, der im Modell berechnet wird, um dieses Token darzustellen. Angenommen, wir verarbeiten einen Batch von BB Sequenzen gemeinsam, jede mit TT Token-Positionen, und jeder Hidden State enthält dd Zahlen. Das Hidden-State-Array hat die Form [B, T, d], was Paper auch als B×T×dB\times T\times d schreiben. Seine drei Achsen wählen die Sequenz, die Token-Position und die Zahl innerhalb des Vektors dieses Tokens aus. Zum Beispiel enthält [2, 3, 4] zwei Sequenzen, drei Token-Vektoren pro Sequenz und vier Zahlen pro Vektor: insgesamt 24 Zahlen. Hier ist dd die Breite des Vektors. Die Form listet die drei Größen auf; ihr Produkt ergibt die Anzahl der Einträge.

Paper schreiben Formen oft als Mengenzugehörigkeit: a∈Rda\in\mathbb R^d bedeutet, dass aa ein Vektor aus dd reellen Zahlen ist, und A∈Rm×nA\in\mathbb R^{m\times n}, dass AA eine Matrix mit mm Zeilen und nn Spalten ist. Fettgedruckte Buchstaben kennzeichnen manchmal Vektoren oder Tensoren, aber die Definition im Paper bestimmt die Form.

In der Tabelle unten sind aa und bb Spaltenvektoren: Ihre Zahlen sind vertikal angeordnet. Das hochgestellte ⊤\top bedeutet Transponierte: Zeilen und Spalten vertauschen. a⊤a^\top ist also eine Zeile mit denselben Zahlen wie die Spalte aa. Die Großbuchstaben AA und BB bezeichnen hier Matrizen; BB bedeutet nicht mehr die Batch-Größe.

AusdruckVerwendete WerteWas die Operation tutErgebnis
a⊤ba^\top b — SkalarproduktZwei Spaltenvektoren mit je dd EinträgenEntsprechende Einträge multiplizieren, dann die Produkte addieren: ∑iaibi\sum_i a_i b_iEine Zahl
ab⊤ab^\top — äußeres ProduktEine Spalte aa mit mm Einträgen und eine Spalte bb mit nn EinträgenJeden Eintrag von aa mit jedem Eintrag von bb multiplizierenEine m×nm\times n-Matrix; Eintrag (i,j)(i,j) ist aibja_i b_j
ABAB — MatrixproduktAA mit mm Zeilen und kk Spalten; BB mit kk Zeilen und nn SpaltenFür Eintrag (i,j)(i,j) die entsprechenden Zahlen in Zeile ii von AA und Spalte jj von BB multiplizieren, dann addierenEine m×nm\times n-Matrix; die Spaltenzahl von AA muss der Zeilenzahl von BB entsprechen
A⊙BA\odot B — elementweises ProduktZwei Arrays derselben FormEinträge an übereinstimmenden Positionen multiplizieren, ohne sie zu addierenEin Array derselben Form
[a;b][a;b] — KonkatenationSpalten aa und bb mit mm und nn EinträgenDie Einträge von bb hinter die von aa setzenEine Spalte mit m+nm+n Einträgen; die Konvention des Papers für die Verbindungsachse prüfen

Für einen konkreten Vergleich nehmen Sie a=(12)a=\begin{pmatrix}1\\2\end{pmatrix} und b=(34)b=\begin{pmatrix}3\\4\end{pmatrix}. Das Verschieben der Transponierten ändert sowohl die Rechnung als auch das Ergebnis:

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}

Das Skalarprodukt liefert einen Score, wie beim Query-Key-Vergleich in Attention. Das äußere Produkt behält für jedes Paar von Einträgen einen eigenen Wert; das Update von Gated DeltaNet nutzt es, um aus zwei Vektoren ein Matrix-Update zu bilden.

Ein Matrixprodukt lässt sich umgruppieren, (AB)C=A(BC)(AB)C=A(BC), aber nicht umordnen; die MLA-Herleitung nutzt das Umgruppieren, um das Neuaufbauen der Keys zu überspringen. NumPy schreibt die Matrixmultiplikation als @ und das elementweise Produkt als *. Paper übernehmen nicht NumPys Broadcasting-Regeln: Das Addieren eines Vektors zu einer Matrix braucht eine angegebene Achse. Paper unterscheiden sich auch darin, ob ein Vektor eine Zeile oder eine Spalte ist: Attention stapelt Tokens als Zeilen von QQ, während MLA, Gated DeltaNet und LoRA WhWh mit Spaltenvektoren schreiben und PyTorchs nn.Linear x @ W.T auf Zeilen berechnet.

Eine Architekturgleichung kann auch die Größe eines Vektors beschreiben, einschränken, welche Matrizen erlaubt sind, oder ein Produkt umordnen:

NotationBedeutung
∥x∥2=∑ixi2\Vert x\Vert_2=\sqrt{\sum_i x_i^2}Die euklidische Länge; ∥x∥2\Vert x\Vert^2, ohne die Wurzel, kommt in DDPMs Loss vor
∥x∥1=∑i∣xi∣\Vert x\Vert_1=\sum_i\vert x_i\vertDie Summe der Absolutbeträge
∥A∥2\Vert A\Vert_2Die Spektralnorm: der größte Faktor, um den AA die Länge eines Vektors vergrößert; mHC hält sie bei höchstens 1
rank⁡(A)\operatorname{rank}(A)Die Anzahl der unabhängigen Spalten; das Update von LoRA hat Rang höchstens rr
det⁡A\det ADie Determinante: ∣det⁡A∣\vert\det A\vert ist der Faktor, um den AA Volumen skaliert, und das Vorzeichen zeigt an, ob AA die Orientierung umkehrt; das Change-of-Variables-Beispiel in Anhang B dieses Artikels verwendet sie
A≥0A\geq0Jeder Eintrag ist nichtnegativ, wie in mHC; A⪰0A\succeq0 ist eine andere Bedingung, positiv semidefinit: x⊤Ax≥0x^\top Ax\geq0 für jedes xx
II, 1n\mathbf 1_nDie Einheitsmatrix (1 auf der Diagonale, sonst 0, also Ix=xIx=x); ein Vektor aus nn Einsen
(AB)⊤=B⊤A⊤(AB)^\top=B^\top A^\topDas Transponieren eines Produkts kehrt die Reihenfolge um; die RoPE- und MLA-Abschnitte von Teil 2 verwenden das

Gradienten und Optimierung

Das Training nutzt Ableitungen, um zu entscheiden, wie die Parameter des Modells geändert werden. Sei L\mathcal L ein skalarer Loss und θ\theta der Vektor aller Parameter; θi\theta_i ist ein Eintrag in diesem Vektor.

Die partielle Ableitung ∂L/∂θi\partial\mathcal L/\partial\theta_i ist eine Zahl, ausgewertet an den aktuellen Parameterwerten. Sie misst die Änderungsrate des Losses, wenn sich nur θi\theta_i ändert und die anderen Parameter fest bleiben. Lesen Sie sie als „die partielle Ableitung des Losses nach dem Parameter θi\theta_i“.

Der Gradient ∇θL\nabla_\theta\mathcal L sammelt diese Zahlen für jeden Parameter in einem Vektor. Sein ii-ter Eintrag ist ∂L/∂θi\partial\mathcal L/\partial\theta_i. Das Symbol ∇\nabla heißt Nabla; hier bedeutet es „bilde den Gradienten“. Bei nur einem Parameter hat der Gradient einen Eintrag, der der gewöhnlichen Ableitung entspricht.

Nehmen Sie als Beispiel L(θ1,θ2)=θ12+3θ22\mathcal L(\theta_1,\theta_2)=\theta_1^2+3\theta_2^2. Bei θ1=2\theta_1=2 und θ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}

Die erste partielle Ableitung, 4, bedeutet: Erhöht man θ1\theta_1 um 0.01, steigt der Loss um etwa 0.04, während θ2\theta_2 fest bleibt. Der Gradient enthält diese Information für beide Parameter. Gradient Descent zieht die Ableitung jedes Parameters ab, multipliziert mit einer positiven Lernrate η\eta, die die Schrittweite steuert:

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

Mit η=0.1\eta=0.1 ändert sich das Beispiel von (2,1)(2,1) zu (1.6,0.4)(1.6,0.4), und der Loss fällt von 7 auf 3.04. Bei einem differenzierbaren Loss mit nichtverschwindendem Gradienten senkt ein ausreichend kleiner Schritt den Loss. Ein Gradient null ergibt kein Update.

Der Index an ∇\nabla sagt, was variiert. ∇θlog⁡pθ(x)\nabla_\theta\log p_\theta(x) variiert die Parameter; ∇xlog⁡pθ(x)\nabla_x\log p_\theta(x) variiert die Eingabe, und Diffusions-Paper nennen ihn den Score, der nichts mit einem Benchmark-Score zu tun hat.

Eine Jacobi-Matrix hält Ableitungen für mehrere Ausgaben fest. Eine Schicht eines neuronalen Netzes kann viele Zahlen erzeugen, etwa die Komponenten des Hidden State eines Tokens. Um zu beschreiben, wie jede Ausgabe auf jede Eingabe reagiert, sammelt man die partiellen Ableitungen in einer Matrix, der Jacobi-Matrix. Für y=f(x)y=f(x) mit nn Eingabezahlen und mm Ausgabezahlen hat sie die Form m×nm\times n: Zeilen entsprechen Ausgaben, Spalten Eingaben, und der Eintrag Jij=∂yi/∂xjJ_{ij}=\partial y_i/\partial x_j misst, wie sich Ausgabe ii ändert, wenn sich Eingabe jj ändert.

Eine Funktion nehme zum Beispiel zwei Zahlen und gebe y1=x1+2x2y_1=x_1+2x_2 und y2=3x1−x2y_2=3x_1-x_2 zurück. Ihre Jacobi-Matrix ist

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}

Die zweite Spalte sagt, dass eine Erhöhung von x2x_2 um 0.1 bei festem x1x_1 den Wert y1y_1 um 0.2 erhöht und y2y_2 um 0.1 senkt. Dieses Beispiel ist linear, seine Jacobi-Matrix ist also konstant. Bei einer nichtlinearen Funktion können die Einträge vom aktuellen Input abhängen und kleine Änderungen lokal beschreiben. Mit nur einer skalaren Ausgabe hat die Jacobi-Matrix eine Zeile: dieselben Ableitungen wie der Gradient, bei unserer Spaltenvektor-Konvention transponiert. Deep Learning, §4.3, gibt die allgemeinen Definitionen.

Backpropagation nutzt diese Ableitungen, um den Loss-Gradienten durch aufeinanderfolgende Schichten zu berechnen. Das Change-of-Variables-Beispiel in Anhang B dieses Artikels nutzt eine andere Eigenschaft: Der Absolutbetrag der Determinante einer quadratischen Jacobi-Matrix gibt den lokalen Volumenskalierungsfaktor an, der zum Anpassen einer Wahrscheinlichkeitsdichte nötig ist.

Beim Training beschreiben Ableitungen lokale Änderungen; ein Optimierungsziel legt fest, was die Updates minimieren oder maximieren sollen. Paper unterscheiden den besten Wert einer Zielfunktion von den Parametern, die ihn erreichen: min⁡θf(θ)\min_\theta f(\theta) ist der kleinste Wert von ff, während arg min⁡θf(θ)\operatorname*{arg\,min}_\theta f(\theta) die Parameterwerte angibt, die ihn erreichen. Für f(θ)=(θ−3)2f(\theta)=(\theta-3)^2 ist das Minimum 0 und das Argmin 3. Ein Argmin legt das gewünschte Ergebnis fest, lässt aber den Update-Algorithmus offen.

MiniLLM schreibt sein Ziel zum Beispiel als θ=arg min⁡θDKL(qθ∥p)\theta=\operatorname*{arg\,min}_\theta D_{\mathrm{KL}}(q_\theta\Vert p) (Gleichung 1), wobei qθq_\theta das Student-Modell ist und pp der Teacher, von dem es lernt. Abschnitt 2.2 leitet dann einen Gradienten her und ändert ihn, um das Training stabiler zu machen; Gleichung (7) ist der für Updates verwendete Gradient. Das On-Policy-Distillation-Beispiel erklärt diese Änderungen. Wer nur das Argmin liest, übersieht sie.

Ein Stop-Gradient, sg⁡(x)\operatorname{sg}(x), gibt xx unverändert weiter, blockiert aber Gradienten durch sich hindurch, wie .detach() in PyTorch. Zwei Ausdrücke mit demselben Vorwärtswert können unterschiedlich trainieren, wenn einer von ihnen abgetrennt ist. Im GRPO-Beispiel behandelt Hugging Face TRL die Log-Wahrscheinlichkeit des alten Modells als fest. In der von DeepSeek-V4 besprochenen Distillation-Abkürzung liefert ein abgetrenntes Teacher-Student-Log-Verhältnis ein festes Gewicht für das Update.

Mengen und Nebenbedingungen

Eine Nebenbedingung sagt, welche Werte erlaubt sind. Paper drücken Nebenbedingungen oft mit Mengen aus: Sammlungen verschiedener Elemente, in geschweiften Klammern geschrieben, etwa {1,2,3}\{1,2,3\}. Die Reihenfolge spielt keine Rolle, {3,1,2}\{3,1,2\} benennt also dieselbe Menge. Wiederholte Einträge zählen nur einmal. Dagegen beschreiben die runden Klammern bei einem Vektor wie (1,2,3)(1,2,3) eine geordnete Liste: (3,1,2)(3,1,2) ist ein anderer Vektor.

Sobald ein Paper eine Menge definiert, kann es Zugehörigkeit testen, Mengen kombinieren, ihre Elemente zählen oder eine Bedingung über sie aufstellen. Nehmen Sie A={1,2,3}A=\{1,2,3\} und B={3,4}B=\{3,4\}:

NotationBedeutungBeispiel und wie man es liest
x∈Ax\in AZugehörigkeit: xx gehört zu AA2∈A2\in A: 2 ist ein Element von AA
A∪BA\cup BVereinigung: jedes Element beider Mengen aufnehmenA∪B={1,2,3,4}A\cup B=\{1,2,3,4\}; die 3 nur einmal aufnehmen
A∩BA\cap BSchnittmenge: nur Elemente behalten, die beide Mengen gemeinsam habenA∩B={3}A\cap B=\{3\}
∣A∣\vert A\vertDie Anzahl der verschiedenen Elemente∣A∣=3\vert A\vert=3
∀\forall„Für jedes“: Eine Bedingung muss für alle genannten Elemente gelten∀x∈A: x>0\forall x\in A:\ x>0: Jedes Element von AA ist positiv
∃\exists„Es gibt“: Mindestens ein Element muss die Bedingung erfüllen∃x∈A: x>2\exists x\in A:\ x>2: AA hat ein Element größer als 2, nämlich 3

Die Formnotation aus Vektoren und Matrizen benennt ebenfalls Mengen: Rd\mathbb R^d ist die Menge aller Vektoren aus dd reellen Zahlen und Rn×d\mathbb R^{n\times d} die Menge aller reellen Matrizen mit nn Zeilen und dd Spalten. Q∈Rn×dkQ\in\mathbb R^{n\times d_k} legt also fest, welche Form QQ haben muss.

Die Mengenschreibweise mit Bedingung beschreibt eine Menge durch eine Bedingung: {x∈S∣condition}\{x\in S\mid\text{condition}\} liest sich „die Elemente von SS, die die Bedingung erfüllen“, wie die Python-Set-Comprehension {x for x in S if condition(x)}. Der Strich bedeutet „sodass“, nicht bedingte Wahrscheinlichkeit; manche Paper verwenden stattdessen einen Doppelpunkt. Beispiele in dieser Serie sind die erlaubten Matrizen von mHC, die ausgewählten Experten von MoE und die ausgewählten Tokens bei Sparse Attention.

DAPO, eine Trainingsmethode, die Gruppen erzeugter Antworten filtert, behält eine Frage nur, wenn einige Antworten korrekt und einige falsch sind. Für GG gesampelte Antworten o1,…,oGo_1,\ldots,o_G und die Referenzantwort aa schreibt man die Menge der Indizes korrekter Antworten als

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

Der Filter ist 0<∣C∣<G0<\vert C\vert<G. Die Verwendung von Indizes macht das Zählen explizit: Zwei Samples mit identischem Text zählen weiterhin als zwei Antworten. Das Paper von DAPO schreibt die Menge stattdessen über die Antworten oio_i; wörtlich als Menge von Texten gelesen, zählt diese Form zwei identische Antworten einmal.

Übungen

  1. Formen. QQ ist 4×84\times8, KK ist 6×86\times8 und VV ist 6×36\times3. Welche Formen haben die Scores und die Ausgabe? Über welche Achse läuft das Softmax?
  2. Softmax. Berechnen Sie das Softmax von (0,log⁡4)(0,\log4). Ändert das Addieren von 100 zu beiden Eingaben das Ergebnis?
  3. Mittelwerte. Eine Antwort hat ein einziges Token mit Loss 4; eine andere hat drei Tokens mit Loss 0. Berechnen Sie den Mittelwert pro Token und den Mittelwert pro Antwort.
  4. Bedingen. Von 200 Antworten sind 120 korrekt, 80 bestehen die Formatvalidierung und 60 beides. Bestimmen Sie P(correct∣valid)P(\text{correct}\mid\text{valid}) und P(valid∣correct)P(\text{valid}\mid\text{correct}).
  5. KL. Berechnen Sie für einen Teacher p=(1,0)p=(1,0) und einen Student q=(0.5,0.5)q=(0.5,0.5) beide KL-Richtungen.
  6. Mengen. DAPO behält eine Frage nur, wenn 0<∣C∣<G0<\vert C\vert<G, wobei CC die Indizes der korrekten Antworten unter GG Samples enthält. Behält es mit G=4G=4 eine Frage, deren Antworten (1,1,1,1)(1,1,1,1) erzielen? Eine, deren Antworten (1,0,1,1)(1,0,1,1) erzielen? Ändert sich die Antwort auf die erste Frage, wenn alle vier Samples identischen korrekten Text enthalten?

Antworten:

  1. Die Scores haben die Form 4×64\times6 und die Ausgabe 4×34\times3. Das Softmax läuft über die sechs Keys in der Zeile jeder Query.

  2. (1/5,4/5)(1/5,4/5). Das Addieren derselben Zahl zu jeder Eingabe lässt das Softmax unverändert, aber e100e^{100} direkt zu berechnen läuft in 32-Bit-Floats über.

  3. Die beiden Mittelwerte:

    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 und 60/120=0.560/120=0.5.

  5. DKL(p∥q)=log⁡2≈0.69D_{\mathrm{KL}}(p\Vert q)=\log2\approx0.69 und DKL(q∥p)=∞D_{\mathrm{KL}}(q\Vert p)=\infty, weil der Student einem Ergebnis Wahrscheinlichkeit zuweist, das der Teacher ausschließt.

  6. Nein: C={1,2,3,4}C=\{1,2,3,4\} hat vier Elemente, was GG entspricht. Ja: C={1,3,4}C=\{1,3,4\} hat drei Elemente, zwischen 0 und 4. Identischer Text ändert die erste Antwort nicht: Es sind vier getrennte Samples, ihre vier Indizes zählen also weiterhin.

Anhang A. Griechische Buchstaben

Die Rollen sind gängige Beispiele; jedes Paper definiert weiterhin selbst, was seine Symbole bedeuten.

BuchstabeNameGängige Rollen in ML-Papern
α\alphaalphaEin Mischgewicht oder ein Skalierungsfaktor; ein Zerfall (Gated DeltaNet); ein Rauschplan (DDPM)
β\betabetaEine Strafstärke (DPO, GRPO); eine Schreibstärke (Gated DeltaNet); ein Rauschplan (DDPM)
γ\gammagammaEin Diskontfaktor im RL; eine Schrittweite (das Bias-Update in DeepSeek-V3)
δ,Δ\delta,\DeltadeltaEine Differenz oder eine Änderung
ϵ,ε\epsilon,\varepsilonepsilonRauschen (DDPM); ein Clipping-Bereich (GRPO); ein kleiner Stabilisator
η\etaetaDie Lernrate
θ,Θ\theta,\ThetathetaModellparameter; die Rotationswinkel von RoPE
λ,Λ\lambda,\LambdalambdaEin Regularisierungsgewicht; ein Eigenwert
μ\mumuEin Mittelwert; die Anzahl der Gradientenschritte pro Batch in Algorithm 1 von DeepSeekMath
π,Π\pi,\PipiEine Policy; ∏\prod ist der Produktoperator
ρ\rhorhoEin Wahrscheinlichkeitsverhältnis, wie im GRPO-Abschnitt von Teil 3; eine Korrelation
σ,Σ\sigma,\SigmasigmaDie Sigmoid-Funktion (DPO); eine Standardabweichung; eine Kovarianz; ∑\sum ist der Summenoperator
τ\tautauEine Temperatur; ein Schwellenwert; eine Trajektorie im RL
ϕ,φ,Φ\phi,\varphi,\PhiphiDie Parameter eines zweiten Netzes, etwa eines Encoders; Features; ein Winkel
ψ,Ψ\psi,\PsipsiDie Parameter eines weiteren Netzes, etwa des Value Models VψV_\psi in DeepSeekMaths PPO
ω,Ω\omega,\OmegaomegaEine Frequenz; Ω\Omega ist außerdem eine untere Schranke in der Komplexität oder eine Ergebnismenge

Varianten wie ϕ/φ\phi/\varphi und ϵ/ε\epsilon/\varepsilon sind meist derselbe Buchstabe in einer anderen Schrift, ein Paper kann aber beide für verschiedene Variablen verwenden.

Anhang B. Weitere Gleichungsfamilien

Gleichungsformen, die diese Serie nicht durchrechnet, mit den Definitionen, die jede braucht:

Selektive Zustandsraummodelle. Ein Zustandsraummodell verarbeitet eine Sequenz, indem es in jedem Schritt einen gespeicherten Zustand aktualisiert. Ein Update der Form ht=Aˉtht−1+Bˉtxth_t=\bar A_th_{t-1}+\bar B_tx_t, yt=Cthty_t=C_th_t kombiniert den vorherigen Zustand mit der aktuellen Eingabe und berechnet dann eine Ausgabe. Hier ist xtx_t die aktuelle Eingabe, hth_t der gespeicherte Zustand und yty_t die Ausgabe. Die Matrizen Aˉt\bar A_t, Bˉt\bar B_t und CtC_t transformieren jeweils den vorherigen Zustand, fügen den Beitrag der Eingabe hinzu und erzeugen die Ausgabe. Die Querstriche kennzeichnen Parameter, die von einem zeitkontinuierlichen Modell in diskrete Schritte umgerechnet wurden; sie bedeuten keine Mittelwerte. In Mamba hängen die Update-Parameter von der aktuellen Eingabe ab, was „selektiv“ bedeutet.

Stochastische Differentialgleichungen. dx/dt=f(x,t)dx/dt=f(x,t) beschreibt, wie sich ein Zustand xx mit der Zeit tt ändert: ff ist seine Änderungsrate. Eine stochastische Differentialgleichung (SDE) fügt zufällige Änderungen hinzu, dXt=f(Xt,t) dt+g(Xt,t) dWtdX_t=f(X_t,t)\,dt+g(X_t,t)\,dW_t. Hier beschreibt ff die deterministische Änderung, gg legt die Rauschstärke fest, und dWtdW_t ist ein Inkrement der Brownschen Bewegung. Um sie im Code zu approximieren, verwendet das Euler-Maruyama-Verfahren einen kleinen Zeitschritt Δt\Delta t und ersetzt dWtdW_t durch Gauß-Rauschen mit der Varianz Δt\Delta t. Abschnitt 5.1 von Tianhua Chens The Little Book of Generative AI Foundations gibt ein solches Update an; §6.4 desselben Buches nutzt SDEs, um Diffusionsmodelle zu beschreiben.

Variablentransformation. Das Transformieren einer Zufallsvariablen ändert ihre Dichte danach, wie die Transformation das lokale Volumen verändert. Angenommen, y=f(x)y=f(x) bildet zwischen Räumen gleicher Dimension ab, und sowohl ff als auch die Umkehrfunktion f−1f^{-1} sind differenzierbar. Die Dichten vor und nach der Transformation, pXp_X und pYp_Y, erfüllen 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. Die Umkehrfunktion f−1f^{-1} gewinnt xx aus yy zurück. Ihre Jacobi-Matrix Jf−1J_{f^{-1}} ist die quadratische Matrix der ersten Ableitungen; der Absolutbetrag ihrer Determinante korrigiert die lokale Volumenänderung. Wenn zum Beispiel y=2xy=2x in einer Dimension gilt, wird die Dichte zu pY(y)=pX(y/2)/2p_Y(y)=p_X(y/2)/2: Doppelte Breite halbiert die Dichte. Normalizing Flows nutzen invertierbare Transformationen dieser Art, um Dichten zu modellieren; Tianhua Chens Buch, §7.1, erklärt die Methode.

Min-Max-Zielfunktionen. In Generative Adversarial Networks (GANs) erzeugt ein Generator GG Beispiele, und ein Diskriminator DD versucht, sie von echten Daten zu unterscheiden. Die Zielfunktion V(D,G)V(D,G) misst den Erfolg des Diskriminators: DD maximiert sie, während GG sie minimiert. Das Ziel min⁡Gmax⁡DV(D,G)\min_G\max_DV(D,G) (Gleichung 1) sagt: Betrachte für jeden möglichen Generator den besten Diskriminator gegen ihn und wähle dann den Generator mit der kleinsten resultierenden Zielfunktion. Das Training löst diese innere Maximierung nicht exakt. Algorithm 1 des Papers wechselt kk Gradient-Ascent-Schritte auf DD mit einem Gradient-Descent-Schritt auf GG ab; seine Experimente verwendeten k=1k=1.

Der Wahrscheinlichkeitssimplex. Ein Wahrscheinlichkeitsvektor hat nichtnegative Einträge, die sich zu 1 addieren. Die Menge aller solchen Vektoren mit KK Einträgen heißt Wahrscheinlichkeitssimplex, geschrieben ΔK−1={p∈RK∣pi≥0, ∑ipi=1}\Delta^{K-1}=\{p\in\mathbb R^K\mid p_i\geq0,\ \sum_ip_i=1\}. Jede Softmax-Ausgabe liegt darin. Hier benennt Δ\Delta eine Menge, und der Exponent K−1K-1 ist ihre Dimension, keine Potenz: Sobald K−1K-1 Wahrscheinlichkeiten gewählt sind, muss die letzte die Summe auf 1 bringen. Bei zwei Möglichkeiten hat jede Verteilung die Form (a,1−a)(a,1-a) mit 0≤a≤10\leq a\leq1, es ist also nur eine Zahl frei.

Normalisierung. Normalisierung skaliert Werte um Mittelwert und Streuung einer gewählten Gruppe. Eine gängige Form ist x^=(x−μ)/σ2+ϵ\hat x=(x-\mu)/\sqrt{\sigma^2+\epsilon}, wobei μ\mu ein Mittelwert ist, σ2\sigma^2 eine Varianz und ϵ\epsilon eine kleine positive Zahl, die eine Division durch null verhindert. Die Gleichung allein sagt nicht, welche Einträge für Mittelwert und Varianz verwendet werden. Bei einem Batch von Feature-Vektoren berechnet Batch Normalization sie getrennt für jedes Feature über die Beispiele. Die Layer Normalization eines Transformers berechnet sie getrennt für jedes Token über seine Features. Prüfen Sie beim Vergleich von Implementierungen die angegebenen Achsen.

Quellen und Versionen

Abschnitts- und Gleichungsnummern beziehen sich auf die hier verlinkten Versionen.

  1. Tianhua Chen. The Little Book of Generative AI Foundations: An Intuitive Mathematical Primer. 2026. Version 2; §2.4 und §3.2 behandeln die Jensensche Ungleichung und das ELBO, §5.1 und §6.4 zeitkontinuierliches Rauschen.
  2. Vaswani et al. Attention Is All You Need. 2017. Version 7, §3.2.1, Gleichung (1) und Fußnote 4.
  3. Dai et al. DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models. 2024. Feingranulare Expertensegmentierung und die Kombinationszählungen, §3.1; Ablation, §4.4 und Figure 3.
  4. Shao et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. 2024. Version 3, §1.1, §4.1.1, Gleichungen (1)–(4) und Algorithm 1.
  5. DeepSeek-AI. DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model. 2024. Version 5, §2.1.1–2.1.3, Gleichungen (9)–(19) und Appendix C.
  6. DeepSeek-AI. DeepSeek-V3 Technical Report. 2024–2025. Version 2, §2.1.2, Gleichungen (12)–(18).
  7. DeepSeek-AI. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. 2025. Version 1: §2.2.1, Gleichungen (1)–(3). Version 2, 2026: §2.1 und Supplementary A.3.
  8. DeepSeek-AI. DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence. 2026. Version 1: §2.2, Gleichungen (1)–(8); §5.1.2, Gleichung (29).
  9. Rafailov et al. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. 2023–2024. Version 3, §4, Gleichung (7).
  10. Gu et al. MiniLLM: Knowledge Distillation of Large Language Models. 2023–2024. Version 4, §2.1, Gleichung (1), und §2.2, Gleichungen (2) und (7).
  11. Yu et al. DAPO: An Open-Source LLM Reinforcement Learning System at Scale. 2025. Version 2, §3.2–3.3, Gleichungen (11)–(12).
  12. Gu und 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. Version 3, §3.1, Gleichung (10), und §3.3–3.4.
  14. Ho, Jain und Abbeel. Denoising Diffusion Probabilistic Models. 2020. Version 2, §2, Gleichungen (4)–(5); §3.2, Gleichung (12); §3.4, Gleichung (14); und Algorithms 1–2.
  15. Goodfellow et al. Generative Adversarial Nets. 2014. Gleichung (1) und Algorithm 1.
  16. Chen et al. Evaluating Large Language Models Trained on Code. 2021. Version 2, §2.1, Gleichung (1), und Figure 3.
  17. Hugging Face TRL. GRPOTrainer und GRPOConfig beim Commit c6eac19, Oktober 2026.
  18. Stanford CS229. Probability Theory Review und Linear Algebra Review and Reference.
  19. Dive into Deep Learning. Preliminaries.
  20. Britz, Goldie, Luong und Le. Massive Exploration of Neural Machine Translation Architectures. 2017. Version 2, Table 5; von Attention Is All You Need für den Vergleich von Dot-Product und additiver Attention zitiert.