Information und Entropie
Entropie misst Überraschung, Kreuzentropie misst den Preis einer falschen Erwartung. Beides zusammen ist die Verlustfunktion jedes Sprachmodells.
Die Idee
Wenn ich Ihnen sage „morgen geht die Sonne auf", haben Sie nichts erfahren. Wenn ich sage „morgen schneit es in Wien im August", haben Sie viel erfahren. Information ist Überraschung, und Überraschung ist das Gegenteil von Wahrscheinlichkeit.
Entropie ist die durchschnittliche Überraschung einer ganzen Quelle. Ein Würfel hat mehr Entropie als eine Münze, weil mehr passieren kann.
Wozu es gut ist
Ein Sprachmodell wird darauf trainiert, möglichst wenig überrascht zu werden. Je besser es den nächsten Token vorhersagt, desto kleiner die Überraschung, desto kleiner der Verlust. Das ist der gesamte Trainingsvorgang.
Die drei Größen im Zusammenhang
| Größe | Misst | Typischer Wert |
|---|---|---|
Entropie H(p) | Unsicherheit der wahren Verteilung | Deutscher Fließtext: 1,2 bis 1,6 Bit je Zeichen |
Kreuzentropie H(p,q) | Kosten, mit q statt p zu rechnen | Der Trainingsverlust, gemessen in Nats je Token |
KL-Divergenz D(p‖q) | Nur der Zusatzaufwand | Bei RLHF der Abstand zum Ausgangsmodell |
import numpy as np
def entropy(p, base=2):
p = np.asarray(p, dtype=float)
p = p[p > 0] # 0·log0 ist als 0 definiert
return float(-(p * np.log(p) / np.log(base)).sum())
print(round(entropy([0.5, 0.5]), 3)) # 1.0 -> faire Münze
print(round(entropy([0.9, 0.1]), 3)) # 0.469 -> fast sicher
print(round(entropy([0.25] * 4), 3)) # 2.0 -> vier OptionenWas man damit im Betrieb messen kann
- Perplexität auf einem eigenen Fachtext zeigt, wie fremd die Domäne für ein Modell ist.
- Die Entropie der Ausgabeverteilung je Token zeigt, wo ein Modell rät: ein brauchbares Warnsignal für Halluzination.
- Die KL-Divergenz zwischen zwei Modellversionen zeigt, wie stark ein Feintuning das Verhalten verschoben hat.
Die Formeln
Durchgerechnet
Ein Modell soll den nächsten Token vorhersagen. Die Wahrheit ist Token 2, also
p = [0, 1, 0, 0]. Das Modell sagt q = [0,1; 0,7; 0,15; 0,05].
H(p,q) = −(0·log0,1 + 1·log0,7 + 0·log0,15 + 0·log0,05) = −log 0,7 = 0,357Nats- In Bit:
0,357 / ln2 = 0,515Bit - Perplexität dieses einen Tokens:
e^0,357 = 1,43
Sagt das Modell stattdessen q = [0,25; 0,25; 0,25; 0,25], ist
H(p,q) = −log 0,25 = 1,386 Nats und die Perplexität exakt 4: die Anzahl der
Optionen. Das ist die Anschauung hinter der Kennzahl.
Fallstricke
- Basis.
log₂liefert Bit,lnliefert Nats. Ein Faktor 1,4427 zwischen beiden erklärt die meisten Abweichungen beim Nachrechnen fremder Zahlen. - Tokenizer. Perplexität wird je Token gemessen. Ein Vokabular, das deutsche Komposita in mehr Stücke zerlegt, senkt die Perplexität ohne jede Verbesserung. Vergleichbar wird es erst als Bits pro Zeichen.
- Numerik.
log qbeiq → 0läuft gegen minus unendlich. Implementierungen rechnen deshalb nielog(softmax(x)), sondernlog_softmax(x)in einem Schritt, siehe Zahlen im Rechner.