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.
Un modelo hace cuatro predicciones y produce cuatro pérdidas cuadráticas: , , y . Un paso de entrenamiento necesita un objetivo, no cuatro números sueltos. Sumar las pérdidas da ; promediarlas da . 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 significa «la pérdida del ejemplo », 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, , significa «sumar una secuencia de términos». Por ejemplo,
hay cuatro partes que leer:
- es el índice que cambia;
- es el límite inferior, donde empieza ;
- es el límite superior, donde termina ; y
- es el término que se evalúa en cada índice.
Ambos límites están incluidos, así que la expansión es
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 a , mientras que la lista de Python usa posiciones de a . El valor de parada de Python se excluye, por lo que range(1, n + 1) es necesario para incluir . 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, , significa «multiplicar una secuencia de términos». Usa el mismo tipo de índice y límites inclusivos:
Para , , y ,
El bucle correspondiente empieza en , porque multiplicar por 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 y un producto sin términos es : 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 repetida | Notación | El acumulador empieza en | Resultado vacío |
|---|---|---|---|
| Suma | |||
| Multiplicación |
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:
Aquí es la predicción del ejemplo , y es su objetivo. Define la pérdida cuadrática por ejemplo como
El acumulador interactivo muestra el estado intermedio que comprime la notación sigma. Su tabla sigue siendo una alternativa textual completa: la fila enumera , , la pérdida cuadrática y si esa pérdida ya entró en el total acumulado.
| Ejemplo | Predicción | Objetivo | Pérdida cuadrática | Estado del acumulador |
|---|---|---|---|---|
| 1 | 2 | 1 | 1 | Se añade ahora |
| 2 | 0 | 2 | 4 | En espera |
| 3 | 4 | 5 | 1 | En espera |
| 4 | 5 | 2 | 9 | En espera |
- 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 . Al dividirla por las cuatro filas incluidas se obtiene el MSE, . 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:
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ón | Dirección reducida | Resultado restante |
|---|---|---|
np.mean(losses) | ambos ejes | un escalar para las seis pérdidas |
np.mean(losses, axis=1) | columnas dentro de cada fila | un valor por ejemplo |
np.mean(losses, axis=0) | filas dentro de cada columna | un 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 pérdidas,
La media es una suma reescalada, pero la escala importa cuando cambian los tamaños de lote. Cuatro ejemplos con una pérdida de cada uno tienen suma y media ; ocho ejemplos así tienen suma y la misma media, . 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:
Evalúa cada término indexado antes de sumarlos:
Hay 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 . Falta el término .
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 lee a[0] e lee a[n - 1], de modo que cada término desde hasta 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 , y :
Un bucle necesita un valor antes de ver el primer término. Empezar en conserva esa primera multiplicación porque . Empezar en produciría , 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:
Eleva al cuadrado esos errores para obtener las pérdidas por ejemplo:
Su suma es . Hay tres ejemplos, así que
El decimal es una aproximación; 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,
Para el lote B,
La suma se duplica porque el lote B contiene el doble de ejemplos. La media permanece en , 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 , por lo que una suma que no recibe términos permanece en . El valor neutro de la multiplicación es , por lo que un producto que no recibe términos permanece en :
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 . 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.