Softmax
Softmax wandelt einen Vektor aus Logits in Wahrscheinlichkeiten um, deren Summe eins ergibt. Behandelt werden die Formel, die Temperatur, numerische Stabilität, Attention und Code.
Softmax ist eine Funktion, die einen Vektor mit Rohwerten, sogenannten Logits, in eine Wahrscheinlichkeitsverteilung umwandelt: Jeder Ausgabewert liegt zwischen 0 und 1, und die Ausgabewerte summieren sich genau zu 1. Für einen Vektor z berechnet sie softmax(z)ᵢ = e^(zᵢ) / Σⱼ e^(zⱼ), indem sie jeden Wert exponentiert und durch die Summe aller Exponentialwerte teilt. Softmax ist die standardmäßige Ausgabeschicht von neuronalen Netzen, die eine Klasse aus mehreren auswählen. Die Funktion wandelt Ähnlichkeitswerte innerhalb des Attention-Mechanismus von Transformern in Gewichte um und konvertiert die Werte eines Sprachmodells für dessen Vokabular in Wahrscheinlichkeiten für das nächste Token. Der Name spiegelt wider, dass Softmax eine glatte, differenzierbare Version von argmax ist, das die gesamte Wahrscheinlichkeit dem einzelnen größten Wert zuweisen würde.
So funktioniert Softmax#
Die Exponentialfunktion macht alle Ausgaben positiv und verstärkt die Unterschiede zwischen den Werten. Dadurch erhält der größte Logit einen überproportionalen Anteil der Wahrscheinlichkeit. Softmax erhält die Reihenfolge der Logits, sodass der höchste Wert immer die höchste Wahrscheinlichkeit erhält. Es zählen nur die Unterschiede zwischen den Logits: Wenn zu jedem Logit dieselbe Konstante addiert wird, bleibt die Ausgabe unverändert. Bibliotheken nutzen diese Eigenschaft für numerische Stabilität, indem sie vor dem Exponentieren den maximalen Logit abziehen, da e¹⁰⁰⁰ bei 32-Bit-Gleitkommazahlen einen Überlauf verursacht.
Eine Temperatur T steuert, wie stark die Verteilung zugespitzt ist: softmax(z / T). Werte von T unter 1 schärfen die Verteilung zugunsten der obersten Klasse, während Werte über 1 sie in Richtung einer Gleichverteilung abflachen. Dieselbe Formel findet sich in der statistischen Mechanik als Boltzmann-Verteilung, wobei T tatsächlich die Temperatur bezeichnet. Das folgende PyTorch-Codebeispiel zeigt beide Effekte:
import torch
logits = torch.tensor([2.0, 1.0, 0.1])
# Divide logits by a temperature before softmax: low sharpens, high flattens
for temperature in [0.5, 1.0, 2.0]:
probs = torch.softmax(logits / temperature, dim=0)
print(f"T={temperature}: {[round(p, 3) for p in probs.tolist()]}")
# Adding a constant leaves softmax unchanged, so libraries subtract the max to avoid overflow
big = logits + 1000
naive = big.exp() / big.exp().sum()
print(f"Naive: {naive.tolist()}, torch.softmax: {[round(p, 3) for p in torch.softmax(big, dim=0).tolist()]}")Bei T = 1 werden die Logits 2.0, 1.0 und 0.1 zu [0.659, 0.242, 0.099]. Eine Halbierung der Temperatur spitzt die Verteilung auf [0.864, 0.117, 0.019] zu, während eine Verdoppelung sie auf [0.502, 0.304, 0.194] abflacht. Addiert man 1.000 zu jedem Logit, verursacht die naive Formel einen Überlauf und gibt [nan, nan, nan] aus, während torch.softmax weiterhin [0.659, 0.242, 0.099] zurückgibt.
Softmax beim Training#
Klassifikatoren werden gemeinsam mit Softmax und dem Kreuzentropieverlust trainiert. Der Verlust ist −log(pᵧ), der negative Logarithmus der Wahrscheinlichkeit, die der korrekten Klasse y zugewiesen wird. Sein Gradient bezüglich der Logits ist einfach p − y, also die vorhergesagten Wahrscheinlichkeiten abzüglich des One-Hot-Labels. Frameworks kombinieren die beiden Funktionen daher: PyTorchs CrossEntropyLoss nimmt rohe Logits entgegen und berechnet intern log-softmax. Das ist stabiler, als den Logarithmus separat berechneter Wahrscheinlichkeiten zu bilden. Ein auf diese Weise trainiertes Modell gibt Logits aus; Softmax wird erst angewendet, wenn bei der Inferenz Wahrscheinlichkeiten benötigt werden.
Einsatzbereiche von Softmax#
- Bildklassifizierung: Die letzte Schicht eines Klassifikators gibt für jede Klasse ein Logit aus. Softmax wandelt diese in die Konfidenzwerte um, die Nutzende sehen.
- Attention: Transformer berechnen softmax(QKᵀ / √dₖ) über die Ähnlichkeitswerte zwischen einer Anfrage und jedem Schlüssel, sodass sich die Attention-Gewichte jedes Tokens zu 1 summieren. Die Division durch √dₖ verhindert, dass die Werte mit der Dimension wachsen und Softmax sättigen.
- Textgenerierung: Ein großes Sprachmodell (LLM) wendet bei jedem Schritt Softmax auf ein Vokabular mit Zehntausenden oder Hunderttausenden Tokens an. Die Temperatur beim Sampling ist das oben genannte T. Beim Nucleus-Sampling wird anschließend aus der kleinsten Tokenmenge gezogen, deren Wahrscheinlichkeiten einen Schwellenwert erreichen.
- Bestärkendes Lernen: Softmax über Aktionswerte ergibt eine Strategie, die normalerweise die beste Aktion auswählt, aber zugleich die anderen ausprobiert. Die Temperatur steuert dabei den Kompromiss zwischen Erkunden und Ausnutzen.
Klassifizierungsmodelle von YOLO26 wenden bei der Inferenz Softmax in ihrem Klassifizierungskopf an. Das Attribut probs jedes Ergebnisses enthält die vollständige Verteilung über die 1.000 ImageNet-Klassen:
from ultralytics import YOLO
# Load a YOLO26 classification model trained on ImageNet
model = YOLO("yolo26n-cls.pt")
results = model("https://ultralytics.com/images/bus.jpg")
# probs holds the softmax output of the classification head
probs = results[0].probs
for index, conf in zip(probs.top5, probs.top5conf.tolist()):
print(f"{results[0].names[index]}: {conf:.3f}")
print(f"Sum over all 1,000 classes: {probs.data.sum().item():.3f}")Die Ausgabe zeigt die fünf wahrscheinlichsten Klassen mit ihren Wahrscheinlichkeiten. Die Summe über alle 1.000 Klassen beträgt 1.000, da der Kopf eine Softmax-Verteilung zurückgibt.
Softmax im Vergleich zu verwandten Funktionen#
- Sigmoid: Drückt jeden Wert unabhängig auf einen Bereich von 0 bis 1 zusammen, sodass sich die Ausgabewerte nicht zu 1 summieren müssen. Sigmoid eignet sich für binäre Probleme und Mehrfachklassenprobleme, etwa wenn ein Bild sowohl eine Person als auch einen Rucksack enthält. Objektdetektoren bewerten damit häufig jede Klasse. Bei zwei Klassen entspricht Softmax genau einer Sigmoid-Funktion der Differenz zwischen den beiden Logits.
- Argmax: Gibt den Index des größten Werts zurück – eine feste Entscheidung ohne Gradienten. Softmax erhält dieselbe Rangfolge, bleibt aber differenzierbar und kann daher trainiert werden. Die Anwendung von argmax auf Softmax-Wahrscheinlichkeiten ergibt dasselbe Ergebnis wie argmax auf die Logits.
- Log-softmax: Der zur Stabilität direkt berechnete Logarithmus von Softmax, den der Kreuzentropieverlust verwendet.
- Temperaturskalierung: Ein Kalibrierungsverfahren, bei dem nach dem Training anhand von Validierungsdaten eine einzelne Temperatur angepasst wird, damit die Softmax-Wahrscheinlichkeiten damit übereinstimmen, wie oft das Modell tatsächlich richtig liegt. Die vorhergesagte Klasse bleibt unverändert, da die Division jedes Logits durch dasselbe positive T deren Reihenfolge erhält.










