Cross-Entropy und KL-Divergenz -- Den Unterschied zwischen Verteilungen messen

Cross-Entropy ist die am häufigsten verwendete Verlustfunktion für Klassifikationsaufgaben.Die KL-Divergenz misst, wie unähnlich zwei Wahrscheinlichkeitsverteilungen sind.


Konzeptanalyse

Im vorherigen Kapitel haben wir die Entropie kennengelernt — sie misst die Unordnung einer einzelnen Verteilung selbst. Die beiden Konzepte in diesem Kapitel messenden Unterschied zwischen zwei Verteilungen, was direkt das Design von Verlustfunktionen in Klassifikationsaufgaben bestimmt.

Cross-Entropy

\[ H(p, q) = -\sum_x p(x) \log q(x) \]

Bedeutung: Wie viel Information im Durchschnitt aufgewendet wird, wenn die vorhergesagte Verteilung q verwendet wird, um Daten aus der wahren Verteilung p zu kodieren.

KL-Divergenz (relative Entropie)

\[ D_{KL}(p \| q) = \sum_x p(x) \log \frac{p(x)}{q(x)} = \underbrace{H(p,q)}_{\text{cross-entropy}} - \underbrace{H(p)}_{\text{true entropy}} \]

Bedeutung: Die zusätzliche Information, die verschwendet wird, nachdem q p ersetzt. KL ≥ 0, und wenn sie gleich 0 ist, gilt p = q.

Die KL-Divergenzist asymmetrisch: D_KL(p||q) ≠ D_KL(q||p), daher ist sie keine echte "Distanz".

Wenn die wahre Verteilung p One-Hot (deterministisch) ist, gilt H(p) = 0, und Cross-Entropy entspricht der KL-Divergenz.

Warum verwendet die Klassifikation Cross-Entropy statt MSE?

Der Gradient von Cross-Entropy + Softmax = \( \hat{y} - y \) (Vorhersage - wahr), was einfach und effizient ist.

Der Gradient von MSE + Softmax nähert sich 0, wenn die Vorhersage sicher ist — verschwindender Gradient, wodurch Lernen unmöglich wird.


Praxisbeispiele

Codebuch-Design

Man schreibt Buchstaben mithilfe einer Menge von Codes (kurze Codes stehen für häufige Zeichen, lange Codes für seltene Zeichen).

Aber wenn Ihre Codes auf der englischen Häufigkeit basieren, während Sie Chinesisch schreiben — ist die Kodierungseffizienz niedrig.

Die Verwendung der falschen Verteilung q zum Kodieren von Daten aus der wahren Verteilung p verschwendet zusätzliche Bits = KL-Divergenz.


Python-Praxisübung

Beispiel

import numpy as np

def cross_entropy(p, q):
    return -np.sum(p * np.log(q + 1e-10))

p_true = np.array([1.0, 0.0, 0.0])  # Wahr: Klasse 0

for q, desc in [([0.9,0.05,0.05],"Gute Vorhersage"),
                ([0.4,0.3,0.3],"Mehrdeutig"),
                ([0.1,0.8,0.1],"Falsch")]:
    print(f"{desc}: Kreuzentropie={cross_entropy(p_true, q):.4f}")

# Gradienten von CE und MSE vergleichen
print("\n"Sehr schlechte Vorhersage (y_pred=0.01, true=1): CE-Gradient=-100, MSE-Gradient=-1.98")
print("CE liefert einen großen Gradienten, wenn Vorhersagen falsch sind → lernt schnell")

Ausgabe beim Ausführen:

好预测: 交叉熵=0.1054
模糊: 交叉熵=0.9163
错误: 交叉熵=2.3026

预测很差(y_pred=0.01, 真=1): CE梯度=-100, MSE梯度=-1.98
CE在预测错误时给出大梯度 → 学得快

Kreuzentropie vs. MSE – Gradientenvergleich


Anwendungsszenarien in der KI

Standard für Klassifikationsaufgaben: Kreuzentropie-Verlust

PyTorchs nn.CrossEntropyLoss und TensorFlows categorical_crossentropy sind die Standard-Verlustfunktionen für Klassifikationsaufgaben. Sie integrieren intern Softmax + negative Log-Likelihood – eine einzige Verlustfunktion erledigt sowohl Aktivierung als auch Verlustberechnung, und die Gradientenform ist extrem einfach: \( \nabla = \hat{y} - y \).

Warum nicht MSE für die Klassifikation verwenden? Gradienteneigenschaften bestimmen die Effizienz

Wenn das Modell falsch vorhersagt (z. B. sollte die Wahrscheinlichkeit für die wahre Klasse nahe bei 1 liegen, wird aber als 0.01 vorhergesagt), liegt der Kreuzentropie-Gradient bei etwa -100 – das liefert ein extrem starkes Korrektursignal. MSE hingegen hat in derselben Situation einen Gradienten von nur -1.98 – es lernt kaum. Das erklärt, warum MSE bei Klassifikationsaufgaben extrem langsam konvergiert oder sogar nicht konvergiert.

KL-Divergenz bei der Wissensdestillation

Wissensdestillation: Verwenden Sie die Softmax-Ausgabe eines großen Modells (Lehrer) als weiche Labels, um ein kleines Modell (Schüler) zu trainieren. Der Schüler muss nicht nur die wahren Labels treffen, sondern auch die Divergenz zwischen seiner eigenen Ausgabeverteilung und der des Lehrers über KL-Divergenz minimieren. Weiche Labels enthalten Ähnlichkeitsinformationen zwischen Klassen (z. B. sind die Ausgabewahrscheinlichkeiten für „Katze“ und „Tiger“ beide höher als für „Auto“), was dunkles Wissen ist, das One-Hot-Labels nicht besitzen.

KL-Divergenz-Regularisierungsterm in VAE

Die Verlustfunktion des VAE = Rekonstruktionsfehler + KL(N(μ,σ²) || N(0,I)). Der KL-Term beschränkt die vom Encoder ausgegebene latente Verteilung so, dass sie für jede Stichprobe nicht zu stark von der Standardnormalverteilung abweicht – das wirkt als Regularisierer, stellt sicher, dass der latente Raum kontinuierlich und glatt ist, und dass Stichproben aus verschiedenen Klassen im latenten Raum fließend übergehen können.

KL-Beschränkung in RLHF

Modelle wie ChatGPT fügen bei der Feinabstimmung mit RLHF (Reinforcement Learning from Human Feedback) eine KL-Divergenz-Beschränkung zum Optimierungsziel hinzu: Die aktuelle Policy darf nicht zu stark vom ursprünglichen SFT-Modell abweichen. Das verhindert, dass das Modell seltsamen Text ausgibt, um dem Belohnungsmodell zu gefallen, und bewahrt die Generierungsqualität.


Andere Erweiterungen