Temperatur
Ein Parameter bei der Textgenerierung, der steuert, wie kreativ oder deterministisch die Ausgabe eines Sprachmodells ist.
Die verschiedenen Strategien, mit denen LLMs das nächste Token auswählen – von deterministisch (Greedy) bis kreativ (Temperature, Top-K, Top-P).
Token Sampling bestimmt, wie ein LLM das nächste Wort (Token) auswählt. Das Modell gibt Wahrscheinlichkeiten für alle möglichen Tokens aus – die Sampling-Strategie entscheidet, welches genommen wird.
Die Grundidee:
Modell-Output (Logits → Wahrscheinlichkeiten):
"Der Himmel ist ___"
blau: 45% ████████████████████
schön: 20% ████████
klar: 15% ██████
heute: 10% ████
grün: 5% ██
...
Greedy: → "blau" (immer höchste)
Sampling: → "schön" (zufällig nach Wahrscheinlichkeit)
Die wichtigsten Strategien:
| Strategie | Beschreibung | Wann nutzen? |
|---|---|---|
| Greedy | Immer höchste Wahrscheinlichkeit | Deterministische Aufgaben |
| Temperature | Skaliert Wahrscheinlichkeiten | Kreativität steuern |
| Top-K | Nur Top K Tokens betrachten | Unsinn vermeiden |
| Top-P | Tokens bis P% Wahrscheinlichkeit | Adaptiver als Top-K |
| Beam Search | Mehrere Pfade parallel | Übersetzung, Summarization |
def greedy_decode(logits):
# Immer das wahrscheinlichste Token
return torch.argmax(logits)
# Deterministisch, aber kann repetitiv werden
# "The cat sat on the mat. The cat sat on the mat..."
def temperature_sample(logits, temperature=1.0):
# Skaliere Logits
scaled_logits = logits / temperature
# Softmax → Wahrscheinlichkeiten
probs = torch.softmax(scaled_logits, dim=-1)
# Sample nach Wahrscheinlichkeit
return torch.multinomial(probs, num_samples=1)
Effekt der Temperature:
Temperature = 0.1 (fast deterministisch):
blau: 95% ██████████████████████████████
schön: 3% █
klar: 2%
Temperature = 1.0 (Original):
blau: 45% ████████████████████████
schön: 20% ██████████
klar: 15% ████████
Temperature = 2.0 (sehr kreativ):
blau: 25% █████████████
schön: 18% █████████
klar: 15% ████████
grün: 12% ██████
def top_k_sample(logits, k=50, temperature=1.0):
# Nur Top K Tokens behalten
top_k_logits, top_k_indices = torch.topk(logits, k)
# Temperature anwenden
scaled = top_k_logits / temperature
probs = torch.softmax(scaled, dim=-1)
# Sample aus Top K
idx = torch.multinomial(probs, num_samples=1)
return top_k_indices[idx]
def top_p_sample(logits, p=0.9, temperature=1.0):
# Sortiere nach Wahrscheinlichkeit
scaled = logits / temperature
probs = torch.softmax(scaled, dim=-1)
sorted_probs, sorted_indices = torch.sort(probs, descending=True)
# Kumulative Summe
cumsum = torch.cumsum(sorted_probs, dim=-1)
# Behalte Tokens bis P erreicht
mask = cumsum <= p
mask[0] = True # Mindestens ein Token
# Sample aus Nucleus
nucleus_probs = sorted_probs[mask]
nucleus_probs = nucleus_probs / nucleus_probs.sum()
idx = torch.multinomial(nucleus_probs, num_samples=1)
return sorted_indices[idx]
# OpenAI API nutzt mehrere Parameter
response = openai.chat.completions.create(
model="gpt-4",
messages=[...],
temperature=0.7, # Kreativität
top_p=0.9, # Nucleus Sampling
frequency_penalty=0.5, # Wiederholungen vermeiden
presence_penalty=0.5, # Neue Themen fördern
)
| Use Case | Temperature | Top-P | Anmerkung |
|---|---|---|---|
| Code | 0.0-0.2 | 0.95 | Präzision wichtig |
| Fakten | 0.0-0.3 | 0.9 | Konsistenz |
| Chat | 0.5-0.7 | 0.9 | Balance |
| Kreativ | 0.8-1.0 | 0.95 | Vielfalt |
| Brainstorming | 1.0-1.2 | 1.0 | Maximale Diversität |
Token Sampling ist wie Würfeln mit gezinkten Würfeln: Das Modell gibt Wahrscheinlichkeiten vor, aber die Sampling-Strategie entscheidet, wie stark der Zufall mitspielen darf – von 'immer die höchste Zahl' bis 'fair würfeln'.
Greedy: Immer das wahrscheinlichste Token (deterministisch)
Temperature: Kontrolliert Zufälligkeit (0=deterministisch, 1+=kreativ)
Top-K/Top-P: Begrenzt Auswahl auf wahrscheinlichste Tokens
Kreatives Schreiben
Hohe Temperature für vielfältige, überraschende Texte
Fakten-Antworten
Niedrige Temperature für konsistente, präzise Antworten
Code-Generierung
Niedrige Temperature für syntaktisch korrekten Code
Brainstorming
Hohe Temperature für diverse Ideen
Fakten/Code: Temperature 0-0.3. Konversation: 0.5-0.7. Kreativ: 0.8-1.0. Top-P 0.9-0.95 ist ein guter Default. Experimentieren!
Ja, und das ist üblich. Temperature skaliert die Logits, Top-P filtert danach. Beide zusammen geben feine Kontrolle.
Top-K: Feste Anzahl Tokens (z.B. Top 50). Top-P: Variable Anzahl basierend auf kumulativer Wahrscheinlichkeit (z.B. 90%). Top-P ist adaptiver.
Greedy ist deterministisch und kann in Schleifen geraten. Sampling mit Temperature erzeugt Vielfalt und vermeidet repetitive Outputs.