Lección 5

Entropía cruzada: medir el error

Para que una red pueda mejorar, necesita una señal que le diga qué tan equivocada está y en qué dirección corregirse. La función de pérdida es esa señal.

1. El meteorólogo apostador

Imagina dos meteorólogos que hacen sus predicciones en forma de apuesta. El día de ayer:

Y efectivamente llovió. ¿A quién castigas más? Al B, que estaba casi seguro de que no llovería. Eso es exactamente lo que hace la entropía cruzada: penaliza más a quien estaba más equivocado.

🌧️ La fórmula -log(p) captura eso matemáticamente. Si el modelo le dio p=0.90 a la respuesta correcta, la penalización es pequeña: -log(0.90) = 0.10. Si le dio p=0.10, la penalización es alta: -log(0.10) = 2.30. Si le dio p=0.01, la penalización es enorme: -log(0.01) = 4.60.

2. La función logaritmo que necesitas saber

No necesitas saber cálculo para entender esto. Solo necesitas saber que el logaritmo tiene una propiedad clave: cuando p se acerca a 1 (mucha confianza correcta), el valor es cercano a 0. Cuando p se acerca a 0 (mucha confianza equivocada), el valor es enorme.

Curva · -log(p): penalización según probabilidad asignada

La curva sube exponencialmente cuando p se acerca a 0. Cuanto menos le crees a la respuesta correcta, más te penaliza.

Prob. asignada (p)-log(p)Interpretación
p = 0.990.01Muy seguro y correcto ✅
p = 0.900.10Muy seguro y correcto ✅
p = 0.500.69Mitad y mitad 🤔
p = 0.102.30Poco seguro, pero correcto ⚠️
p = 0.0373.30Igual que azar (1/27) — inicio del entrenamiento
p = 0.014.60Muy seguro pero muy equivocado ❌

3. Paso a paso: calculando la pérdida

✍️ El modelo ve "karpath" y debe predecir 'y'
El modelo calcula 27 logits (uno por posible siguiente carácter):
  logits = [0.3, -1.2, 0.8, -0.5, 0.2, ..., 2.1, ...]
                                              ↑ índice 24 = 'y'

Paso 1: Softmax — convertir logits a probabilidades
  Para cada logit: exp(logit) / suma(exp(todos los logits))

  Supongamos que softmax da:
    p('a') = 0.04,  p('b') = 0.01, ...
    p('y') = 0.72  ← la respuesta correcta
    p('z') = 0.02, ...

Paso 2: Pérdida para este token
  loss = -log(p('y'))
       = -log(0.72)
       = 0.33   ← pérdida baja, el modelo lo hizo bien ✅

---
Ahora supongamos un modelo mal entrenado:
    p('y') = 0.04  ← le da poca probabilidad a la respuesta correcta

  loss = -log(0.04)
       = 3.22   ← pérdida alta, necesita mejorar ❌
      

La pérdida promedio sobre todo el dataset

En la práctica no calculamos la pérdida para un solo token — la calculamos para todos los tokens de todos los nombres y promediamos. A ese promedio lo llamamos la cross-entropy loss (entropía cruzada).

✍️ La pérdida inicial de 3.3 — explicada desde cero
Al inicio del entrenamiento, los pesos de la red son aleatorios.
Eso significa que el modelo no sabe nada — asigna probabilidades
casi iguales a todos los 27 tokens.

Probabilidad uniforme para cada token:
  p = 1/27 = 0.037

Pérdida para un token cuando el modelo no sabe nada:
  loss = -log(0.037) = 3.30

Por eso el artículo de Karpathy dice:
"La pérdida empieza en ~3.3"
→ Es exactamente lo que esperamos si el modelo no aprendió nada.

Después de 1000 pasos de entrenamiento, la pérdida baja a ~2.37.
Eso significa que el modelo ya sabe algo: algunas letras son
mucho más probables que otras después de cada carácter.
      

🎮 Pruébalo: la penalización en vivo

0.72

4. ¿Por qué -log y no simplemente 1-p?

Una pregunta razonable. Si el modelo da p=0.9 al carácter correcto, el "error" podría ser simplemente 1 - 0.9 = 0.1. ¿Por qué usar logaritmos?

Dos razones:

  1. Escala: -log(p) castiga mucho más que 1-p cuando el modelo está muy equivocado. Si p=0.01, entonces 1-p=0.99 (parece cerca de 1), pero -log(0.01)=4.6 (enorme penalización). Eso crea una señal de aprendizaje mucho más clara.
  2. Propiedad matemática: El gradiente de -log(softmax(logits)) tiene una forma muy limpia que simplifica el cálculo del backpropagation. El gradiente es simplemente p - 1 para el token correcto y p para los incorrectos.
🔑 La función de pérdida no es arbitraria. La entropía cruzada tiene propiedades matemáticas que la hacen ideal para entrenamiento de clasificadores. En nuestro caso, predecir el siguiente carácter es un problema de clasificación de 27 clases.

5. Lo que aprendiste

En esta lección:
  • La entropía cruzada es la función de pérdida estándar para clasificación: loss = -log(p_correcta).
  • Si el modelo le da alta probabilidad a la respuesta correcta, la pérdida es baja. Si le da poca, la pérdida es alta.
  • Al inicio del entrenamiento (pesos aleatorios, p ≈ 1/27), la pérdida es -log(1/27) ≈ 3.3.
  • Después de 1000 pasos de entrenamiento, la pérdida baja a ~2.37 — señal de que el modelo aprendió patrones.