6 · Softmax y pérdida multi-clase
Convierte logits crudos en una distribución de probabilidad, combínalos con entropía cruzada categórica y descubre por qué el gradiente se simplifica de forma elegante.
Softmax convierte un vector de puntuaciones crudas (logits) en una distribución de probabilidad — y se combina con la entropía cruzada categórica para la clasificación multi-clase.
Sin esto:
Sin softmax + entropía cruzada no puedes entrenar clasificadores con más de 2 clases.
En clasificación binaria, una salida sigmoid da una sola probabilidad p(clase=1). Para K clases, necesitamos K números que:
- Sean todos no negativos
- Sumen exactamente 1 (una distribución de probabilidad válida)
Softmax hace esto:
softmax(z)_i = exp(z_i) / Σ_j exp(z_j)
La capa final de la red produce un vector de puntuaciones crudas llamadas logits — una por clase. Softmax las convierte en probabilidades. La clase con la mayor probabilidad es la predicción.
Combinado con la pérdida de entropía cruzada categórica (CCE):
CCE = -Σ_i y_true_i * log(y_pred_i)
Esto mide cuán sorprendida está la distribución y_pred por la etiqueta verdadera y_true. Cuando la clase correcta obtiene probabilidad 1.0, la pérdida es 0. Cuando obtiene una probabilidad cercana a 0, la pérdida → ∞.
La combinación de softmax + CCE tiene una propiedad elegante que la hace el estándar: su gradiente es simplemente y_pred - y_true.
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Las matemáticas detrás de la elegancia de softmax + CCE — y por qué siempre deben ir juntos
Lectura de PyTorch — CrossEntropyLoss espera logits, no probabilidades
¿A qué se simplifica el gradiente de softmax + CCE?
- Softmax convierte un vector de logits en una distribución de probabilidad válida (no negativa, suma 1) — obligatorio antes de la entropía cruzada categórica.
- El truco de estabilidad numérica `exp(z - z.max())` previene desbordamiento cuando los logits son grandes — úsalo siempre en implementaciones propias.
- El gradiente de softmax + CCE se simplifica a `y_pred - y_true` — uno de los resultados más elegantes del deep learning.
- El `nn.CrossEntropyLoss` de PyTorch espera logits crudos (no probabilidades softmax) — doble softmax es un bug silencioso.
Todo clasificador con K > 2 clases usa softmax + entropía cruzada. ImageNet (1000 clases), modelado de lenguaje (50k vocabulario), clasificación de intenciones, todos lo usan.
Si lo quitas: No tendrías una forma fundamentada de entrenar un clasificador de 10 clases y recurrirías a clasificadores binarios uno-contra-todos — 10× el costo de entrenamiento para un resultado peor.