Reading the Math in AI Papers · Parte 1 de 1

Cómo leer las matemáticas de los artículos de AI en arXiv: una guía práctica

Traducción automática

Este artículo se tradujo automáticamente a partir de la versión original en inglés.

Saber leer las matemáticas de un artículo de AI es una habilidad útil para quien necesita entender un modelo, reproducir un método o valorar un resultado experimental. Esta guía explica cómo descifrar la notación, comprobar una ecuación con números pequeños y conectarla con el resto del artículo y con la implementación. Da por hecho que sabes leer código, pero no que la notación de investigación te resulte familiar.

Una ecuación condensa varias decisiones en una sola línea: los objetos que se manipulan, sus dimensiones, qué valores se muestrean y qué se aprende o se mantiene fijo. Recuperar esos detalles es un buen primer paso. Explicar por qué funciona un método e implementarlo con fidelidad exige más trabajo.

Empieza por el recorrido de la atención: conecta una ecuación con formas de arrays, números pequeños y Python ejecutable. La referencia de notación explica las expresiones que encontrarás en otros artículos. El resto de la serie aplica el mismo método a ecuaciones de artículos concretos: ecuaciones de arquitectura como RoPE, MLA y LoRA; objetivos de entrenamiento como DPO y GRPO; y modelos generativos y métricas como el ELBO, la difusión y pass@k. Esas partes aún no han salido, así que los recorridos a los que se refiere esta parte no están enlazados. Para un tratamiento más extenso de los fundamentos, The Little Book of Generative AI Foundations, de Tianhua Chen, desarrolla el álgebra lineal y la probabilidad que hay detrás de los modelos generativos.

Atención: leer un símbolo cada vez

La atención produce un vector de salida como media ponderada de vectores valor. Obtiene los pesos comparando un vector consulta de la posición de salida con un vector clave de cada posición de entrada disponible. Las matrices QQ, KK y VV reúnen esos vectores de consulta, clave y valor. La atención de producto escalar escalado combina estos pasos en la ecuación (1) de §3.2.1 (§ significa «sección») de 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.

Las definiciones están en el texto, no en la ecuación. El párrafo anterior a la ecuación (1) dice que las consultas y las claves tienen dimensión dkd_k y que los valores tienen dimensión dvd_v. El método calcula el producto escalar de cada consulta con todas las claves, divide cada resultado entre dk\sqrt{d_k} y aplica una softmax «para obtener los pesos de los valores». Las consultas se «agrupan en una matriz QQ», y las claves y los valores en KK y VV. Así, cada fila de estas matrices es el vector de un token, y la softmax produce un conjunto de pesos por consulta. Las matrices aprendidas que convierten los vectores de los tokens en QQ, KK y VV aparecen más adelante, en §3.2.2.

Formas y funciones. Una cabeza de atención realiza uno de estos cálculos con sus propios vectores de consulta, clave y valor. Anota sus formas antes de leer los operadores. Para una cabeza con nn consultas y mm claves:

SímboloFormaQué esDe dónde sale
QQn×dkn\times d_kuna fila de consulta por cada posición de salidavectores de tokens por una matriz aprendida
KKm×dkm\times d_kuna fila de clave por cada posición a la que se puede atendervectores de tokens por una matriz aprendida
VVm×dvm\times d_vuna fila de valor por cada clavevectores de tokens por una matriz aprendida
K⊤K^\topdk×md_k\times mKK transpuesta: las filas pasan a ser columnaslos mismos números que KK
dkd_kun númeroel ancho de cada consulta y cada claveun ajuste fijo: 64 en el Transformer base

Los artículos indican una forma nombrando el conjunto al que pertenece la matriz: Q∈Rn×dkQ\in\mathbb R^{n\times d_k} significa una matriz de números reales con nn filas y dkd_k columnas, es decir, un array de forma [n, dk].

Lee de dentro hacia fuera.

  1. QK⊤QK^\top multiplica una matriz n×dkn\times d_k por una matriz dk×md_k\times m. El dkd_k compartido se suma y desaparece, así que el resultado es una tabla de puntuaciones de n×mn\times m. La entrada (i,j)(i,j) es el producto escalar de la consulta ii y la clave jj: se multiplican las entradas correspondientes y después se suman los productos. Para longitudes de vector fijas, esta puntuación es mayor cuanto más se parecen sus direcciones.

  2. Dividir entre dk\sqrt{d_k} evita que las puntuaciones crezcan con el ancho del vector. La nota al pie 4 del artículo muestra por qué crecen los productos escalares sin escalar. Supón que los componentes de una consulta y de una clave son independientes entre sí (saber algunos no dice nada sobre los demás), cada uno con media 0 y varianza 1 (la distancia media al cuadrado respecto de la media). Entonces:

    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}

    Las líneas usan dos reglas sobre números independientes. Primera: el producto de dos números independientes, cada uno con media 0 y varianza 1, tiene también varianza 1. Segunda: cuando se suman números independientes, sus varianzas se suman, de modo que los dkd_k productos dan varianza dkd_k. La desviación típica es la raíz cuadrada de la varianza, dk\sqrt{d_k}. Dividir cada puntuación entre dk\sqrt{d_k} reduce la dispersión en el mismo factor, hasta volver a 1.

    Por qué se cumplen las dos reglas

    Varianza cuando la media es 0. La varianza es la distancia media al cuadrado respecto de la media. Cuando la media es 0, esa distancia al cuadrado es simplemente el cuadrado del número, así que la varianza es la media del cuadrado. Un componente qiq_i con media 0 y varianza 1 tiene, por tanto, un qi2q_i^2 cuya media es 1.

    La media de un producto. Para números independientes, la media de un producto es el producto de las medias. Toma un número aa que vale 1 o 3 con la misma probabilidad, de modo que su media es 2, y un número bb que vale 1 o 5, también con la misma probabilidad, de modo que su media es 3. Independiente significa que bb toma cada uno de sus valores con la misma frecuencia sea cual sea el resultado de aa, así que los cuatro pares son igual de probables. Cuando a=1a=1, los productos son 1 y 5, que tienen media 3=1×33=1\times3. Cuando a=3a=3, son 3 y 15, con media 9=3×39=3\times3. En ambos casos la media es a×3a\times3, así que sobre los dos valores de aa es (3+9)/2=6(3+9)/2=6, que es 2×32\times3. Sin independencia la regla falla: si bb valiera 5 siempre que aa vale 3, y 1 siempre que aa vale 1, solo aparecerían los productos 1 y 15, cuya media es 8. Wikipedia enuncia la regla para cualesquiera variables aleatorias independientes, con «valor esperado» para la media: independencia y esperanza.

    Regla 1: un producto tiene varianza 1. Toma un producto qikiq_ik_i. Su media es el producto de las medias, 0×0=00\times0=0, así que su varianza es la media de (qiki)2=qi2ki2(q_ik_i)^2=q_i^2k_i^2. Los cuadrados son independientes porque lo son qiq_i y kik_i, y cada uno tiene media 1, así que la varianza es 1×1=11\times1=1. La fórmula general es la varianza de un producto de variables independientes.

    Regla 2: las varianzas de términos independientes se suman. Llama a los productos xi=qikix_i=q_ik_i, de modo que el producto escalar es la suma x1+⋯+xdkx_1+\cdots+x_{d_k}. Los términos son independientes porque cada uno usa componentes distintos, y cada uno tiene media 0 y varianza 1. La suma también tiene media 0, así que su varianza es la media de su cuadrado. Al multiplicar la suma por sí misma sale un producto xixjx_ix_j por cada pareja de términos, una cuadrícula de dk×dkd_k\times d_k:

    Una cuadrícula de cuatro por cuatro para el cuadrado de x1 + x2 + x3 + x4, con una celda por cada producto de dos términos. Las cuatro celdas de la diagonal, de x1 al cuadrado a x4 al cuadrado, están resaltadas: cada una tiene media 1, así que juntas suman 4. Las otras doce celdas multiplican dos términos independientes distintos y cada una tiene media 0 por 0, así que suman 0. El cuadrado de la suma tiene media 4: varianza 4, desviación típica 2. Con 64 términos, el mismo recuento da varianza 64 y desviación típica 8.Una cuadrícula de cuatro por cuatro para el cuadrado de x1 + x2 + x3 + x4, con una celda por cada producto de dos términos. Las cuatro celdas de la diagonal, de x1 al cuadrado a x4 al cuadrado, están resaltadas: cada una tiene media 1, así que juntas suman 4. Las otras doce celdas multiplican dos términos independientes distintos y cada una tiene media 0 por 0, así que suman 0. El cuadrado de la suma tiene media 4: varianza 4, desviación típica 2. Con 64 términos, el mismo recuento da varianza 64 y desviación típica 8.

    Las celdas de la diagonal son los cuadrados xi2x_i^2, y cada una tiene media 1. Cualquier otra celda multiplica dos términos distintos e independientes, así que su media es el producto de sus medias, 0×0=00\times0=0: sus valores positivos y negativos se cancelan. Solo quedan las dkd_k celdas de la diagonal, así que la varianza de la suma es dkd_k y su desviación típica es dk\sqrt{d_k}. La dispersión crece con la raíz cuadrada del ancho porque la mayor parte de la cuadrícula se cancela. Wikipedia da el enunciado general como la varianza de una suma de variables incorrelacionadas; las variables independientes siempre son incorrelacionadas, así que la regla las cubre.

    Con dk=64d_k=64, las puntuaciones sin escalar se dispersan típicamente en torno a ±8\pm8; escaladas, en torno a ±1\pm1, sea cual sea el ancho.

    Las puntuaciones muy dispersas saturan la softmax (paso 3) y sus gradientes se anulan. Si una puntuación de una fila está muy por encima de las demás, la softmax da a esa clave un peso cercano a 1 y a todas las demás un peso cercano a 0. Un pequeño cambio en cualquier puntuación apenas mueve entonces los pesos, de modo que el gradiente que llega a las consultas y las claves es casi cero y el entrenamiento casi no tiene con qué ajustarlas. El artículo lo ofrece como explicación probable de un resultado anterior: sin el escalado, la atención de producto escalar rendía peor que la atención aditiva, una forma más antigua que puntúa una consulta y una clave con una red pequeña, cuando dkd_k es grande (Britz et al., 2017). El artículo no mide los gradientes por sí mismo.

  3. La softmax convierte cada fila de puntuaciones en pesos. Sea z=(z1,…,zm)z=(z_1,\ldots,z_m) una fila de las puntuaciones escaladas. La exponencial eae^a, que también se escribe exp⁡(a)\exp(a), usa la constante e≈2.718e\approx2.718. Entonces softmax⁡(z)j=ezj/∑j′ezj′\operatorname{softmax}(z)_j=e^{z_j}/\sum_{j'}e^{z_{j'}}, donde j′j' es solo un segundo nombre de índice, de modo que la suma recorre todas las claves de la fila. Los pesos son positivos y cada fila suma 1.

  4. Multiplicar los pesos de n×mn\times m por los valores de m×dvm\times d_v suma el eje de las claves y lo elimina. La fila ii de la salida n×dvn\times d_v es una media ponderada de las filas de valores, ponderada por lo bien que cada clave coincidió con la consulta ii.

Una cabeza de atención dibujada como cuadrículas de números, con tres consultas, cuatro claves, ancho de clave dos y ancho de valor tres. Q, de tres por dos, por K transpuesta, de dos por cuatro, da una tabla de puntuaciones de tres por cuatro. La softmax conserva esa forma y hace que cada fila sume uno. Los pesos, de tres por cuatro, por V, de cuatro por tres, dan una salida de tres por tres, y la fila dos de la salida es una media ponderada de las filas de valores con la fila dos de los pesos.Una cabeza de atención dibujada como cuadrículas de números, con tres consultas, cuatro claves, ancho de clave dos y ancho de valor tres. Q, de tres por dos, por K transpuesta, de dos por cuatro, da una tabla de puntuaciones de tres por cuatro. La softmax conserva esa forma y hace que cada fila sume uno. Los pesos, de tres por cuatro, por V, de cuatro por tres, dan una salida de tres por tres, y la fila dos de la salida es una media ponderada de las filas de valores con la fila dos de los pesos.

Cuenta los cuadrados de la figura: cada producto elimina el eje que comparten sus dos cuadrículas.

Compruébalo con dos números. Toma una consulta y dos claves cuyas puntuaciones escaladas son (0,log⁡3)(0,\log3), elegidas para que las exponenciales sean 1 y 3, y valores v1=(2,0)v_1=(2,0) y v2=(0,4)v_2=(0,4). La figura lo resuelve con una operación por columna:

Una tabla con una fila por clave. Clave 1: puntuación escalada 0, exponencial 1, peso 1/4, valor (2, 0), valor ponderado (0.5, 0). Clave 2: puntuación escalada log 3, exponencial 3, peso 3/4, valor (0, 4), valor ponderado (0, 3). Las exponenciales suman 4, los pesos suman 1 y los valores ponderados dan la salida (0.5, 3).Una tabla con una fila por clave. Clave 1: puntuación escalada 0, exponencial 1, peso 1/4, valor (2, 0), valor ponderado (0.5, 0). Clave 2: puntuación escalada log 3, exponencial 3, peso 3/4, valor (0, 4), valor ponderado (0, 3). Las exponenciales suman 4, los pesos suman 1 y los valores ponderados dan la salida (0.5, 3).

La atención mezcló ambos valores; no eligió el token que mejor coincidía.

Compárala con el código. La función de NumPy siguiente implementa una cabeza. k.T es la transpuesta. axis=1 es el eje de las claves, así que la fila de cada consulta se normaliza por separado. El máximo de la fila se resta antes de np.exp: sumar el mismo número a todas las puntuaciones de una fila se cancela en el cociente de la softmax, de modo que el resultado no cambia, pero las puntuaciones grandes dejan de desbordar. La máscara opcional pone las puntuaciones bloqueadas a −∞-\infty, lo que hace que sus pesos sean exactamente cero. Un decodificador usa una máscara así para impedir que cada token atienda a los posteriores (§3.2.3 del artículo).

Guarda el bloque como attention_example.py y ejecuta uv run --with numpy python attention_example.py. Las comprobaciones pasan en silencio.

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)

Una consulta cuyas claves están todas bloqueadas es un caso que la ecuación deja abierto: todos los pesos de su fila serían 0/00/0. La función lanza un error en lugar de devolver NaN.

De una cabeza a varias. El Transformer base ejecuta ocho cabezas en paralelo, cada una con sus propias matrices aprendidas para producir QQ, KK y VV, y cada una con dk=dv=64d_k=d_v=64. Concatena sus salidas y multiplica el resultado por otra matriz aprendida, WOW^O (Attention Is All You Need, §3.2.2).

Una implementación también puede procesar un lote (batch): varias secuencias de entrada a la vez. Por ejemplo, la atención de producto escalar escalado de PyTorch acepta un tensor de consultas Q con forma [batch, heads, n, d_k]. Las dos primeras dimensiones seleccionan una secuencia y una cabeza; Q[b, h] es la matriz [n, d_k] de ese par. La fórmula de la atención se aplica por separado a cada par. La función de NumPy de aquí maneja solo uno de esos pares: sus operaciones .T y axis=1 suponen entradas bidimensionales.

Seis preguntas para cualquier ecuación

PreguntaRespuesta para la atención
¿Qué devuelve la ecuación y con qué forma?Una matriz n×dvn\times d_v: una fila de salida por consulta
¿Cada símbolo es un dato, un peso entrenado, un modelo congelado, un ajuste o una muestra?QQ, KK y VV se calculan a partir de los tokens con matrices aprendidas; dkd_k es un ajuste fijo; no se muestrea nada
¿Sobre qué índice o eje actúa cada operación?La softmax recorre las mm claves de la fila de cada consulta; el producto de los pesos por VV suma sobre las claves
¿Dónde están las definiciones?El párrafo anterior a la ecuación (1), la nota al pie 4 y §3.2.2 para las proyecciones aprendidas
¿Qué da una comprobación con dos o tres números?Pesos (1/4,3/4)(1/4,3/4) y salida (0.5,3)(0.5,3)
¿Qué tuvo que decidir el código que la ecuación deja abierto?Restar el máximo de la fila, el valor que se usa para las puntuaciones enmascaradas, una fila sin ninguna clave permitida

Qué tipo de afirmación hace una ecuación

La atención es un cálculo: dice cómo obtener una salida a partir de unas entradas. Los artículos también escriben ecuaciones que cumplen otras funciones:

TipoEjemplo en esta serieQué comprobar
CálculoLa salida de la atención; el vector comprimido de MLALa forma de cada resultado intermedio
DefiniciónLa puntuación de GRPO relativa a otras respuestasQué representa el nombre nuevo, para poder sustituirlo en la ecuación
Objetivo: una pérdida que minimizar o una puntuación que maximizarLa pérdida de DPOSi se minimiza o se maximiza, y qué datos promedia
Regla de actualizaciónEl descenso de gradiente; la memoria de Gated DeltaNetQué cambia en cada paso y qué permanece fijo
Restricción, o conjunto de valores permitidosLas matrices de mezcla permitidas de mHCCómo produce el artículo un valor que la cumpla
Cota: un límite superior o inferior de una cantidadLa cota inferior de la evidencia (ELBO)La diferencia entre los dos lados y cuándo es cero
Estimador o métricapass@kQué se cuenta y a partir de cuántas muestras
Ajuste empíricoLa ley de escalado de DeepSeek LLMEl rango de datos sobre el que se ajustó la curva

Una restricción enuncia una propiedad que debe tener el resultado. Para los pesos de la atención, esa propiedad es: todo peso es no negativo y cada fila suma 1. La softmax es un cálculo que produce pesos con esa propiedad. El requisito por sí solo no te dice que uses softmax.

== afirma que dos expresiones son iguales. :=:= significa «se define como»: da nombre a una expresión. Una definición puede nombrar una métrica, una pérdida o un conjunto de valores permitidos, así que ver :=:= no te dice qué tipo de ecuación de la tabla anterior estás leyendo.

Por ejemplo, Evaluating Large Language Models Trained on Code, el artículo que presentó el modelo de generación de código Codex, usa :=:= para definir su estimador de pass@k (ecuación 1). Esta métrica mide la probabilidad de que al menos uno de kk programas generados supere las pruebas. En el informe técnico de DeepSeek-V4, la ecuación (2) combina dos afirmaciones: M:={…}\mathcal M:=\{\ldots\} define un conjunto de matrices permitidas, y Bl∈MB_l\in\mathcal M exige que la matriz de mezcla BlB_l del modelo pertenezca a ese conjunto. La definición usa :=:=; la restricción usa ∈\in, que significa «pertenece a». Las secciones de pass@k y mHC trabajan esos ejemplos.

Cómo encontrar la ecuación nueva, sus definiciones y su código

La sección de métodos de un artículo describe cómo funciona su modelo o su algoritmo de entrenamiento. El encabezado puede ser «Method», «Architecture» o algo más específico. Los autores suelen explicar primero un método existente y después mostrar qué han cambiado. Para identificar la contribución que se reivindica, empieza por el resumen de novedades de la introducción. Por ejemplo, DeepSeekMath, §1.1 presenta Group Relative Policy Optimization (GRPO), su método para entrenar modelos a partir de respuestas puntuadas. Los números de sección y de ecuación de aquí se refieren al artículo enlazado.

Después compara el método propuesto con el método anterior que modifica. Dos artículos lo ilustran:

  • Un cambio de arquitectura. DeepSeek-V2 describe la atención multicabezal estándar en §2.1.1 e introduce la atención latente multicabezal (MLA) en §2.1.2. La atención estándar guarda las claves y los valores de todos los tokens anteriores. MLA guarda un vector comprimido a partir del cual se pueden reconstruir. Comparar esas ecuaciones revela qué guarda el modelo de forma distinta; el recorrido de MLA deriva el ahorro de memoria.
  • Un cambio de entrenamiento. DeepSeekMath, §4.1.1 imprime el objetivo de Proximal Policy Optimization (PPO) como ecuación (1) y el de GRPO como ecuación (3). Ambos usan una ventaja (advantage): un número que indica si una respuesta fue mejor o peor de lo esperado. PPO la estima con una segunda red aprendida, el modelo de valor, que predice la recompensa que falta por obtener a partir de una respuesta parcial. GRPO, en cambio, compara la recompensa de la respuesta con las recompensas de otras respuestas a la misma pregunta. El recorrido de GRPO compara estos términos con la notación de respuesta completa de DeepSeek-R1.

Busca las definiciones alrededor de la ecuación. Revisa el párrafo anterior, cualquier frase «donde …» posterior, las notas al pie y los apéndices. En Attention Is All You Need, el párrafo anterior a la ecuación (1) define las dimensiones y la nota al pie 4 explica el factor de escala. DeepSeek-V3 define la mayoría de sus símbolos de enrutamiento justo después de la ecuación (15), y el sesgo bib_i justo antes de la ecuación (16). DeepSeek-V2 desarrolla MLA a lo largo de las ecuaciones (9)–(19) y después reúne el cálculo en el Apéndice C.

Revisa el algoritmo y el código. Una caja de algoritmo es un listado numerado de pseudocódigo que da el orden de las operaciones. El Algoritmo 1 de DeepSeekMath muestra cuándo generar respuestas y cuándo actualizar el modelo. El Algoritmo 1 de Denoising Diffusion Probabilistic Models (DDPM) especifica cómo muestrear la imagen de entrenamiento, el nivel de ruido y el ruido. Las implementaciones resuelven más detalles: por defecto, np.std divide la suma de las desviaciones al cuadrado entre nn, mientras que torch.std divide entre n−1n-1. El ejemplo de GRPO muestra cómo esa elección cambia los valores de la ventaja calculados a partir de las mismas recompensas.

Las versiones de arXiv pueden cambiar secciones de lugar y repetir ecuaciones con números nuevos, así que cita la versión. En DeepSeek-R1 v1, el objetivo de GRPO está en §2.2.1, ecuaciones (1)–(3). En la v2, publicada en enero de 2026, está en §2.1, y las mismas ecuaciones reaparecen como (11)–(13) en el Suplemento A.3. Un enlace sin versión abre la más reciente, así que todos los enlaces a arXiv de esta serie incluyen la versión con la que se comprobaron.

Cómo comprobar tu lectura con un LLM

Un modelo de chat puede redactar la tabla de símbolos, el índice de cada suma y una comprobación con números pequeños, si le das las definiciones y le pides que señale lo que falta. El texto copiado de un PDF aplana subíndices, superíndices y fracciones en una sola línea; los enlaces «HTML (experimental)» y «TeX Source» de la página de resumen de arXiv dan texto limpio para pegar. Pega la ecuación y los párrafos que la rodean con un prompt como este:

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.

Sin el paso 2, nada impide que el modelo rellene una definición ausente con el significado habitual de la letra, como leer σ\sigma en DPO como una desviación típica en lugar de como la sigmoide. Las citas del paso 1 hacen que la tabla sea comprobable: busca cada una en el PDF y trata una fila cuya cita no encuentres como una conjetura.

El mismo procedimiento como skills de agente. paper-math-skills empaqueta esta sección y la referencia de notación de más abajo como dos skills escritas para Claude Code; otros agentes que cargan archivos SKILL.md también pueden usarlas. read-paper-math obtiene la versión fijada de arXiv, cita la frase que define cada símbolo, lee la ecuación de dentro hacia fuera y ejecuta una comprobación con números pequeños. check-paper-math revisa una lectura así contra el artículo: busca cada cita, repite los números y señala las afirmaciones más fuertes o más débiles que las del artículo. paper-math-readings contiene las lecturas de las skills para las Partes 2–4, una para cada una de las 15 secciones con una línea Source:.

Referencia de notación

Si una letra griega no te resulta familiar, abre la referencia de letras griegas de este artículo (Apéndice A) para ver su nombre y sus significados habituales. Para practicar más con las matemáticas, Stanford CS229 ofrece repasos de probabilidad y de álgebra lineal con ejercicios; los preliminares de Dive into Deep Learning explican los fundamentos con código.

Subíndices, marcas y signos de relación

Las letras son nombres de variables locales: cada artículo define las suyas. Los subíndices suelen ser índices. xix_i puede ser la coordenada ii de un vector o el ejemplo ii de un dataset, y hth_t es el vector del modelo para el token tt, llamado su estado oculto (hidden state).

Los superíndices en los artículos de modelos suelen ser etiquetas. En ht(ℓ)h_t^{(\ell)}, el superíndice entre paréntesis suele ser un número de capa, no una potencia; en FFN⁡i(s)\operatorname{FFN}^{(s)}_i y FFN⁡i(r)\operatorname{FFN}^{(r)}_i de DeepSeek-V3 marca los expertos compartidos y los enrutados, es decir, los que usan todos los tokens y los que elige un enrutador (véase el ejemplo de enrutamiento de MoE). En DeepSeek-V2, WDKVW^{DKV} y ktCk_t^C llevan etiquetas, no exponentes; el ejemplo de MLA define esas etiquetas. W⊤W^\top es una transpuesta y x2x^2 es un cuadrado.

x1:Tx_{1:T} significa las posiciones de 1 a TT, incluida TT, a diferencia de un slice de Python; los artículos suelen contar desde 1. x<tx_{<t} significa todas las posiciones anteriores a tt. Xt,:X_{t,:} selecciona la fila tt, como en el slicing de NumPy.

Las marcas sobre una letra suelen cambiar su significado de una de estas maneras:

MarcaLectura habitualEjemplo o excepción
y^\hat yUna predicción o una estimaciónEjemplo: A^i,t\hat A_{i,t} en DeepSeekMath estima cuánto mejor puntuó una respuesta de lo esperado
xˉ\bar xUna mediaExcepción: en DDPM, αˉt\bar\alpha_t multiplica los factores del calendario de ruido desde el paso 1 hasta el tt
x~\tilde xUna versión perturbada o sin restringirEjemplo: en DeepSeek-V4, B~l\tilde B_l es una matriz antes de que la normalización imponga sus restricciones
x∗x^\astEl óptimoExcepción: en DPO, r∗r^\ast es la recompensa verdadera, que el método nunca observa
x′x'Un valor nuevo o intermedioEjemplo: en DeepSeek-V3, gi,t′g'_{i,t} es el peso de un experto antes de normalizar
A−1A^{-1}La matriz inversaNo es el recíproco de cada entrada: A−1A^{-1} deshace AA, A−1A=IA^{-1}A=I (la matriz identidad), y en general (A−1)ij≠1/Aij(A^{-1})_{ij}\neq1/A_{ij}

Algunos símbolos que no son letras griegas también tienen varios usos:

SímboloSignificados
∣\midCondicionamiento en p(y∣x)p(y\mid x); «tal que» dentro de un conjunto
∣x∣\vert x\vertUn valor absoluto; la longitud de una secuencia, como en ∣oi∣\vert o_i\vert, el número de tokens de la respuesta oio_i de GRPO; el tamaño de un conjunto
∼\sim«Se muestrea de» en x∼px\sim p; «aproximadamente» en texto informal
TTUna longitud de secuencia; una temperatura de softmax; el número de pasos de difusión
qqUn vector de consulta (atención); una pregunta (GRPO); el modelo estudiante qθq_\theta (destilación); el codificador qϕq_\phi (ELBO)

Cinco signos indican cómo se relacionan dos lados. :=:=, a veces ≜\triangleq, define un nombre nuevo. ≈\approx marca una aproximación, como el promedio muestreado de Esperanzas y de dónde salen las muestras. ∝\propto significa «proporcional a», con una constante de normalización omitida: pi∝ezip_i\propto e^{z_i} se convierte en una distribución solo después de dividir entre ∑jezj\sum_j e^{z_j}. ≪\ll significa «mucho menor que», como en dc≪dhnhd_c\ll d_hn_h de DeepSeek-V2: el ancho comprimido es mucho menor que el ancho total de todas las cabezas. ←\leftarrow es una asignación, como en una regla de actualización.

Sumas, recuentos, intervalos y logaritmos

La ∑\sum grande suma términos y ∏\prod los multiplica. El índice bajo cada operador empieza aquí en 1 y llega hasta el límite superior 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.

El índice pertenece al operador, igual que una variable de bucle pertenece a su bucle. En yi=∑j=1dWijxjy_i=\sum_{j=1}^{d}W_{ij}x_j, la suma recorre jj, mientras que ii identifica una entrada de la salida. El resultado es un vector con una entrada por cada ii: el producto matriz-vector WxWx escrito explícitamente. Los índices del lado izquierdo te dicen la forma de la salida.

El factor que precede a una suma decide qué recibe el mismo peso. Un lote con una respuesta de 2 tokens y otra de 8 tokens, donde ℓit\ell_{it} es la pérdida del token tt de la respuesta ii (en GRPO, ℓ\ell es un término que se maximiza), puede promediarse de dos maneras:

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}

En la primera, cada respuesta recibe peso 12\tfrac12, repartido entre sus 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}

En la segunda, cada token tiene peso 1/101/10. GRPO muestrea GG respuestas o1,…,oGo_1,\ldots,o_G a cada pregunta, y ∣oi∣\vert o_i\vert es el número de tokens de la respuesta ii. Los dos promedios se leen entonces así, para el GRPO de DeepSeekMath y para DAPO, una variante posterior de 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}

Con G=2G=2, estos son LanswersL_{\text{answers}} y LtokensL_{\text{tokens}} de arriba. DAPO pasó al promedio por token (§3.3) porque el promedio por respuesta daba demasiado poco peso a los tokens de las respuestas largas: el modelo aprendía muy poco de las respuestas largas buenas y no penalizaba lo bastante las respuestas largas, repetitivas y malas.

Una suma también puede contar. Los artículos lo hacen con un indicador: un uno en negrita seguido de una condición, 1[C]\mathbf 1[C], que vale 1 cuando la condición CC es verdadera y 0 cuando es falsa. Algunos artículos ponen la condición entre paréntesis o imprimen un uno de trazo doble; el significado es el mismo. Sumar indicadores cuenta, por tanto, cuántas veces se cumple la condición. La exactitud (accuracy) es el ejemplo habitual. Si y^i\hat y_i es la clase predicha e yiy_i la clase correcta del ejemplo ii, entonces ∑i1[y^i=yi]\sum_i\mathbf 1[\hat y_i=y_i] es el número de predicciones correctas. Las predicciones (gato, perro, perro) frente a las etiquetas correctas (gato, gato, perro) dan los indicadores 1, 0 y 1, así que el recuento es 2 y la exactitud 2/3. En una capa de mezcla de expertos (MoE), un enrutador envía cada token a unas pocas de muchas subredes feed-forward, llamadas expertos. En la pérdida de equilibrio de DeepSeek-V3 (ecuación 18), el indicador vale 1 cuando la puntuación de un experto para un token está entre las KrK_r más altas para ese token, donde KrK_r es a cuántos expertos se enruta cada token. Su suma sobre los tokens de una secuencia cuenta cuántas veces ocurrió. La puntuación de aquí omite el sesgo que añade el enrutamiento, de modo que el recuento puede diferir de los expertos que el enrutador elige realmente (enrutamiento de MoE).

El coeficiente binomial (nk)\binom nk, que se lee «nn sobre kk», cuenta las formas de elegir kk elementos distintos de nn sin tener en cuenta el orden. Para enteros 0≤k≤n0\leq k\leq n, es igual a n!/(k! (n−k)!)n!/(k!\,(n-k)!). El signo de exclamación significa factorial: n!=1×2×⋯×nn!=1\times2\times\cdots\times n, con 0!=10!=1. Por ejemplo, (52)=5!/(2! 3!)=10\binom52=5!/(2!\,3!)=10: cinco elementos tienen diez parejas distintas. DeepSeekMoE usa coeficientes binomiales para contar combinaciones de expertos, y el estimador de pass@k los usa para contar conjuntos de muestras.

Los intervalos usan corchetes para los extremos incluidos: [a,b][a,b] incluye ambos, (a,b)(a,b) ninguno. En Gated DeltaNet, αt∈(0,1)\alpha_t\in(0,1) significa estrictamente entre 0 y 1. En otros contextos, (a,b)(a,b) es una pareja.

El logaritmo natural invierte la exponenciación: log⁡(ea)=a\log(e^a)=a. Los logaritmos convierten productos en sumas y cocientes en diferencias: log⁡(ab)=log⁡a+log⁡b\log(ab)=\log a+\log b y log⁡(a/b)=log⁡a−log⁡b\log(a/b)=\log a-\log b, pero log⁡(a+b)\log(a+b) no se separa. Por eso los artículos trabajan con log-probabilidades. El logaritmo de un producto de probabilidades de tokens es una suma, y el logaritmo de un cociente de las probabilidades de dos modelos es una diferencia, la forma que usan los objetivos de DPO y GRPO. Los artículos de ML se refieren al logaritmo natural salvo que digan otra cosa; los resultados están en nats, y los logaritmos en base 2 dan bits. Para una probabilidad p≤1p\leq1, −log⁡p≥0-\log p\geq0, y crece sin límite cuando pp se acerca a 0, de modo que una predicción errónea hecha con seguridad resulta cara.

Log-sum-exp significa: exponenciar cada puntuación ziz_i, sumar los resultados y después tomar el logaritmo. Calcular log⁡∑iezi\log\sum_i e^{z_i} directamente puede desbordar cuando una puntuación es grande. En su lugar, busca la puntuación mayor y llámala mm. La notación m=max⁡izim=\max_i z_i significa «compara todas las entradas ziz_i y toma la mayor»; en NumPy, m = z.max().

Resta mm de todas las puntuaciones antes de exponenciar y súmalo de nuevo después de tomar el logaritmo:

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

Para z=(1000,1001)z=(1000,1001), la puntuación mayor es m=1001m=1001. Las puntuaciones desplazadas son (−1,0)(-1,0), así que el cálculo pasa a ser 1001+log⁡(e−1+1)≈1001.3131001+\log(e^{-1}+1)\approx1001.313. Ninguna exponencial es mayor que 1. El código de la atención usa la misma resta antes de la softmax; allí el factor común se cancela en la división, así que no hay que volver a sumar nada.

Probabilidad condicional y probabilidad de un texto

pθ(y∣x)p_\theta(y\mid x) es la probabilidad que el modelo con parámetros θ\theta asigna a la salida yy dada la entrada xx. El subíndice nombra los parámetros; algunos artículos escriben p(y∣x;θ)p(y\mid x;\theta), donde el punto y coma también marca parámetros y no una condición. Con un punto en lugar de la salida, pθ(⋅∣x)p_\theta(\cdot\mid x) es la distribución completa sobre las salidas y no un solo número. Los artículos de RL escriben el mismo objeto como πθ(o∣q)\pi_\theta(o\mid q), la probabilidad de que el modelo escriba la respuesta oo a la pregunta qq, y llaman al modelo una política (policy).

Intercambiar el evento y la condición da un número distinto. Supón 100 respuestas del modelo: 60 son correctas, 50 son JSON válido y 40 son ambas cosas. Entonces

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}

Sea AA «la respuesta es correcta» y BB «la respuesta es JSON válido». La probabilidad condicional restringe el recuento a las respuestas que cumplen la condición: P(A∣B)=P(A∩B)/P(B)P(A\mid B)=P(A\cap B)/P(B), siempre que P(B)>0P(B)>0. El símbolo ∩\cap significa «ocurren ambos eventos». Aquí la fracción es 0.4/0.5=0.80.4/0.5=0.8, lo mismo que 40 respuestas correctas entre 50 con JSON válido.

Dos eventos son independientes cuando saber que uno ha ocurrido no cambia la probabilidad del otro. Eso exige que P(A∩B)=P(A)P(B)P(A\cap B)=P(A)P(B). En esta muestra, P(both)=0.4P(\text{both})=0.4, mientras que P(correct)P(valid JSON)=0.6×0.5=0.3P(\text{correct})P(\text{valid JSON})=0.6\times0.5=0.3, así que las proporciones observadas no cumplen la independencia.

El teorema de Bayes, también llamado regla de Bayes, relaciona las dos direcciones del condicionamiento: P(A∣B)=P(B∣A)P(A)/P(B)P(A\mid B)=P(B\mid A)P(A)/P(B). Permite calcular la probabilidad de AA dado BB a partir de la probabilidad de BB dado AA y de las probabilidades de los dos eventos. El ejemplo del ELBO lo usa para hallar la probabilidad de un código oculto dada una imagen observada.

Un modelo de lenguaje puntúa una secuencia token a token. Por la regla de la cadena de la probabilidad,

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}

Cada factor se condiciona a todos los tokens anteriores, así que la fórmula no supone que los tokens sean independientes. Si tres tokens tienen probabilidades condicionales 0.5, 0.2 y 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}

La pérdida de entrenamiento habitual es el negativo de esta suma, dividido entre la longitud:

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

Durante el entrenamiento, los tokens anteriores y<ty_{<t} vienen del dataset. Durante la generación, son las elecciones previas del propio modelo.

Esperanzas y de dónde salen las muestras

Una esperanza es un promedio ponderado por probabilidades:

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

Lee Ex∼p[f(x)]\mathbb E_{x\sim p}[f(x)] como «la media de f(x)f(x) cuando xx se extrae de pp». La notación ∑x\sum_x suma sobre todos los valores discretos posibles de xx. Sin subíndice, E[X]\mathbb E[X] promedia una variable aleatoria XX sobre su propia distribución: si XX vale 1 con probabilidad 0.75 y 3 con probabilidad 0.25, entonces E[X]=1×0.75+3×0.25=1.5\mathbb E[X]=1\times0.75+3\times0.25=1.5.

Cuando una variable tiene una densidad p(x)p(x), es decir, probabilidad por unidad de xx, el promedio ponderado es una integral, ∫f(x)p(x) dx\int f(x)p(x)\,dx. El dxdx identifica xx como la variable que se integra; sin límites escritos aquí, la integral cubre todo su rango. El ejemplo de la densidad explica la probabilidad por unidad y muestra una integral como el área bajo una curva.

El código de entrenamiento no puede sumar sobre todas las entradas posibles, así que muestrea y promedia: Ex∼p[f(x)]≈1N∑i=1Nf(xi)\mathbb E_{x\sim p}[f(x)]\approx\frac1N\sum_{i=1}^{N}f(x_i), con cada xix_i extraído de forma independiente de pp, lo que los artículos escriben como xi∼iidpx_i\overset{\text{iid}}{\sim}p. Los artículos lo llaman una estimación de Monte Carlo, y en el código es loss.mean() sobre un lote. La media del lote estima la esperanza solo si el lote se extrae de la distribución del subíndice de E\mathbb E, así que el subíndice te dice cómo se producen los datos de entrenamiento:

  • DPO promedia sobre ejemplos guardados (x,yw,yl)∼D(x,y_w,y_l)\sim\mathcal D: un prompt, una respuesta preferida y una respuesta rechazada. Las respuestas se recopilan y se etiquetan antes de esta fase de entrenamiento; pueden proceder de generaciones anteriores de un modelo. En cada paso de entrenamiento, el modelo calcula las probabilidades de esas respuestas ya dadas y actualiza sus pesos. No muestrea respuestas nuevas para ese paso.
  • GRPO en DeepSeek-R1: generar respuestas y después comparar sus recompensas. El entrenamiento toma una pregunta del dataset, genera varias respuestas y las puntúa con una función de recompensa, como comprobar un resultado matemático o ejecutar pruebas unitarias. La actualización favorece las respuestas que puntuaron por encima de la media del grupo. La notación q∼P(Q)q\sim P(Q) significa «muestrea una pregunta qq de la distribución de preguntas». La notación {oi}∼πθold(O∣q)\{o_i\}\sim\pi_{\theta_{old}}(O\mid q) significa «muestrea respuestas oio_i a esa pregunta de la copia del modelo llamada πθold\pi_{\theta_{old}}». El subíndice old marca la copia que generó estas respuestas; esa copia permanece fija mientras el lote se usa para las actualizaciones. El recorrido de GRPO explica la comparación de recompensas y las actualizaciones.
  • Destilación on-policy en MiniLLM y DeepSeek-V4: generar texto y después aprender de las probabilidades del maestro. El modelo que se entrena es el estudiante. Genera texto; un maestro congelado aporta las probabilidades del siguiente token para los mismos prefijos, y el entrenamiento ajusta las probabilidades del estudiante hacia las del maestro. Estas probabilidades dan la señal de entrenamiento, en lugar de la puntuación de recompensa de una respuesta que usa GRPO. MiniLLM escribe el texto muestreado del estudiante como y∼qθy\sim q_\theta: yy es el texto y qθq_\theta nombra al modelo estudiante. DeepSeek-V4 llama a su estudiante πθ\pi_\theta y usa varios maestros especialistas. El procedimiento de muestreo real de MiniLLM también mezcla tokens extraídos del maestro. El recorrido de la destilación explica los objetivos y esa distinción del muestreo.

El orden te dice qué optimiza el entrenamiento. Supón que un modelo asigna probabilidades 0.9 y 0.1 a las salidas correctas de dos ejemplos de entrenamiento con el mismo peso. Promediar sus log-probabilidades significa tomar primero cada logaritmo y después promediar: np.log(probs).mean(). Tomar el logaritmo de su promedio significa np.log(probs.mean()). Si XX es la probabilidad asignada a la salida correcta de un ejemplo elegido al azar:

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}

Al cambiar el signo de estas puntuaciones se obtienen pérdidas de 1.20 y 0.69. Un segundo modelo que asigna 0.5 a cada salida correcta obtiene 0.69 con cualquiera de los dos cálculos. Así, promediar las probabilidades antes de tomar el logaritmo trata a los dos modelos como igual de buenos, mientras que la log-probabilidad negativa media habitual penaliza más al primer modelo por su baja probabilidad en la segunda salida correcta. Al traducir una pérdida a código, conserva el orden del logaritmo y del promedio.

La desigualdad de Jensen enuncia la relación general para XX positiva: E[log⁡X]≤log⁡E[X]\mathbb E[\log X]\leq\log\mathbb E[X]. También ayuda a construir objetivos de entrenamiento alternativos. Cuando la probabilidad de los datos de un modelo exige un promedio costoso sobre variables ocultas, un promedio de términos logarítmicos puede dar una cota inferior más fácil de estimar. El recorrido del ELBO explica ese problema de entrenamiento; ELBO significa evidence lower bound (cota inferior de la evidencia). La sección 2.4 de The Little Book of Generative AI Foundations, de Tianhua Chen, deriva la cota con la desigualdad de Jensen.

Densidades, varianza y barras de error

p(x)p(x) tiene dos significados habituales. Para resultados discretos, como tokens o clases, da la probabilidad del resultado xx: un número de 0 a 1, de modo que las probabilidades suman 1 sobre todos los resultados.

Para entender el otro significado, supón que XX se elige de forma uniforme entre 0 y 0.5. Los intervalos de igual longitud tienen probabilidades iguales. El intervalo de 0.1 a 0.2 ocupa una quinta parte de todo el rango, así que

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.

Dentro de este rango, la probabilidad es la anchura del intervalo multiplicada por 2. Ese multiplicador es la densidad de probabilidad: p(x)=2p(x)=2 para 0≤x≤0.50\leq x\leq0.5, y cero fuera. La densidad describe la probabilidad por unidad de la variable, no la probabilidad de un valor exacto.

Probabilidad cero para un punto no significa que no se muestree nada. Estrecha un intervalo en torno a 0.15: su probabilidad es el doble de su anchura, así que se acerca a cero cuando la anchura se acerca a cero. El punto exacto único tiene, por tanto, probabilidad cero. Aun así, una extracción produce algún valor en [0,0.5][0,0.5], y ese intervalo completo tiene probabilidad 1. Si registras el resultado redondeado a dos decimales, un valor registrado de 0.15 representa el intervalo de 0.145 a 0.155, cuya probabilidad es 2×0.01=0.022\times0.01=0.02.

Para una densidad no uniforme, el multiplicador varía con xx. La integral suma las contribuciones a lo largo del intervalo:

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

Geométricamente, es el área bajo la curva de densidad entre aa y bb; el área sobre todo el rango es 1. En el ejemplo uniforme, el área es simplemente la altura 2 por la anchura 0.5. Una densidad puede, por tanto, superar 1, y su logaritmo puede ser positivo, como lo es aquí log⁡2≈0.69\log2\approx0.69. Una probabilidad nunca supera 1.

La distribución gaussiana que se usa para el ruido en DDPM tiene una densidad de este tipo. No toda distribución continua tiene una densidad ordinaria: la distribución de Cantor es un contraejemplo matemático, ajeno a los modelos de los que hablamos aquí. Almacenar valores reales tampoco implica una distribución continua: una variable restringida a 0.0 y 1.0 sigue teniendo dos resultados discretos.

Los artículos suelen usar la misma letra para probabilidades y densidades. Comprueba cómo define el artículo la distribución de la variable y sobre qué variable se suma o se integra. Una integral sobre una variable oculta zz, como el código latente del ELBO de la Parte 4, no te dice si una xx observada es discreta o continua. Algunos artículos escriben PP mayúscula para las probabilidades y pp minúscula para las densidades, pero muchos usan pp para ambas.

Para describir cuánto se dispersa una distribución alrededor de su media, los artículos usan la varianza: la diferencia media al cuadrado respecto de la media, Var⁡(X)=E[(X−μ)2]\operatorname{Var}(X)=\mathbb E[(X-\mu)^2], donde μ=E[X]\mu=\mathbb E[X]. La desviación típica es su raíz cuadrada, así que tiene las mismas unidades que XX.

Estas cantidades también aparecen en los nombres de las distribuciones. La distribución gaussiana, también llamada distribución normal, se escribe N(μ,σ2)\mathcal N(\mu,\sigma^2): μ\mu es su media y σ2\sigma^2 su varianza. Para un vector, N(μ,Σ)\mathcal N(\mu,\Sigma) usa una matriz de covarianza Σ\Sigma: la entrada (i,j)(i,j) mide cómo varían juntas las coordenadas ii y jj, y la diagonal contiene sus varianzas. N(0,I)\mathcal N(0,I) describe un vector de números normales estándar independientes, cada uno con media 0 y varianza 1; II es la matriz identidad.

Las tablas de benchmarks suelen dar una puntuación media junto con una medida de variación. La dispersión de las ejecuciones individuales no es lo mismo que la incertidumbre de su media: para NN ejecuciones independientes con desviación típica σ\sigma, el error típico de la media es σ/N\sigma/\sqrt N.

Antes de comparar dos entradas como 82.3±0.482.3\pm0.4 y 81.5±0.481.5\pm0.4, averigua en el pie de la tabla si 0.4 es una desviación típica entre ejecuciones, un error típico o la semianchura de un intervalo de confianza. Para comparar las medias, calcula un intervalo para su diferencia. Un procedimiento de intervalo de confianza del 95 % produce rangos que contienen la diferencia verdadera en el 95 % de los experimentos repetidos, bajo sus supuestos.

Para este ejemplo, supón cuatro ejecuciones independientes por modelo, puntuaciones de las ejecuciones aproximadamente normales y varianzas poblacionales iguales. Si las ejecuciones están emparejadas, como dos modelos evaluados en las mismas tareas muestreadas de forma independiente, analiza en su lugar las diferencias dentro de cada pareja. La guía de dos muestras del NIST explica estos casos.

Para medias independientes, la varianza de su diferencia es la suma de sus varianzas. Una variable normal estándar cae entre −1.96-1.96 y 1.961.96 con probabilidad aproximada de 0.95, lo que aporta el multiplicador de una aproximación normal para un intervalo del 95 %. Si 0.4 es la desviación típica entre cuatro ejecuciones, ese primer cálculo da:

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}

Ese multiplicador 1.96 trata la dispersión estimada como si fuera conocida. Con solo cuatro ejecuciones por modelo, usa la distribución t de Student para tener en cuenta la incertidumbre de la dispersión. Bajo los supuestos anteriores, sus grados de libertad son 4+4−2=64+4-2=6 (ocho ejecuciones menos dos medias estimadas). scipy.stats.t.ppf(0.975, 6) da aproximadamente 2.447 en lugar de 1.96; 0.975 deja un 2.5 % fuera en cada extremo de un intervalo del 95 %. Si el supuesto de varianzas iguales no es adecuado, usa un intervalo de Welch, cuyos grados de libertad se calculan de otra manera.

Considera ahora la otra lectura del pie de tabla: 0.4 ya es el error típico de cada media, estimado a partir de esas cuatro ejecuciones. No se divide nada entre 4\sqrt4, y el error típico de la diferencia es de unos 0.566. El multiplicador t sigue siendo necesario. Las dos lecturas dan:

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}

La figura compara la aproximación normal inicial con los dos intervalos t:

Tres intervalos para la misma diferencia de 0.8, suponiendo cuatro ejecuciones independientes y aproximadamente normales por modelo y varianzas poblacionales iguales. Con 0.4 como desviación típica, la aproximación normal da de 0.25 a 1.35 y el intervalo t da de 0.11 a 1.49. Con 0.4 como error típico estimado, el intervalo t da de menos 0.58 a 2.18 y contiene el cero.Tres intervalos para la misma diferencia de 0.8, suponiendo cuatro ejecuciones independientes y aproximadamente normales por modelo y varianzas poblacionales iguales. Con 0.4 como desviación típica, la aproximación normal da de 0.25 a 1.35 y el intervalo t da de 0.11 a 1.49. Con 0.4 como error típico estimado, el intervalo t da de menos 0.58 a 2.18 y contiene el cero.

Cuando 0.4 es la desviación típica, el intervalo t excluye el cero: bajo estos supuestos, los resultados respaldan una diferencia positiva. Cuando 0.4 es el error típico estimado, el intervalo contiene el cero, así que los resultados no establecen qué modelo tiene la puntuación media más alta.

Entropía cruzada y divergencia KL

Durante el entrenamiento, un modelo necesita una pérdida numérica que mida lo bien que concuerdan sus probabilidades predichas con el objetivo de entrenamiento. El algoritmo de entrenamiento cambia los parámetros del modelo para reducir esa pérdida. La entropía cruzada aporta una pérdida así para ejemplos etiquetados o para las probabilidades de un modelo maestro. La divergencia de Kullback–Leibler (KL) mide la discrepancia entre dos distribuciones. Los artículos la usan para entrenar a un estudiante que imite a un maestro o para penalizar los cambios respecto de un modelo de referencia fijo.

Aquí los resultados son discretos, como tokens o clases. Escribe la distribución objetivo como pp y la distribución predicha por el modelo sobre los mismos resultados como qq. Empieza con un resultado observado ii: cuando el modelo le dio probabilidad qiq_i, su pérdida es −log⁡qi-\log q_i. Vale 0 cuando qi=1q_i=1, unos 0.69 cuando qi=0.5q_i=0.5, unos 2.3 cuando qi=0.1q_i=0.1 e infinito cuando qi=0q_i=0.

La entropía cruzada promedia esa pérdida sobre los resultados extraídos del objetivo:

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.

Con una etiqueta one-hot pp, que vale 1 en la clase correcta yy y 0 en el resto, solo cuenta la clase correcta, y H(p,q)=−log⁡qyH(p,q)=-\log q_y: la pérdida de clasificación ordinaria. nn.CrossEntropyLoss de PyTorch la calcula a partir de las puntuaciones brutas del modelo, llamadas logits, y aplica internamente la log-softmax; su entrada no es el vector de probabilidades qq. Con la distribución suave de un modelo maestro como pp, cada clase cuenta en proporción a la probabilidad del maestro. La destilación clásica entrena así a un modelo pequeño con las probabilidades de uno grande. Para el objetivo p=(0.9,0.1)p=(0.9,0.1), dos modelos tienen estas entropías cruzadas 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}

El segundo modelo coincide con el objetivo, y ningún modelo puede hacerlo mejor. Ese mínimo, 0.325 aquí, es H(p)=−∑ipilog⁡piH(p)=-\sum_ip_i\log p_i, la entropía de pp. Es 0 solo para un objetivo one-hot: cuando el propio objetivo es incierto, queda cierta pérdida que ningún modelo puede eliminar.

La divergencia KL resta ese mínimo y conserva solo la pérdida causada por que qq difiera de pp. Se escribe con una barra doble ∥\Vert, que solo separa los dos argumentos; no es la barra de probabilidad condicional ∣\mid de Probabilidad condicional y probabilidad de un texto ni las barras de longitud ∥x∥\Vert x\Vert de la referencia de vectores. Los artículos la usan en lugar de una coma para marcar que el orden importa: el promedio recorre los resultados extraídos del primer argumento.

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

Para el primer modelo de arriba, 0.693−0.325≈0.370.693-0.325\approx0.37. La KL es 0 cuando las dos distribuciones coinciden y positiva en caso contrario.

El orden cambia qué discrepancias se penalizan. Un término con pi>0p_i>0 y qi=0q_i=0 es infinito, así que DKL(p∥q)D_{\mathrm{KL}}(p\Vert q) penaliza a qq por asignar probabilidad cero a algo que pp puede producir. Los resultados con pi=0p_i=0 no suman nada (por convenio 0log⁡0=00\log0=0), así que no aportan penalización directa aunque qi>0q_i>0. Invertir los argumentos da DKL(q∥p)D_{\mathrm{KL}}(q\Vert p), que es infinita siempre que qi>0q_i>0 y pi=0p_i=0. Los resultados con qi=0q_i=0 ahora no suman nada, aunque pi>0p_i>0. Con pp como objetivo, DKL(p∥q)D_{\mathrm{KL}}(p\Vert q) se llama KL directa (forward) y DKL(q∥p)D_{\mathrm{KL}}(q\Vert p) KL inversa (reverse).

Para p=(0.5,0.5)p=(0.5,0.5) y q=(1,0)q=(1,0), la KL directa es infinita, porque qq pasa por alto un resultado que pp produce, mientras que la KL inversa es solo 1×log⁡(1/0.5)+0=log⁡21\times\log(1/0.5)+0=\log2: el resultado que qq omite no suma nada. Para p=(0.9,0.1)p=(0.9,0.1) y q=(0.5,0.5)q=(0.5,0.5), la KL directa es el 0.37 hallado arriba, calculado aquí término a término, y la KL inversa es distinta:

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}

Esta asimetría es la razón por la que la KL se llama divergencia y no distancia.

Como H(p,q)=H(p)+DKL(p∥q)H(p,q)=H(p)+D_{\mathrm{KL}}(p\Vert q), y la entropía H(p)H(p) de un maestro fijo no depende del estudiante, la entropía cruzada frente a un maestro fijo da al estudiante los mismos gradientes que DKL(p∥q)D_{\mathrm{KL}}(p\Vert q). Cambiar un parámetro del estudiante cambia ambas pérdidas en la misma cantidad, así que sus derivadas usadas en el entrenamiento son iguales; Gradientes y optimización explica ese cálculo. Esto permite que el código de clasificación y de destilación clásica use la entropía cruzada. El intercambio funciona solo con el maestro en primer lugar. Con el estudiante en primer lugar, DKL(q∥p)=H(q,p)−H(q)D_{\mathrm{KL}}(q\Vert p)=H(q,p)-H(q), y la propia entropía del estudiante H(q)H(q) cambia a medida que entrena, así que ya no dan los mismos gradientes.

Vectores y matrices

Las ecuaciones de arquitectura describen cálculos sobre arrays de números. La forma (shape) de un array te dice cómo están dispuestos sus números, qué operaciones son válidas y qué producen. Un vector es una lista ordenada de números. Una matriz dispone números en filas y columnas. En el código de ML, tensor es el término general para estos arrays numéricos, incluidos los que tienen más de dos ejes. Un eje es una dimensión a lo largo de la cual se indexa el array: una matriz tiene un eje de filas y un eje de columnas.

El estado oculto (hidden state) de un token es un vector de números calculado dentro del modelo para representar ese token. Supón que procesamos a la vez un lote de BB secuencias, cada una con TT posiciones de token, y que cada estado oculto contiene dd números. El array de estados ocultos tiene forma [B, T, d], que los artículos también escriben como B×T×dB\times T\times d. Sus tres ejes seleccionan la secuencia, la posición del token y el número dentro del vector de ese token. Por ejemplo, [2, 3, 4] contiene dos secuencias, tres vectores de token por secuencia y cuatro números por vector: 24 números en total. Aquí dd es el ancho del vector. La forma enumera los tres tamaños; multiplicarlos da el número de entradas.

Los artículos suelen escribir las formas como pertenencia a un conjunto: a∈Rda\in\mathbb R^d significa que aa es un vector de dd números reales, y A∈Rm×nA\in\mathbb R^{m\times n} significa que AA es una matriz con mm filas y nn columnas. Las letras en negrita a veces marcan vectores o tensores, pero la definición del artículo determina la forma.

En la tabla siguiente, aa y bb son vectores columna: sus números están dispuestos en vertical. El superíndice ⊤\top significa transpuesta: intercambiar filas y columnas. Así, a⊤a^\top es una fila con los mismos números que la columna aa. Las AA y BB mayúsculas de aquí nombran matrices; BB ya no significa el tamaño del lote.

ExpresiónValores que usaQué hace la operaciónResultado
a⊤ba^\top b — producto escalarDos vectores columna, cada uno con dd entradasMultiplica las entradas correspondientes y después suma los productos: ∑iaibi\sum_i a_i b_iUn número
ab⊤ab^\top — producto externoUna columna aa con mm entradas y una columna bb con nn entradasMultiplica cada entrada de aa por cada entrada de bbUna matriz m×nm\times n; la entrada (i,j)(i,j) es aibja_i b_j
ABAB — producto matricialAA con mm filas y kk columnas; BB con kk filas y nn columnasPara la entrada (i,j)(i,j), multiplica los números correspondientes de la fila ii de AA y la columna jj de BB y súmalosUna matriz m×nm\times n; el número de columnas de AA debe ser igual al de filas de BB
A⊙BA\odot B — producto elemento a elementoDos arrays de la misma formaMultiplica las entradas de posiciones coincidentes, sin sumarlasUn array de la misma forma
[a;b][a;b] — concatenaciónColumnas aa y bb con mm y nn entradasColoca las entradas de bb a continuación de las de aaUna columna con m+nm+n entradas; comprueba el convenio del artículo para el eje de unión

Para una comparación concreta, toma a=(12)a=\begin{pmatrix}1\\2\end{pmatrix} y b=(34)b=\begin{pmatrix}3\\4\end{pmatrix}. Mover la transpuesta cambia tanto el cálculo como el resultado:

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}

El producto escalar da una sola puntuación, como en la comparación consulta–clave de la atención. El producto externo conserva un valor distinto para cada pareja de entradas; la actualización de Gated DeltaNet lo usa para construir una actualización matricial a partir de dos vectores.

Un producto de matrices puede reagruparse, (AB)C=A(BC)(AB)C=A(BC), pero no reordenarse; la derivación de MLA usa el reagrupamiento para evitar reconstruir las claves. NumPy escribe la multiplicación de matrices como @ y el producto elemento a elemento como *. Los artículos no heredan las reglas de broadcasting de NumPy: sumar un vector a una matriz exige un eje indicado. Los artículos tampoco coinciden en si un vector es una fila o una columna: la atención apila los tokens como las filas de QQ, mientras que MLA, Gated DeltaNet y LoRA escriben WhWh con vectores columna, y nn.Linear de PyTorch calcula x @ W.T sobre filas.

Una ecuación de arquitectura también puede describir el tamaño de un vector, restringir qué matrices están permitidas o reordenar un producto:

NotaciónSignificado
∥x∥2=∑ixi2\Vert x\Vert_2=\sqrt{\sum_i x_i^2}La longitud euclídea; ∥x∥2\Vert x\Vert^2, sin la raíz, aparece en la pérdida de DDPM
∥x∥1=∑i∣xi∣\Vert x\Vert_1=\sum_i\vert x_i\vertLa suma de valores absolutos
∥A∥2\Vert A\Vert_2La norma espectral: el mayor factor por el que AA aumenta la longitud de un vector; mHC la mantiene en 1 como máximo
rank⁡(A)\operatorname{rank}(A)El número de columnas independientes; la actualización de LoRA tiene rango rr como máximo
det⁡A\det AEl determinante: ∣det⁡A∣\vert\det A\vert es el factor por el que AA escala el volumen, y el signo indica si AA invierte la orientación; el ejemplo de cambio de variables del Apéndice B de este artículo lo usa
A≥0A\geq0Toda entrada es no negativa, como en mHC; A⪰0A\succeq0 es una condición distinta, semidefinida positiva: x⊤Ax≥0x^\top Ax\geq0 para todo xx
II, 1n\mathbf 1_nLa matriz identidad (1 en la diagonal, 0 en el resto, de modo que Ix=xIx=x); un vector de nn unos
(AB)⊤=B⊤A⊤(AB)^\top=B^\top A^\topTransponer un producto invierte el orden; las secciones de RoPE y MLA de la Parte 2 lo usan

Gradientes y optimización

El entrenamiento usa derivadas para decidir cómo cambiar los parámetros del modelo. Sea L\mathcal L una pérdida escalar y θ\theta el vector de todos los parámetros; θi\theta_i es una entrada de ese vector.

La derivada parcial ∂L/∂θi\partial\mathcal L/\partial\theta_i es un solo número, evaluado en los valores actuales de los parámetros. Mide la tasa de cambio de la pérdida cuando cambia solo θi\theta_i y los demás parámetros se mantienen fijos. Léela como «la derivada parcial de la pérdida respecto del parámetro θi\theta_i».

El gradiente ∇θL\nabla_\theta\mathcal L reúne esos números de todos los parámetros en un único vector. Su entrada ii-ésima es ∂L/∂θi\partial\mathcal L/\partial\theta_i. El símbolo ∇\nabla se llama nabla; aquí significa «toma el gradiente». Con un solo parámetro, el gradiente tiene una entrada igual a la derivada ordinaria.

Por ejemplo, toma L(θ1,θ2)=θ12+3θ22\mathcal L(\theta_1,\theta_2)=\theta_1^2+3\theta_2^2. En θ1=2\theta_1=2 y θ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}

La primera derivada parcial, 4, significa que aumentar θ1\theta_1 en 0.01 eleva la pérdida aproximadamente 0.04 mientras θ2\theta_2 permanece fijo. El gradiente contiene esta información para ambos parámetros. El descenso de gradiente resta la derivada de cada parámetro, multiplicada por una tasa de aprendizaje (learning rate) positiva η\eta que controla el tamaño del paso:

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

Con η=0.1\eta=0.1, el ejemplo pasa de (2,1)(2,1) a (1.6,0.4)(1.6,0.4), y la pérdida baja de 7 a 3.04. Para una pérdida derivable con gradiente no nulo, un paso suficientemente pequeño reduce la pérdida. Un gradiente cero no da ninguna actualización.

El subíndice de ∇\nabla indica qué varía. ∇θlog⁡pθ(x)\nabla_\theta\log p_\theta(x) varía los parámetros; ∇xlog⁡pθ(x)\nabla_x\log p_\theta(x) varía la entrada, y los artículos de difusión lo llaman la puntuación (score), que no tiene nada que ver con la puntuación de un benchmark.

Un jacobiano registra las derivadas de varias salidas. Una capa de una red neuronal puede producir muchos números, como los componentes del estado oculto de un token. Para describir cómo responde cada salida a cada entrada, se reúnen las derivadas parciales en una matriz llamada jacobiano. Para y=f(x)y=f(x) con nn números de entrada y mm números de salida, su forma es m×nm\times n: las filas corresponden a las salidas, las columnas a las entradas, y la entrada Jij=∂yi/∂xjJ_{ij}=\partial y_i/\partial x_j mide cómo cambia la salida ii cuando cambia la entrada jj.

Por ejemplo, sea una función que toma dos números y devuelve y1=x1+2x2y_1=x_1+2x_2 e y2=3x1−x2y_2=3x_1-x_2. Su jacobiano es

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}

La segunda columna dice que aumentar x2x_2 en 0.1 manteniendo fijo x1x_1 aumenta y1y_1 en 0.2 y disminuye y2y_2 en 0.1. Este ejemplo es lineal, así que su jacobiano es constante. Para una función no lineal, las entradas pueden depender de la entrada actual y describen cambios pequeños de forma local. Con una sola salida escalar, el jacobiano tiene una fila: las mismas derivadas que el gradiente, transpuestas según nuestro convenio de vectores columna. Deep Learning, §4.3, da las definiciones generales.

La retropropagación (backpropagation) usa estas derivadas para calcular el gradiente de la pérdida a través de capas sucesivas. El ejemplo de cambio de variables del Apéndice B de este artículo usa otra propiedad: el valor absoluto del determinante de un jacobiano cuadrado da el factor local de escala del volumen, que hace falta para ajustar una densidad de probabilidad.

En el entrenamiento, las derivadas describen cambios locales; un objetivo de optimización establece qué deben minimizar o maximizar las actualizaciones. Los artículos distinguen el mejor valor de un objetivo de los parámetros que lo alcanzan: min⁡θf(θ)\min_\theta f(\theta) es el menor valor de ff, mientras que arg min⁡θf(θ)\operatorname*{arg\,min}_\theta f(\theta) da los valores de los parámetros que lo alcanzan. Para f(θ)=(θ−3)2f(\theta)=(\theta-3)^2, el mínimo es 0 y el argmin es 3. Un argmin especifica el resultado deseado, pero deja abierto el algoritmo de actualización.

Por ejemplo, MiniLLM escribe su objetivo como θ=arg min⁡θDKL(qθ∥p)\theta=\operatorname*{arg\,min}_\theta D_{\mathrm{KL}}(q_\theta\Vert p) (ecuación 1), donde qθq_\theta es el modelo estudiante y pp el maestro del que aprende. La sección 2.2 deriva después un gradiente y lo modifica para que el entrenamiento sea más estable; la ecuación (7) es el gradiente que se usa para las actualizaciones. El ejemplo de destilación on-policy explica esos cambios. Leer solo el argmin los pasaría por alto.

Un stop-gradient, sg⁡(x)\operatorname{sg}(x), pasa xx hacia delante sin cambios pero bloquea los gradientes a través de él, como .detach() en PyTorch. Dos expresiones con el mismo valor hacia delante pueden entrenar de forma distinta si una de ellas está separada del grafo. En el ejemplo de GRPO, Hugging Face TRL trata como fija la log-probabilidad del modelo antiguo. En el atajo de destilación que comenta DeepSeek-V4, un log-cociente maestro–estudiante separado del grafo aporta un peso fijo a la actualización.

Conjuntos y restricciones

Una restricción establece qué valores están permitidos. Los artículos suelen expresar las restricciones mediante conjuntos: colecciones de miembros distintos, escritas entre llaves, como {1,2,3}\{1,2,3\}. El orden no importa, así que {3,1,2}\{3,1,2\} nombra el mismo conjunto. Las entradas repetidas cuentan solo una vez. En cambio, los paréntesis de un vector como (1,2,3)(1,2,3) describen una lista ordenada: (3,1,2)(3,1,2) es un vector distinto.

Una vez que un artículo define un conjunto, puede comprobar la pertenencia, combinar conjuntos, contar sus miembros o enunciar una condición sobre ellos. Toma A={1,2,3}A=\{1,2,3\} y B={3,4}B=\{3,4\}:

NotaciónSignificadoEjemplo y cómo leerlo
x∈Ax\in APertenencia: xx pertenece a AA2∈A2\in A: 2 es un miembro de AA
A∪BA\cup BUnión: incluye todos los miembros de cualquiera de los dos conjuntosA∪B={1,2,3,4}A\cup B=\{1,2,3,4\}; incluye el 3 una sola vez
A∩BA\cap BIntersección: conserva solo los miembros comunes a ambos conjuntosA∩B={3}A\cap B=\{3\}
∣A∣\vert A\vertEl número de miembros distintos∣A∣=3\vert A\vert=3
∀\forall«Para todo»: una condición debe cumplirse para todos los miembros nombrados∀x∈A: x>0\forall x\in A:\ x>0: todos los miembros de AA son positivos
∃\exists«Existe»: al menos un miembro debe cumplir la condición∃x∈A: x>2\exists x\in A:\ x>2: AA tiene un miembro mayor que 2, a saber, 3

La notación de formas de Vectores y matrices también nombra conjuntos: Rd\mathbb R^d es el conjunto de todos los vectores de dd números reales, y Rn×d\mathbb R^{n\times d} el conjunto de todas las matrices reales con nn filas y dd columnas. Así, Q∈Rn×dkQ\in\mathbb R^{n\times d_k} especifica qué forma debe tener QQ.

La notación de construcción de conjuntos describe un conjunto mediante una condición: {x∈S∣condition}\{x\in S\mid\text{condition}\} se lee «los miembros de SS que cumplen la condición», como la comprensión de conjuntos de Python {x for x in S if condition(x)}. La barra significa «tal que», no probabilidad condicional; algunos artículos usan dos puntos en su lugar. Ejemplos de esta serie son las matrices permitidas de mHC, los expertos seleccionados de MoE y los tokens seleccionados de la atención dispersa.

DAPO, un método de entrenamiento que filtra grupos de respuestas generadas, conserva una pregunta solo cuando algunas respuestas son correctas y otras erróneas. Para GG respuestas muestreadas o1,…,oGo_1,\ldots,o_G y la respuesta de referencia aa, escribe el conjunto de los índices de las respuestas correctas como

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

El filtro es 0<∣C∣<G0<\vert C\vert<G. Usar índices hace explícito el recuento: dos muestras con texto idéntico siguen contando como dos respuestas. El artículo de DAPO escribe en cambio el conjunto sobre las respuestas oio_i; leído literalmente como un conjunto de textos, esa forma cuenta una sola vez dos respuestas idénticas.

Ejercicios

  1. Formas. QQ es 4×84\times8, KK es 6×86\times8 y VV es 6×36\times3. ¿Qué formas tienen las puntuaciones y la salida? ¿Sobre qué eje actúa la softmax?
  2. Softmax. Calcula la softmax de (0,log⁡4)(0,\log4). ¿Cambia el resultado si se suma 100 a las dos entradas?
  3. Promedios. Una respuesta tiene un único token con pérdida 4; otra tiene tres tokens con pérdida 0. Calcula el promedio por token y el promedio por respuesta.
  4. Condicionamiento. De 200 respuestas, 120 son correctas, 80 pasan la validación de formato y 60 cumplen ambas cosas. Halla P(correct∣valid)P(\text{correct}\mid\text{valid}) y P(valid∣correct)P(\text{valid}\mid\text{correct}).
  5. KL. Para un maestro p=(1,0)p=(1,0) y un estudiante q=(0.5,0.5)q=(0.5,0.5), calcula las dos direcciones de la KL.
  6. Conjuntos. DAPO conserva una pregunta solo si 0<∣C∣<G0<\vert C\vert<G, donde CC contiene los índices de las respuestas correctas entre GG muestras. Con G=4G=4, ¿conserva una pregunta cuyas respuestas puntúan (1,1,1,1)(1,1,1,1)? ¿Y una cuyas respuestas puntúan (1,0,1,1)(1,0,1,1)? ¿Cambia la primera respuesta si las cuatro muestras contienen un texto correcto idéntico?

Respuestas:

  1. Las puntuaciones son 4×64\times6 y la salida es 4×34\times3. La softmax recorre las seis claves de la fila de cada consulta.

  2. (1/5,4/5)(1/5,4/5). Sumar el mismo número a todas las entradas deja la softmax sin cambios, pero calcular e100e^{100} directamente desborda en floats de 32 bits.

  3. Los dos promedios:

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

  5. DKL(p∥q)=log⁡2≈0.69D_{\mathrm{KL}}(p\Vert q)=\log2\approx0.69, y DKL(q∥p)=∞D_{\mathrm{KL}}(q\Vert p)=\infty, porque el estudiante pone probabilidad en un resultado que el maestro descarta.

  6. No: C={1,2,3,4}C=\{1,2,3,4\} tiene cuatro miembros, que es igual a GG. Sí: C={1,3,4}C=\{1,3,4\} tiene tres miembros, entre 0 y 4. El texto idéntico no cambia la primera respuesta: son cuatro muestras distintas, así que sus cuatro índices siguen contando.

Apéndice A. Letras griegas

Los usos indicados son ejemplos habituales; cada artículo sigue definiendo lo que significan sus símbolos.

LetraNombreUsos habituales en los artículos de ML
α\alphaalfaUn peso de mezcla o una escala; un decaimiento (Gated DeltaNet); un calendario de ruido (DDPM)
β\betabetaUna intensidad de penalización (DPO, GRPO); una intensidad de escritura (Gated DeltaNet); un calendario de ruido (DDPM)
γ\gammagammaUn factor de descuento en RL; un tamaño de paso (la actualización del sesgo en DeepSeek-V3)
δ,Δ\delta,\DeltadeltaUna diferencia o un cambio
ϵ,ε\epsilon,\varepsilonépsilonRuido (DDPM); un rango de recorte (GRPO); un pequeño estabilizador
η\etaetaLa tasa de aprendizaje
θ,Θ\theta,\ThetathetaParámetros del modelo; los ángulos de rotación de RoPE
λ,Λ\lambda,\LambdalambdaUn peso de regularización; un autovalor
μ\mumuUna media; el número de pasos de gradiente por lote en el Algoritmo 1 de DeepSeekMath
π,Π\pi,\PipiUna política; ∏\prod es el operador producto
ρ\rhorhoUn cociente de probabilidades, como en la sección de GRPO de la Parte 3; una correlación
σ,Σ\sigma,\SigmasigmaLa sigmoide (DPO); una desviación típica; una covarianza; ∑\sum es el operador suma
τ\tautauUna temperatura; un umbral; una trayectoria en RL
ϕ,φ,Φ\phi,\varphi,\PhiphiLos parámetros de una segunda red, como un codificador; características; un ángulo
ψ,Ψ\psi,\PsipsiLos parámetros de otra red, como el modelo de valor VψV_\psi en el PPO de DeepSeekMath
ω,Ω\omega,\OmegaomegaUna frecuencia; Ω\Omega es también una cota inferior en complejidad, o un conjunto de resultados

Variantes como ϕ/φ\phi/\varphi y ϵ/ε\epsilon/\varepsilon suelen ser la misma letra en otra tipografía, pero un artículo puede usar ambas para variables distintas.

Apéndice B. Otras familias de ecuaciones

Formas de ecuación que esta serie no trabaja, con las definiciones que necesita cada una:

Modelos de espacio de estados selectivos. Un modelo de espacio de estados procesa una secuencia actualizando un estado almacenado en cada paso. Una actualización de la forma ht=Aˉtht−1+Bˉtxth_t=\bar A_th_{t-1}+\bar B_tx_t, yt=Cthty_t=C_th_t combina el estado anterior con la entrada actual y después calcula una salida. Aquí xtx_t es la entrada actual, hth_t el estado almacenado e yty_t la salida. Las matrices Aˉt\bar A_t, Bˉt\bar B_t y CtC_t sirven, respectivamente, para transformar el estado anterior, añadir la contribución de la entrada y producir la salida. Las barras marcan parámetros convertidos de un modelo de tiempo continuo a pasos discretos; no significan medias. En Mamba, los parámetros de la actualización dependen de la entrada actual, que es lo que significa «selectivo».

Ecuaciones diferenciales estocásticas. dx/dt=f(x,t)dx/dt=f(x,t) describe cómo cambia un estado xx con el tiempo tt: ff es su tasa de cambio. Una ecuación diferencial estocástica (SDE, de stochastic differential equation) añade cambios aleatorios, dXt=f(Xt,t) dt+g(Xt,t) dWtdX_t=f(X_t,t)\,dt+g(X_t,t)\,dW_t. Aquí ff describe el cambio determinista, gg fija la escala del ruido y dWtdW_t es un incremento de movimiento browniano. Para aproximarla en código, el método de Euler–Maruyama usa un paso de tiempo pequeño Δt\Delta t y sustituye dWtdW_t por ruido gaussiano de varianza Δt\Delta t. La sección 5.1 de The Little Book of Generative AI Foundations, de Tianhua Chen, da una actualización así; la §6.4 del mismo libro usa SDE para describir los modelos de difusión.

Cambio de variables. Transformar una variable aleatoria cambia su densidad según cómo la transformación cambia el volumen local. Supón que y=f(x)y=f(x) transforma un espacio en otro de la misma dimensión, y que tanto ff como su inversa f−1f^{-1} son derivables. Las densidades antes y después de la transformación, pXp_X y pYp_Y, cumplen 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. La inversa f−1f^{-1} recupera xx a partir de yy. Su jacobiano Jf−1J_{f^{-1}} es la matriz cuadrada de derivadas primeras; el valor absoluto de su determinante corrige el cambio local de volumen. Por ejemplo, si y=2xy=2x en una dimensión, la densidad pasa a ser pY(y)=pX(y/2)/2p_Y(y)=p_X(y/2)/2: duplicar la anchura divide la densidad entre dos. Los flujos normalizadores (normalizing flows) usan transformaciones invertibles como esta para modelar densidades; la §7.1 del libro de Tianhua Chen explica el método.

Objetivos min–max. En las redes generativas adversarias (GAN), un generador GG produce ejemplos y un discriminador DD intenta distinguirlos de los datos reales. El objetivo V(D,G)V(D,G) mide el éxito del discriminador: DD lo maximiza mientras GG lo minimiza. El objetivo min⁡Gmax⁡DV(D,G)\min_G\max_DV(D,G) (ecuación 1) dice: para cada generador posible, considera el mejor discriminador contra él y elige el generador con el menor objetivo resultante. El entrenamiento no resuelve esa maximización interna de forma exacta. El Algoritmo 1 del artículo alterna kk pasos de ascenso de gradiente sobre DD con un paso de descenso de gradiente sobre GG; sus experimentos usaron k=1k=1.

El símplex de probabilidad. Un vector de probabilidad tiene entradas no negativas que suman 1. El conjunto de todos esos vectores con KK entradas se llama símplex de probabilidad y se escribe ΔK−1={p∈RK∣pi≥0, ∑ipi=1}\Delta^{K-1}=\{p\in\mathbb R^K\mid p_i\geq0,\ \sum_ip_i=1\}. Toda salida de una softmax pertenece a él. Aquí Δ\Delta nombra un conjunto, y el superíndice K−1K-1 es su dimensión, no una potencia: una vez elegidas K−1K-1 probabilidades, la última debe hacer que la suma sea 1. Con dos opciones, toda distribución tiene la forma (a,1−a)(a,1-a) para 0≤a≤10\leq a\leq1, así que solo hay un número libre.

Normalización. La normalización reescala los valores según la media y la dispersión de un grupo elegido. Una forma habitual es x^=(x−μ)/σ2+ϵ\hat x=(x-\mu)/\sqrt{\sigma^2+\epsilon}, donde μ\mu es una media, σ2\sigma^2 una varianza y ϵ\epsilon un número positivo pequeño que evita la división por cero. La ecuación por sí sola no dice qué entradas se usan para calcular la media y la varianza. Para un lote de vectores de características, la normalización por lotes (batch normalization) las calcula por separado para cada característica a lo largo de los ejemplos. La normalización de capa (layer normalization) de un Transformer las calcula por separado para cada token a lo largo de sus características. Comprueba los ejes especificados al comparar implementaciones.

Fuentes y versiones

Los números de sección y de ecuación se refieren a las versiones enlazadas aquí.

  1. Tianhua Chen. The Little Book of Generative AI Foundations: An Intuitive Mathematical Primer. 2026. Versión 2; §2.4 y §3.2 tratan la desigualdad de Jensen y el ELBO, §5.1 y §6.4 el ruido en tiempo continuo.
  2. Vaswani et al. Attention Is All You Need. 2017. Versión 7, §3.2.1, ecuación (1) y nota al pie 4.
  3. Dai et al. DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models. 2024. Segmentación fina de expertos y recuentos de combinaciones, §3.1; ablación, §4.4 y Figura 3.
  4. Shao et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. 2024. Versión 3, §1.1, §4.1.1, ecuaciones (1)–(4) y Algoritmo 1.
  5. DeepSeek-AI. DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model. 2024. Versión 5, §2.1.1–2.1.3, ecuaciones (9)–(19) y Apéndice C.
  6. DeepSeek-AI. DeepSeek-V3 Technical Report. 2024–2025. Versión 2, §2.1.2, ecuaciones (12)–(18).
  7. DeepSeek-AI. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. 2025. Versión 1: §2.2.1, ecuaciones (1)–(3). Versión 2, 2026: §2.1 y Suplemento A.3.
  8. DeepSeek-AI. DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence. 2026. Versión 1: §2.2, ecuaciones (1)–(8); §5.1.2, ecuación (29).
  9. Rafailov et al. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. 2023–2024. Versión 3, §4, ecuación (7).
  10. Gu et al. MiniLLM: Knowledge Distillation of Large Language Models. 2023–2024. Versión 4, §2.1, ecuación (1) y §2.2, ecuaciones (2) y (7).
  11. Yu et al. DAPO: An Open-Source LLM Reinforcement Learning System at Scale. 2025. Versión 2, §3.2–3.3, ecuaciones (11)–(12).
  12. Gu y 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. Versión 3, §3.1, ecuación (10) y §3.3–3.4.
  14. Ho, Jain y Abbeel. Denoising Diffusion Probabilistic Models. 2020. Versión 2, §2, ecuaciones (4)–(5); §3.2, ecuación (12); §3.4, ecuación (14); y Algoritmos 1–2.
  15. Goodfellow et al. Generative Adversarial Nets. 2014. Ecuación (1) y Algoritmo 1.
  16. Chen et al. Evaluating Large Language Models Trained on Code. 2021. Versión 2, §2.1, ecuación (1) y Figura 3.
  17. Hugging Face TRL. GRPOTrainer y GRPOConfig en el commit c6eac19, octubre de 2026.
  18. Stanford CS229. Probability Theory Review y Linear Algebra Review and Reference.
  19. Dive into Deep Learning. Preliminaries.
  20. Britz, Goldie, Luong y Le. Massive Exploration of Neural Machine Translation Architectures. 2017. Versión 2, Tabla 5; citado por Attention Is All You Need para la comparación entre atención de producto escalar y atención aditiva.