Cálculo manual de la pérdida de entropía cruzada

Construye una secuencia de predicciones que va desde "adivinar a ciegas" hasta "muy confiado" y observa cómo disminuye el valor de la entropía cruzada en consecuencia.

Al completar este caso, comprenderás:Por qué las tareas de clasificación usan entropía cruzada en lugar de MSE: castiga con más "severidad" que el MSE las predicciones confiadas pero incorrectas.


Introducción desde la vida cotidiana

Calificación de exámenes: responder mal es peor que no responder

El desempeño de dos estudiantes en una pregunta de opción única (la respuesta es A): Xiaohong predice A con probabilidad 0.5 (insegura pero en la dirección correcta), Xiaoming predice C con probabilidad 0.95 (muy confiado pero equivocado). Xiaohong, aunque insegura, acertó la dirección; Xiaoming no solo se equivocó sino que estaba muy confiado: este error es más imperdonable.

La pérdida de entropía cruzada es como este criterio de calificación:Cuando la predicción es correcta, recompensa la confianza; cuando es incorrecta, castiga la confianza.


Comprensión intuitiva

La etiqueta real es "gato" (one-hot = [1, 0, 0]). Simula la salida del modelo desde "adivinar a ciegas" hasta "entrenarse con cada vez más precisión":

  • Adivinar completamente a ciegas [0.33, 0.33, 0.34] → pérdida 1.10
  • Muy confiado y correcto [0.98, 0.01, 0.01] → pérdida 0.02
  • Muy confiado pero incorrecto [0.02, 0.9, 0.08] → pérdida 3.91 (¡casi 4 veces mayor que adivinar a ciegas!)

El último valor merece atención: porque -log(0.02) ≈ 3.91, mientras que -log(0.33) ≈ 1.10.


Definición matemática

\[ H(p, q) = -\sum_{i=1}^{C} p_i \cdot \log(q_i) \]

\(p\) es la distribución real (one-hot), \(q\) es la distribución predicha. Para una predicción "confiada pero incorrecta", entropía cruzada = -log(0.02) ≈ 3.91, MSE = (1-0.02)^2 ≈ 0.96. El castigo de la entropía cruzada es 12 veces el del MSE.


Manos a la obra con Python

Ejemplo

import numpy as np

def cross_entropy(p_true, q_pred, eps=1e-12):
    q_pred = np.clip(q_pred, eps, 1 - eps)
    return -np.sum(p_true * np.log(q_pred))

# Etiqueta real: gato (clase 0)
p_true = np.array([1, 0, 0])  # [gato, perro, pájaro]

predictions = {
    "Adivinar completamente a ciegas (uniforme)":    np.array([0.33, 0.33, 0.34]),
    "Un poco de intuición":           np.array([0.5, 0.3, 0.2]),
    "Cada vez más fiable":           np.array([0.7, 0.2, 0.1]),
    "Bien entrenado":           np.array([0.9, 0.07, 0.03]),
    "Muy confiado y correcto":     np.array([0.98, 0.01, 0.01]),
    "¡Muy confiado pero incorrecto!":   np.array([0.02, 0.9, 0.08]),
}

print("EJEMPLO Comparación de pérdida de entropía cruzada (real: gato=[1,0,0]) "\n")
print(f"{'Descripción de predicción':<20} {'Pérdida':<10} {'Análisis'}")
print("-" * 52)
for name, q in predictions.items():
    loss = cross_entropy(p_true, q)
    if loss > 2: analysis = "¡Error grave!"
    elif loss > 0.5: analysis = "Dirección correcta pero inseguro"
    else: analysis = "Muy bien"
    print(f"{name:<20} {loss:<10.4f} {analysis}")

# Comparación MSE vs entropía cruzada
q_bad = predictions["¡Muy confiado pero incorrecto!"]
mse_bad = np.mean((p_true - q_bad) ** 2)
ce_bad = cross_entropy(p_true, q_bad)
print(f"\n"EJEMPLO Cuando está confiado pero incorrecto: MSE={mse_bad:.4f}, entropía cruzada={ce_bad:.4f} (severidad {ce_bad/mse_bad:.0f}x)")
EJEMPLO 交叉熵损失对比 (真实: 猫=[1,0,0])

预测描述               损失        分析
----------------------------------------------------
完全瞎猜 (均匀)        1.0986     方向对但不确定
有点感觉               0.6931     方向对但不确定
逐渐靠谱               0.3567     很好
训练较好               0.1054     很好
非常自信且正确         0.0202     很好
非常自信但错误!       3.9120     严重错误!

EJEMPLO 自信但错误时: MSE=0.3260, 交叉熵=3.9120 (严厉 12x)

Escenarios de aplicación en IA

EscenarioFunción de pérdida utilizada
Clasificación de imágenesEntropía cruzada multiclase (CategoricalCrossEntropy)
Modelo de lenguajeLa suma de la entropía cruzada en cada posición de token: la función objetivo del entrenamiento de GPT
Destilación de conocimientoUsar las etiquetas suaves del modelo profesor para calcular la entropía cruzada
Otras extensiones