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 – zentral für 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 = [0.5, 0.5] (faire Münze)
Q = [0.9, 0.1] (unfaire Münze)
DKL(P||Q) = 0.5×log(0.5/0.9) + 0.5×log(0.5/0.1)
= 0.5×(-0.59) + 0.5×(1.61)
= 0.51 bits
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([0.5, 0.5])
q = np.array([0.9, 0.1])
print(f"KL(P||Q) = {kl_divergence(p, q):.3f}") # 0.510
print(f"KL(Q||P) = {kl_divergence(q, p):.3f}") # 0.368 (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: N(mu, sigma) vs N(0, 1)
kl_loss = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
return recon_loss + kl_loss 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)
Immer ≥ 0, = 0 nur wenn P = Q
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.