Sofortantwort
KL-Divergenz einfach erklärt
Misst den Unterschied zwischen zwei Wahrscheinlichkeitsverteilungen.
- Kurz gesagt
- DKL(P||Q) – Divergenz von Q zu P
- Typischer Einsatz
- VAE Loss, Knowledge Distillation, RLHF
- Wichtig zu wissen
- Nicht-negativ, mit 0 bei identischen Verteilungen unter passenden Bedingungen
KL-Divergenz im Überblick
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.
Technisch betrachtet
KL-Divergenz berechnen
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
VAE Loss mit KL
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
Forward vs. Reverse KL
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.
Warum KL beim LLM-Training überall auftaucht
Drei Stellen, an denen die KL-Divergenz in modernen Sprachmodellen zentral ist:
- Pre-Training: Die Cross-Entropy-Loss ist bis auf eine Konstante identisch mit der KL-Divergenz zwischen der echten Token-Verteilung und der Modellvorhersage – jedes Sprachmodell minimiert also implizit eine KL-Divergenz.
- RLHF: Beim Feintuning per Reinforcement Learning wird eine KL-Penalty zur Reward-Funktion addiert. Sie hält die neue Policy nahe am Basismodell und verhindert, dass das Modell den Reward „hackt”, indem es unnatürlichen Text erzeugt.
- Knowledge Distillation: Der Student wird darauf trainiert, die weiche Wahrscheinlichkeitsverteilung des Teachers zu imitieren – gemessen per KL-Divergenz statt nur über harte Labels.
Typische Stolperfallen
- KL ist keine Metrik: Sie verletzt Symmetrie und Dreiecksungleichung. Wer ein echtes Abstandsmaß braucht, nutzt z. B. die Jensen-Shannon-Divergenz (symmetrisierte KL).
- Division durch Null: Sobald Q(x) = 0 bei P(x) > 0, ist die Divergenz unendlich. In der Praxis werden Verteilungen deshalb geglättet oder geclippt (siehe
np.clipoben). - Einheit beachten: Mit log zur Basis 2 misst KL in Bits, mit natürlichem Logarithmus in Nats – beim Vergleich von Werten aus verschiedenen Quellen relevant.