Sofortantwort
Cross-Entropy einfach erklärt
Loss Function für Klassifikation und Sprachmodelle.
- Kurz gesagt
- Misst Unterschied zwischen vorhergesagter und tatsächlicher Verteilung
- Typischer Einsatz
- Klassifikation, LLM Training, Multi-Label
- Wichtig zu wissen
- Bestraft falsche, selbstbewusste Vorhersagen stark
Cross-Entropy im Überblick
Cross-Entropy ist die am häufigsten verwendete Loss Function für Klassifikationsaufgaben und Sprachmodelle. Sie misst den Unterschied zwischen der vorhergesagten Wahrscheinlichkeitsverteilung und der tatsächlichen Verteilung. Das Besondere: Cross-Entropy bestraft selbstbewusste Fehler überproportional stark – wenn das Modell mit 90% Konfidenz falsch liegt, ist der Loss viel höher als wenn es mit 60% Konfidenz falsch liegt. Das zwingt Modelle, kalibriert zu sein.
Cross-Entropy misst, wie weit die Vorhersage von der Wahrheit entfernt ist – und bestraft selbstbewusste Fehler besonders stark.
Beispiel:
Wahre Klasse: Katze [1, 0, 0]
Vorhersage A: [0.9, 0.05, 0.05] → Cross-Entropy: 0.105 ✓ (gut)
Vorhersage B: [0.6, 0.2, 0.2] → Cross-Entropy: 0.511 (okay)
Vorhersage C: [0.1, 0.8, 0.1] → Cross-Entropy: 2.303 ✗ (schlecht)
Warum ist das wichtig?
Cross-Entropy bestraft nicht nur falsche Antworten, sondern auch unsichere richtige Antworten. Das Modell lernt, selbstbewusst richtig zu sein.
Technisch betrachtet
Formel
H(p, q) = -Σ p(x) × log(q(x))
p = Wahre Verteilung (One-Hot: [1, 0, 0])
q = Vorhergesagte Verteilung ([0.9, 0.05, 0.05])
Für Klassifikation (One-Hot Labels):
Loss = -log(q_correct)
Wenn q_correct = 0.9 → Loss = 0.105
Wenn q_correct = 0.1 → Loss = 2.303
PyTorch Beispiel
import torch
import torch.nn as nn
# Logits (vor Softmax)
logits = torch.tensor([[2.0, 0.5, 0.1]])
labels = torch.tensor([0]) # Klasse 0 ist richtig
loss_fn = nn.CrossEntropyLoss()
loss = loss_fn(logits, labels)
# CrossEntropyLoss wendet Softmax intern an!
Varianten
| Variante | Anwendung |
|---|---|
| Categorical CE | Multi-Class (genau eine Klasse) |
| Binary CE | Binär oder Multi-Label |
| Sparse CE | Wie Categorical, aber Integer-Labels |
| Focal Loss | Für stark unbalancierte Daten |
Gradient
∂L/∂z_i = softmax(z_i) - y_i
Wenn y_i = 1 (richtige Klasse):
Gradient = p_i - 1 (negativ, treibt p_i hoch)
Wenn y_i = 0 (falsche Klasse):
Gradient = p_i (positiv, treibt p_i runter)