Curso de Matemáticas para IA · Lección 6 de 180

Notación sigma para IA: cómo las pérdidas se convierten en un único objetivo de entrenamiento

Aprende la notación de sumas y productos, expande los límites en bucles y usa sumas y medias de NumPy para convertir errores por ejemplo en un objetivo de error cuadrático medio.

Comparte este artículo

Un modelo hace cuatro predicciones y produce cuatro pérdidas cuadráticas: 11, 44, 11 y 99. Un paso de entrenamiento necesita un objetivo, no cuatro números sueltos. Sumar las pérdidas da 1515; promediarlas da 3.753.75. Ambas son reducciones válidas, pero responden a preguntas distintas y producen escalas diferentes en el código.

La notación sigma convierte esa suma repetida en una expresión compacta. Al terminar esta lección podrás expandir una suma o un producto a partir de sus límites, traducirlo a un bucle, calcular el error cuadrático medio (MSE) en NumPy y detectar reducciones que usan límites, denominador o eje incorrectos.

Esta lección se apoya en los valores indexados de la lección 5: una vez que i\ell_i significa «la pérdida del ejemplo ii», la siguiente tarea es combinar todas las pérdidas indexadas. El sitio complementario oficial de Mathematics for Machine Learning es la página de referencia del libro del curso; su capítulo introductorio motiva el camino desde los datos numéricos hasta los modelos y los objetivos de aprendizaje.

Los límites indican dónde empieza y termina una suma

La letra griega sigma mayúscula, \sum, significa «sumar una secuencia de términos». Por ejemplo,

i=25ai\sum_{i=2}^{5} a_i

hay cuatro partes que leer:

  • ii es el índice que cambia;
  • 22 es el límite inferior, donde empieza ii;
  • 55 es el límite superior, donde termina ii; y
  • aia_i es el término que se evalúa en cada índice.

Ambos límites están incluidos, así que la expansión es

i=25ai=a2+a3+a4+a5.\sum_{i=2}^{5} a_i=a_2+a_3+a_4+a_5.

La expansión también es un algoritmo. Un total acumulado empieza en cero y absorbe un término cada vez:

a = [10, 20, 30, 40, 50]
n = 5
total = 0

for i in range(1, n + 1):
    total += a[i - 1]

print(total)
150

El índice matemático va de 11 a nn, mientras que la lista de Python usa posiciones de 00 a n1n-1. El valor de parada de Python se excluye, por lo que range(1, n + 1) es necesario para incluir nn. Escribir range(1, n) omite silenciosamente el último término. La expresión a[i - 1] traduce el índice matemático que empieza en uno a la posición de lista que empieza en cero, presentada en la lección 5.

La notación de producto cambia el valor inicial y la operación

La letra griega pi mayúscula, \prod, significa «multiplicar una secuencia de términos». Usa el mismo tipo de índice y límites inclusivos:

i=25ai=a2a3a4a5.\prod_{i=2}^{5} a_i=a_2a_3a_4a_5.

Para a2=2a_2=2, a3=3a_3=3, a4=1a_4=1 y a5=4a_5=4,

i=25ai=2×3×1×4=24.\prod_{i=2}^{5}a_i=2\times3\times1\times4=24.

El bucle correspondiente empieza en 11, porque multiplicar por 11 no cambia un número:

values = [2, 3, 1, 4]
product = 1

for value in values:
    product *= value

print(product)
24

Empezar product en 0 haría que todos los resultados posteriores fueran cero. Esta diferencia también explica los casos vacíos estándar. Una suma sin términos es 00 y un producto sin términos es 11: cada uno usa el valor inicial neutro que deja sin cambios las adiciones o multiplicaciones posteriores. NumPy documenta las mismas convenciones para np.sum y np.prod.

Operación repetidaNotaciónEl acumulador empieza enResultado vacío
Suma\sum0000
Multiplicación\prod1111

Los productos serán especialmente importantes cuando el curso llegue a las probabilidades conjuntas. Por ahora, el hábito de implementación clave es hacer coincidir el acumulador y su valor inicial con la notación.

Cuatro errores de predicción se convierten en un único error cuadrático medio

Supón que un modelo de regresión predice un número para cada uno de cuatro ejemplos:

y^=(2,0,4,5),y=(1,2,5,2).\hat{\boldsymbol{y}}=(2,0,4,5), \qquad \boldsymbol{y}=(1,2,5,2).

Aquí y^i\hat y_i es la predicción del ejemplo ii, y yiy_i es su objetivo. Define la pérdida cuadrática por ejemplo como

i=(y^iyi)2.\ell_i=(\hat y_i-y_i)^2.

El acumulador interactivo muestra el estado intermedio que comprime la notación sigma. Su tabla sigue siendo una alternativa textual completa: la fila ii enumera y^i\hat y_i, yiy_i, la pérdida cuadrática y si esa pérdida ya entró en el total acumulado.

Construye el objetivo de entrenamiento ejemplo a ejemplo. Reproduce la secuencia o avanza con los botones.
Predicciones, objetivos, pérdidas cuadráticas y estado del acumulador
Ejemplo Predicción Objetivo Pérdida cuadráticaEstado del acumulador
1211 Se añade ahora
2024 En espera
3451 En espera
4529 En espera
Suma acumulada1
Términos incluidos
1
Media acumulada
1 ÷ 1 = 1.00

Paso 1 de 4: la suma parcial es 1.

Después de que las cuatro filas entren en el acumulador, la suma acumulada es 1515. Al dividirla por las cuatro filas incluidas se obtiene el MSE, 3.753.75. La animación no cambia las matemáticas; hace visible la actualización repetida total = total + loss.

NumPy refleja la fórmula

NumPy puede mantener visibles las pérdidas por ejemplo antes de reducirlas:

import numpy as np

y_true = np.array([1.0, 2.0, 5.0, 2.0])
y_pred = np.array([2.0, 0.0, 4.0, 5.0])

squared_losses = (y_pred - y_true) ** 2
total_squared_error = np.sum(squared_losses)
mse = np.mean(squared_losses)

print("per-example squared losses:", squared_losses)
print("sum:", total_squared_error)
print("mean squared error:", mse)
per-example squared losses: [1. 4. 1. 9.]
sum: 15.0
mean squared error: 3.75

La documentación de np.sum define una reducción sobre los elementos de un array. La documentación de np.mean define la media aritmética y dice que, de forma predeterminada, usa el array aplanado. En este ejemplo unidimensional, aplanarlo no cambia nada: se reducen las cuatro entradas.

Conservar squared_losses como un array con nombre es útil para depurar. Revela si un ejemplo domina el objetivo y permite que una prueba compare la implementación con los cuatro cálculos manuales anteriores.

Un eje decide qué índices desaparecen

Con un array de pérdidas multidimensional, «tomar la media» está incompleto hasta que se aclara el eje. Considera dos ejemplos, cada uno con tres pérdidas de salida:

L=[141904].L= \begin{bmatrix} 1 & 4 & 1\\ 9 & 0 & 4 \end{bmatrix}.

Las filas son ejemplos y las columnas son salidas. El argumento axis de NumPy nombra el eje que se va a reducir:

losses = np.array([
    [1.0, 4.0, 1.0],
    [9.0, 0.0, 4.0],
])

print("all six losses:", np.mean(losses))
print("one mean per example:", np.mean(losses, axis=1))
print("one mean per output:", np.mean(losses, axis=0))
all six losses: 3.1666666666666665
one mean per example: [2.         4.33333333]
one mean per output: [5.  2.  2.5]
ExpresiónDirección reducidaResultado restante
np.mean(losses)ambos ejesun escalar para las seis pérdidas
np.mean(losses, axis=1)columnas dentro de cada filaun valor por ejemplo
np.mean(losses, axis=0)filas dentro de cada columnaun valor por salida

Usar axis=0 cuando el modelo necesita una pérdida por ejemplo es un error semántico. El código se ejecuta y los números parecen plausibles, pero el índice superviviente significa «salida», no «ejemplo». La documentación directa de NumPy para sum y mean especifica que axis=None reduce el array completo, mientras que un entero selecciona el eje a lo largo del que se hace la reducción.

La suma y la media tienen escalas distintas

Para una colección fija no vacía de nn pérdidas,

mean(1,,n)=1nsum(1,,n).\operatorname{mean}(\ell_1,\ldots,\ell_n) =\frac{1}{n}\operatorname{sum}(\ell_1,\ldots,\ell_n).

La media es una suma reescalada, pero la escala importa cuando cambian los tamaños de lote. Cuatro ejemplos con una pérdida de 22 cada uno tienen suma 88 y media 22; ocho ejemplos así tienen suma 1616 y la misma media, 22. Una suma mide la pérdida total de la colección. Una media mide la pérdida por elemento incluido.

Durante el entrenamiento del modelo, la regla de predicción produce una o más pérdidas por cada ejemplo. Una reducción convierte esos valores en el objetivo escalar que se usa para evaluar los parámetros actuales. Por tanto, elegir entre suma, media o una variante enmascarada y ponderada pertenece al contrato matemático del modelo, no solo al formato del código.

La lección 7 usará potencias y raíces para razonar sobre la escala del modelo. Hasta que esa lección esté disponible, la página del curso Math for AI es el lugar fiable para continuar en el orden de publicación. La notación aprendida aquí reaparecerá a lo largo del curso: las sumas construyen combinaciones ponderadas y objetivos, mientras que los productos construyen factores repetidos.

Comprueba lo que has entendido

Pregunta 1

Expande la suma desde i = 3 hasta i = 6: Σᵢ₌₃⁶ (2i − 1). Después calcula su valor.

Mostrar la solución paso a paso

El límite inferior es 3 y el superior es 6, así que aparecen ambos extremos:

i=36(2i1)=(231)+(241)+(251)+(261).\sum_{i=3}^{6}(2i-1) =(2\cdot3-1)+(2\cdot4-1)+(2\cdot5-1)+(2\cdot6-1).

Evalúa cada término indexado antes de sumarlos:

5+7+9+11=32.5+7+9+11=32.

Hay 63+1=46-3+1=4 términos. Contar solo tres indicaría que se ha omitido un extremo.

Pregunta 2

Un bucle de Python debe implementar Σᵢ₌₁ⁿ aᵢ, pero usa for i in range(1, n). ¿Qué término falta y cómo debe indexar el bucle una lista a indexada desde cero?

Mostrar la solución paso a paso

Python excluye el valor de parada de range, por lo que range(1, n) produce 1,2,,n11,2,\ldots,n-1. Falta el término ana_n.

Incluye el límite superior matemático deteniéndote en n + 1, y luego resta 1 al acceder a la lista indexada desde cero:

total = 0
for i in range(1, n + 1):
    total += a[i - 1]

Ahora i=1i=1 lee a[0] e i=ni=n lee a[n - 1], de modo que cada término desde a1a_1 hasta ana_n aparece exactamente una vez.

Pregunta 3

Expande ∏ₖ₌₂⁴ (k + 1), calcúlalo y explica por qué el acumulador del bucle debe comenzar en 1.

Mostrar la solución paso a paso

Los límites inclusivos dan los índices 22, 33 y 44:

k=24(k+1)=(2+1)(3+1)(4+1)=3×4×5=60.\prod_{k=2}^{4}(k+1)=(2+1)(3+1)(4+1)=3\times4\times5=60.

Un bucle necesita un valor antes de ver el primer término. Empezar en 11 conserva esa primera multiplicación porque 1×3=31\times3=3. Empezar en 00 produciría 0×3×4×5=00\times3\times4\times5=0, borrando todos los términos.

Pregunta 4

Para los objetivos (3, 1, 2) y las predicciones (1, 2, 2), calcula cada pérdida cuadrática, su suma y el MSE.

Mostrar la solución paso a paso

Resta el objetivo de la predicción para cada ejemplo:

(13,  21,  22)=(2,1,0).(1-3,\;2-1,\;2-2)=(-2,1,0).

Eleva al cuadrado esos errores para obtener las pérdidas por ejemplo:

(1,2,3)=((2)2,12,02)=(4,1,0).(\ell_1,\ell_2,\ell_3)=((-2)^2,1^2,0^2)=(4,1,0).

Su suma es 4+1+0=54+1+0=5. Hay tres ejemplos, así que

MSE=13i=13i=531.667.\operatorname{MSE}=\frac{1}{3}\sum_{i=1}^{3}\ell_i =\frac{5}{3}\approx1.667.

El decimal es una aproximación; 5/35/3 es el valor exacto.

Pregunta 5

El lote A tiene las pérdidas (2, 2). El lote B tiene las pérdidas (2, 2, 2, 2). Compara sus sumas y medias. ¿Qué reducción conserva la escala por ejemplo?

Mostrar la solución paso a paso

Para el lote A,

sum(A)=2+2=4,mean(A)=42=2.\operatorname{sum}(A)=2+2=4, \qquad \operatorname{mean}(A)=\frac{4}{2}=2.

Para el lote B,

sum(B)=2+2+2+2=8,mean(B)=84=2.\operatorname{sum}(B)=2+2+2+2=8, \qquad \operatorname{mean}(B)=\frac{8}{4}=2.

La suma se duplica porque el lote B contiene el doble de ejemplos. La media permanece en 22, por lo que conserva la escala de pérdida por ejemplo en esta comparación.

Pregunta 6

¿Cuál es la suma vacía y cuál es el producto vacío? ¿Qué error de implementación aparece si ambos acumuladores comienzan en 0?

Mostrar la solución paso a paso

El valor neutro de la suma es 00, por lo que una suma que no recibe términos permanece en 00. El valor neutro de la multiplicación es 11, por lo que un producto que no recibe términos permanece en 11:

iai=0,iai=1.\sum_{i\in\varnothing}a_i=0, \qquad \prod_{i\in\varnothing}a_i=1.

Empezar el acumulador de una suma en 0 es correcto. Empezar el acumulador de un producto en 0 es un error: incluso una secuencia no vacía se vuelve cero porque cada actualización tiene la forma 0×ai=00\times a_i=0. El acumulador del producto debe comenzar en 1.

Pregunta 7

Un array de pérdidas tiene forma (32, 5), organizado como ejemplo × salida. ¿Qué expresión de NumPy produce una media por ejemplo? Explica qué devolvería el eje incorrecto.

Mostrar la solución paso a paso

Cada fila contiene las cinco pérdidas de salida de un ejemplo. Para combinar las columnas dentro de cada fila, reduce el eje 1:

per_example_loss = np.mean(losses, axis=1)

El eje 1 tiene tamaño 5 y desaparece, dejando la forma (32,): un valor para cada uno de los 32 ejemplos.

Usar axis=0 reduciría en cambio el eje de los 32 ejemplos. Dejaría la forma (5,), con una media por cada posición de salida a través del lote. Esos números pueden ser válidos, pero responden a la pregunta equivocada.

Fuentes

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.sum
  4. NumPy documentation: numpy.prod
  5. NumPy documentation: numpy.mean