Perte d'entropie croisée calculée à la main

Construisez une séquence de prédictions allant de "devinette aléatoire" à "très confiant", et observez comment la valeur d'entropie croisée diminue en conséquence.

Après avoir terminé cette étude de cas, vous comprendrez :Pourquoi les tâches de classification utilisent l'entropie croisée au lieu de la MSE — elle punit les prédictions confiantes mais fausses plus "sévèrement" que la MSE.


Introduction en situation réelle

Notation d'examen — Les mauvaises réponses sont pires que l'absence de réponse

Performance de deux étudiants à une question à choix unique (la réponse est A) : Xiaohong prédit une probabilité de 0.5 pour A (incertain mais dans la bonne direction), Xiaoming prédit une probabilité de 0.95 pour C (très confiant et faux). Xiaohong est incertain mais directionnellement correct ; Xiaoming est non seulement faux mais aussi très confiant — une telle erreur est plus impardonnable.

La perte d'entropie croisée ressemble à ce critère de notation :Récompensez la confiance lorsque les prédictions sont correctes, punissez la confiance lorsque les prédictions sont fausses.


Compréhension intuitive

L'étiquette réelle est "cat" (one-hot = [1, 0, 0]). Simulez la sortie du modèle depuis "devinette aléatoire" jusqu'à "devenir plus précis avec l'entraînement" :

  • Devinette complètement aléatoire [0.33, 0.33, 0.34] → perte 1.10
  • Très confiant et correct [0.98, 0.01, 0.01] → perte 0.02
  • Très confiant mais faux [0.02, 0.9, 0.08] → perte 3.91 (presque 4 fois plus élevée qu'une supposition aléatoire !)

La dernière valeur mérite attention : car -log(0.02) ≈ 3.91, tandis que -log(0.33) ≈ 1.10.


Définition mathématique

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

\(p\) est la distribution réelle (one-hot), \(q\) est la distribution prédite. Pour une prédiction « confiante mais fausse », entropie croisée = -log(0.02) ≈ 3.91, MSE = (1-0.02)^2 ≈ 0.96. La pénalité de l'entropie croisée est 12 fois celle de MSE.


Exercices pratiques Python

Exemple

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))

# Étiquette réelle : cat (classe 0)
p_true = np.array([1, 0, 0])  # [cat, dog, bird]

prédictions = {
    "Supposition complètement aléatoire (uniforme)": np.array([0.33, 0.33, 0.34]),
    "Légère intuition": np.array([0.5, 0.3, 0.2]),
    "De plus en plus fiable": np.array([0.7, 0.2, 0.1]),
    "Mieux entraîné": np.array([0.9, 0.07, 0.03]),
    "Très sûr et correct": np.array([0.98, 0.01, 0.01]),
    "Très sûr mais faux !": np.array([0.02, 0.9, 0.08]),
}

print(EXEMPLE Comparaison de perte d'entropie croisée (Vrai : cat=[1,0,0])\n")
print(f"{'Description de la prédiction':<20} {'Perte':<10} {'Analyse'}")
print("-" * 52)
for name, q in predictions.items():
    loss = cross_entropy(p_true, q)
    if loss > 2: analysis = "Erreur critique !"
    elif loss > 0.5: analysis = "Directionnellement correct mais incertain"
    else: analysis = "Très bon"
    print(f"{name:<20} {loss:<10.4f} {analysis}")

# Comparaison MSE vs entropie croisée
q_bad = prédictions["Très confiant mais faux !"]
mse_bad = np.mean((p_true - q_bad) ** 2)
ce_bad = cross_entropy(p_true, q_bad)
print(f"\nEXEMPLE Confiant mais faux : MSE={mse_bad:.4f}, Entropie croisée={ce_bad:.4f} (sévère {ce_bad/mse_bad:.0f}x))
EXAMPLE 交叉熵损失对比 (真实: 猫=[1,0,0])

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

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

Scénarios d'application en IA

ScénarioFonction de perte utilisée
Classification d'imagesEntropie croisée multiclasse (CategoricalCrossEntropy)
Modèle de langageSomme de l'entropie croisée à chaque position de token — la fonction objectif pour l'entraînement de GPT
Distillation de connaissancesUtiliser les étiquettes souples du modèle enseignant pour l'entropie croisée
Autres extensions