Temperature Scaling
Bei der Temperaturskalierung werden die Logits eines Modells vor Softmax durch einen angepassten Wert geteilt, damit die Konfidenz der Genauigkeit entspricht, ohne die Vorhersagen zu verändern.
Bei der Temperaturskalierung werden die Logits eines trainierten Klassifikators nachträglich durch eine einzige positive Zahl T geteilt, bevor der Softmax angewandt wird. T wird anhand zurückgehaltener Daten so gewählt, dass die Konfidenz des Modells mit seiner tatsächlichen Trefferquote übereinstimmt. Ein Wert über 1 verringert zu hohe Wahrscheinlichkeiten, ein Wert unter 1 verstärkt zu niedrige. Da jedes Logit durch dieselbe positive Zahl geteilt wird, bleibt ihre Reihenfolge erhalten. Die vorhergesagte Klasse ändert sich somit nie, und die Genauigkeit bleibt exakt gleich. In der Studie „On Calibration of Modern Neural Networks“ stellten Guo und Kollegen fest, dass moderne tiefe Netze schlecht kalibriert sind. Die Temperaturskalierung, eine Variante der Platt-Skalierung mit nur einem Parameter, erwies sich jedoch bei den meisten untersuchten Datensätzen als überraschend wirksam.
So funktioniert die Temperaturskalierung#
Der skalierte Softmax gibt Klasse i die Wahrscheinlichkeit exp(z_i / T) / Σ_j exp(z_j / T), wobei z die Logits bezeichnet. Bei T = 1 bleibt das Modell unverändert. Mit zunehmendem T nähern sich die Wahrscheinlichkeiten einer Gleichverteilung an; nähert sich T dem Wert 0, geht die Wahrscheinlichkeit der wahrscheinlichsten Klasse gegen 1. T wird nach dem Training durch Minimierung der negativen Log-Likelihood (NLL) bestimmt – derselben Kreuzentropie, die als Trainingsverlust verwendet wird. Dabei bleiben die Gewichte des Netzes eingefroren, und die Berechnung erfolgt auf einem zurückgehaltenen Validierungssatz. Da nur ein einziger Parameter angepasst werden muss, dauert die Anpassung Sekunden und bietet wenig Spielraum, den Validierungssatz zu überanpassen. Das folgende PyTorch-Skript bestimmt T für ein Modell, dessen Logits dreimal zu groß sind:
import torch
import torch.nn.functional as F
# Held-out logits for 5,000 images and 10 classes from an overconfident model:
# labels are drawn so that softmax(logits / 3) is perfectly calibrated
torch.manual_seed(0)
logits = 9 * torch.randn(5000, 10)
labels = torch.multinomial(F.softmax(logits / 3, dim=1), 1).squeeze(1)
# Fit the single temperature that minimizes negative log-likelihood (NLL) on the held-out set
temperatures = torch.linspace(0.5, 6.0, 551)
nll = torch.stack([F.cross_entropy(logits / t, labels) for t in temperatures])
T = temperatures[nll.argmin()]
# Accuracy depends only on the argmax, which dividing by T never changes
accuracy = (logits.argmax(1) == labels).float().mean()
before = F.softmax(logits, dim=1).max(1).values.mean()
after = F.softmax(logits / T, dim=1).max(1).values.mean()
print(f"T = {T:.2f}, accuracy {accuracy:.3f}")
print(f"Mean confidence: {before:.3f} before, {after:.3f} after")Die Anpassung ergibt T = 2,98, nahe am tatsächlichen Faktor 3. Die Genauigkeit bleibt bei 0,663, während die mittlere Konfidenz von 0,880 auf 0,664 sinkt. Nach der Skalierung entspricht die durchschnittliche Konfidenz des Modells also seiner Genauigkeit.
Warum Netze zu selbstsicher werden#
Beim Training mit Kreuzentropie werden größere Logits für Trainingsbeispiele, die das Netz bereits richtig klassifiziert, weiterhin belohnt. Deshalb steigt die Konfidenz weiter, obwohl die Genauigkeit bei neuen Daten nicht mehr zunimmt. Guo und Kollegen identifizierten Tiefe, Breite, Gewichtsabnahme und Batch-Normalisierung als wichtige Faktoren für Fehlkalibrierungen. Die Kalibrierung wird anhand von Zuverlässigkeitsdiagrammen gemessen, in denen die Genauigkeit der Konfidenz in Wertebereichen gegenübergestellt wird, sowie anhand des erwarteten Kalibrierungsfehlers (ECE). Dieser ist der über die Wertebereiche gemittelte Abstand zwischen Konfidenz und Genauigkeit, gewichtet nach der Anzahl der Vorhersagen in jedem Bereich. Auch NLL und der Brier-Score bewerten die Kalibrierung. Sie ist wichtig, wenn ein Wert als Wahrscheinlichkeit interpretiert wird, etwa bei einer medizinischen Triage-Regel, die jeden Fall mit einem Risiko über 30 % weiterleitet, bei einem System, das unsichere Vorhersagen einem Menschen überlässt, oder bei einer aktiven Lernschleife, die die Bilder mit der geringsten Konfidenz zur Beschriftung auswählt.
Temperaturskalierung für Objektdetektoren#
Detektoren bewerten jede Klasse normalerweise mit einer separaten Sigmoid-Funktion statt mit Softmax. Auch hier wird die Temperatur auf dieselbe Weise angewandt: als Sigmoid(z / T). Bei T über 1 nähern sich die Werte 0,5 an: Hohe Werte sinken, niedrige steigen. In YOLO26 entspricht die Konfidenz jeder Box dem Sigmoid eines Klassenlogits und wird zum Vorhersagezeitpunkt mit dem Schwellenwert 0,25 von conf verglichen. Eine anhand zurückgehaltener Bilder angepasste Temperatur ändert daher, welche Boxen diesen Schwellenwert überschreiten, lässt aber die Rangfolge aller Boxen unverändert. Von dieser Rangfolge hängen Bewertungskennzahlen wie die mittlere durchschnittliche Präzision (mAP) ab.
Temperatur in anderen Einstellungen#
- Große Sprachmodelle (LLMs): Die Sampling-Temperatur teilt jeden Logit-Vektor für das nächste Token auf dieselbe Weise durch T. Nutzer legen sie manuell fest, um Vielfalt gegen Determinismus abzuwägen. Nähert sich T dem Wert 0, nähert sich das Sampling dem Greedy-Decoding an, bei dem immer das wahrscheinlichste Token gewählt wird.
- Wissensdestillation: Die Destillationsmethode von Hinton und Kollegen erhöht die Temperatur der Softmax-Ausgaben von Lehrermodell und Schülermodell, damit das Schülermodell die relativen Wahrscheinlichkeiten des Lehrermodells für die falschen Klassen lernt.
- Kontrastives Lernen: Modelle wie CLIP teilen die Ähnlichkeitswerte von Bild und Text vor der Softmax durch eine gelernte Temperatur. Dadurch wird gesteuert, wie stark der Verlust passende Paare vom Rest trennt.
Temperaturskalierung im Vergleich zu verwandten Methoden#
- Platt-Skalierung: Passt vor einer Sigmoid-Funktion eine Steigung und einen Achsenabschnitt an den Wert eines binären Klassifikators an. Die Temperaturskalierung erweitert dies auf viele Klassen mit einer gemeinsamen Steigung, 1 / T, und ohne Achsenabschnitt.
- Vektor- und Matrixskalierung: Lernt für jede Klasse ein eigenes Gewicht und einen eigenen Bias oder eine vollständige Matrix über den Logits. Diese Methoden sind flexibler, neigen stärker zum Overfitting und können die vorhergesagte Klasse ändern.
- Isotone Regression: Eine nichtparametrische, monotone Abbildung von Werten auf Wahrscheinlichkeiten, die zusammen mit der Platt-Skalierung in den Kalibrierungswerkzeugen von scikit-learn verfügbar ist.
- Label-Glättung: Glättet die Trainingsziele, etwa auf 0,9 statt 1,0 für die richtige Klasse, um übermäßige Selbstsicherheit während des Trainings zu verringern. Die Temperaturskalierung verändert nur die Ausgaben eines fertig trainierten Modells.
- Konforme Vorhersage: Wandelt Werte in Vorhersagemengen um, die mit einer garantierten Häufigkeit, etwa in 90 % der Fälle, bei austauschbaren Daten das richtige Label enthalten.










