Greedy Decoding
Die einfachste Decoding-Strategie für LLMs – wählt bei jedem Schritt das wahrscheinlichste Token. Schnell und deterministisch, aber oft nicht optimal.
Ein Decoding-Algorithmus für LLMs, der mehrere Kandidaten-Sequenzen parallel verfolgt und die wahrscheinlichste Gesamtsequenz auswählt – besser als Greedy, aber rechenintensiver.
Beam Search ist ein Decoding-Algorithmus, der mehrere mögliche Fortsetzungen parallel verfolgt. Statt bei jedem Schritt nur das wahrscheinlichste Token zu wählen (Greedy), behält er die k besten Kandidaten.
Warum ist das besser als Greedy?
Greedy: "Der" → "beste" (0.4) → "Weg" (0.3) → ...
Gesamtwahrscheinlichkeit: 0.4 × 0.3 = 0.12
Beam Search (k=2):
Kandidat 1: "Der" → "beste" (0.4) → "Weg" (0.3) = 0.12
Kandidat 2: "Der" → "schnellste" (0.35) → "Pfad" (0.5) = 0.175 ✓
-> Beam Search findet die bessere Gesamtsequenz
Der Trade-off:
Beam Search ist rechenintensiver (k-mal mehr Berechnungen), findet aber oft bessere Sequenzen.
def beam_search(model, prompt, beam_width=5, max_length=50):
# Starte mit einem Kandidaten
beams = [(prompt, 0.0)] # (Sequenz, Log-Wahrscheinlichkeit)
for _ in range(max_length):
all_candidates = []
for seq, score in beams:
# Nächste Token-Wahrscheinlichkeiten
probs = model.get_next_token_probs(seq)
# Top-k Erweiterungen
for token, prob in top_k(probs, beam_width):
new_seq = seq + token
new_score = score + log(prob)
all_candidates.append((new_seq, new_score))
# Behalte nur die besten k Kandidaten
beams = sorted(all_candidates, key=lambda x: x[1], reverse=True)[:beam_width]
return beams[0][0] # Beste Sequenz
| Strategie | Deterministisch | Qualität | Diversität | Geschwindigkeit |
|---|---|---|---|---|
| Greedy | ✅ | Niedrig | Keine | Schnell |
| Beam Search | ✅ | Hoch | Keine | Mittel |
| Sampling | ❌ | Variabel | Hoch | Schnell |
| Top-p/Top-k | ❌ | Gut | Mittel | Schnell |
Lösungen: Length Normalization, Repetition Penalty, Diverse Beam Search
Beam Search ist wie ein Schachspieler, der mehrere Züge vorausdenkt: Statt nur den besten nächsten Zug zu wählen, behält er die besten 3-5 Zugfolgen im Kopf und entscheidet erst am Ende, welche Strategie gewinnt.
Verfolgt k beste Kandidaten parallel (Beam Width)
Findet oft bessere Gesamtsequenzen als Greedy Decoding
Deterministisch – gleiche Eingabe ergibt gleiche Ausgabe
Maschinelle Übersetzung
Beste Übersetzung aus mehreren Kandidaten wählen
Zusammenfassungen
Kohärente, flüssige Zusammenfassungen generieren
Code-Generierung
Syntaktisch korrekte Code-Sequenzen finden
Beam Search für deterministische, 'beste' Ausgaben (Übersetzung, Zusammenfassung). Sampling für kreative, diverse Ausgaben (Geschichten, Brainstorming). Für Chat-Anwendungen ist Sampling meist besser.
Typisch 4-10. Größere Beams finden theoretisch bessere Sequenzen, aber mit abnehmenden Erträgen und höheren Kosten. Für die meisten Anwendungen reicht 5.
Chat-Anwendungen nutzen meist Sampling (mit Temperatur/Top-p) für natürlichere, variablere Antworten. Beam Search produziert oft repetitive oder 'langweilige' Texte.