Loss Function
Eine mathematische Funktion, die misst, wie weit die Vorhersage eines Modells von der tatsächlichen Antwort entfernt ist – das zentrale Optimierungsziel beim Training.
Ein Maß für den Unterschied zwischen zwei Wahrscheinlichkeitsverteilungen – häufig genutzt in VAEs, Distillation und Information Theory.
KL-Divergenz misst, wie unterschiedlich zwei Wahrscheinlichkeitsverteilungen sind.
Die Formel:
DKL(P||Q) = Σ P(x) × log(P(x) / Q(x))
P = "wahre" Verteilung
Q = approximierte Verteilung
Beispiel:
P = [p1, p2] (Referenzverteilung)
Q = [q1, q2] (approximierte Verteilung)
DKL(P||Q) = p1×log(p1/q1) + p2×log(p2/q2)
Je stärker Q von P abweicht, desto größer wird die Divergenz.
import numpy as np
def kl_divergence(p, q):
# Vermeidet log(0)
p = np.clip(p, 1e-10, 1)
q = np.clip(q, 1e-10, 1)
return np.sum(p * np.log(p / q))
p = np.array(reference_distribution)
q = np.array(approx_distribution)
print(f"KL(P||Q) = {kl_divergence(p, q):.3f}")
print(f"KL(Q||P) = {kl_divergence(q, p):.3f}") # meist nicht gleich
def vae_loss(x, x_recon, mu, logvar):
# Reconstruction Loss
recon_loss = F.binary_cross_entropy(x_recon, x, reduction='sum')
# KL Divergence: approximierte Latent-Verteilung vs. Prior
kl_loss = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
return recon_loss + kl_loss
Weil die KL-Divergenz nicht symmetrisch ist, macht die Richtung einen praktischen Unterschied – die beiden Varianten bestrafen unterschiedliche Fehler:
| Variante | Formel | Verhalten | Typischer Einsatz |
|---|---|---|---|
| Forward KL | DKL(P‖Q) | „mean-seeking”: Q muss überall Masse haben, wo P Masse hat | Maximum-Likelihood-Training, Distillation |
| Reverse KL | DKL(Q‖P) | „mode-seeking”: Q konzentriert sich auf einen Modus von P | Variational Inference, RLHF-Regularisierung |
Forward KL bestraft es hart, wenn Q einem Ereignis Wahrscheinlichkeit ~0 gibt, das unter P vorkommt (der Term log(P/Q) explodiert). Reverse KL bestraft umgekehrt, wenn Q Masse dort platziert, wo P keine hat.
Drei Stellen, an denen die KL-Divergenz in modernen Sprachmodellen zentral ist:
np.clip oben).KL-Divergenz misst, wie überrascht du wärst, wenn du dachtest, die Welt folgt Verteilung P, aber sie folgt eigentlich Q. Je größer die Überraschung, desto größer die Divergenz.
DKL(P||Q) – Divergenz von Q zu P
Nicht symmetrisch: DKL(P||Q) ≠ DKL(Q||P)
Nicht-negativ, mit 0 bei identischen Verteilungen unter passenden Bedingungen
VAE Loss
Latent Space an Prior anpassen
Knowledge Distillation
Student an Teacher-Verteilung anpassen
RLHF
Policy nicht zu weit vom Base Model
KL misst 'Überraschung' aus Sicht von P. P||Q fragt: Wie überrascht ist P über Q? Das ist anders als Q über P.
Cross-Entropy = Entropy(P) + KL(P||Q). Bei fixem P ist Minimierung von Cross-Entropy = Minimierung von KL.