Sofortantwort
Softmax einfach erklärt
Wandelt Zahlen in Wahrscheinlichkeiten um (Summe = 1).
- Kurz gesagt
- Wandelt beliebige Zahlen (Logits) in Wahrscheinlichkeiten um
- Typischer Einsatz
- Klassifikation, Attention, Token-Vorhersage
- Wichtig zu wissen
- Verwendet in Klassifikation (Output Layer) und Attention
Softmax im Überblick
Softmax ist eine Aktivierungsfunktion, die in der letzten Schicht von Klassifikationsmodellen eingesetzt wird. Sie wandelt die rohen Ausgaben (Logits) des Modells in eine Wahrscheinlichkeitsverteilung um: Alle Werte werden positiv und summieren sich zu 1. Das ermöglicht es, die Ausgaben als Wahrscheinlichkeiten zu interpretieren – “72% Katze, 26% Hund, 2% Vogel”. In Sprachmodellen entscheidet Softmax, welches Token als nächstes generiert wird.
Softmax wandelt beliebige Zahlen in Wahrscheinlichkeiten um. Egal wie groß oder klein die Eingaben sind – die Ausgaben summieren sich immer zu 1.
Beispiel:
Logits (rohe Scores): [2.0, 1.0, 0.1]
Softmax:
e^2.0 / (e^2.0 + e^1.0 + e^0.1) = 7.39 / 10.49 = 0.70
e^1.0 / (e^2.0 + e^1.0 + e^0.1) = 2.72 / 10.49 = 0.26
e^0.1 / (e^2.0 + e^1.0 + e^0.1) = 1.11 / 10.49 = 0.04
Wahrscheinlichkeiten: [0.70, 0.26, 0.04]
Summe: 1.0 ✓
Wo wird Softmax verwendet?
- Klassifikation: “70% Katze, 26% Hund, 4% Vogel”
- Attention: Gewichte für jeden Token
- LLM Token-Vorhersage: Wahrscheinlichkeit für jedes Wort im Vokabular
Technisch betrachtet
Formel
softmax(x_i) = e^(x_i) / Σ e^(x_j)
Mit Temperatur
softmax(x_i, T) = e^(x_i/T) / Σ e^(x_j/T)
T = 0.1: Sehr spitz (fast deterministisch)
T = 1.0: Standard
T = 2.0: Flacher (mehr Zufälligkeit)
PyTorch Beispiel
import torch
import torch.nn.functional as F
logits = torch.tensor([2.0, 1.0, 0.1])
# Standard Softmax
probs = F.softmax(logits, dim=0)
# tensor([0.6590, 0.2424, 0.0986])
# Mit Temperatur
temperature = 0.5
probs_cold = F.softmax(logits / temperature, dim=0)
# tensor([0.8360, 0.1420, 0.0220]) # Spitzer
Numerische Stabilität
# Problem: e^1000 = Overflow
# Lösung: Subtrahiere Maximum
def stable_softmax(x):
x_max = x.max()
exp_x = torch.exp(x - x_max) # Verhindert Overflow
return exp_x / exp_x.sum()